Daily updates from Odoo
Friday, January 23, 2026
17 changes · master
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 fixes an issue where VAT import taxes were generating incorrect journal entries. The change in account 33312 has been addressed by updating the default account for three VAT tax types (tax_purchase_import_10, tax_purchase_import_8, tax_purchase_import_5), ensuring accurate financial reporting.
Original PR description
Due to the change of account 33312 from liability to payable, the journal entries generated when creating bills with VAT import taxes were incorrect. This fix updates the default account on the following taxes: - tax_purchase_import_10 - tax_purchase_import_8 - tax_purchase_import_5 task-5695253 Forward-Port-Of: odoo/odoo#245082 Forward-Port-Of: odoo/odoo#244434
This update fixes an issue where the payment button wasn't appearing on appointment bookings when prices were set via pricelists. The fix ensures the system correctly checks for updated prices, allowing users to complete payment during the booking process. This improves the user experience and ensures accurate pricing.
Original PR description
…t price modified by pricelists **Steps to reproduce:** - Install Appointmeent, Website and Sale - Create a new appointment type - Set up up front payment with 0.0 per booking default price - Set up pricelist according to quantity on the product of the up front payment - Ensure the pricelist is active for the website - Book the appointment on the website - Pay button is not shown when booking on the website (only shows `Confirm Appointment` which bypasses the payment) **Issue:** Payment step button only checks for `appointment_type.product_id.lst_price` (disabled when the price is 0.0), even if pricelists change it to a higher value. **Fix:** Replace the button logic in template in the `website_appointment_sale` module to check for `_get_combination_info` with given quantity. opw-5429963
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-none