Tuesday, March 3, 2026
15 changes · master
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