Daily updates from Odoo
Wednesday, June 10, 2026
14 changes · master
Resolved issues and error corrections
This update ensures field service technicians are routed to the correct job site by automatically selecting the delivery address associated with a project or task, instead of the company headquarters. This resolves issues where technicians were directed to the wrong location, improving efficiency and accuracy.
Original PR description
Currently, when creating a planning shift and selecting a project or task, the shift's customer (`partner_id`) defaults to the main partner (the parent company). This causes issues for field service technicians, as the Map view routes them to the company headquarters instead of the actual physical job site. This commit improves the behavior by attempting to fetch the 'delivery' child contact of the partner linked to the task or project. If a delivery address exists, it is set as the default on the shift. If it does not exist, it falls back to the main partner. Task-6132902
This update resolves a test failure caused by incorrectly formatted data being passed. Specifically, the system was sending raw PDF content instead of the expected base64 encoded data, leading to an error. This fix ensures the tests run correctly and maintains data integrity.
Original PR description
This commit fixes an error when running the `test_employee_job_change` test on Python 3.14, which is stricter about base64 validation. Ultimately, the root issue was that raw PDF content was being passed when a base64 representation was actually expected (which is obviously invalid base64). runbot-938173 Forward-Port-Of: odoo/enterprise#119786 Forward-Port-Of: odoo/enterprise#118523
This update resolves a potential error in the Hong Kong payroll calculation that could have occurred when specific conditions were met (null resource calendar or zero hours per week). The fix adds a check to prevent division by zero, ensuring accurate payroll processing for Hong Kong employees. This improves the reliability of the payroll system.
Original PR description
. Add a check for a null resource calendar and zero hours per week. task-6229271 Forward-Port-Of: odoo/enterprise#117685
This update fixes a visual issue with the indeterminate checkbox in the Enterprise version of Odoo. The change ensures the checkbox's indicator is consistently visible across all environments, resolving a prior workaround. This improves the overall user experience and consistency.
Original PR description
The indeterminate checkbox is a [standard API](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:indeterminate#:~:text=true%3B%0A%7D-,Result,-Play) (JS and CSS only as @pparidans…
The indeterminate checkbox is a [standard API](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:indeterminate#:~:text=true%3B%0A%7D-,Result,-Play) (JS and CSS only as @pparidans noted), which has been implemented in Odoo in a couple of different ways, and is currently not working out-of-the-box (enterprise only): ------ PROBLEMS: - Original implementation was with JS because of a (now fixed) owl issue: see [ web/static/src/search/search_panel/search_panel.xml](https://github.com/odoo/odoo/blob/c0c82927f2e7e2a54749a0e081d8a03b9ef654e2/addons/web/static/src/search/search_panel/search_panel.xml#L99-L103) & https://github.com/odoo/owl/issues/713 - The new intended odoo-api for the indeterminate checkbox (`t-att-indeterminate` or `<Checkbox indeterminate="...")` doesn't work with enterprise installed because: `web_enterprise/static/src/scss/bootstrap_overridden.scss` sets `$component-active-color: unset !default;` & Bootstrap's uses `$form-check-input-indeterminate-color: $component-active-color` therefore resolves to `unset`, making the dash invisible. -> This was fixed in studio only (odoo/enterprise#81372) but should apply globally. ------ FIXES: - Refactor the JS workaround to use the `t-att-indeterminate`, simplifying the code in `web` (with the help of owl magic) - Apply the studio fix globally to enterprise module (we keep the studio fix with custom svg because the color pattern of studio is a bit different, so removing the custom svg makes the UI look less good). Community PR: https://github.com/odoo/odoo/pull/268491
This update ensures that the phone numbers dialed through the Odoo Enterprise system now use the sanitized E164 format, rather than the raw, user-entered number. This change improves accuracy and reliability when making calls or sending messages, aligning with updated phone widget functionality.
Original PR description
This commit ensures that the sanitized phone number is the one passed to the softphone + displayed instead of the raw phone number. Task-5184717 Community: https://github.com/odoo/odoo/pull/261001
This update fixes an issue where the manual prorata year selection for Belgian VAT returns wasn't being saved correctly. Previously, the system defaulted to the current year regardless of user input. The fix ensures that the user's chosen prorata year is accurately reflected in the generated VAT XML, improving data accuracy and compliance.
Original PR description
### Issue before this commit: Manually modifying the "Prorata Year" in the Belgian VAT return lock wizard was ignored. The generated XML always exported the tax return's current year instead of the user's input. ### Steps to reproduce the issue: 1. Download Accounting and l10n_be 2. Switch to BE company 3. Open a tax return for 7 April (as an example) 4. Try to validate the VAT March 2026 ### Cause of the issue: The prorata_year field was a computed field lacking the store=True attribute. Upon validation, the unsaved manual input was lost, triggering the compute method which blindly overwrote it with the default year. https://github.com/odoo/enterprise/blob/bce04ce24b66fb1a2481274eb3aebdc30a62766e/l10n_be_reports/wizard/vat_return_lock_wizard.py#L18 ### Reason to introduce the fix: Adding store=True ensures the user's manual override is persisted in the database and correctly injected into the Intervat XML payload. opw-6165520
This update consolidates three separate rules related to unpaid leave into a single, more efficient process. This change creates a central source of truth for calculating unpaid days, improving accuracy and reducing complexity in payroll processing. The update also includes a related test to ensure the new rule functions correctly.
Original PR description
Purpose: As of now, we have 3 seperate rules and all of them deal with the same deductable items which is (Unpaid leave). so instead of doing that, we need to have one source of truth for unpaid days. Current behavior: - dropped the out of contract salary rule - removed the fully unpaid sick leaves from sick leave deduction rule - grouped unapid leaves, unpaid sick leaves and out of contract days under one rule - reintroduced deleted test task-id: 6229123
This update strengthens the validation process for recruitment integration settings. Specifically, a required label has been added to the integration_state_selection field, ensuring data integrity and preventing errors. This improves the reliability of the recruitment process by enforcing correct configuration.
Original PR description
This commit adds a label to the option of the field integration_state_selection. The label is a mandatory property and an error is thrown if it is not given.
This update fixes an issue where the activity rate used in Swiss payroll calculations was incorrectly tied to individual employees. Now, the rate is based on the Odoo Enterprise version, ensuring accurate and compliant payroll processing for Swiss businesses. This change improves the reliability of financial reporting and payroll accuracy.
Original PR description
…ployee Forward-Port-Of: odoo/enterprise#119658
This update streamlines the payment refresh button in the Odoo Enterprise system. Previously, the button was always visible, leading to unnecessary system calls. Now, it only appears for payments that are actively being processed (pending or unsigned), optimizing performance and reducing strain on the system.
Original PR description
… batches The refresh button was always shown, which could cause unnecessary calls to OdooFin if the payment is finalised (accepted, rejected or canceled). With this change, the button is shown only for payments in progress (pending or unsigned). task-6103900 Forward-Port-Of: odoo/enterprise#113182
This update fixes an issue where flexible schedules were incorrectly calculating work hours, leading to inaccurate payroll totals. The change decouples the hour splitting logic, now relying on specified daily hours instead of attendance hours, ensuring accurate half-day and full-day calculations.
Original PR description
Steps: - Create half day off for an employee - Create a full day off of the same type - Create a payslip for the employee Issue: - Due to the lack of attendance hours in the flexible schedules, the _get_work_hours_split_half is unable to split half day and full days work entries of the same type. - Half worked days will be rounded up which affects the total number of work days in a month Solution: The approach was to decouple the work_hours_split_half functionality from the attendance hours and rely on the specified hours_per_day instead. This accurately splits half and full days. Task: 6253675 Forward-Port-Of: odoo/enterprise#118968 Forward-Port-Of: odoo/enterprise#118836
This update refines the calculation of worked days for payroll, addressing inconsistencies and improving accuracy. The changes enhance the reliability of payslip generation, ensuring employees are paid correctly based on their actual working hours. This update impacts the core payroll functionality.
This update fixes a technical issue that caused a traceback when generating the annual report within the knowledge app. The fix ensures proper handling of component data, preventing errors during loading and improving the user experience. This resolves a minor performance concern.
Original PR description
Before this commit: when going to the annual report from the knowledge app, select the balance sheet, there's a traceback loading the embedded component. The reason is the props is being reassigned inside the component. Related commit: 8bde58bd2ec1b4925552cebcf5fb3159d88eea00 After this commit: we properly create a value for the translated name in the component and its template. task-6292898
This update streamlines the context keys used when creating accounting entries for work orders. Previously, multiple keys performed similar functions, leading to potential confusion. This change consolidates and clarifies the context, ensuring more reliable and predictable accounting processes.
Original PR description
Replace the `employee_change_id` context key passed when calling `_create_analytic_entry` by adding an optionnal parameter, `previous_employee_id`. Community PR: odoo/odoo#265722 Upgrade PR: odoo/upgrade#10288