Wednesday, April 29, 2026
30 changes · saas-19.3
Enhancements to existing features
This update simplifies the URLs used to access spreadsheets within Odoo. The previous URLs included a lengthy `sheet_id` parameter, which has been replaced with the shorter `sid` parameter. This change improves URL readability and maintainability.
Original PR description
Current behavior before PR: - The URL used the `sheet_id` parameter, which was unnecessarily long. Desired behavior after PR is merged: - Replace `sheet_id` with `sid` to make the URL more concise and readable. Task: [6171969](https://www.odoo.com/odoo/project.task/6171969) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies the URLs used to access spreadsheets within the Odoo Enterprise platform. The previous URLs included a lengthy `sheet_id` parameter, which has been replaced with the shorter `sid` parameter. This change improves URL readability and maintainability.
Original PR description
Current behavior before PR: - The URL used the `sheet_id` parameter, which was unnecessarily long. Desired behavior after PR is merged: - Replace `sheet_id` with `sid` to make the URL more concise and readable. Task: [6171969](https://www.odoo.com/odoo/project.task/6171969)
This update simplifies the asset depreciation views in Odoo Enterprise, making them easier to use. Redundant information has been removed, and the search functionality has been streamlined to focus on key depreciation settings. A default 'Active' filter has been added for clarity.
Original PR description
Simplify the asset depreciation views by removing redundant information and improving usability. The method column is removed from the assets list since it is already included in the depreciation model name. The depreciation model list is cleaned up to show only the model by default, while filters for method, period, and number of depreciations remain available in the search view. A default Active filter is also added to display only active records. task-6128781 Forward-Port-Of: odoo/enterprise#114419
Resolved issues and error corrections
This update ensures that when a company is quickly created through a partner record in the equity module, the system correctly identifies it as a company. Previously, this wasn't happening, leading to incorrect data. The update also includes a minor fix for a typo in view definitions.
Original PR description
The partner_id field on all equity models represents a company. Therefore, quick-creating a partner_id should create it with is_company set to True. However, that wasn't the case. This commit fixes this issue by making sure that partner_id when quick-created in equity models has is_company set to True. It also fixes a typo in the string attribute of valuation list and form views. task-6132343 Forward-Port-Of: odoo/enterprise#114375
This update fixes an issue where the system incorrectly determined if an Italian VAT-registered company was recognized. The previous logic only checked for a 11-character Codice Fiscale, failing to correctly identify companies with longer, country-prefixed codes. This change ensures accurate company status determination based on the CF, preventing incorrect partner classifications.
Original PR description
Since 5d3c73ffd0ad ("derive company status from Codice Fiscale format") is_company is True only when the CF (Codice Fiscale) is exactly 11 chars.
Two issues:
- No @api.depends on l10n_it_codice_fiscale, so editing the CF alone leaves is_company inchanged.
- A country-prefixed CF like "IT14475210960" is 13 chars and silently downgrades the partner to a natural person.
Steps to reproduce:
- On an Italian company partner, set:
VAT = IT14475210960
Codice Fiscale = MRTMTT91D08F205J
- Change the CF to IT11122244544, it will be saved but is_company will
remain False, which is wrong.
opw-6129645
Forward-Port-Of: odoo/odoo#261702This update resolves a bug where basic receipts were incorrectly generated in the Point of Sale chatter, even when the feature wasn't enabled. It now ensures basic receipts are only created when the option is specifically selected, preventing duplicate receipt images and streamlining the user experience.
Original PR description
Before this commit: =================== - Basic receipt was generated even when the option was not selected. - Both basic and full receipt images could be generated simultaneously. After this commit: ================== - Basic receipt is generated in chatter only when the option is enabled. - Prevents simultaneous generation of both basic and full receipt images. Task - 6126775 Forward-Port-Of: odoo/odoo#260555
This update addresses a visual flicker and occasional failure to apply lists when using the chatter composer. The fix prevents unnecessary processing triggered by a 'blur' event, ensuring lists are consistently applied smoothly. This improves the user experience when formatting text within the chatter.
Original PR description
Problem: When the chatter is open and text is selected, applying a list from the toolbar causes a flicker, and the list is sometimes not applied on the first attempt. Cause: Opening the list dropdown triggers a `blur` event on the `html_editor` field, which calls `getInlinedEditorContent` and duplicates the DOM to perform inlining. This unnecessary processing causes the visual flicker and may interrupt the list application. Solution: Prevent the field from blurring when selecting a list alignment option from the toolbar. Steps to reproduce: - Open a new record. - Open the composer. - Add text and select it. - Apply a list using the toolbar. - Observe that sometimes the list is not applied on the first try and the content briefly flickers. opw-6153261 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261476
This update resolves an issue in the Bangladesh localization where an unnecessary expense account was being linked to inventory valuations. Removing this link ensures that inventory accounting aligns with standard Bangladesh practices, preventing unexpected stock variations and improving accuracy.
Original PR description
Issue: The Bangladesh chart template sets account_stock_expense_id on the inventory valuation account. This triggers Stock Variation entries following perpetual continental behavior, which is not expected for Bangladesh localization. Cause: l10n_bd template data explicitly populated `account_stock_expense_id` for account `l10n_bd_100502`. Solution: Remove `account_stock_expense_id` from the Bangladesh account template mapping. opw-5944874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261311
This update fixes an issue where users needed to manually pair Bluetooth devices with their IoT Boxes. The fix addresses a technical problem where the device was forcibly disconnecting Bluetooth connections and failing to register the necessary pairing agent. Now, supported Bluetooth devices automatically connect when they are within range of the IoT Box.
Original PR description
According to the IoT Box documentation written in 10/2019, supported Bluetooth devices should connect automatically whenever they are in range of the IoT Box: https://github.com/odoo/documentation/commit/16f2f26f8ae6d9040195c854da337e0dcbbff955#diff-b5974750d9a7f12db80e4922399a7cacd26228dec979ca0fbb504faac386efc8R27 This behavior had broken at some point, requiring manual pairing via bluetoothctl on the IoT Box to establish a connection. Root causes identified and fixed: - The interface was forcibly disconnecting all already-connected BLE devices at startup, kicking them mid-GATT handshake - No BlueZ pairing agent was registered, causing AuthenticationFailed during the pairing negotiation Automatic connection on proximity is now restored. opw-5473691 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259885
A recent change to the Viva payment system in the POS was causing cancellations to fail. This update corrects a technical issue where the cancellation process didn't match the original payment setup, resulting in an error message. Now, cancellations from the POS will function correctly.
Original PR description
Steps to reproduce: 1. Start a Viva payment from the POS 2. Cancel the payment from the POS (not on the terminal) **Expected behaviour:** Payment cancels successfully **Actual behaviour:** Error message "Only cash register that created the transaction can abort it". The fix is to use the same cash register ID in both the payment and the cancellation transactions. The payment cash register ID was originally changed to ensure payments would work in the kiosk, but the cancellation cash register ID was never updated. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261725
This update corrects a bug in the payroll system's calculation of full-time equivalent (FTE) hours. Previously, if an employee worked 0 hours, the FTE calculation was incorrect. This change ensures accurate FTE reporting for all employees, regardless of their worked hours.
Original PR description
Before this commit, the full-time equivalent compute was not taking into account the fact that the total worked hours could be 0.
This update resolves a bug preventing users from correctly setting up Worldline and Axepta payment terminals through the quick setup process. The issue stemmed from an incorrect value being used, which is now corrected to ensure both providers function properly. The update also streamlines the logo images for better consistency.
Original PR description
In odoo/odoo#230817, the Ingenico protocol was removed and merged with worldline (since the terminals support the same protocol). However, one issue from this merge is that in the payment terminal…
In odoo/odoo#230817, the Ingenico protocol was removed and merged with worldline (since the terminals support the same protocol). However, one issue from this merge is that in the payment terminal provider cards, which allow quickly setting up a payment terminal by selecting the brand, the Worldline and Axepta options were both not working. The reason for this is that the `use_payment_terminal` field would be set to `axepta_bnpp`, which isn't a valid value and is only used for the name of the logo image. This commit changes the following: - The Worldline and Axepta BNPP cards now both correctly set `worldline` as the payment provider. - The name of the payment method is now set to either 'Worldine' or 'Axepta BNP Paribas' depending on which card is selected. - The logos for Worldline and BNP Paribas have been combined into one image, reflecting the fact that they are a single selection. The alternative would be to add new logic with a separate image path for these providers, which seemed like overkill for this edge case. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261709
A recent update caused newly added overtime lines on attendance records to disappear. This fix disables the ability to add new overtime lines, resolving the synchronization problem and preventing data loss. This ensures accurate work entry tracking.
Original PR description
Steps to reproduce: - On an attendance with overtime, click the "Add a line" button and add a new overtime line - Refresh the page - The newly added line has disappeared and navigating to work entries causes a traceback How it was fixed: Disabled the ability to add a new overtime line. Task ID: 5899657 Forward-Port-Of: odoo/odoo#261540 Forward-Port-Of: odoo/odoo#248431
This update resolves an issue where the 'Create a Payslip' button was unresponsive when no payslips existed in the system. The fix corrects a technical error related to how the button's functionality was triggered, ensuring it now functions as expected. This improves the user experience when initiating new payroll processes.
Original PR description
1.Install l10n_us_hr_payroll 2 Navigate to Payroll>Reporting>W2 Report. 3.Open/Create W2 form and try to add payslip by clicking "Add a line". 4."Create a payslip" button appears if their are no valid payslips. 5.Click it, it won't work! Root cause: - `onAdd` bind was missing in the controller - Renderer applied an additional `.bind(...)`, breaking the callback Fix: - Pass a dedicated `createNewPayslip` action from controller - Remove double binding in renderer - Forward callback directly to helper component task-[5928770](https://www.odoo.com/odoo/project/1251/tasks/5928770) Forward-Port-Of: odoo/enterprise#114101 Forward-Port-Of: odoo/enterprise#111735
This update corrects a technical issue where styling applied to list views was incorrectly affecting other views within the account reports module. The fix ensures that styling is applied only to the intended list views, improving the consistency and appearance of reports. This resolves a minor visual inconsistency.
Original PR description
The css selector used to add the small border at the start of the line. So it end-up being applied in other view as well. task-6141685 Forward-Port-Of: odoo/enterprise#114903
This update fixes an issue where the product description text area on iOS devices (specifically with Safari) would jump unexpectedly when typing. The root cause was a miscalculation of scroll height within the application's design. This change ensures a smoother and more reliable experience for users adding product descriptions in invoices.
Original PR description
Steps to reproduce ================== - Use an iPad device - Go to accounting - Sales > New - Add the product column in the invoices lines - Add a new line - Select a product - Add a description - press enter a bunch of times => the cursor will end up beneath the virtual keyboard - enter a letter => the textarea jumps above Cause of the issue ================== With Safari, setting a size on the widget root causes the scrollheight to be miscalculated. It doesn't take into account the last empty lines of the textarea. Solution ======== There is actually no need to set an height on the widget root node. opw-5927775 Forward-Port-Of: odoo/odoo#259855
Previously, changes to a customer's activity (like notes or tasks) weren't consistently reflected across all views within Odoo. This update corrects a technical error that prevented this synchronization, ensuring all users see the most up-to-date activity information. This improves collaboration and data accuracy.
Original PR description
Since [1], the activity state, which is supposed to be shared accross tab through a broadcast channel, isn't anymore. This PR fixes the responsible typo. [1]: #161286 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259810 Forward-Port-Of: odoo/odoo#255785
This pull request addresses an issue with tests related to Mexican electronic invoicing (l10n_mx_edi). It reverts a previous change that introduced errors in how rounding was being tested, ensuring accurate calculations for invoices. This fix improves the reliability of the l10n_mx_edi module.
Original PR description
This reverts commit 50ad147e1f579a094141f6f126e02f75ecc62ab3. Forward-Port-Of: odoo/enterprise#115611
This update corrects a bug in the employee leave calculation process. Previously, leave time-offs were incorrectly recomputed whenever an employee's version changed, leading to inaccurate data. The fix ensures leave time-offs are calculated based on the correct date range, resolving this issue.
Original PR description
The employee_type_id, job_id and structure_type_id fields on hr.leave were stored related fields pointing to current_version_id. This caused all time offs to be recomputed whenever the employee's current version changed, and stored the current version's values instead of those active at the time of the leave. Replace the related fields with a compute based on date_from, resolving the version active at the leave's start date. task-6175086
This update corrects typos and standardizes wording within the French reporting module (l10n_fr_reports). These changes ensure greater accuracy and consistency in French-language reports, improving the overall user experience for French-speaking customers and internal teams.
Original PR description
Fixes typos and ensures wording consistency No task ID
This update fixes a visual issue in the invoice report by adding spacing between the Source Invoice and Reference fields. Previously, long invoice names would overlap, making the report difficult to read. This change ensures a cleaner, more professional presentation of invoice data.
Original PR description
Before this commit: - When the Source Invoice name is too long, it connect with the Reference field due to missing spacing. After this commit: - Added margin (`me-3`) to the Source Invoice block to ensure proper spacing and avoid overlap with the Reference field. task-6074560 | Before | After | |--------|--------| | <img width="801" height="474" alt="image" src="https://github.com/user-attachments/assets/cbef48f8-c37b-4263-8c6f-a6b0de3716b9" /> | <img width="780" height="462" alt="image" src="https://github.com/user-attachments/assets/fa01e0b5-d877-424f-a51f-8da0ce5a6bd5" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256641
This update resolves visual inconsistencies and usability problems within the employee salary management module after a recent change related to benefit configurations. The fix ensures a smoother and more intuitive experience for HR staff when managing employee compensation details. This improves overall efficiency and reduces potential errors.
Original PR description
Task: 6141770
This update adds thorough tests for the new customer rating feature introduced in odoo/enterprise#109696. The tests ensure that rating emails are only sent when appropriate (slot completion or report signing) and that the rating process itself functions correctly. This enhances the reliability and accuracy of customer feedback collection.
Original PR description
This commit adds tests for the customer ratings flow introduced in odoo/enterprise#109696. Specifically, it checks that the customer rating request email is only sent upon completing the slot, or after signing the customer report. It also tests the rating itself. task-6147846
This update prevents portal users from seeing the 'View Timesheets' button on invoices when they lack the necessary permissions. Previously, the system incorrectly displayed the button based on the presence of timesheets linked to the sale order. This fix ensures users only see timesheets they are authorized to view, improving data security and user experience.
Original PR description
sale: add sale order specific hook to extend page values ------ Allows adding custom data (e.g., timesheets) without overriding generic _get_page_view_values sale_timesheet: hide 'View Timesheets'…
sale: add sale order specific hook to extend page values
------
Allows adding custom data (e.g., timesheets) without overriding generic _get_page_view_values
sale_timesheet: hide 'View Timesheets' button for users without access
-------
Steps to Reproduce:
-----------------
- Create a product with the invoice policy set to Based on Timesheets
- Enable Project and Tasks on the order.
- Create and confirm a sale order using a portal user.
- Log timesheets on the related task.
- Create an invoice from the sale order.
- Log in as the portal user and open the invoice.
- Click the 'View Timesheets' button.
Issue:
-------------
The 'View Timesheets' button is shown to the portal user even though they don’t have access to view timesheets.
Root Cause:
------------
The timesheets are linked to the sale order, so the button appears based on the timesheet_count, but the portal user does not actually have permission to access those timesheets.
Fix:
-----------
We replaced the timesheet_count check with a check that verifies whether the user actually has access to any of the related timesheets.
task-4745519
Forward-Port-Of: odoo/odoo#261859
Forward-Port-Of: odoo/odoo#209552This update resolves a bug where portal users were incorrectly seeing the 'View Timesheets' button, even without the necessary permissions. The fix involved updating a helper method to ensure users only see this button when they have the appropriate access rights. This improves the user experience and prevents unauthorized access.
Original PR description
**Issue:** The 'View Timesheets' button is shown to the portal user even though they don’t have access to view timesheets. Currently, we have added _sale_order_get_page_view_values in the sale module, which is overridden in sale_timesheet. We are using it here. task-4745519 Forward-Port-Of: odoo/enterprise#115533 Forward-Port-Of: odoo/enterprise#113481
This update corrects a technical issue where quotation templates created from tasks were incorrectly assigning task IDs to non-product lines (like notes). This prevented proper task completion and could lead to errors. The change ensures that task IDs are only applied to product lines, improving the reliability of task management within quotations.
Original PR description
When a sales order is created from a task, if a template is used, the first line is given a task ID from the context's default_task_id. If this first line were to be a non-product line (section/note), this would still be given a task_id. This is unneeded and can cause issues such as a float precision error when trying to mark the task as done. This change checks to see if the line has a display_type, in which case it will set the task_id to false. Steps to reproduce: 1. Create a new Quotation Template with a single section line 2. Create a new project 3. Open the project settings 4. Enable 'Billable' and 'Extra Quotations' 5. Create a new task 6. Select 'New Quotation' 7. Select the quotation template with just a section 8. Enter customer (to allow saving) 9. There will be a single order line, a section, with a task_id opw-6122235 Forward-Port-Of: odoo/odoo#261298
This update makes the timesheet assistant view more user-friendly by implementing small adjustments for better clarity. These changes enhance the overall experience for users managing their timesheets within the Odoo Enterprise system.
Original PR description
Improve the assistant view with small adjustments to enhance clarity and user‑friendliness. Forward-Port-Of: odoo/enterprise#115288 Forward-Port-Of: odoo/enterprise#114339
This update resolves a bug that prevented the cumulated balance from being correctly calculated when using journal groups in the general ledger. The fix ensures that the system properly handles scenarios where all journals are selected via the filter, leading to accurate balance reporting.
Original PR description
Usually the journal filters doesn't allow the selection of all journals when no journal group is present. However, when a journal group is added, the journal filters allow the selection of all the journal groups to be valid. So, we end up with a filter Journals, with all journals selected but the cumulated balance is not computed. To fix this, if all the journals are selected in the Journals filter, we dont add the journal_ids filter. Step to reproduce: - On any journal, create a journal group - Go to the general ledger - In the Journals filter select "Local Gapp" and the created journal group - Click the journal items button on the line of any account - The cumulated balance will be at 0 even when all the journals are selected. Forward-Port-Of: odoo/enterprise#112943
This update resolves a visual issue where the 'is typing' indicator icon was misaligned in Safari browsers. The fix avoids complex animation techniques within Safari, preventing a technical problem related to CSS rules and `foreignObject`. This ensures consistent display of the typing indicator across all browsers.
Original PR description
Before this commit, "is typing" icon in Safari browser was misplaced with relative to Discuss Avatar image. This happens due to a bug in Safari that affects `foreignObject` with elements that use…
Before this commit, "is typing" icon in Safari browser was misplaced with relative to Discuss Avatar image. This happens due to a bug in Safari that affects `foreignObject` with elements that use some CSS rules, like `opacity`. A prior fix was done to apply on change of opacity with classnames [1], which fixed "offline" icon but is typing still has issues: - change of opacity doesn't use classname, this is coupled to animation frame in CSS - the "is typing" icon uses `filter` and `transform`, both of which are also a problem This commit fixes the issue by not using icon animation for Safari browsers. The rules were mostly used for the animation, and while it's feasible to support the visual in Safari, this would mean a lot of code gymnastic that is not worth supporting this nice-to-have visual. To give an idea of implementation: this would mean a `<g>` for each dot of the typing icon that requires deep integration of `Typing` and `DiscussAvatar` icons, and we should make sure that the styles are applied on the `<g>`. Also a `filter` was used to give better contrast of the typing dot and the green background, notably in dark theme. This is also removed by this commit specifically in Safari, as the technique uses `filter` which causes the bug in Safari. [1]: https://github.com/odoo/odoo/pull/260341 Task-6173311 Before / After <img width="630" height="296" alt="before" src="https://github.com/user-attachments/assets/e600a162-93be-4c11-b5bb-371c01eed773" /> <img width="630" height="298" alt="after" src="https://github.com/user-attachments/assets/36be873a-d24b-49b5-bf1e-e5e462491bde" /> Forward-Port-Of: odoo/odoo#261837
This update corrects a bug in the holiday calculation process. Previously, the system incorrectly used contract start dates instead of version dates, leading to unnecessary recalculations. This change ensures holiday calculations are accurate and efficient, especially when dealing with multiple contract versions.
Original PR description
Currently if we have 2 versions on the same contract dates, we check leaves from the contract_start_date, instead of the version date. Meaning if we only have versions on 1 contract date, we will recalculate ALL the leaves all the time. This should not be the case. Forward-Port-Of: odoo/odoo#261963