Daily updates from Odoo
Monday, February 16, 2026
165 changes
11 changes
Resolved issues and error corrections
This update reverses a recent change that exposed sensitive time-off type information to all users within the time-off overview. The change was causing a security vulnerability by displaying private time off details. This fix restores the previous system where time-off colors were based on type, ensuring data privacy.
Original PR description
This commit reverts back the change done to gantt color of time-off overview to be based on time off type instead of employee, which made private information (time off type) available to everyone. Task: 5868354
This update corrects a flaw in the VoIP unit tests by replacing a misleading selector with a more accurate one. The change ensures the tests reliably check for expected conditions, and also streamlines the test code by removing unnecessary assertions. This improves the overall stability of the VoIP functionality.
Original PR description
Introduced by [1]. The use of `:value()` is always truthy, making that assertion useless in the related unit test. Replaced by `:empty` as intended and took the opportunity to remove the non-required extra assertion around that code. [1]: https://github.com/odoo/enterprise/commit/0ff7c35c266c547ed3cc63155ffba54727d43c07
This update resolves a bug that prevented the infinite scrolling of VoIP call history in Chrome. The fix addresses an issue with how the system detects the end of the scrolling area, ensuring all recent calls are displayed correctly. This improvement ensures a seamless user experience for accessing call history.
Original PR description
Since [1], the voip calls infinite scrolling does not work anymore. Steps to reproduce: - Make sure to have at least 14 recent calls - Open the softphone - Go to the recent/history tab - Scroll to…
Since [1], the voip calls infinite scrolling does not work anymore. Steps to reproduce: - Make sure to have at least 14 recent calls - Open the softphone - Go to the recent/history tab - Scroll to the end => You are stuck seeing only the 13 last calls. This was a Chrome-only issue, it works on Firefox. Weirdly, the infinite scrolling works on the contact tab on Chrome too, although this is the exact same implementation and configuration. This is due to the unreliable behavior of IntersectionObserver regarding 0x0 elements. The infinite scrolling implementation in VoIP relies on the visibility of a "dummy" `<span/>` added at the end of the tab. That element has no width or height, making the implementation unreliable. As a stable minimal fix, this restores the feature by making the element have a width and height, without any visual/behavior changes thanks to negative margins and no pointer events on the item. Note that [1] disabled a test that was testing the feature. This commit of course re-enables it. [1]: https://github.com/odoo/enterprise/commit/52b3065993c41c6b7c65dda586a66fdd865b3afd Forward-Port-Of: odoo/enterprise#106658
This update fixes an issue where the month displayed on global invoices linked to POS orders was incorrectly reflecting the invoice creation date instead of the order date. This ensures accurate reporting and compliance with Mexican tax regulations. The fix corrects the 'Meses' attribute in the generated XML.
Original PR description
**PROBLEM** In accounting, if you create a global invoice with an invoice, the attribute `Meses` will be the month of the invoice date. In POS, if you do the same with an order, the attribute `Meses` will be equal to the month the day we create the global invoice, instead of the month of the order date. This is wrong. **STEP TO REPRODUCE** 1. Have an order from the month before (not sure how to do this on a runbot). 2. Create a global invoice. 3. Check the generated xml, and notice the month is wrong. opw-5381607 Forward-Port-Of: odoo/enterprise#107362 Forward-Port-Of: odoo/enterprise#106856
This update corrects a display issue where percentage fields in HR contracts were showing decimal values (e.g., 0.25%) instead of the intended percentage format (e.g., 25%). The underlying calculations remain accurate, and this change ensures a more user-friendly experience when viewing and editing these values. No data was changed.
Original PR description
Percentage fields are stored as a decimal in the DB (0.25) but represent a percent value (25%) The calculations are correct but the display to the user shows 0.25%, this PR fixes that without modifying the values stored on the database task-5350196
This update fixes a previous error where work accident entries were incorrectly being paid on employee payslips. The change adds the necessary entry type to the payroll data, ensuring accurate calculations and proper compensation for work accidents. This resolves a potential financial discrepancy.
Original PR description
The unpaid work accident work entry type was added, but not included in `unpaid_work_entry_type_ids`, causing it to be paid by mistake. Add it to `unpaid_work_entry_type_ids` for the following structures: - structure_type_employee_cp200 - structure_type_employee_cp200_pfi Task: 5484866
This update fixes an issue where the Employer File Number field was hidden in the payroll settings after installing the l10n_hk_hr_payroll module. The fix removes the setting that previously obscured this important data, ensuring users can now correctly input and view this required information.
Original PR description
Issue: - Employer File Number was hidden in Payroll settings after installing the l10n_hk_hr_payroll_empf module. Fix: - Removed the setting that hid the Employer File Number field. task-5476454 Forward-Port-Of: odoo/enterprise#103987
This update resolves several issues impacting the accuracy of Single Touch Payroll reporting in Australia, specifically related to opening balances and year-to-date calculations. The changes include rounding monetary amounts to the correct currency precision and correcting date discrepancies, ensuring compliance and reliable financial data.
Original PR description
- Unable to import opening balances when zeroed out. This should not require Previous Payroll and BMS IDs - Float creates an overflow while computing the YTD sums, which results in too many digits in decimal places. Round all monetary amounts reported to the rounding precision of the currency. - Issues with run date and submit dates for the prior fiscal year. - Fix payslips computation on update actions post finalisation Task - 5685790 Forward-Port-Of: odoo/enterprise#105952
This update fixes a misleading error message displayed when validating Argentine electronic invoices (ARCA). The message has been corrected to accurately reflect the requirement that the invoice date cannot be before the last validated invoice, preventing incorrect invoice processing. This ensures compliance with AFIP regulations.
Original PR description
WSFE error 10016-1 must be "The invoice date cannot be before the last invoice validated in AFIP." instead of "The invoice date cannot be after the last invoice validated in AFIP". Steps to reproduce: validate argentinean customer electronic invoice with invoice date before than the last invoice date validated in ARCA. Task Adhoc side: 44290 Task latam: 1376 Forward-Port-Of: odoo/enterprise#106687 Forward-Port-Of: odoo/enterprise#106305
This update fixes an issue where the activity menu in web_studio was incorrectly displaying all records for custom models, rather than just those with activities assigned to the current user. Now, the activity menu accurately filters records to show only those with associated activities, improving the user experience and data accuracy.
Original PR description
After commit odoo/odoo@5c5fbc10b7024c7227f03e37897d421bba64df82 , actions spawned by the activities menu have their domain managed by dynamic <filter /> rather than a plain readonly domain. Before this commit, clicking on the activity menu to go to a custom model showed every record, not just ones with activities after this commit, only records with activities assigned to the current user are showed opw-5778806 Forward-Port-Of: odoo/enterprise#107277 Forward-Port-Of: odoo/enterprise#106622
Features or functions removed from Odoo
This update streamlines the demo data for the Indian payroll module (l10n_in_hr_payroll) by removing redundant working schedules. The change consolidates to a standard 40-hour work week, improving data consistency and reducing complexity. This ensures a more accurate and manageable demo environment.
Original PR description
### AIM - In the demo data, there is no need to create multiple working schedules for Indian locations. - We can use a single working schedule of 40 hours per week. Task: 5899739
5 changes
Resolved issues and error corrections
This update resolves an issue where Employee Officers were experiencing access errors when editing employee records. By restricting access to salary offer information to HR Managers, the system now prevents unauthorized data access and ensures data security. This allows Employee Officers to continue their work without interruption.
Original PR description
Before: - Editing an employee form as an Employee Officer triggered an AccessError due to mail tracking attempting to read salary_offer_ids on hr.version. After: - salary_offer_ids is now restricted to HR Managers, preventing unauthorized reads during tracking when saving the employee form. Impact: - Employee Officers can edit employee records without encountering access errors. - Access to salary offers remains limited to appropriate managerial roles. Task: 5404676
This update corrects a critical issue in Australian payroll calculations by ensuring tax rules use the correct employee version (historical data) instead of current employee information. This prevents inaccuracies when generating payslips for past periods, particularly with changes to employee tax settings, and guarantees accurate withholding and deductions.
Original PR description
Since the introduction of the employee versioning system, using `employee.field_name` in salary rules is no longer accurate for computations involving historical or specific periods. Accessing fields…
Since the introduction of the employee versioning system, using `employee.field_name` in salary rules is no longer accurate for computations involving historical or specific periods. Accessing fields directly on the `employee` record returns the current values. This creates an issue when a future version exists. For example, if a new version is created for February 2026 with an updated Child Support amount, generating a delayed payslip for January 2026 would incorrectly use the February value (current state) instead of the January value (historical state). This commit updates the Python compute logic in the Australian salary rules to use `version.field_name` instead of `employee.field_name`. The `version` object ensures the data used corresponds strictly to the payslip's period. The following rules/fields are updated to use the version object: - Tax Treatment Category - Additional Withholding Amount - Extra Pay - TFN Declaration - Medicare (Reduction, Exemption, and Levy) - Training Loans - NAT 3093 Amount (Tax Offset) - Child Support (Garnishee and Deduction) A test case is added to verify that a payslip correctly retrieves the child support amount from the version valid during the payslip period, ignoring future updates. Task-5002697
This update resolves a minor issue related to the calculation of scale certificates for European VAT compliance. It synchronizes a key checksum value following a recent fix in the main Odoo project. This ensures accurate reporting and adherence to regulatory requirements.
Original PR description
This commit simply updates the expected scale checksum after the fix in the community PR odoo/odoo#248413. Forward-Port-Of: odoo/enterprise#107445 Forward-Port-Of: odoo/enterprise#107241
This update fixes a technical issue where the system was creating multiple, empty pay runs when generating payslips through the selection dialog. The fix ensures that only one temporary pay run is created per dialog attempt, preventing unnecessary database entries and improving system efficiency. This resolves a potential data inconsistency issue.
Original PR description
When generating payslips from the selection dialog the UI previously created a new hr.payslip.run on every attempt; server-side validation can fail and each failed attempt left an empty pay run in the database. Fixed by allowing the dialog to create at most one temporary pay run per dialog lifecycle, reuses it on retries, and removes it if generation fails or the dialog is closed. task-5920710
This update fixes an issue where Mexican POS invoices incorrectly displayed the invoice creation month instead of the order date month. This ensures accurate reporting and compliance with Mexican tax regulations for global invoices generated from POS orders. The fix corrects the 'Meses' attribute in the generated XML.
Original PR description
**PROBLEM** In accounting, if you create a global invoice with an invoice, the attribute `Meses` will be the month of the invoice date. In POS, if you do the same with an order, the attribute `Meses` will be equal to the month the day we create the global invoice, instead of the month of the order date. This is wrong. **STEP TO REPRODUCE** 1. Have an order from the month before (not sure how to do this on a runbot). 2. Create a global invoice. 3. Check the generated xml, and notice the month is wrong. opw-5381607 Forward-Port-Of: odoo/enterprise#107362 Forward-Port-Of: odoo/enterprise#106856
3 changes
Resolved issues and error corrections
This update strengthens the automatic reconciliation of bank statements by ensuring time limits are consistently enforced during imports. Previously, imports could run indefinitely, leading to timeouts. Now, the system automatically limits the import process to the relevant company, preventing long processing times and improving reliability.
Original PR description
The aim of this commit is to prevent a csv import to timeout by applying the `limit_time` parameter for real. We also added the `company_id` parameter to the caller to maximize the chances of…
The aim of this commit is to prevent a csv import to timeout by applying the `limit_time` parameter for real. We also added the `company_id` parameter to the caller to maximize the chances of processing the lines of the statement being imported first. Context: 1) `_cron_try_auto_reconcile_statement_lines` was modified a few times in the last months with the bank reco widget revamping, the perf issues, etc. During that revamp, the timing limitation was made irrelevant if a `batch_size` wasn't provided. While it makes sense that the time limitation is irrelevant without a batch, not raising an error resulted in the client code letting the caller think the time limitation will be applied. Instead, we could provide a default batch_size. 2) The `company_id` parameter wasn't set which combined with no batch_size results in trying to reconcile the entire accounting from every company to which the user has access. Before this commit: - The limit_time parameter is ignored if the `batch_size` parameter isn't provided processing everything in the current transaction. - The company_id parameter wasn't set resulting in trying to reconcile the whole accounting from all accessible companies in the current transaction. After this commit: - We provide a default `batch_size` of 100 and thus we really apply the timing - We provide the `company_id` parameter to limit the reconciliation to the company of the statement. opw-4890008
This update adjusts the calculation of sickness relapse periods for the Belgian payroll module. Starting January 1, 2026, the allowed relapse period between sick leaves will increase from 14 to 56 days, aligning with new Belgian tax regulations. This ensures accurate payroll processing for employees on sick leave.
Original PR description
**Spec :-** Since 01/01/2026, the period between two sick time off to consider it as a relapse has been increased from 14 days to 56 days. **Implementation :-** . Update sickness relapse period from 14 to 56 days if the leave starts from 2026 . Add corresponding tests task-5476174 Forward-Port-Of: odoo/enterprise#104769
This update resolves a technical error that prevented users from removing a date filter on the Booking Kanban view in the POS module. The fix ensures the Kanban view functions correctly, allowing users to efficiently manage their bookings. This improves the overall user experience and prevents potential data management issues.
Original PR description
Steps: - Install pos_appointment. - Open a POS session with bookings configured. - Open the Booking tab and click Remove date filter in the header. Issue: - A traceback occurs with `Invalid handler`. Cause: - The Remove date filter button’s onclick handler was not defined. Fix: - Define a valid onclick handler for the Remove date filter button. Task-5902656
2 changes
New functionality added to Odoo
This update ensures Odoo Enterprise complies with new Polish tax reporting requirements mandated by the KAS. Starting in 2025, businesses will need to generate a specific XML file (JPK KR PD) to meet legal obligations and avoid potential penalties. This update adds the necessary functionality to support this reporting standard.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 Forward-Port-Of: odoo/enterprise#100345
Resolved issues and error corrections
This update adjusts the calculation of sickness relapse periods for employees in Belgium, aligning with a new tax regulation effective January 1, 2026. The relapse period between sick leaves is now 56 days instead of 14, ensuring accurate payroll processing and compliance. This change was implemented with new tests to guarantee correct functionality.
Original PR description
**Spec :-** Since 01/01/2026, the period between two sick time off to consider it as a relapse has been increased from 14 days to 56 days. **Implementation :-** . Update sickness relapse period from 14 to 56 days if the leave starts from 2026 . Add corresponding tests task-5476174 Forward-Port-Of: odoo/enterprise#104769
22 changes
New functionality added to Odoo
This update ensures Odoo Enterprise complies with new Polish tax reporting requirements mandated by the KAS. Starting in 2025, businesses will need to generate specific electronic reports, and this change enables the creation of the required JPK KR PD file to avoid potential tax penalties and ensure continued legal use of the software.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 Forward-Port-Of: odoo/enterprise#100345
Enhancements to existing features
This update allows HR administrators to modify the Payrun field directly on the payslip form, regardless of the payslip's state. This provides greater flexibility in correcting payroll data. Additionally, a warning message appears if a different month's payrun is selected, preventing potential errors.
Original PR description
In this PR, the Payrun field in the payslip form view is now editable in all states. Task-5924637
This update modifies the payroll rules used in Odoo Enterprise to accurately reflect the latest Belgian tax regulations, specifically regarding the calculation of seizable amounts. The changes include incorporating a new valuation (2026) and removing outdated terminology related to the CP200 system, ensuring compliance and accurate tax reporting.
Original PR description
Update CP200 Seizable Amount Percentages salary Parameters . Add 2026 valuation . Remove CP200 from name & code task-5478481
This update enhances the workorder planning process by introducing a Kanban view that allows users to easily rearrange production orders after initial planning. Additionally, the core planning function has been refactored to enable efficient batch rescheduling of workorders. This improves workflow flexibility and operational efficiency.
This update strengthens controls around provider pricing by allowing restrictions based on approved pricelists. It also introduces minimum amount validation alongside existing maximum amount checks, ensuring consistent and accurate payment processing. This improves financial oversight and reduces potential errors.
Original PR description
Adding filtering based on sale order pricelist to restrict providers to allowed pricelists. Extending amount validation to include minimum amount filtering alongside existing maximum amount checks. See also: - https://github.com/odoo/odoo/pull/234969 task-5129542
This update enhances the barcode kanban view for stock pickings, making it easier for operators to quickly identify the correct picking based on sales or purchase references. Previously, multiple pickings needed to be reviewed, leading to delays. This change streamlines the process and improves operational efficiency.
Original PR description
When several pickings exist for the same partner, operators often rely on the sales or purchase reference to find the correct one. In the barcode kanban view, the available information makes this difficult and forces operators to open multiple pickings before finding the right one. This improvement helps operators identify the correct picking more easily at a glance, making it easier to find the correct picking. Task-5248999
This update introduces a system to automatically suggest automating reconciliation models after they've been used three times. Users will receive a notification with options to automate, reset the usage counter, or permanently disable automation. This streamlines the reconciliation process and reduces manual effort.
Original PR description
This commit will do multiple things: - In the chatter, whenever a reconciliation model is applied, a link to the model is now available. - When a reconciliation model is automatically created by Odoo, after it has been used three times, a dialog will appear asking if you want to automate that model. You also have the option to reset the usage counter to give yourself more time to decide, or to never automate that model. - Also fixed some linter issues task-5062143
This update automatically populates employee birthdates and sex information when the Belgian NISS (National Identification System Number) is entered. The birthdate is derived from the first 6 digits of the NISS, and sex is determined by the 9th digit – even numbers indicate female, odd numbers male. This streamlines data entry and improves accuracy.
Original PR description
When the NISS is filled in, it should automatically populate the birthdate and the sex. The birthdate is the first 6 digits of the NISS in the format YYMMDD. If the 9th digit is even, the sex is female. Otherwise, it's male. Task: 5432128
This update enhances the tracking of goal progress, particularly for goals linked to parent goals. Now, goal progression can reflect partial completion (0-100%) instead of being limited to just 0 or 100, providing a more accurate representation of performance. This change improves the visibility and management of employee goals within the system.
Original PR description
purpose: If you have a parent goal, the progression of the parent goal will only be 0 or 100 so we improve it to span the values in between 0 and 100 as well. - added a computed field to track the children progression for parent goals - added a computed field to show goal progression as a percentage task-id: 5076030
Resolved issues and error corrections
This update resolves a previous limitation where commission and achievement data for completed sales plans couldn't be displayed in reports. Now, sales reports accurately reflect performance against achieved goals, providing a more complete view of sales results. This enhancement improves reporting accuracy and supports better sales management decisions.
Original PR description
Before this commit, it was not possilbe to display commission/achievements of done plans. task-5937055
This update fixes a limitation in the payroll schedule wizard that prevented users from selecting resource calendars without a company assigned. The change expands the selection options to include all calendars, regardless of company affiliation, improving flexibility and usability for resource scheduling. This ensures all resources can be correctly assigned to payroll schedules.
Original PR description
Steps to reproduce: 1. Create a resource calendar without any company 2. Open the payroll set schedule wizard 3. The calendar without company is not selectable Bug cause: The domain on `resource_calendar_id` field only filtered for calendars belonging to the current company, excluding calendars with no company set. Solution: Update the domain to include both calendars from the current company AND calendars without any company using an OR condition. Task Id: 5912974
This update enables users to download accounting reports even when errors are detected. Previously, a system error would prevent download attempts. This change supports users who need to manually correct downloaded files, streamlining the report fixing process.
Original PR description
[IMP] account_reports, *: Allow user download invalid file modules: l10n_at_saft, l10n_lu_reports, l10n_ro_saft Before this commit, when a user try to export an accounting report, if an error with the level 'danger' is detected a wizard open and do not allow to download the file (the "Download Anyway" button is disabled). With this commit, the user will be able to download the file in any case. The target is the user that will modify the file manually to correct it. task-5487096
This update resolves an issue where the timesheet's systray label was not displaying correctly. The fix ensures the label accurately reflects the timesheet's status, providing a clearer visual indication for users. This improves the overall user experience and data accuracy.
This update resolves an issue where DMFA export reports were being rejected due to duplicate employee records sharing the same NISS. The fix groups employees with the same NISS and merges their payslips into a single record, ensuring accurate DMFA declarations and preventing errors.
Original PR description
In some real-life situations, multiple employee records can share the same NISS (e.g. a student contract followed by a regular contract after archiving the first employee). When exporting DMFA data, this resulted in multiple NaturalPerson nodes with identical identifiers.
This caused the DMFA declaration to be rejected with error 90017-006 ("Personne physique - Trop d'occurrences avec les mêmes identifiants").
To fix this, employees sharing the same NISS are now grouped in the DMFA export, and their payslips are merged into a single NaturalPerson node.
task-5470180This change prevents automatic transfer validation when quality checks are pending, giving users more control over the picking process. Previously, automatic validation blocked adjustments to quantities or lot numbers needed after failed quality checks. Now, users must manually validate the transfer after all checks are complete, ensuring a more flexible and predictable workflow.
Original PR description
*: stock_barcode_quality_control Before this change, when a picking with pending quality checks was validated, the system opened the quality check wizard. Once all checks were completed, the transfer…
*: stock_barcode_quality_control Before this change, when a picking with pending quality checks was validated, the system opened the quality check wizard. Once all checks were completed, the transfer was automatically validated. This behaviour caused issues in cases where some quality checks failed, as users might need to adjust quantities, correct lot numbers, or handle exceptions before finalising the transfer. Since the transfer was already validated automatically, users lost the opportunity to review or modify the picking. With this commit, validating a picking while some quality checks are still pending no longer triggers automatic validation of the transfer. Users must now explicitly validate the transfer manually after all checks are completed. The Validate button is also made secondary when there are pending quality checks to perform. This makes the validation flow more predictable and gives users better control and flexibility when handling pickings that include quality checks. Task ID: 4898373
This update corrects a recent change that exposed sensitive time-off type information to all users within the time-off overview. The change has been reverted to ensure employee time-off types remain private, maintaining data security and confidentiality.
Original PR description
This commit reverts back the change done to gantt color of time-off overview to be based on time off type instead of employee, which made private information (time off type) available to everyone. Task: 586835
This update fixes an issue where the salary calculator was incorrectly re-encoding values when changing budget types. The system now accurately preserves user input and calculates yearly costs based on the selected budget, ensuring more reliable salary projections. This change improves the accuracy of salary calculations within the applicant and offer stages.
Original PR description
Prevent the salary calculator from re-encoding value when switching budget type; preserving user input. The separate monthly_wage field has been repurposed into salary amount, it is used to calculate final_yearly_cost depending on budget_type. task-5030704
The Pay Run status bubble now correctly reflects the status of payroll processing. Previously, it incorrectly showed a green status even when no payslips had been generated. This update ensures the bubble remains grey until payslips are created, providing a more accurate visual representation of the payroll process.
Original PR description
Previously, the Pay Run status bubble appeared green even with 0 payslips. This commit updates the `StatusBubble` component to check `payslip_count`. The current stage bubble will now remain grey (`bg-secondary`) until payslips are generated, only turning green (`bg-success`) when `payslip_count > 0`. - JS: Added `payslip_count` to field dependencies. - XML: Updated class conditions to respect payslip count.
Features or functions removed from Odoo
This update removes the 'mass_mailing_name' field from the email configuration within Odoo. This change simplifies the marketing automation process and aligns with updated system standards. It ensures consistent data handling and improves the overall efficiency of email campaigns.
Original PR description
[IMP] marketing_automation: remove mass_mailing_name
As parts of changes to mass_mailing, the mass_mailing_name field
is removed from the mail.compose.message wizard.
As such, references to that field are removed from the
marketing_automation module.
task-5423645This update removes a reference to a deleted field in the l10n_be_hr_payroll module. This cleanup ensures the system remains consistent and avoids potential issues related to outdated data. It's a routine maintenance task to improve the stability of the payroll functionality.
Original PR description
In this PR (https://github.com/odoo/odoo/pull/246332) the display_type field was removed from resource_calendar_attendance, here we remove the refernce to it. Task: 5886926 Community PR: https://github.com/odoo/odoo/pull/246332 Upgrade PR: https://github.com/odoo/upgrade/pull/9376
This update removes a previously introduced barcode widget from the MRP Workorder module. The widget was no longer needed after related functionality was removed, streamlining the code. This change improves code maintainability and reduces potential complexity.
Original PR description
This widget was introduced in [1] but its usage was removed in [2]. We can also remove the mixin, as `on_barcode_scanned` is no longer used either. [1] https://github.com/odoo/odoo/pull/102150/ [2] https://github.com/odoo/enterprise/commit/3724d76fc1a216558ba8f0bbbf3b95aa706ad659#diff-a1880ae8ffd9373bbc49230d522c8e6696e9f4deafbeba01c8eda2c3223a1be7L10-L29
This update simplifies the ordering of contract types within Odoo. The team removed a redundant 'sequence' field, as contract types are now automatically ordered alphabetically by name. This change improves the system's efficiency and reduces potential for future configuration issues.
Original PR description
This commit removes the sequence field, as contract types are already ordered by name by default, making the sequence field unnecessary. Task:5868349
12 changes
Resolved issues and error corrections
This update corrects a bug that occurred when KPIs shared the same label but had different identifiers. The fix ensures accurate sorting of KPIs by utilizing a more robust method within the sorting process, preventing a data comparison error. This improves the stability and reliability of KPI synchronization.
Original PR description
When two KPIs have different identifiers but the same label, the call to `sorted` on a list of (priority, label, dict) tuples was wrong. As the two first criteria were the same, the comparison was made on the dict, which is not comparable, leading to the following error:
TypeError: '<' not supported between instances of 'dict' and 'dict'
With this commit, we instead use the `key=` argument to `sorted` in order to build the `(priority, label)` tuples, which is cleaner.
OPW-[5932549](https://www.odoo.com/odoo/project.task/5932549)This update resolves a technical issue preventing successful keyboard layout changes when using Odoo's IoT device functionality. Previously, an error (traceback) occurred during this process, disrupting user workflows. This fix ensures keyboard layouts update correctly, improving the reliability of the IoT device integration.
Original PR description
Steps to reproduce: - Connect an IoT box - Connect a USB keyboard to the IoT box - In the Odoo backend, attempt to change the keyboard layout of the keyboard device EXPECTED behaviour: Layout is updated successfully ACTUAL behaviour: Traceback occurs
This update resolves an issue with how versioning was handled in the l10n_be_hr_payroll module. The fix ensures accurate tracking of updates and compatibility within the Odoo Enterprise system. This improves the stability and reliability of payroll calculations for Belgian businesses.
This update resolves an issue where Employee Officers were encountering access errors when editing employee records due to unauthorized access to salary offer data. The change restricts access to salary offers to HR Managers, ensuring data security and allowing Employee Officers to continue their work without interruption.
Original PR description
Before: - Editing an employee form as an Employee Officer triggered an AccessError due to mail tracking attempting to read salary_offer_ids on hr.version. After: - salary_offer_ids is now restricted to HR Managers, preventing unauthorized reads during tracking when saving the employee form. Impact: - Employee Officers can edit employee records without encountering access errors. - Access to salary offers remains limited to appropriate managerial roles. Task: 5404676 Forward-Port-Of: odoo/enterprise#103095
This update corrects a bug in the salary configuration where changing a bank account would create duplicate entries, leading to incorrect allocation percentages. The fix now completely replaces existing bank accounts with the new one, ensuring accurate payroll processing. This resolves a potential issue with payments being misdirected.
Original PR description
When changing a bank account in the salary configurator, the system was adding the new bank account to the employee's existing bank accounts list, ending up having multiple bank accounts where the first retained 100% allocation and subsequent ones had 0% allocation. The fix replaces all existing bank accounts with only the new one. task-5905542
This update fixes an inaccurate count of employees with invalid bank account warnings displayed in the payroll dashboard. The issue stemmed from how multiple employee versions were handled, leading to a discrepancy in the reported warning records. The fix ensures a more precise count of employees with invalid bank accounts.
Original PR description
> note: to be r+'ed till `master` (`saas~19.2`) because the way we compute warning has been changed in `master` description: - `warning_count` for `hr_payroll_dashboard_warning_employee_invalid_bank_account` is wrong when there are multiple versions for a single employee. steps to reproduce: - install `hr_payroll_account_iso20022` - open Payroll (note: have atleast one employee with multiple versions) - find "Employees With Invalid IBAN Bank Accounts" warning on the dashboard - note the count and click on it, the record count differs fix: - returned unique employee ids from `_get_invalid_iban_employee_ids` - also optimized the query in `_get_account_holder_employees_data` method. reasoning: we do not need bank account data from all the versions, because all the versions share same bank account data. task-5407494
This update corrects a technical issue where the contract template was being unnecessarily created during salary configuration. This prevented certain calculations from running correctly. The fix ensures the template data is now correctly handled, improving the reliability of the HR contract process.
Original PR description
Writing the contract template on the new version created by the salary configurator is not necessary and caused some computes to not trigger. The contract template values are already included in the `_get_version` method. task-5324222
This update resolves a problem where the CDI - Experienced Developer (BE) contract template wouldn't save correctly. The issue was caused by an incorrectly checked inventory car field. This change removes the check, allowing users to successfully save the template.
Original PR description
Before this commit, when the CDI - Experienced Developer (BE) contract template is loaded, the inventory car is checked, but no car is selected, so you can't save. This commits unchecks the inventory car on the template to avoid this issue. Task: 5892344
This update removes the 'New' button from the DIMONA Declaration List view in the odoo/enterprise module. This simplifies the process for users to create DIMONA declarations, reducing potential confusion and improving usability. This change ensures the system operates as intended and aligns with best practices for user interface design.
Original PR description
. Remove the New button on DIMONA Declaration List view task-5471873
This update fixes an issue where the month displayed on global invoices linked to POS orders was incorrectly reflecting the creation date of the invoice, rather than the order date. This ensures accurate reporting and compliance with Mexican tax regulations, specifically for EDI POS invoices.
Original PR description
**PROBLEM** In accounting, if you create a global invoice with an invoice, the attribute `Meses` will be the month of the invoice date. In POS, if you do the same with an order, the attribute `Meses` will be equal to the month the day we create the global invoice, instead of the month of the order date. This is wrong. **STEP TO REPRODUCE** 1. Have an order from the month before (not sure how to do this on a runbot). 2. Create a global invoice. 3. Check the generated xml, and notice the month is wrong. opw-5381607 Forward-Port-Of: odoo/enterprise#107362 Forward-Port-Of: odoo/enterprise#106856
This update adjusts the calculation of sickness relapse periods for Belgian payroll, aligning with a new tax regulation effective January 1, 2026. The relapse period between sick leaves has been increased from 14 to 56 days, ensuring accurate payroll processing according to Belgian tax law. This change was implemented with new tests and data types to support the updated calculation.
Original PR description
Spec :- Since 01/01/2026, the period between two sick time off to consider it as a relapse has been increased from 14 days to 56 days. Implementation :- . Update sickness relapse period from 14 to 56 days if the leave starts from 2026 . Add leave work_entry type where work_entry use date_start . Add corresponding tests task-5476174 Forward-Port-Of: odoo/enterprise#104782
This update resolves an issue preventing the WhatsApp sign migration process from completing due to manually deleted template records. By adjusting how Odoo handles missing templates, the migration now proceeds smoothly, avoiding a critical upgrade block. This ensures consistent and reliable WhatsApp sign functionality.
Original PR description
Issue: ------ The database migration was blocked during the `config_parameter` [loading](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/config_parameter_whatsapp_template.xml#L6)…
Issue:
------
The database migration was blocked during the `config_parameter` [loading](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/config_parameter_whatsapp_template.xml#L6) phase. This occurred because several `ir.config_parameter` records used `ref()` to point to [whatsapp templates](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/sign_request_whatsapp_templates.xml) that were manually deleted in the production environment.
ValueError is raised:
```py
raise ValueError('External ID not found in the system: %s' % xmlid)
ValueError: External ID not found in the system: whatsapp_sign.sign_request_whatsapp_template
```
Cause:
-------
Since these whatsapp templates are defined with [`forcecreate="0"`](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/sign_request_whatsapp_templates.xml#L3), Odoo does not recreate them automatically during migration. This left the External IDs (IMD) pointing to non-existent records, causing a `ValueError: External ID not found in the system` that blocked the migration.
Solution:
-----------
Updated the `ref()` calls in the XML for these configuration parameters to include `raise_if_not_found=False`. This allows the registry to initialize successfully by returning None instead of crashing if a template is missing.
tgb: [2448](https://upgrade.odoo.com/odoo/tbg/2448?debug=1)
upg: [3895200](https://upgrade.odoo.com/odoo/upgrade.request/3895200?debug=1)
opw: [5931388](https://www.odoo.com/odoo/project/70/tasks/5931388?debug=1)4 changes
Resolved issues and error corrections
This update resolves an issue where archived employees were still visible in the attendance Gantt view. The change ensures that only currently active employees appear, improving data accuracy and presentation. This prevents confusion and outdated information from being displayed.
Original PR description
Steps to reproduce: 1. install `hr_attendance_gantt` 2. create an employee 3. make attendance records for the employee in the previous months 4. archive the employee When opening the gantt view of the attendance, a row appears for the archived employee, with no attendance showing up. This commit adds a constraint to only show the active employees. opw-5490119
This update clarifies the visibility of specific fields within the Belgian payroll and fleet modules. Previously, generic fields were consolidated across all countries, but this change restores the original design, keeping BE-specific fiscal logic contained within the l10n_be_hr_payroll_fleet module. This ensures accurate reporting and compliance for Belgian businesses.
Original PR description
This branch only hides BE-specific fields in l10n_be_hr_payroll_fleet (they remain defined/used there and are invisible for non‑BE companies). On master (19.3) those generic fields (can_be_requested, default_car_value) were refactored into hr_payroll_fleet so payroll+fleet consumers across all countries can use them; BE fiscal logic stays in l10n_be_hr_payroll_fleet task-5906656
This update enhances the accuracy of payment reference checks by tailoring validation to the bank account's country. Previously, a single check applied to all countries could lead to incorrect validations. Now, the system verifies the reference format against the specific country of the bank account, with a fallback for unsupported countries, ensuring more reliable payment processing.
Original PR description
Currently, when initiating a payment, we check if the reference is a structured one by using `is_valid_structured_reference` which checks the validity of the structure accross all supported countries. This can lead to issues when it matches formats accepted by other countries but not the one of the bank account. With this commit, we replace this check by a call to a new function that checks the structure validity according to the country of the bank account, with a fallback to the generic check (ISO 11649) if the country is not supported. opw-5387269
This update corrects a bug where autofilling pivot cells with incorrect relational IDs caused a crash. The fix ensures that autofill functionality continues to work while preventing tooltips from triggering a system error. This improves the stability and usability of the pivot table feature.
Original PR description
If you try to autofill a pivot cell that has an invalid relational id in its domain (eg. `=PIVOT.HEADER(1, "stage_id", 99999999)`), the autofill actually works but the tooltip make everything crash. Task: [5913754](https://www.odoo.com/web#id=5913754&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#106601
6 changes
Enhancements to existing features
This update adjusts the percentages used in Odoo's Belgian payroll (CP200) calculations. Specifically, it incorporates a new valuation (2026) and updates the parameters related to the seizable amount, ensuring accurate tax calculations for Belgian employees. This change improves payroll compliance and reporting.
Original PR description
Update CP200 Seizable Amount Percentages salary Parameters . Add 2026 valuation task-5478481
Resolved issues and error corrections
A bug was preventing users from correctly saving approval domain rules within the web studio interface. This was caused by an incompatibility between how Python and JavaScript represent boolean values. The update replaces a flawed method of converting domains to strings with a more reliable approach, ensuring approval rules are saved accurately.
Original PR description
Steps to reproduce ================== - Install web_studio,sale_management - Open a form view in sale - Open studio - Click on the "Send by email" button - Add an approval rule - Add a domain by clicking on the filter icon - Use the not set operator - Confirm - Click on the filter icon again - Confirm => ValueError: malformed node or string on line 1: <ast.Name object at 0x79ff4c7b7f50> Cause of the issue ================== JSON.stringify was used to pass the domain as a string to the DomainSelectorDialog. This doesn't work for boolean as they don't have the same representation in JavaScript as opposed to Python. Solution ======== Use the Domain().toString function opw-5923585
This update ensures that CODA file transactions are correctly split according to the journal settings, even when processed automatically through the Odoo cron job. Previously, the cron job bypassed this splitting logic, leading to incorrect accounting. This fix resolves a discrepancy between manual and automated import methods.
Original PR description
When importing CODA files manually, transactions are correctly split according to the journal configuration. However, when processed via the cron, the splitting logic is bypassed because the journal recordset is empty at the time of parsing. This occurs because the journal is identified only after the file has been parsed, which is too late for the cron flow. This commit ensures the journal is available early enough to respect the "Split Transactions" setting regardless of the import method. opw-4954539
This update resolves an issue preventing payroll users from accessing the 'One-time payments' feature within Swiss company configurations. The fix allows payroll officers and managers to correctly open and manage these payments, ensuring proper reporting and compliance. The issue stemmed from restricted access to action records, which has now been addressed through a secure internal bypass.
Original PR description
Steps to reproduce: ------------------- 1. Install l10n_ch_hr_payroll_elm_transmission. 2. Switch to a Swiss company and create a new employee. 3. Create a new internal user with Payroll…
Steps to reproduce: ------------------- 1. Install l10n_ch_hr_payroll_elm_transmission. 2. Switch to a Swiss company and create a new employee. 3. Create a new internal user with Payroll Officer/Manager access. 4. Log in as that user, create a contract, and click on "One-time payments". Issue: --------- A Traceback with AccessError: ```You are not allowed to access 'Action Window' (ir.actions.act_window) records.``` Cause: ---------- https://github.com/odoo/enterprise/blob/9e39b4b85fcb9f6ed5b21b942796b76b8a6eefdb/l10n_ch_hr_payroll_elm_transmission/models/hr_contract.py#L195 The code attempts to call `.read()` on an `ir.actions.act_window` record. Standard users typically do not have read access to window action records, resulting in an **AccessError** even if they have rights to the payroll data. Solution: ------------- Use [_for_xml_id](https://github.com/odoo/odoo/blob/93bd4d018d815b5f98d1eaaac3ae613aefbdba56/odoo/addons/base/models/ir_actions.py#L187) to return action content for the provided xml id in a safe way by doing [sudo](https://github.com/odoo/odoo/blob/93bd4d018d815b5f98d1eaaac3ae613aefbdba56/odoo/addons/base/models/ir_actions.py#L205) internally to bypass the access restriction. opw-5491467
This update fixes an issue where the 'Journal Items' view in the general ledger didn't correctly display journal information when a journal was selected as a filter. Now, when viewing journal items within the general ledger, both the invoice and the associated journal entry are accurately displayed. The update also includes support for multiple journals, though a refresh is required.
Original PR description
When opening the general ledger, if a journal was selected in the filter of the report, when clicking on "Journal Items" it would open the list view of account.move.lines without the journal in the filter. Also, the support for multiples journals is added but will require a -u of account to refresh the view. To reproduce: - Create an invoice on an Account such as Product Sales - Create a journal entry on the same account - Open the general ledger - Select "Customer Invoices" and click on "Journal Items" on the Account you choose. You can see both the move lines from the invoice and the journal entry.
This update corrects a discrepancy in payslip calculations for the private car daily allowance. The daily amount is now rounded to two decimal places, ensuring it precisely matches the 'Quantity × Amount' displayed on payslips. This improves payroll accuracy and reporting.
Original PR description
Round the computed daily private-car salary rule amount to 2 decimals so the displayed per-day value matches Quantity × Amount on payslips. References task-5917569