Thursday, February 26, 2026
33 changes · master
New functionality added to Odoo
This update adds a new button to the employee public view within the planning module. This allows authorized users (those in the 'group_planning_user' group) to easily access and utilize planning features related to employees. This improves efficiency for planning-related tasks.
Original PR description
- show planning smart button on employee public when user is `group_planning_user` - task-id: 5082555
This update adds optional fields – Customer Order Number and Item Number – to the Avalara EDI requests for NF-e invoices. This allows businesses to track orders and product serials, improving traceability and support for warranty claims. It's a commercial enhancement, not a legal requirement.
Original PR description
PURPOSE - The purpose of this pr is to add the following optional fields in the Avalara EDI request for NF-e(Goods EDI invoice) 1. Customer Order Number - `orderNumber` 2. Item Number -…
PURPOSE - The purpose of this pr is to add the following optional fields in the Avalara EDI request for NF-e(Goods EDI invoice) 1. Customer Order Number - `orderNumber` 2. Item Number - `orderItemNumber` - These fields are mostly a commercial need rather than a legal need. - Companies usually use this information to track from which purchase order it came, or even the serial/lot was used in the original purchase order. In guarantee flows, it's also used to specify some defective products. SPECIFICATION - In this pr, we add a new field `Item Number(l10n_br_nitemped)` in the sale order line model, and make this field hidden by default in the list view. - The value entered in the `l10n_br_nitemped` will go into `lines.lineBase.orderItemNumber` attribute and the value entered in the `Customer Reference(client_order_ref)` will go into `lines.lineBase.orderNumber` attribute. The orderNumber and orderItemNumber are allowed in tax calculation as well. That's why we are adding this feature in l10n_br_avatax and l10n_br_avatax_sale. Task-4006172
This update enhances the HR payroll system by adding clear descriptions for key terms like PAN, UAN, ESIC, and LWF. These warnings provide better user understanding of these important financial and social security concepts, ensuring accurate data entry and compliance.
Original PR description
**Description** Add a warning description for better user understanding and clarity. PAN :- Permanent Account Number is for tax compliance, TDS deduction, Income Tax Return (ITR) filing, and financial transactions. UAN:- Universal Account Number is for submit and manage Provident Fund (PF) contributions and to track them under the Employees' Provident Fund Organisation ESIC:- To submit contributions to the govt. for social security benefits under the Employees' State Insurance Corporation scheme) LWF:- Labour Welfare Fund is to identify and manage contributions for employee social security and welfare benefits as per applicable state regulations.) task-5945816
This update introduces a new test case to verify the functionality of printing payslips within the Odoo Enterprise HR payroll module. This ensures that payslips can be generated correctly and reliably, improving payroll accuracy and reducing potential errors.
Original PR description
In this PR, add test case for print payslip task-5958478
Enhancements to existing features
This update ensures timesheet approvers are correctly assigned when an employee's manager changes. Specifically, it only updates the approver if the new manager is linked to a user and the current approver was previously the employee's manager. This prevents incorrect approver assignments and maintains accurate timesheet workflows.
Original PR description
This commit adjusts the update of an employee's timesheet approvers upon changing their manager. The update is performed only if these conditions are met: The new manager has a linked user. The current attendance approver is the previous manager. The commit prevents setting the approver to the new manager when the current approver is unset. Task: 4804439
Resolved issues and error corrections
This update fixes an issue where warehouse names with only numbers (e.g., '01') were displayed incorrectly in the barcode app. The fix removes a browser setting that caused numerical warehouse codes to be reversed, ensuring they are always shown in the correct order. This improves the clarity and accuracy of product information displayed to users.
Original PR description
### Steps to detect the bug: - Download stock apps - Enable "storage locations" settings under warehouse index - Change name of warehouse with a name composed only of numbers (ex. 01) - Create a…
### Steps to detect the bug:
- Download stock apps
- Enable "storage locations" settings under warehouse index
- Change name of warehouse with a name composed only of numbers (ex. 01)
- Create a product (with barcode number)
- Insert a number of products available with smart button "on hand"
- Create a new delivery for that product
- Go to barcode app and search for the delivery you just created
- Click on it and see that the name of the warehouse will be stock/01 instead of the correct 01/stock
### The problem:
The previous configuration used direction: rtl; on the warehouse name
element in the barcode app. So if the string contains only letters the
standard visual order is maintained, however, when the string consists
entirely of numbers the rtl property forces the browser to reorder them
from right to left.
### The reson to introduce the fix:
By removing this property, it is ensured that numerical warehouse codes are displayed in their natural sequence without being flipped.
opw-5730199
Forward-Port-Of: odoo/enterprise#107920Features or functions removed from Odoo
This update removes the call buttons from the AI-powered live chat feature. This change simplifies the user interface and improves the overall experience for users interacting with the AI agent. It addresses a minor usability issue.
Original PR description
This commit will remove call buttons in livechat with ai agent. Task-5932845 Forward-Port-Of: odoo/enterprise#108444
Code cleanup and technical improvements
This update reorganizes tests related to user interface views within the Enterprise module. Moving tests to a dedicated module improves test organization and maintainability, ensuring better stability and reliability of the core Enterprise features. This change focuses on internal development processes and doesn't directly impact users.
This update adjusts the way meal voucher costs are calculated in Odoo, moving away from a fixed default of 1.09. Now, the employee's contribution is adjustable, and the employer's cost is dynamically calculated based on this amount. A new warning ensures the meal voucher remains within reasonable limits (max 10, min 1.09).
Original PR description
The employee's share for the meal voucher was taking 1.09 as default and it was not changable. New field is added, thus, it is adjustable and employer's cost is calculated according to the employee's share. task - 5922934
This update improves the IoT scale test within the Odoo Enterprise system. Specifically, the test now correctly identifies a product ('whiteboard_pen') as one that can be weighed, ensuring accurate data collection for IoT integrations. This change enhances the reliability of the test and the overall IoT functionality.
Original PR description
In this commit: --- - Updated the IoT scale test to mark the test product (`whiteboard_pen`) as a scalable product (`to_weight = True`). task-4992764 related-https://github.com/odoo/odoo/pull/231368
This update adds a confirmation dialog before deleting a payrun record. This prevents users from accidentally removing payroll data, ensuring data integrity and compliance. It's a small change that significantly reduces the risk of data loss.
Original PR description
Displays a confirmation dialog when the user tries to delete the payrun to prevent accidental deletion of the payrun record. task-5916194
This update simplifies the appearance of import templates in the account_bank_statement and mrp_mps modules. The button labels have been shortened to reduce visual clutter and ensure a more consistent look across all Odoo import views, aligning with recent UI improvements.
Original PR description
This commit aligns the import template button text in `account_bank_statement` and `mrp_mps` with the recent UI cleanup in `base_import` (https://github.com/odoo/odoo/pull/248233). The button labels have been shortened to reduce visual clutter and ensure consistency across all import views. task-5242240
This pull request addresses a technical issue related to the loading of task demonstrations within the Sale Timesheet module. The fix ensures that task-related data is correctly displayed, improving the functionality of this key sales reporting feature. This change enhances the accuracy of time tracking data for sales teams.
Original PR description
Forward-Port-Of: odoo/enterprise#108646
This update corrects a technical issue where the IoT long polling process wasn't correctly configuring HTTP requests. Previously, a failure occurred when attempting to retrieve event data. Now, all necessary parameters are passed, ensuring reliable data retrieval from IoT devices.
Original PR description
Before this commit, when the `_poll` method in the `iot_longpolling` called itself to listen for further events, it didn't pass in the `useLna` parameter. This caused the second call to `/event` to not use HTTP and therefore could fail. After this commit, the parameters are all passed through as expected. Forward-Port-Of: odoo/enterprise#108657
This change removes an unnecessary `div` wrapper from article body content. Previously, a technical detail in how the system parsed HTML caused this wrapper to be added, which increased the complexity of article formatting. This fix ensures cleaner and more efficient HTML structure for articles.
Original PR description
Prior to this commit, `_get_transformed_body_from` wrapped the source body in a `div` because `lxml.html.fragment_fromstring` is used with a `create_parent=True` argument. That argument is required because otherwise, the function throws an error if there are multiple root nodes in the parsed string, which is frequent in an article body. The final returned string still contained that additional `div` ancestor. This does not break an article per se, but repeated usage would increase the html structure depth by 1 every time, and that additional `div` was not part of the function desired transformations. task-5960616 Forward-Port-Of: odoo/enterprise#108310
This update resolves a technical issue that caused payroll processing to crash when employee contract dates were missing. By ensuring contract dates are always set, the system now reliably calculates payroll warnings without generating errors, improving overall payroll stability.
Original PR description
This commit fixes a traceback that occurred when an `hr.employee` record had no `contract_date_start` or `contract_date_end` defined, while payroll warnings depending on those fields were present. Since `warning_date` is computed based on the contract dates, the absence of the relevant field caused a crash. We now ensure that `contract_date_start` and `contract_date_end` are set before computing `warning_date` with either one. TaskID-5944876 Forward-Port-Of: odoo/enterprise#108106
This update resolves a problem where demo data incorrectly created duplicate follower records for portal customers. The change automatically handles follower subscriptions during project creation, eliminating the need for manual duplicate entries in the demo data. This ensures consistent and accurate demo data installation.
Original PR description
Portal customers are automatically subscribed as followers when a portal-visible project is created with a customer. The demo data in documents_project_sale was still manually creating a follower for the same partner, which caused a duplicate follower creation during demo data installation. This commit removes the redundant follower record from demo data, since follower subscription is already handled automatically during project creation. task-5075093
This update corrects a reporting issue within the MRP modules by standardizing time data to minutes. A new widget has been implemented to ensure accurate time calculations and reporting, enhancing the reliability of MRP data. This change impacts how time-based metrics are displayed and processed.
Original PR description
Make sure that time fields in mrp modules are in minutes. Add a new widget in mrp_plm for updates on time data types. Replace formatFloatTime by formatDuration. Forward-Port-Of: odoo/enterprise#108078
This update fixes an issue where CABA taxes were incorrectly included in tax reports, even when invoices were unpaid. The fix ensures that CABA taxes within tax groups are properly excluded, preventing duplicate reporting and improving the accuracy of financial data. This resolves a previous bug impacting invoice reconciliation.
Original PR description
How to reproduce: - Create one CABA tax and one normal tax. - Create a tax group containing both taxes. - Create an invoice using this tax group. - In the tax report, the CABA tax appears even when the invoice is unpaid. - After reconciliation, the CABA tax amount is duplicated in the report. When the CABA tax is part of a tax group, it is selected in _read_generic_tax_report_amounts_no_tax_details. Since the tax group has tax_exigibility = 'on_invoice', the CABA tax inside the group is incorrectly included by the query. opw-5468074 Forward-Port-Of: odoo/enterprise#108171 Forward-Port-Of: odoo/enterprise#105888
This update resolves a bug where Odoo would crash when Avatax company credentials were missing. The fix prevents a crash by handling the absence of credentials gracefully within the Avatax integration process. This ensures stability and prevents disruptions to accounting operations.
Original PR description
When `_find_avatax_credentials_company` returns `None`, `_get_avatax_service_params` crashes accessing `.avalara_commit` on it. `_find_avatax_credentials_company` should probably return an empty `res.company` recordset when it cannot find a company, but for stability reasons we won't change the return value and instead fix it locally in `_get_avatax_service_params`. opw-5939708 Forward-Port-Of: odoo/enterprise#108192
This update corrects a display issue in the Timesheet grid view. Previously, hovering over the total overtime cell showed 'Weekly Overtime' instead of the correct 'Total Overtime'. The change ensures accurate overtime reporting across daily, weekly, and monthly views, improving data clarity for users.
Original PR description
### Issue: When displaying the month in the grid view and hovering the bottom right cell, where the total overtime is displayed, it shows "Weekly overtime". ### Steps to reproduce: - Open Timesheet app - In "My Timesheet", display the grid in day or month - Hover the bottom right cell - It displays "Weekly Overtime" ### Solution: Rename it to "Total overtime" to handle all periods (day, week, month). opw-5502864 Forward-Port-Of: odoo/enterprise#108594 Forward-Port-Of: odoo/enterprise#107642
This update aligns the user interface of the Sign Now wizard to provide a more consistent experience, regardless of whether the user initiates a signature request through the 'Sign Now' option or the 'Send Request' option (including self-sign and direct send). This enhances usability and reduces confusion for users.
Original PR description
in this commit i alligned the UI of sign send request wizard to look similar for both cases when the user click sign now and when the user click send request (self sign and send request) Task: 5942397
This update resolves an issue where the Work Entries button in the HR module would crash when an overtime record lacked a 'Stop' setting. The fix ensures the system handles missing 'Stop' data correctly, preventing the error and allowing users to access Work Entries data without interruption. This improves stability and usability.
Original PR description
Clicking the Work Entries smart button raises a traceback when an overtime record has no Stop (time_stop). Steps to reproduce the error: - Install ``hr_work_entry_attendance`` module with demo data -…
Clicking the Work Entries smart button raises a traceback when an overtime record has no Stop (time_stop). Steps to reproduce the error: - Install ``hr_work_entry_attendance`` module with demo data - Activate developer mode - Create an Employee A > Settings > Set Default Ruleset in Overtime Ruleset In Payroll Tab, Work Entry Source: ``Attendances`` and set Contract - Create an overtime attendance > Save > Open the Overtime Details > Unset the ``Stop(time_stop)`` > Save - Open Employee A > Click on Work Entries smart button Traceback: ```py TypeError: '<' not supported between instances of 'bool' and 'datetime.datetime' ``` https://github.com/odoo/enterprise/blob/56c3723a925f718ba39d11cde12933542ebcd7c1/hr_work_entry_attendance/models/hr_version.py#L49-L52 When ``stop(time_stop)`` is unset in the overtime, ``ot.time_stop`` is False, causing ``min()`` to compare a ``datetime`` with ``False``, which raises the above traceback. sentry-7169332615 Forward-Port-Of: odoo/enterprise#108392 Forward-Port-Of: odoo/enterprise#103764
This update corrects a formatting issue in the Eco Voucher export file generated by the payroll module, ensuring it aligns with the requirements of the Monizze system. This resolves a potential problem preventing accurate data transfer and reporting for Belgian employees.
Original PR description
This commit realigns the xlsx header with what's expected by Monizze for the eco voucher export. Forward-Port-Of: odoo/enterprise#108668
This update corrects a display issue in the appointment form where the time fields were being cut off. The changes align the time field format with a recent update, ensuring all time information is fully visible and accurate. This improves the user experience for scheduling appointments.
Original PR description
Purpose ======= Fix the appointment type form view float time fields length to not crop content. Specification ============= Following odoo/odoo#240555 the float time field format has been updated. Adapting all the appointment form view float time fields length to match the new format and not crop the content. Removing useless "hour(s)" suffix as the time representation, whether it's hours or minutes, is now represented inside the field format. Hiding the seconds as it's not relevant for appointments. Task-5717052 Forward-Port-Of: odoo/enterprise#108639
This update resolves a rounding issue that occasionally resulted in incorrect stock quantities being displayed when scanning barcodes in delivery orders. The fix ensures more accurate stock level calculations, improving order fulfillment reliability. This impacts the accuracy of stock tracking within the system.
Original PR description
To reproduce the issue: - Create a stock quantity of product1 for example of 275.84 kg in PACK1 - Create a delivery order of 3.6 kg - Go to the delivery order on stock barcode - Scan PACK1 - The new line is created as 272.2399999999 Forward-Port-Of: odoo/enterprise#108566 Forward-Port-Of: odoo/enterprise#89300
This update resolves a compatibility problem between Odoo's database (PostgreSQL) and its document signing module. Specifically, an error related to database restrictions was triggered in PostgreSQL version 18. The change was triggered by a shift in testing procedures, revealing a previously undetected issue.
Original PR description
pg16 apparently triggers `foreign_key_violation` (23503) on both `ON DELETE NO ACTION` and `ON DELETE RESTRICT`, pg18 triggers `restrict_violation` (23001) on the latter. Not sure about pg17 as I don't feel like installing one locally. Didn't catch this issue previously as I only routinely run `post_install` tests.
This update resolves an issue where manually created payroll rules would cause updates to the standard rules to fail. Now, users can successfully modify rule parameters even after a manual entry has been made, ensuring accurate payroll calculations. This improves the flexibility and reliability of the HR payroll module.
Original PR description
Purpose ======= If an value is created manually for a given date, the module update will fail once the standard one in data is created.
This update resolves an issue where the 'Swiss Wage Type Code' column was incorrectly displayed in the payroll salary rules view, even when a Swiss company wasn't selected. The fix makes this column optional, ensuring it's only added when needed, improving data accuracy and usability.
Original PR description
Bug reproduction: Install l10n_ch_hr_payroll module or swiss payroll, go to payroll -> salary rules and you will see swiss wage type code column even though the swiss company is not selected Bug cause: After installing l10n_ch_hr_payroll module, in the new view this field is inserted to the view and it is not related to which company is selected at the moment Bug solution: Making the field optional so that it is not there by default but optionally it can be added to the view. task - 5914530
This update resolves a technical issue where an outdated initialization process was still being used within the account chart template module. Removing this redundant step ensures the system functions correctly and avoids potential performance impacts. This change improves the stability and efficiency of financial reporting.
Original PR description
Commit #371a800 removes registry._init but there is a remaining occurrence in account_accountant for the chart templates.
This update corrects a minor oversight in the system's invoice matching tolerance settings. The previous version had a hardcoded tolerance value that wasn't updated, leading to potential inaccuracies in bank statement reconciliation. This fix ensures more reliable matching of financial transactions.
Original PR description
During this commit:https://github.com/odoo/enterprise/commit/15d26e62f14bb0224712a1712b47ebe16c3b8702 we forgot to change one part of the hardcoded tolerance. task-5952881 Forward-Port-Of: odoo/enterprise#108377 Forward-Port-Of: odoo/enterprise#108112
This update fixes a technical issue where certain Intrastat codes were incorrectly marked as expired. The codes, referenced in official Belgian documentation, were actually still valid. This ensures accurate reporting for international trade data within Odoo Enterprise.
Original PR description
99450000, 99500000, 99600000 & 99700000 were erroneously expired. They are still active : https://www.nbb.be/doc/dd/onegate/data/intrastat_manual_basis_en.pdf page 13 Forward-Port-Of: odoo/enterprise#108451
This update removes unnecessary URLs from Odoo's tour scripts, streamlining the onboarding process. Previously, these URLs triggered unwanted redirects, wasting user time and resources. The change simplifies the tour setup and ensures a smoother user experience.
Original PR description
The URL key in a tour's JavaScript file implies a redirect to that URL once the browser opens. If this URL is the same as the one used in `start_tour()` (Python), then it serves no purpose. It's even detrimental because it implies a redirect (and therefore a waste of time). The URL key in the JS file is (for now) only used for onboarding tours. This key will be defined later in the .xml file for onboarding tours. That's why we're removing the URL keys from the registries here.