Daily updates from Odoo
Monday, February 23, 2026
35 changes
11 changes
Enhancements to existing features
This update replaces a complex caching mechanism with a simpler one for functions without arguments. This change reduces unnecessary overhead and improves the performance of key Odoo modules, leading to faster response times. The update focuses on internal optimizations without impacting user-facing features.
Original PR description
A 0-argument function can definitionally only have one cache entry (at `()`). Not only is a bound entirely useless (`lru_cache` does not do any presizing), using `lru_cache` incurs the full cost of maintaining an LRU's doubly-linked list. Using `cache` (~ `lru_cache(None)`) still allocates and interacts with a dict, but it at least skips the whole LRU.
This update optimizes the Delivery Ups module by replacing a less efficient caching method (`lru_cache`) with a standard cache. This change improves performance, particularly for argument-less functions, leading to faster processing times. It's a routine performance enhancement.
Original PR description
On an argument-less function, `lru_cache` is strictly worse.
This update enhances the AI chat experience by improving the readability and formatting of AI responses. Changes include highlighting code snippets, adjusting message layout for better clarity, and dynamically updating conversation titles to mirror popular AI platforms like ChatGPT.
Original PR description
* = ai_knowledge, ai_livechat, test_full_discuss_enterprise In this commit, we "overhaul" the way that AI messages are rendered. This effort was motivated not just by aesthetics but also to make the…
* = ai_knowledge, ai_livechat, test_full_discuss_enterprise In this commit, we "overhaul" the way that AI messages are rendered. This effort was motivated not just by aesthetics but also to make the AI responses more readable and understandable for users. The first change was to inject boostrap classes to the tables added by the markdown library. By doing that, we make tables render as tables with borders and highlighting, instead of just text. We also added the prism library in the modules assets. Now, if the AI replies with some code snippet, it will be highlighted depending on the language used. We also added different CSS rules in `chat.scss` to changed some of the front end details like the padding and margin between elements in messages. In said file, we also changed some display and width values, to make tables and code segments horizontally scrollable, so information won't get "smushed" in a chat window. We also limit the width to 75% of the AI response in the discuss app because otherwise the information was too spread out - we added a media query to return the width to 100% in smaller screens. We moved the "Expand in Discuss" button, to be inbetween the close button and the minimise button, because the dropdown was confusing users, who imagined that they can switch between agents directly from the chat window. We additionally, made it so conversation titles change based on the user's first query, similarly to how it is done in the web versions of ChatGPT or Gemini. For that, we initial create channels with the name field empty and then we extend the display_name compute method of the discuss channel to add the agent's name in case the name is empty. After the first message we populate the name field which should by extension change the display_name field. We heavily patched the message template to remove the bubble and apply classes for the css rules. We also made it so user messages remain in the right in the discuss app (like in chat windows), increasing visual clarity. Finally, the test_natural_language_query_tour was modified to check for the new descriptive chat window title feature and the test_create_ai_chat was modified to reflect the new way of creating ai chats - with empty name and populated display_name. Task-5164382
This update adds more flexible options for calculating AVS (Additional Voluntary Savings) deductions within Odoo's payroll system for Swiss businesses. The changes improve the system's adaptability to various Swiss tax regulations and reporting requirements. A new test has been implemented to ensure accurate salary rule calculations.
Original PR description
5 more generic AVS is added to l10n_ch_hr_payroll/hr_salary_rule_data and /hr_payroll_input_types. task - 5902593 Forward-Port-Of: odoo/enterprise#107901 Forward-Port-Of: odoo/enterprise#106218
This update allows companies to directly receive KSeF invoices electronically, eliminating the need for traditional postal delivery. This streamlines the invoice process and ensures legally compliant delivery of sales invoices under Poland's KSeF tax system. It improves efficiency and reduces administrative overhead.
Original PR description
If a company sell me something, they can send me an invoice. With KSeF, they do not have to send an invoice to me by post or mail - they can send it directly to KSeF. And it is legally delivered to me. Implement fetching bills from KSeF task-5405257 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247812
This update enables administrators to create API keys programmatically, streamlining the process and reducing manual steps. Previously, API keys needed to be created through a user interface. This change allows for more efficient key management and integration with automated systems.
Original PR description
Previously, API keys could only be created interactively: the method required an interactive session and a recently typed password. This commit adds a new method on `res.users.apikeys` that allows creating an API key when an existing one is provided. Optionally, in the case of a renewal, the new key can replace the old one, and the provided one is unlinked. Forward-Port-Of: odoo/odoo#249528 Forward-Port-Of: odoo/odoo#246118
This update optimizes the creation of global invoices in the Mexican tax system (l10n_mx_edi). By changing the wizard to a 'TransientModel,' the system no longer stores temporary data permanently, leading to a smoother and more efficient invoice creation process. This change avoids unnecessary database usage and improves performance.
Original PR description
Change to TransientModel so a wizard is not permanently stored in db when creating a global invoice. Forward-Port-Of: odoo/enterprise#107950 Forward-Port-Of: odoo/enterprise#107244
This update enhances the user experience in the chatter by changing the action when clicking on a follower. Instead of opening the partner form, clicking now opens the follower's avatar card. This provides a more intuitive and streamlined way to engage with followers within the Odoo platform.
Original PR description
Before this commit, clicking on a follower in the chatter always opened the partner form view. This commit changes the behaviour to open the avatar card. enterprise-https://github.com/odoo/enterprise/pull/107393 task-[5873738](https://www.odoo.com/odoo/project/1519/tasks/5873738)
This update enhances the user experience by automatically opening a user's avatar card when a follower is clicked in the follower list. Previously, users were directed to a partner form view. This change simplifies navigation and provides a more modern interaction.
Original PR description
The tours are updated to reflect the new behaviour where clicking on a follower opens the avatar card for users instead of the partner form view task-5873738
This update allows users to process multiple bank statements and reconciliation lines simultaneously, streamlining the accounting process. The changes enhance efficiency by enabling bulk actions on statement lines, improving the accuracy and speed of reconciliation tasks. This update focuses on usability and performance improvements.
Original PR description
This commit will allow to do the set account, set partner and apply reco models on multiple lines. To select multiple line you need to use alt + click and then you will have button on top to trigger the actions. - The set partner function was modified to work with multiple statement lines and keep all existing functionality (modify line with same partner_name) - The trigger reconcile model function was also modified to work with multiple statement lines - The set account function was not touched because we use the aml_id of the suspense as a parameter but here we will have multiple suspense line to modify. Since we are doing this change in stable, we created a new function set_account_multiple_bank_statement_line. This function will have the same behavior for reco models as the basic set account. task-5253778 Forward-Port-Of: odoo/enterprise#107997 Forward-Port-Of: odoo/enterprise#100316
This update enhances the user experience by recentering the Odoo logo and floor plan button across different screen sizes. A subtle shadow has also been added to the logo for improved visual clarity and a more polished look. This ensures consistent branding and a better user interface.
Original PR description
** = pos_restaurant In this commit: - Recentered the Odoo logo and floor plan button based on the viewport size for better alignment and responsiveness. - Applied a shadow on the Odoo logo for a better user experience. Before: <img width="1920" height="852" alt="image" src="https://github.com/user-attachments/assets/e8b05b7a-11be-4652-90dc-2b89236fc190" /> After: <img width="1920" height="852" alt="image" src="https://github.com/user-attachments/assets/b32c4b46-3e66-4948-8bd6-ae7dc935e037" /> Task-5946199 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
3 changes
Enhancements to existing features
This update allows users to process multiple bank statement adjustments simultaneously, streamlining the reconciliation process. Previously, users could only handle one line at a time. This enhancement improves efficiency and reduces the time spent on bank reconciliation tasks.
Original PR description
This commit will allow to do the set account, set partner and apply reco models on multiple lines. To select multiple line you need to use alt + click and then you will have button on top to trigger the actions. - The set partner function was modified to work with multiple statement lines and keep all existing functionality (modify line with same partner_name) - The trigger reconcile model function was also modified to work with multiple statement lines - The set account function was not touched because we use the aml_id of the suspense as a parameter but here we will have multiple suspense line to modify. Since we are doing this change in stable, we created a new function set_account_multiple_bank_statement_line. This function will have the same behavior for reco models as the basic set account. task-5253778 Forward-Port-Of: odoo/enterprise#100316
This update optimizes the creation of global invoices in the Mexican tax system (l10n_mx_edi). By changing the wizard to a 'TransientModel,' data is no longer permanently stored in the database, streamlining the invoice creation process and reducing unnecessary storage. This change improves efficiency and performance.
Original PR description
Change to TransientModel so a wizard is not permanently stored in db when creating a global invoice. Forward-Port-Of: odoo/enterprise#107950 Forward-Port-Of: odoo/enterprise#107244
This update enhances the accuracy of account reconciliation by adding validation rules for how amounts are extracted from labels, particularly for formats like CODA files. The system now requires both an integer and decimal part to be present when specified, preventing errors and providing clearer guidance to users.
Original PR description
When using a regular expression to extract amounts from a label, especially for formats without a decimal separator (like CODA files), the logic now supports and validates the use of named groups 'integer' and 'fraction'. This commit ensures that: - If 'integer' is defined, 'fraction' must also be present to correctly format the decimal value. - If 'fraction' is defined, 'integer' must be present. - Meaningful UserErrors are thrown to guide the user when one group is missing. Enterprise PR: odoo/enterprise#103630 Task [link](https://www.odoo.com/odoo/project.task/5449413) task-5449413 Forward-Port-Of: odoo/odoo#242750
3 changes
Enhancements to existing features
This update enhances the spreadsheet module by adding logging when exporting large amounts of data, particularly during spreadsheet downloads, copy-pasting, and printing. It also restricts access to downloaded frozen or XLSX spreadsheets 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 Forward-Port-Of: odoo/odoo#246828 Forward-Port-Of: odoo/odoo#210592
This update enhances the logging process when exporting large amounts of data from Odoo spreadsheets, specifically during XLSX downloads, clipboard copies, and printing. It also restricts access to frozen or XLSX spreadsheets to authorized users, improving data security and control.
Original PR description
Forward-Port-Of: odoo/enterprise#106210 Forward-Port-Of: odoo/enterprise#85888
This update optimizes the creation of global invoices in the Mexican tax reporting module. By changing the wizard's storage method to 'TransientModel', the system no longer permanently stores the wizard data when a global invoice is created. This improves performance and reduces unnecessary database usage.
Original PR description
Change to TransientModel so a wizard is not permanently stored in db when creating a global invoice. Forward-Port-Of: odoo/enterprise#107950 Forward-Port-Of: odoo/enterprise#107244
2 changes
Enhancements to existing features
This update adds a new feature to the helpdesk timesheet wizard, allowing other Odoo modules to dynamically adjust timesheet values. This provides greater flexibility and control over timesheet data, streamlining the process for support teams. It builds upon previous work to enhance the overall timesheet management experience.
Original PR description
Add a hook in helpdesk_timesheet timer wizard for other modules to modify timesheet values. Forward-Port-Of: odoo/enterprise#107301
This update enhances logging for transactions related to Codabox integration (_l10n_be_codabox_fetch_coda_transactions). These improved logs will assist the support team in quickly identifying and resolving any issues with the Codabox data synchronization process. This change is an internal improvement to streamline support efforts.
Original PR description
This commit will improve the logs of _l10n_be_codabox_fetch_coda_transactions to help the support team to debug possible problem. task-5436868 Forward-Port-Of: odoo/enterprise#107779
7 changes
Enhancements to existing features
This update adds five new, more generic deduction types to the Odoo Enterprise payroll system for China (l10n_ch_hr_payroll). This improves the system's flexibility and accuracy in calculating employee salaries, particularly for diverse deduction scenarios. A new test has been implemented to ensure these deductions are correctly calculated.
Original PR description
5 more generic AVS is added to l10n_ch_hr_payroll/hr_salary_rule_data and /hr_payroll_input_types. task - 5902593 Forward-Port-Of: odoo/enterprise#106218
This update enhances the functionality of global filters by now explicitly including the operator within default values. It also prevents users from changing the operator without providing a value, ensuring data consistency and reducing potential errors. This improves the overall reliability of global filter configurations.
Original PR description
## Description of the issue/feature this PR addresses: Current behavior before PR: - Global filters could store default values, but the operator was not explicitly handled or preserved. Desired behavior after PR is merged: - Global filter default values now include an operator. - Changing the operator without values is prevented with a validation message. Task: [5850422](https://www.odoo.com/odoo/project/2328/tasks/5850422)
This update enhances the internal organization of Odoo's IoT driver code by clearly defining the types of key objects used. Making the `Interface` class abstract improves code clarity and maintainability. This change supports ongoing development and future enhancements to the IoT functionality.
Original PR description
To ease development, we typed `drivers`, `iot_devices`, and `interfaces` objects. This commit also makes `Interface` inherit from ABC in order to make it clearer that it's abstract. see odoo/odoo#236772
This update simplifies how holiday accrual plans are configured, making it clearer that users can reset accrued time without it carrying over. The changes remove confusing options and always display the date for resetting accruals, improving the user experience and reducing potential misinterpretations.
Original PR description
Description of the issue/feature this PR addresses: . When configuring an accrual plan, users may want no carry-over of accrued days, while still ensuring that accrued balances expire or reset on a…
Description of the issue/feature this PR addresses: . When configuring an accrual plan, users may want no carry-over of accrued days, while still ensuring that accrued balances expire or reset on a specific date (for example, at the allocation start or on a fixed annual date). . This task aims to make the configuration explicit, intuitive, and self-explanatory, without changing the underlying behavior. Current behavior before PR: The UI implicitly ties the ability to set an expiry/reset date to enabling carry-over, which misleads users into believing that this is a functional limitation in v19.0. In reality, the system supports this behavior, but only through a non-intuitive configuration that forces users to enable carry-over and then mark it as lost at a milestone. Desired behavior after PR is merged: . Remove can_be_carryover boolean field with accrued_gain_action selection . Always show the carryover_ date selection field . Hide carry-over options in case of lost accrued time task-5468596
This update ensures that unpublished badges across the Odoo website modules are now consistent, aligning with recent community changes. This improves the overall user experience and maintains a unified brand image for our website.
Original PR description
Following the changes in community, the goal is to make unpublished badges consistent across website modules. task-5136516 Related: https://github.com/odoo/odoo/pull/239842
This update enhances the survey results displayed in spreadsheets by adding a 'status' column to indicate the response state. It also includes a style update to the survey results table for better readability. This improves the clarity and usability of survey data reporting.
Original PR description
Wiht this commit, the `ODOO.SURVEY` function also returns a new column with the state of each survey response in the spreadsheet results. It also adds a table to improve the style of the survey results in the spreadsheet. Task: [5908771](https://www.odoo.com/web#id=5908771&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update fixes an issue where reports displaying multiple companies would stretch the layout and cause text wrapping. The company list is now positioned at the top of the report, preventing layout distortion and ensuring a cleaner, more readable display for users.
Original PR description
Before this commit: - The list of selected companies was placed on the same row as the report column headers. - When multiple companies are selected, this causes the report layout to stretch to the full screen width forcing the text to wrap and increasing the height of the header cells due to the table structure. After this commit: - The selected companies list is now positioned at the top of the report. - The company list now only consumes the space computed for the report layout, preventing unnecessary stretching. - Once the available width is reached, the list wraps naturally without affecting the report header row. task-5249439
5 changes
Enhancements to existing features
This update optimizes the creation of global invoices in the Mexican EDI module. By changing the wizard to a 'TransientModel,' it prevents unnecessary data storage in the database, improving performance and reducing storage requirements. This change ensures a smoother and more efficient invoice creation experience.
Original PR description
Change to TransientModel so a wizard is not permanently stored in db when creating a global invoice. Forward-Port-Of: odoo/enterprise#107950 Forward-Port-Of: odoo/enterprise#107244
This update enhances how Odoo extracts amounts from bank statements (like CODA files). It now supports bank statements that use continuous digits without decimal points, automatically converting them to decimal values. This simplifies reconciliation and reduces manual data entry for users importing bank statement data.
Original PR description
Update the reconciliation logic of reco models to support regex patterns using named capture groups 'integer' and 'fraction'. This is specifically designed for cases where bank statement labels (like CODA files) provide amounts in cents i.e continuous string of digits without a decimal separator. The logic now: - Prioritizes 'integer' and 'fraction' named groups if present in the match. - Concatenates these groups with a decimal point to form a valid float. - Falls back to the standard digit extraction logic if named groups are not found. So now if user wants the amount to be extracted in decimal values from label then user needs to add regex which supports two groups 'integer' and 'fraction'. Community PR: odoo/odoo#242750 Task [link](https://www.odoo.com/odoo/project.task/5449413) Task-5449413
This update addresses usability issues on the mobile bank reconciliation widget. Specifically, it optimizes the layout to better fit smaller screens by moving the chat window to the bottom and simplifying button labels to save space. Secondary buttons have been moved to a dropdown menu for tablet views.
Original PR description
The mobile style on bank rec widget is a bit buggy, this commit adds few improvements: 1 - When in mobile view, chatter is shown on the right (like in desktop view), but the screen is way too tight to display both chatter and st_lines at the same time. Solution: Display the chatter at the bottom of the screen. 2 - If the screen is too tight to show 2 primary buttons (Example: Set Partner & Set Account), We remove the "Set " on the buttons label to save some space. 3 - In tablet view, we don't have enought place to show all the secondary buttons we are showing in desktop view. This commit removes the reco model secondary buttons. (Now accessible in the dropdown menu) task-5114831
This update allows discounts to be applied to individual products within UrbanPiper, rather than just the entire order. This ensures order totals, payments, and taxes accurately reflect these line-level discounts. This change improves the accuracy of pricing and reporting for UrbanPiper integrations.
Original PR description
Before this commit: ================ - Discounts were only applied to the entire order. - Product-level (line) discounts were not handled in UrbanPiper. After this commit: ================ - Product-level discounts can be applied to individual products in UrbanPiper. - Order totals, payments, and taxes now correctly reflect line-level discounts. Task - 4977960
This update enhances depreciation reports by automatically including an analytic filter. This allows for more granular tracking of asset costs by specific business areas or projects, providing better financial insights and control. This change improves reporting accuracy and supports more detailed cost analysis.
1 change
Enhancements to existing features
This update introduces a simpler way to run Odoo tests by adding an alias for the `--test-tags` command. Previously, users had to explicitly specify test tags, which has now been streamlined for easier test execution. This change improves the efficiency of our testing process.
Original PR description
Backport of https://github.com/odoo/odoo/pull/234287 <img width="408" height="151" alt="image" src="https://github.com/user-attachments/assets/7f22826f-6887-432b-8baf-8a6778b9cadf" /> Forward-Port-Of: odoo/odoo#249123
3 changes
Enhancements to existing features
This update adjusts the Romanian tax reporting within the Enterprise module to align with recent changes in the Core Enterprise (CE) version. The update removes outdated tax codes and adds new ones, ensuring accurate reporting for Romanian businesses. This change improves the reliability of financial data.
Original PR description
Some taxes were no longer needed in CE, so they needed to be removed task-5411745
This update modernizes invoice formats for French, German, and Belgian customers, aligning with new regulatory standards for Factur-X and ZUGFeRD. It clarifies invoice types (ZUGFeRD vs. XRechnung) based on business type and customer location, improving clarity and compliance. The changes also update default invoice formats to PDF/A-3 for these regions.
Original PR description
Updating the FacturX format (France)/ ZUGFeRD format (Germany) to respect the new norms: Factur-X 1.07.3 EXTENDED and ZUGFeRD 2.3.3 EXTENDED. Add the differentiation between these two formats in the customer interface, even if they point to the same value in the code. It clarifies things for the customer, things are called by their name. Also, in Germany, for B2B invoices (peppol EAS = 9930), use ZUGFeRD, but for B2G invoices (peppol EAS = 0204), use XRechnung. Adaptation of the default values in the partner form according to this statement. For French and German companies that are sending invoices to French, German or Belgian customers, changed the default format of invoice sent to be compliant to PDF/A-3 norms. task-5266286 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies the process of downloading attachments from account moves like invoices and vendor bills. Now, all related attachments – including PDFs, XML files, and mail thread attachments – are automatically bundled into a single ZIP file for easy download, eliminating the need to download individual files.
Original PR description
before: - In v17, account moves (invoices, vendor bills, etc.) did not provide any ZIP export. - Users wanting to download move attachments (e.g. for vendor bills) had to download each file individually. after: - Add an Action on account moves to export attachments as a ZIP archive. - The ZIP contains all attachments linked to the move (PDF, XML, and any other files present in the mail thread), not only the report PDF. - The action is available for all move types (customer invoices, vendor bills, journal entries, etc.) task-5232551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr