Wednesday, December 3, 2025
12 changes · 17.0
Enhancements to existing features
This update improves database storage efficiency by converting certain indexes to a more space-saving format (`btree_not_null`). This change primarily focuses on reducing the amount of disk space used by the Odoo database, without impacting core functionality. It's an internal optimization.
Original PR description
## Description Update indexes that have a large `null_frac` (the % of NULL value in the column) into `btree_not_null` to save some disk space. Fields who had lookups based on their `False` value weren't converted, unless it's a model we use often and its `null_frac` was `>0.4` which is often the threshold when Postgres will estimate doing a `Seq.Scan` instead. Fields that had no lookup at all on them, the index was removed. ## Reference task-3875080
Resolved issues and error corrections
This update fixes a minor issue where an unwanted error dialog appeared in the background during Razorpay payments. The fix removes redundant code that triggered the dialog, ensuring a smoother payment experience for users. This improves the overall user interface and prevents unnecessary distractions.
Original PR description
Steps: - Install and setup razorpay provider. - Create a SO and try to pay SO with UPI PM. - Cancel payment in between. Issue: - Error dialog in background appear even Razorpay form is still open. Cause: - We were opening Error dialog on `payment.failed` notification. Fix: - Remove Error dialog related code on `payment.failed` notification as it is already handled in `_initiatePaymentFlow` method.
This update improves database storage efficiency by changing certain index types to `btree_not_null`. This change reduces disk space usage, primarily impacting performance and storage costs. It ensures Odoo utilizes the most effective index structure for data retrieval.
Original PR description
## Description Update indexes that have a large `null_frac` (the % of NULL value in the column) into `btree_not_null` to save some disk space. Fields who had lookups based on their `False` value weren't converted, unless it's a model we use often and its `null_frac` was `>0.4` which is often the threshold when Postgres will estimate doing a `Seq.Scan` instead. ## Reference task-3875080 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a bug in the vehicle availability calculations for the payroll and fleet modules. It now accurately excludes vehicles flagged for change (plan_to_change_car or plan_to_change_bike) with a 'False' status, ensuring they are correctly marked as unavailable. This prevents incorrect vehicle availability reporting.
Original PR description
Refine _get_available_vehicles_domain to consider only vehicles with plan_to_change_car or plan_to_change_bike set to True as available. This ensures vehicles planned for change but marked False are treated as unavailable. Related task: 4963484. Forward-Port-Of: odoo/enterprise#90812
This update resolves an issue where the Odoo application remained listed as installed after uninstalling on Windows. The fix ensures the uninstaller correctly removes the necessary registry keys, preventing persistent installations and improving the user experience. This improves the reliability of the uninstallation process.
Original PR description
Since d0d0fa2b8e the Windows installer only supports 64 bit version of the OS. It was recently noticed that when uninstalling the app with the provided uninstaller that the app remains listed in the installed software. Although the directories and third party apps were correctly cleaned and removed. The reason is that the Odoo app registry key is still present after the uninstall process. When a 32 bit process tries to write a registry key in `HKLM\SOFTWARE` it's redirected by the OS to `HKLM\SOFTWARE\WOW6432Node`. By using the `SetRegView 64` NSIS directive, the installer writes the registry key at the right place ... but the uninstaller is lacking that directive and thus tries to remove a non existing key in `HKLM\SOFTWARE\WOW6432Node`. With this commit, the uninstaller is fixed by using the directive too. Forward-Port-Of: odoo/odoo#238476
This update fixes a calculation error in the MRR evolution dashboard that was double-counting 'Contraction'. The change ensures the 'Net new' figure accurately reflects subscription growth by properly accounting for contraction trends. This improves the dashboard's reliability for tracking revenue.
Original PR description
…traction **Issue** The formula defined for the "Net new" in the MRR evolution dashboard double counted the "Contraction", as it is already included in the "Up/Downgrade" (cell B6, equal to B4+B5, "Contraction" + "Expansion"). <img width="360" height="354" alt="image" src="https://github.com/user-attachments/assets/0a19a86a-f1b9-462f-812c-71a283f6fe89" /> opw-4925930
This update resolves a translation error that occurred during tax upgrade processes, specifically impacting the l10n_id module. The issue stemmed from using translated strings in a way that caused conflicts when running the script in different languages. This fix ensures consistent translation and prevents errors during upgrades.
Original PR description
The script triggers a recompute of tax.repartition_lines_str, a tracked field that contains translated strings[^2]. If the local script is running in a different language as the rest of the upgrade,…
The script triggers a recompute of tax.repartition_lines_str, a tracked field that contains translated strings[^2]. If the local script is running in a different language as the rest of the upgrade, those strings will be translated in different languages and will trigger an error[^1] when they cannot be accessed in the dict. This can also fail during a local upgrade, not necesarily during an upgrade in the platform.
```
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 477, in _message_log
self._message_log_repartition_lines(tracked_value_id[2]['old_value_char'], tracked_value_id[2]['new_value_char'])
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in _message_log_repartition_lines
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in <listcomp>
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
KeyError: 'Akun'
```
[^1]:https://github.com/odoo/odoo/blob/bf83a4efefedae61e06a6b29ad82e647fd673ce2/addons/account/models/account_tax.py#L423
[^2]:https://github.com/odoo/odoo/blob/bf83a4efefedae61e06a6b29ad82e647fd673ce2/addons/account/models/account_tax.py#L393-L397This update fixes a potential issue where IoT actions could be triggered multiple times, leading to unnecessary activity. The change ensures that websocket actions are not duplicated by also checking for longpolling calls, improving system efficiency and reducing potential errors. This enhances the reliability of IoT data processing.
Original PR description
In order to prevent duplicate IoT actions, we now ensure that websocket actions have not already been called through longpolling. odoo/enterprise#100161
This update fixes an issue where IoT reports could be printed multiple times. The change ensures that websocket actions are not duplicated by longpolling, streamlining report generation and preventing unnecessary output. This improves efficiency and reduces potential confusion.
Original PR description
In order to prevent duplicate IoT actions, we now ensure that websocket actions have not already been called through longpolling. odoo/odoo#236917
This update fixes an issue where zero margins and spacing settings in reports were being ignored by the system. Now, users can accurately set all margins and spacing to zero when generating reports using wkhtmltopdf, providing greater control over report formatting. This ensures reports are generated as intended.
Original PR description
When constructing the wkhtmltopdf command arguments, the system retrieves values from the `specific_paperformat_args` dictionary using get and checks whether the returned value is falsy. Because 0 is a falsy value in Python, margin and header spacing values explicitly set to 0 are mistakenly ignored. As a result, the system incorrectly falls back to the default paperformat values instead of honoring the overrides provided in `specific_paperformat_args`. This commit updates the conditional checks so that values from `specific_paperformat_args` correctly override the paperformat defaults even when the override is 0. This allows users to intentionally remove all margins and spacing defined on the report. Task-5079740 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue where generating deferred entries from invoices sometimes created duplicate reversal and deferral entries, leading to confusing journal reports. The fix adjusts the deferral period calculation to prevent these paired entries, ensuring cleaner and more accurate accounting records. This improves the reliability of financial reporting.
Original PR description
When generating deferred entries from invoice lines, certain scenarios led to the creation of both a reversal and a deferral for the same amounts. These entries would effectively cancel each other out, creating unnecessary noise in the journal entries. This issue primarily occurred when the start date, end date, and accounting date all fell within the same calendar month. The problem was exacerbated by the introduction of the `full_months` computation method in https://github.com/odoo/enterprise/commit/5dca9c0c2691cba2335e110ad63a2dcc8bbf6d57. To correctly handle this method and prevent the erroneous paired entries, the end date must now be adjusted by subtracting one month when calculating the deferral period. opw-5000337
This update fixes an issue on mobile devices where the keyboard would unexpectedly appear when selecting dates in forms. The change hides the cursor and prevents the keyboard from opening, resulting in a smoother and more user-friendly date selection experience. This improves usability for mobile users.
Original PR description
Before this commit:
- The cursor was shown inside the date/datetime input field on mobile,
which triggered the keyboard unnecessarily and degraded the user
experience.
Steps to reproduce:
1. Add a form snippet.
2. Add a Date/Datetime field.
3. Click on the Date field.
- The virtual keyboard appears and the datepicker popover may be
clipped or partially hidden.
After this commit:
- The virtual keyboard is now prevented from opening on date/datetime
inputs, and the text cursor within these fields is also hidden.
task-[4745714](https://www.odoo.com/odoo/project/974/tasks/4745714)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr