Daily updates from Odoo
Friday, January 23, 2026
29 changes · master
New functionality added to Odoo
This update adds PAN and UAN fields to the employee information section within the Odoo Enterprise salary configuration tool. This change is specifically designed to improve the accuracy of statutory reporting for Indian employees, ensuring compliance with local regulations.
Original PR description
- added PAN and UAN fields to the Personal Information model. - now fields appear under the Personal Information section of the Salary Configurator. - This applies specifically to the Indian Employee Pay structure and helps capture employee statutory details during salary configuration. task-5452379
This update adds keyboard shortcuts to the Purchase Agreements form, streamlining the process for users. These shortcuts will allow for faster navigation and quicker completion of purchase requests, boosting overall efficiency. This is a minor improvement designed to enhance user experience.
Original PR description
This commit adds some shortcuts to the Purchase Agreements form, allowing users to navigate and work more efficiently. Task: 5420786 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
Enhancements to existing features
This update refines how work entry data is created, ensuring only relevant details are included. This change addresses a need across various Odoo localizations, streamlining data and improving efficiency. It focuses on filtering work entries based on their type, ensuring accurate reporting and management.
Original PR description
This commits adds an optional domain when creating work entries to only include the work details that are `is_work` or that don't have a work_entry_type_id, this is needed by a lot of localizations task-5076624 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the way users search for property types within the Odoo web interface. The change replaces a dropdown menu with a search-enabled select menu, allowing for faster and more intuitive property type lookups. This improvement streamlines the user experience and improves efficiency.
Original PR description
This commit replaces the property definition type dropdown by a select menu. It allows searching the property type in the input. The select menu now highlights the searched text in the option labels and supports odoomark. task-5226604
This update centralizes the logic for controlling button visibility in the MRP and Repair modules, reducing redundancy and ensuring consistency across the Community and Enterprise versions of Odoo. By standardizing visibility rules, this change simplifies future updates and maintenance, improving overall system stability.
Original PR description
Introduce computed boolean fields to represent the shared visibility conditions for the `Produce` and `Produce All` buttons in MRP and the `End Repair` button in Repair. Enterprise modules now reuse these fields instead of duplicating the logic inside the XML `invisible` attributes. This reduces code duplication, avoids inconsistencies between Community and Enterprise, and makes future overrides simpler and safer. Task ID: 4898373
This update standardizes the UOM field names across various Odoo logistics modules, consolidating them to 'uom_id'. Previously, multiple names caused confusion and made it difficult to consistently use UOM fields. This change improves clarity and simplifies development.
Original PR description
Currently, the uom field can have 3 different names in logistic modules: - uom_id - product_uom_id - product_uom This is annoying when we need to use a uom field and we have to check what is its name. So we decided to only keep uom_id as the only name for basic uom fields. Task [5364113](https://www.odoo.com/odoo/project.task/5364113)
This update streamlines the handling of UOM fields across various Odoo modules. Previously, multiple names (uom_id, product_uom_id, product_uom) were used, creating confusion. Now, only 'uom_id' will be used for basic UOM fields, simplifying development and reducing potential errors.
Original PR description
Currently, the uom field can have 3 different names in logistic modules: - uom_id - product_uom_id - product_uom This is annoying when we need to use a uom field and we have to check what is its name. So we decided to only keep uom_id as the only name for basic uom fields. task 5364113
This update optimizes the suggestion list in email communication by placing the current user last. This change prioritizes more relevant suggestions for other partners, improving the user experience and efficiency.
Original PR description
With this commit the current user will be the last suggested partner in the suggestion list, as it's very unlikely to mention yourself so the space is better used to display other more relevant suggestions. part of task-5867464
This update simplifies the mass mailing editor by removing a specific setting related to link font sizes. Users can now adjust link font sizes using the standard editor toolbar, providing a more intuitive and flexible design experience. This change focuses on improving usability within the mass mailing module.
Original PR description
Remove the `mass_mailing` Design Tab `--link-font-size` special variable, as it is more natural that a link font-size is aligned with its container. It is still possible to use the editor toolbar `font-size` feature to change the `font-size` of links individually. task-5868086
Resolved issues and error corrections
This update simplifies the HTML code for buttons across several Odoo modules. By removing unnecessary 'role=button' attributes, we've improved the accessibility of the application for users with assistive technologies. This aligns with web standards and ensures a better user experience for everyone.
Original PR description
The `<button>` HTML element has by default the "role", well, "button". No need to specify it again. Reference: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/button_role 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 removes redundant accessibility settings from button elements within Odoo. The HTML standard already defines buttons with the 'button' role, so specifying it again was unnecessary. This change ensures better accessibility and aligns with web standards, improving the user experience for all Odoo users.
Original PR description
The `<button>` HTML element has by default the "role", well, "button". No need to specify it again. Reference: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/button_role
This pull request resolves a bug preventing the tour test for overtime ruleset functionality from running correctly. The fix ensures the test passes, allowing users to properly navigate and understand the overtime ruleset within the HR payroll module. This improves the reliability of the tour testing process.
Original PR description
https://runbot.odoo.com/odoo/runbot.build.error/237877
This update enforces that binary fields in Odoo must store data as bytes, addressing a previous workaround that allowed storing mutable data. This change improves data integrity and prevents unexpected behavior when fields are validated. It impacts various modules where this workaround was utilized.
Original PR description
Description of the issue/feature this PR addresses:
The field is used to sometimes some mutable data because the `convert_to_cache` does not force a particular type. That hack is used in multiple places where instead json files (or another form of cache) could be used.
Current behavior before PR:
```py
res.binary_field = val = {}
res.binary_field["ok"] = 4
assert "ok" in val
```
Desired behavior after PR is merged:
```py
res.binary_field = {} # fail because not bytes (or like bytes)
```
https://github.com/odoo/enterprise/pull/99567
task-4251301
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an issue where fields.Binary was being used incorrectly, leading to potential data storage inefficiencies. The change ensures fields.Binary is used appropriately for storing binary data, improving data management and reducing storage costs. This impacts several Odoo modules related to exports and data handling.
Original PR description
odoo/odoo#235832
This update fixes an error in how future time off balances are calculated for employees using hourly time off types. Previously, the system incorrectly added hours instead of the expected accrual. The change updates the system to correctly convert accruals from days to hours based on employee schedules, ensuring accurate balance forecasts.
Original PR description
Steps to Reproduce: Create an accrual plan that accrues 2 days monthly, credited at the start of the month. Create a Time Off Type with the Unit of Measure set to Hours. Create an allocation request…
Steps to Reproduce: Create an accrual plan that accrues 2 days monthly, credited at the start of the month. Create a Time Off Type with the Unit of Measure set to Hours. Create an allocation request using the above Time Off Type and Accrual Plan. Open the Time Off dashboard: a. The current available balance is displayed in hours and is correctly computed based on the employee’s working schedule. b. However, when checking the balance for a future date, the system incorrectly adds 2 hours instead of 16 hours (i.e., 2 days converted to hours based on the working schedule). Bug cause: The system incorrectly identified the unit of measure because it was still referencing the request_unit field, which defaults to 'day'. Following a recent refactor where request_unit was replaced by unit_of_measure to define Time Off Type units, this specific logic flow was left unupdated, causing it to be calculated in days instead of hours. Solution: Updated the future leaves calculation logic to use unit_of_measure instead of request_unit. This ensures that when a Time Off Type is configured in hours, accruals defined in days are correctly converted based on the employee's working schedule. Task: 5498292 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where snippet images weren't appearing on the website. The fix corrects the file paths for two key image snippets, ensuring they are correctly displayed to users. This improves the visual quality of the website.
Original PR description
The images in snippets were not displayed due to incorrect source paths. This commit fixes the paths for `s_cta_mockups` and `s_cta_mobile` snippets. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes an outdated workaround for cursor styles, simplifying the codebase and ensuring consistent styling across Odoo. The change improves performance and reduces potential compatibility issues as `cursor: grab` is now standard in modern browsers.
Original PR description
*: account, html_builder, html_editor, point_of_sale The `o-grab-cursor` mixin was originally introduced to handle cross-browser compatibility for the `grab` cursor style. Since `cursor: grab` is now widely supported by all modern browsers, the mixin is no longer necessary. This commit removes the mixin definition and replaces all its usages with the standard CSS property.
This update simplifies the Gantt chart's cursor style by removing an older compatibility fix. Modern browsers now support the standard 'grab' cursor, making the previous workaround unnecessary. This change improves the user experience and reduces code complexity.
Original PR description
The `o-grab-cursor` mixin was originally introduced to handle cross-browser compatibility for the `grab` cursor style. Since `cursor: grab` is now widely supported by all modern browsers, the mixin is no longer necessary. This commit removes the mixin definition and replaces all its usages with the standard CSS property. See https://github.com/odoo/odoo/pull/245027
This update ensures that all work details are now included in payroll reports for the Belgian and Hong Kong localization versions of Odoo. This change aligns with a recent update to the core Odoo platform, simplifying reporting and providing a more complete view of employee work history.
Original PR description
Based on odoo/odoo#235425, This commit removes the now-redundant override of `resource.calendar` and since the Belgian Localization is the only one that expects all work entries regardless if the work entry type is a leave or not. This commit also overrides the hook that allows us to remove the filter added on work details. task-5076624
This update resolves an issue where the message reaction menu remained open even when no reactions were selected. The fix ensures the menu automatically closes when empty, improving the user experience and preventing unnecessary screen clutter. This change contributes to a cleaner and more efficient workflow for users.
Original PR description
Since [1], message reaction menu doesn't close when it's empty. This commit fixes the issue. [1]: https://github.com/odoo/odoo/pull/234161 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 resolves a technical problem preventing changes to the Invoice Type field within the l10n_tr_nilvera_einvoice module. Previously, the system couldn't properly store data due to a limitation with the field type. This change allows for correct data storage and functionality.
Original PR description
After a recent PR, #235832 the `fields.Binary` can not store data other than bytes, due to this a traceback occurs while trying to change the Invoice Type, since a compute method is triggered that computes domain for a field that is of type Binary. Error: `TypeError: 'str' object cannot be interpreted as an integer` This commit fixes that issue by changing field type from Binary to Json. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update allows users to create working files with custom date ranges, addressing a previous limitation. The fix ensures accurate generation of reports by correctly passing necessary context during file creation. Additionally, minor improvements have been made to display audit titles more clearly in the user interface.
Original PR description
It should be possible to create a working file with any dates. odoo/enterprise#100757 should have solved this but the context for force_periodicity_violation wasn't passed to _try_create_returns_for_fiscal_year which doesn't allow creating those custom working files in the wizard. Also, includes a small changes to make longer audit titles display better in their record view (checks kanban view) and kanban view.
This update resolves an issue with how payroll dependencies were configured, specifically removing a redundant and incorrect exclusion setting. Simultaneously, the team modernized the testing code by replacing older print statements with more efficient f-strings, improving code readability and maintainability.
Original PR description
Community fixes `upstream_dependencies` to support an empty list of states to exclude, and these tests don't seem to actually need anything (since they would previously exclude no less than 9 states which don't exist, as `('uninstallable')` is a string not a 1-uple).
While at it, convert a bunch of printfs to f-strings.A recent update added options to the account reports footer generation process. However, the code wasn't updated to handle cases where no options were provided, leading to an error. This fix ensures the report generates the default footer layout when no options are specified, resolving the issue.
Original PR description
The following commit added a new 'options' argument to _get_layout_footer but forgot to add pass those in one of the calls to the method. Therefore, we get an error when 'options' is None (default…
The following commit added a new 'options' argument to _get_layout_footer but forgot to add pass those in one of the calls to the method. Therefore, we get an error when 'options' is None (default value) and 'options.get()' is called.
Commit:
https://github.com/odoo/enterprise/commit/b02b65ad2baa999b62e3b44fcfc05f9afff5f8cc
Error:
```
RPC_ERROR
Odoo Server Error
Occured on 98738418-master-design-theme.runbot278.odoo.com on 2026-01-22 08:48:56 GMT
Traceback (most recent call last):
File "/data/build/enterprise/account_reports/controllers/main.py", line 32, in get_report
generated_file_data = report.dispatch_report_action(options, file_generator)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 2630, in dispatch_report_action
return report_method(model, *args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_journal_report.py", line 265, in export_to_pdf
footer = self.env['account.report']._get_layout_footer(rcontext)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 6139, in _get_layout_footer
custom_config = options.get('custom_display_config', {})
^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
RPC_ERROR
at makeErrorFromResponse (https://98738418-master-design-theme.runbot278.odoo.com/web/assets/3059a1f/web.assets_web.min.js:3221:165)
at decoder.onload (https://98738418-master-design-theme.runbot278.odoo.com/web/assets/3059a1f/web.assets_web.min.js:3203:7)
```
task-noneFeatures or functions removed from Odoo
This update simplifies the way Discuss messages are tracked, removing a redundant feature that impacted reliability and user privacy. The change improves the accuracy of message history and streamlines the 'Seen' indicator, providing a clearer visual representation of message status.
Original PR description
enterprise: https://github.com/odoo/enterprise/pull/104332 upgrade: https://github.com/odoo/upgrade/pull/9269 * = im_livechat, test_discuss_full This commit removes the fetched feature of Discuss…
enterprise: https://github.com/odoo/enterprise/pull/104332 upgrade: https://github.com/odoo/upgrade/pull/9269 * = im_livechat, test_discuss_full This commit removes the fetched feature of Discuss messages, for the following reasons: 1. Redundancy: The original purpose of confirming server receipt is now better handled by the "pending" message state (spinner/opacity). Once a message is no longer pending, it is effectively "sent". 2. Reliability & Privacy: The previous implementation relied on a single bus notification, which when lost would lead to an inconsistent state. Fixing this reliability (by broadcasting status on connection) would negatively impact performance and, more critically, leak the presence of users who wish to appear "Offline". 3. Data Modeling: The model only tracks the last fetched ID, which is an inaccurate representation of message history if gaps exist. This commit also simplifies the "Seen" indicator to reflect this change: - single gray check: Some people have seen. - double purple checks: Seen by all channel members. task-5177299
This update simplifies the display of WhatsApp messages by removing a redundant 'fetched' indicator. This change improves reliability and privacy by preventing inaccurate tracking of user status and ensures users can appear offline. The 'Seen' indicator has also been updated for clarity.
Original PR description
community: https://github.com/odoo/odoo/pull/243853 upgrade: https://github.com/odoo/upgrade/pull/9269 This commit removes the fetched feature of Discuss messages, for the following reasons: 1.…
community: https://github.com/odoo/odoo/pull/243853 upgrade: https://github.com/odoo/upgrade/pull/9269 This commit removes the fetched feature of Discuss messages, for the following reasons: 1. Redundancy: The original purpose of confirming server receipt is now better handled by the "pending" message state (spinner/opacity). Once a message is no longer pending, it is effectively "sent". 2. Reliability & Privacy: The previous implementation relied on a single bus notification, which when lost would lead to an inconsistent state. Fixing this reliability (by broadcasting status on connection) would negatively impact performance and, more critically, leak the presence of users who wish to appear "Offline". 3. Data Modeling: The model only tracks the last fetched ID, which is an inaccurate representation of message history if gaps exist. This commit also simplifies the "Seen" indicator to reflect this change: - single gray check: Some people have seen. - double purple checks: Seen by all channel members. task-5177299
Code cleanup and technical improvements
This update reorganizes the structure of our point-of-sale data models. Separating the `pos_order_line` from the `pos_order` model improves code organization and makes it easier for developers to maintain and update the system. This change enhances overall system stability and efficiency.
Original PR description
*: pos_mrp, pos_sale, pos_self_order In this commit: ------------------ - We have separated the `pos_order_line` model from the `pos_order` model to better organize the files and improve the overall code structure, making the codebase easier to understand, maintain, and navigate. task: 5473161 Related PR: https://github.com/odoo/enterprise/pull/103624
This update reorganizes the structure of our point-of-sale (POS) data models. Separating the `pos_order_line` from the `pos_order` model improves code organization, making it easier for developers to understand and maintain the system. This ultimately leads to more efficient updates and enhancements to our POS functionality.
Original PR description
In this commit: ------------------ - We have separated the `pos_order_line` model from the `pos_order` model to better organize the files and improve the overall code structure, making the codebase easier to understand, maintain, and navigate. task: 5473161 Related PR: https://github.com/odoo/odoo/pull/242738
This update consolidates the code responsible for generating call status information within the Odoo Enterprise system. This change improves code organization and maintainability, ensuring consistent and reliable call status updates across various modules.
Original PR description
We centralize the code that produces call statuses.