Daily updates from Odoo
Tuesday, March 3, 2026
21 changes · master
Enhancements to existing features
This update integrates an AI agent ('Odoo agent') to automatically create partner records during account creation. To ensure data accuracy, a new feature will be added to exclude specific partners from this automated retrieval process. This change enhances the efficiency of partner onboarding within the accounting module.
Original PR description
This commit: https://github.com/odoo/enterprise/commit/84d84687ac09abad698b1b00a445f69a0d896e5f introduce a new ai agent called "Odoo agent" and in the create method a partner is created from it. We will add a new function to blacklist some partner from the retrieve partner functionality task-5973417 Forward-Port-Of: odoo/enterprise#108871
This pull request updates Odoo to prepare for the upcoming OWL3 migration. A script has been run to replace all instances of 't-model' and 't-ref' with their 't-custom-' counterparts. This ensures compatibility with the new OWL3 version and avoids potential issues during the migration process.
Original PR description
WIP community: https://github.com/odoo/odoo/pull/246876
This update bumps the default version of the website generator to 2.4 to ensure compatibility with recent changes in the 19.2 release. This ensures the website continues to function correctly and reliably. The change is driven by necessary updates to website snippets.
Original PR description
Since some snippets changed in 19.2, we up the version to support them Forward-Port-Of: odoo/enterprise#109044
This update automatically updates the employee's sex and birthday fields in the UI when the NISS (National Identification System number) is changed. This ensures data consistency and accuracy, particularly when managing multiple companies within Odoo. The update only occurs if the new NISS value is valid.
Original PR description
The `sex` and `birthday` fields are defined in `hr` and cannot be overridden or converted to computed fields without breaking multicompany consistency. Add an `onchange` on `niss` to update `sex` and `birthday` in the UI when the NISS is modified. The update is performed only if the NISS is valid. Task: 5959156
This update improves the Employee Kanban view to display the employee's first contract date instead of the most recent contract date. This provides a clearer and more accurate view of an employee's tenure within the company. The change ensures consistency and simplifies tracking employee start dates.
Original PR description
Description of the issue/feature this PR addresses: On kanban, you see the start_contract_date of the latest version, but it should be the first contract date in the company Current behavior before PR: Desired behavior after PR is merged: . Display first contract date start on Employee Kanban view instead of start contract date of the latest version task-5481072 I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)
Resolved issues and error corrections
This update corrects a misleading warning displayed in the payroll system when a payslip had a zero or negative net wage. The fix ensures the warning only appears for individual payslips with negative wages, preventing confusion for users. A new test has been added to verify this behavior.
Original PR description
Steps to Reproduce: 1. Generate payslips for a batch of employees (e.g., Employee A and Employee B). 2. Ensure the last processed payslip (Employee B) has a negative net wage or is uncomputed (net…
Steps to Reproduce: 1. Generate payslips for a batch of employees (e.g., Employee A and Employee B). 2. Ensure the last processed payslip (Employee B) has a negative net wage or is uncomputed (net wage 0.0). 3. Ensure Employee A has a valid, positive net wage. 4. Open the payslip for Employee A. Issue: Employee A displays the warning "The net pay for this payslip is zero or negative," even though their net wage is positive. This occurred because the lambda filter used the `slip` variable from the outer loop scope instead of the iterator, causing the last record's net wage to determine the warning for the entire batch. Additionally, uncomputed payslips (which have no lines) default to a net wage of 0.0, which triggered the warning condition prematurely. Expected Behavior: The warning should only appear if the specific payslip being checked has a negative or zero net wage. Furthermore, the warning should be suppressed if the payslip lines have not yet been computed. Additionally, added a test to check the message is not displayed if we don't have net salary, and appears if the net is indeed negative. task-5484107 Forward-Port-Of: odoo/enterprise#108601 Forward-Port-Of: odoo/enterprise#103918
A technical issue preventing payrun creation for Hong Kong employees has been fixed. The problem stemmed from a missing function name during the implementation of eMPF support. This update ensures payruns can be successfully generated for Hong Kong employees, resolving a previous error.
Original PR description
In the big commit adding eMPF to the hk localization, a function was miss named and was causing an error when trying to create a payrun. Steps to reproduce: - Install belgian localization - Install HK localization - Select the belgian company - Create a payslip for a belgian employee (works fine) - Create a payrun and select the same employee from the list - Get an error In this commit we fix the naming of the function and everything goes back to working. Task: 5960503 Forward-Port-Of: odoo/enterprise#109196
This update resolves an issue where the date input field in the HR payroll form would become uneditable after editing. The change ensures the popover is opened first, guaranteeing the input remains editable. This improves the user experience for HR staff.
Original PR description
With this additionnal step in tour, we ensure the popover is opened before clear the input. If we not wait for this, the input can be no longer editable.
This update makes two key payroll fields accessible across all Odoo companies, regardless of their location. Previously, these fields were tied to the Belgian localization, limiting functionality for non-BE users. This change simplifies deployment and ensures consistent access to essential payroll data.
Original PR description
This change relocates two generic payroll fields (can_be_requested and default_car_value) into the base hr_payroll_fleet module so any deployment using payroll+fleet (including non‑BE companies) can access them without requiring the Belgian localization. The Belgian module keeps all its fiscal computations and (previously absent) visibility checks task-5906656
This update fixes a JavaScript error that occurred when users closed the certificate signing wizard without saving. The fix ensures the system correctly handles wizard dismissals, preventing a crash caused by incorrect data type validation. This improves stability and user experience.
Original PR description
**Issue:**
Closing the signing certificate wizard without saving triggers a client-side traceback (`UncaughtPromiseError: Invalid ids list: [object Object]`).
**Cause:**
When the wizard dialog is discarded, Odoo's dialog manager passes a dismissal object (`{dismiss: true}`) to the `onClose` callback. The existing code only checked if the payload was truthy (`if (cert_id)`), causing it to attempt to update the `signing_certificate_id` Many2one field with the event object. The framework's validation (`validatePrimitiveList`) expects an integer or array of integers, resulting in a crash when it tries to parse the object.
**Fix:**
Updated the `onClose` callback to strictly verify the type of the payload (`typeof cert_id === 'number'`). The record is now only updated when the wizard successfully returns a valid primitive integer ID.
task: 5975643
Forward-Port-Of: odoo/enterprise#108864This update corrects a display issue where EG-specific payroll fields were incorrectly shown in employee forms for companies outside of the EG locale. The fix ensures these fields are hidden when a different country is selected, maintaining data accuracy and preventing confusion. This improves the user experience for international users.
Original PR description
[FIX] some EG l18n fields are visible in other country's employee forms Bug reproduction: Go to >= saas~19.2 version, install EG and select company other than EG -> payroll -> personal -> there are EG: Social Sec. Number and NOSI Registration strings that belongs to EG. Bug cause: In EG view, they did not make the additional fields invisible if they belong to other company. Bug solution: Make the appended fields invisible when company country code is not EG. task - 5975886 Forward-Port-Of: odoo/enterprise#108896
This update resolves an issue where the arrow button within the Urban Piper settings was not functioning correctly. The fix involved ensuring the arrow was properly enclosed within a button tag, allowing users to navigate to the correct settings. This ensures a smooth and functional experience for users managing Urban Piper configurations.
Original PR description
In the settings, under the Urban Piper section, the arrow was not clickable. This is because the arrow was not inside a button tag. task: 5972833
This update fixes a minor discrepancy in the Gantt chart's progress display for flexible employees. The issue stemmed from an incorrect timezone setting in the test environment, leading to an inaccurate progress percentage. The fix ensures the chart accurately reflects employee attendance by standardizing the timezone to UTC.
Original PR description
[FIX] hr_attendance_gantt: fix gantt progress with flex emp test
Bug reproduction:
1 - Install and update hr_payroll,hr_contract_salary,l10n_us_hr_payroll,hr_attendance_gantt modules in localhost (version >= saas-19.2)
2 - Run test_gantt_progress_with_flexible_employees test and the expected result is 8 but it gives 9.
Bug cause:
Timezone of the test employees was UTC+1 and they should be UTC to match the range parameter of _gantt_progress_bar
Bug solution:
Change the timezone of the test employees to UTC.
task - 5865307
Forward-Port-Of: odoo/enterprise#109201This update fixes a problem where archived employees caused errors when managing appraisal plans. The change ensures that archived employees are no longer considered for appraisal dates, preventing date conflicts and improving the accuracy of appraisal settings. This ensures a smoother experience for users managing employee appraisals.
Original PR description
**Steps to reproduce:** Based on this feedback https://www.odoo.com/odoo/project.task/5270281 companies with archived employees face an issue when they try to toggle Appraisals Plans from Appraisls -> Configuration -> Settings -> Appraisals Plans **Issue:** The propblem is that when employees with next appraisal date are archived, their next appraisal date is not cleared which leads to past date conflicts upon trying to set the next appraisals dates for all the employees (which is done through toggling the Appraisals Plans checkbox) **Solution:** - Unset the next appraisal date upon archiving an employee - exclude archived employees from _compute_next_appraisal_date method Task: 5354002 Forward-Port-Of: odoo/enterprise#109115 Forward-Port-Of: odoo/enterprise#100437
This update addresses a potential issue in the payroll transmission process for Switzerland. Specifically, it now displays a warning instead of an error when the AVS (Automatic Valuation System) value is negative, providing clearer guidance to users. This improves the reliability of the reporting and reduces the risk of misinterpretation.
Original PR description
Forward-Port-Of: odoo/enterprise#109046
This update fixes an issue where newly hired employees' work email addresses were incorrectly populated with their private email from the salary configuration. The fix ensures that the employee's work email field is properly cleared during the onboarding process, aligning with standard data practices. This prevents data inconsistencies and improves the accuracy of employee records.
Original PR description
**Steps to Reproduce:** 1. Send an offer to an applicant. 2. The applicant submits their details via the salary configurator and enters their private email in the Email field. 3. Once the offer and contract are signed, an employee record is created in Odoo. 4. In the created employee record, the `work_email` field is populated with the email entered in the salary configurator. This same value is also present in `private_email`, which is correct. **Reason:** - The email entered in the salary configurator is stored on the partner and represents the applicant's private email. - The employee's `work_email` field is linked to the partner's email via compute and inverse methods, causing it to inherit the private email value when the employee record is created. **Solution:** - Explicitly clear the employee's work_email field when the applicant sign. task: 5502797 Forward-Port-Of: odoo/enterprise#109074 Forward-Port-Of: odoo/enterprise#106974
This update streamlines the configuration for automatic extra time off allocation in Odoo Enterprise. The previous redundant toggle has been removed, and the feature is now controlled by a selection field, improving the user experience and simplifying management. This change focuses on internal efficiency and ease of use.
Original PR description
Streamline the configuration by removing the redundant boolean toggle 'hr_contract_timeoff_auto_allocation'. The feature is now driven directly by the 'hr_contract_timeoff_auto_allocation_type_id' field. Remove boolean field from res.company and res.config.settings. Update settings view to remove checkbox and improve explanation text. Adjust _update_version_on_signature to trigger based on the Many2one value. Add placeholder to the Many2one field for better UX. Task: 5445784
This update fixes an issue where the salary calculator incorrectly used a default full-time calendar, leading to inaccurate calculations when simulating employees with different work schedules (e.g., 40h/week vs. 20h/week). The fix ensures the calculator now correctly applies the selected resource calendar for simulation offers, providing accurate salary projections.
Original PR description
Steps to reproduce: 1- Go to Payroll > Employees > Salary calculator 2- Put a yearly cost of 10000 3- Select the "40h/week calendar" 4- Check the yearly cost 5- Change to "20h/week calendar" Cause of the bug: _get_version inside ContractSalaryOffer would take the default calendar from the version if it exists (in our case it will always be the full time for the simulation employee) Fix done: Keep the condition as it is for normal offers, and for simulation offers change the default to the selected resource calendar task-5431216 Forward-Port-Of: odoo/enterprise#108949 Forward-Port-Of: odoo/enterprise#103159
This update fixes an issue on mobile devices where the 'Share' button was incorrectly displayed on top of the calendar sidepanel. The change ensures the button is hidden when the sidepanel is open, resulting in a cleaner and more intuitive user experience. This improves usability for mobile users.
Original PR description
Purpose ======= On mobile, prevent displaying the appointment Share button on top of the calendar sidepanel. Specification ============= On mobile, when opening the calendar sidepanel, the panel covers the entire calendar. However the appointment Share button has a z-index set to the modal level ($zindex-modal) which makes it so that the button is always displayed on top of the calendar sidepanel. Fixing that by making sure the appointment Share button is hidden when the calendar sidepanel is opened on mobile. Task-5717052
This update makes the Gantt chart's date selection more responsive, updating the displayed date range immediately as the user adjusts the picker. Previously, the date range only updated after clicking 'Apply'. This change provides a smoother and more intuitive user experience when working with Gantt charts.
Original PR description
- Previously, the Gantt scale selector only updated the displayed date range after the "Apply" button was clicked. This was because the template was bound to the component props rather than the local state. - This commit binds the date picker display to the local pickerValues state. Now, when a user selects a date in the picker, the UI updates immediately, while the actual data fetch remains deferred until "Apply" is clicked. Task: 5932671 Forward-Port-Of: odoo/enterprise#107380
Code cleanup and technical improvements
This pull request involves refactoring the VoIP codebase to better prepare it for upcoming changes. These internal adjustments improve the code's structure and flexibility, enabling easier future development and integration with new features. This work supports the broader task of improving our VoIP functionality.
Original PR description
We refactor the code in order to be able to extend it for task-4917399