Daily updates from Odoo
Friday, November 21, 2025
21 changes · master
Enhancements to existing features
VoIP now uses Odoo’s official country records instead of hard-coded country codes when showing flags and country names. This improves accuracy for countries and territories with special flag or naming rules, such as Bonaire, Sint Eustatius, and Saba.
Original PR description
Previously, we hard-coded the URL according to the country code to display a country flag. However, this is not the case for all countries. Countries like Bonaire, Sint Eustatius, and Saba use the flag of the Netherlands. Additionally, Bonaire, Sint Eustatius, and Saba are shown as Caribbean Netherlands, which is inconsistent with the data from our res.country model. This commit changes it to use the data from res.country. Task-5207454 Forward-Port-Of: odoo/enterprise#99136 Forward-Port-Of: odoo/enterprise#98756
The softphone keypad now keeps the phone number display at a consistent size while users type. This reduces visual flickering and makes entering longer phone numbers feel steadier and easier to read.
Original PR description
When typing a phone number in the softphone, the font size changes several times as the number entered gets longer. Changing the font size is too much flickering of that field. Here, based on countries numbers length and the behavior of Android, we have decided to pick a fixed font size so that 16 characters maximizes the field box. Task ID: 5189671
The delivery IoT screen now shows the scale-related information banner in a more relevant place under the hardware scale settings. This makes guidance easier to notice and understand when users configure weighing devices.
Original PR description
With this commit: ----------------- Improved the placement and visibility of the info banner by moving it under `Operation Type > Hardware > Scales` and applying the proper banner styling. task-3836703
Calendar events created from appointment types now automatically use the appointment type's location. This keeps booking details consistent for users and reduces the chance of missing or mismatched event locations.
Original PR description
Purpose: Ensure calendar events copy the location from their appointment type. Technical: - Made the `location` field on `calendar.event` computed and stored, depending on `appointment_type_id`, to propagate the location from the related appointment type. - Removed redundant location assignment from `_prepare_calendar_event_values`. Task-5144941
The Purchase Order form now places the purchase type field in a more suitable location after recent layout changes. This makes the form clearer and easier for users to navigate when working with partner commissions.
Original PR description
- The position of the purchase_type field on the Purchase Order form has been updated to adapt to community layout changes. - This adjustment simplifies the view, making it easier for users to access and use. Task Id: 4778630
This update simplifies how report date inputs are handled across accounting and local reporting tests. It reduces unnecessary conversions, helping keep report validation consistent and easier to maintain without changing day-to-day user workflows.
Original PR description
`report.generate_options` converts date arguments to string. so it doesn't make sense to convert strings to dates before passing them as arguments. related: https://github.com/odoo/enterprise/pull/99765#discussion_r2538377640
Resolved issues and error corrections
Opening the Documents app no longer fails when it contains an upload request linked to a CRM lead that has since been deleted. The document now safely shows no related record name instead of triggering an error, helping users continue working without interruption.
Original PR description
Steps to reproduce: - Install crm and documents - Go to CRM → Activity Types - Set a folder in the Upload Document activity - Create a CRM lead and schedule an upload document activity - Delete the created lead - Open the Documents module Issue: - A traceback occurs because web_read tries to access values_by_id[record.id], as the upload request document remains in the database after its related activity is deleted. Solution: - fix the recompute of res_name and set it to False, avoiding MissingError opw-5080182 Forward-Port-Of: odoo/enterprise#97461
This fixes an issue in the Belgian salary contract module where the system tried to use a missing calculation function. It now reads the correct work time rate field, helping salary contract information load reliably.
Original PR description
The function _get_work_time_rate doesn't exist, but the information we need is in the field work_time_rate. Forward-Port-Of: odoo/enterprise#99922
Closing or cancelling helpdesk tickets no longer causes an error when SLA working hours have been cleared or disabled. This keeps ticket workflows running smoothly even when teams do not use working hour policies.
Original PR description
> **The issue:** When you go to a helpdesk's team settings -> SLA Policies -> Working hours, set the working hours to empty and then disable SLA Policies and save. After that if you try to move a ticket in the same team to done or canceled you will receive an exception. **Cause:** The part of the code causing the issue is supposed to only run if a Working Hours policy is set. **Fix:** Changed the section of the code to only run when Working Hours is set. opw-5120962 > Forward-Port-Of: odoo/enterprise#98889 Forward-Port-Of: odoo/enterprise#96546
This fix updates the external tax sales test flow so it stays compatible with recent related changes in the core sales experience. It helps ensure optional product sales scenarios continue to work reliably when external tax calculation is enabled.
Original PR description
See Also: - https://github.com/odoo/odoo/pull/227241 Forward-Port-Of: odoo/enterprise#99188
The VoIP test setup was corrected to include complete contact data, preventing a validation error during automated test runs. This improves test reliability without changing the user-facing VoIP experience.
Original PR description
Before this commit, running VoIP tests in HOOT results in this error: > Global OwlError: Invalid props for component 'TabEntry': 'title' is not a string, 'phoneNumber' is not a string This is because one of the test is setup with incomplete data (no phone number). After this commit, test data is correctly set with a phone number, fixing the props validation error. Forward-Port-Of: odoo/enterprise#100057
This update corrects access to car information in the Belgian salary contract flow. Regular users and applicants can now access the car-related details they need, reducing blocked or incomplete contract salary processes.
Original PR description
Normal users and applicant don't have access to car. Forward-Port-Of: odoo/enterprise#99658
The Documents sharing wizard now properly applies changes when allowing link access. This ensures users' sharing permission updates are retained, reducing confusion and preventing incorrect access settings.
Original PR description
This commit fix the 'action_allow_link_access' method in 'documents.sharing' model by adding the 'WRITE_VALUE_PREFIX' to the updated fields. Otherwise the changes wasn't taken into account. Task-5220965 Forward-Port-Of: odoo/enterprise#98382
VoIP now checks both the main call and transfer call before marking a call as ended unexpectedly. This prevents transferred calls from being incorrectly flagged, improving call history accuracy for users.
Original PR description
Currently, the check for calls that were ended in a wrong way only assumes that there is one call where there might be two calls in case of transfers. This commit fixes this issue by checking for both session, the main session and the transfer session. Task-5208152
The VoIP test setup was adjusted so mobile device behavior is only simulated where it is needed. This prevents unrelated tests from being affected, improving confidence in automated test results without changing customer-facing functionality.
Original PR description
Since [1], mockUserAgent was called at the root of the module. In this case, it applies globally. This commit moves user agent mocking in `keypad.mobile.test.js` into `beforeEach` and switch to the platform-based "android" helper so it only applies to this suite. [1]: https://github.com/odoo/enterprise/commit/b118a5ceb7f0773783ca003c625c9ae3cccdebed
When a stock move quantity is increased, the system now adjusts the existing reserved line instead of creating an extra line without tracking details. This keeps barcode manufacturing stock flows more consistent and reduces confusion in inventory handling.
Original PR description
Increasing the quantity of a stock move will create a move line with the same data as the stock move (location and product), no lot, nor package. This commit correct some tests values because increasing the quantity on a stock move will increase the existing move line quantity instead of creating a new one. Forward-Port-Of: odoo/enterprise#96750
Updated VoIP test setup to use the browser platform mock in the intended way. This helps keep automated checks reliable and reduces the risk of false test results during future updates.
Original PR description
The `mockUserAgent()` is meant to be used with a "platform" ("mac", "windows", "android"...) as parameter and not a whole user agent string.
In specific cases, a custom string can be used instead, but only to be added to the user agent string.
This commit adapts its usage(s) accordingly.
Forward-Port-Of: odoo/enterprise#100154Planning analysis reports now only count shifts when they fall within an employee's working hours. This prevents hours from being incorrectly included in a later month when a shift ends after working hours, improving reporting accuracy for timesheets and planning.
Original PR description
### Steps to reproduce: - Create an employee with fixed working schedule from 8 to 5 - Create a Planning shift for this employee that starts in a month and ends in the first day of the next month outside of working hours (e.g. Sept30th 8AM -> Oct1st 2AM) - Navigate to Timesheets / Planning analysis reports - Notice October has been taken into consideration in the report's planned hours ### Cause: The query we are using for the timesheets/planning report doesn't take working hours into consideration it only cares about the date. So if the shift ends in October 1st we are taking it into account whether it is inside working hours or not. ### Fix: Add a condition to the where clause to check the working hours and if the record lays in this period or not. opw-5089052 Forward-Port-Of: odoo/enterprise#96846
This change avoids saving data into a field that is automatically calculated by the system. It helps prevent hidden data inconsistencies that could cause errors during product barcode lookup operations.
Original PR description
The field all_group_ids is computed from other groups, writing on it creates inconsistencies in the cache and may result in errors when invalidating/flushing.
Code cleanup and technical improvements
The Starshipit delivery connector has been cleaned up internally to make its setup and credential handling more reliable. This reduces maintenance risk and helps keep shipping operations stable without changing day-to-day user workflows.
Original PR description
Cleanup of the Starshipit class calls, attributes and methods. Keys lifecycle management via context manager. task-5241578
Miscellaneous changes
Module was added in stable => needs to be manually added to weblate.json file Forward-Port-Of: odoo/enterprise#100130
Original PR description
Module was added in stable => needs to be manually added to weblate.json file Forward-Port-Of: odoo/enterprise#100130