Thursday, May 7, 2026
28 changes · saas-19.2
New functionality added to Odoo
This update aligns Odoo's data with international standards by incorporating the states of Georgia, as defined by ISO 3166-2. The change also improves address formatting to display state names instead of codes, enhancing data clarity and accuracy for users.
Original PR description
Added the states in Georgia to align with official ISO 3166-2 standards. task-6119824 Forward-Port-Of: odoo/odoo#261689
Enhancements to existing features
This update enhances the appearance of online order notifications within the Odoo Enterprise system. Specifically, the notifications now utilize a full-width layout on smaller screens, improving readability and visual appeal. This change ensures a better user experience for customers accessing order information on mobile devices.
Original PR description
In this commit: ------------------- - Use a full-width layout on small screens by removing container padding and improving alignment with `justify-content-between`. task: 6054267 Forward-Port-Of: odoo/enterprise#111614
Resolved issues and error corrections
This update resolves an issue where the Mod 349 report in Spain's tax reporting system incorrectly excluded vendor bills with amounts less than 1 Euro. The fix adjusts a technical setting to ensure these small amounts are properly displayed, improving the accuracy of tax reporting. This ensures compliance and accurate financial data.
Original PR description
Steps to reproduce: - Install l10n_es_reports. - Create a company from France. - Create and post a vendor bill for that company with an amount of 0.12 EUR. - Open the Tax Return report and switch to the Mod 349 report for the current year. - Click the 0.12 EUR amount line. Observed: - The journal items view opens with no records. Cause: - `_get_modelo349_audit_aml_domain()` calls `_custom_modelo349_common()`, which filters lines using: `float_compare(result_dict['value'], 0, precision_rounding=2)` - Using `precision_rounding=2` treats values below 1 as equal to 0, so those lines are excluded from the audit domain. Fix: - Replace `precision_rounding` with `precision_digits=2` so values are only treated as zero when they are effectively below 0.01. opw-6134339 Forward-Port-Of: odoo/enterprise#116102 Forward-Port-Of: odoo/enterprise#114776
This update resolves a bug where the color picker would unexpectedly close when users tried to change the color of icons within the HTML editor. The fix ensures that styling elements like 'font' are properly handled, preventing the toolbar from closing prematurely and allowing users to consistently apply colors to icons.
Original PR description
Problem: Trying to change the color of an icon causes the color picker to close when hovering over colors. Cause: When the icon (`span`) is wrapped inside a `font` element, the `toolbar_namespace_providers` for the icon return `false` because the `font` wrapper was not handled. As a result, the `namespace` becomes `undefined`, which causes the toolbar to close during selection changes. Solution: Handle cases where an icon is wrapped by styling elements (such as `font`) so the correct toolbar namespace is preserved. Steps to reproduce: - Insert a Font Awesome icon using `/media`. - Click on the icon to open the toolbar. - Try to apply a color or background color. - Notice the color picker closes instantly when hovering over colors. task-6109153 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258729
This change corrects a visual issue in the online store where a border appeared around the quantity field for a product offering free shipping. This was caused by a default border style in the Bootstrap framework. The fix removes this border, ensuring a cleaner and more professional shopping experience for customers.
Original PR description
Steps to produce: --- - Install `website_sale` module. - Enable `Discounts, Loyalty & Gift Cards` from settings. - Go to `Website > eCommerce > Loyalty > Discount & Loyalty`. - Create a new program…
Steps to produce: --- - Install `website_sale` module. - Enable `Discounts, Loyalty & Gift Cards` from settings. - Go to `Website > eCommerce > Loyalty > Discount & Loyalty`. - Create a new program and edit the reward to set the reward type to `Free Shipping`. - Create a new product, set its price to 1000, and publish it. - Open the product on the website and add it to the cart > open the cart. Issue: --- - The quantity field for the unsellable product (Free Shipping reward) displays a border in the cart. Root cause: --- - The form-control class is applied to the quantity field at [1]. - This class includes a default border style defined in Bootstrap at [2]. Solution: --- - Apply the Bootstrap utility class `border-0` to remove the border from the quantity field for unsellable products. [1]https://github.com/odoo/odoo/blob/8638dbc21a7a3ebb3c9cc195d2249b4eb5c264ab/addons/website_sale/views/templates.xml#L2901 [2]https://github.com/odoo/odoo/blob/8638dbc21a7a3ebb3c9cc195d2249b4eb5c264ab/addons/web/static/lib/bootstrap/scss/forms/_form-control.scss#L5-L31 Before: --- <img width="822" height="135" alt="image" src="https://github.com/user-attachments/assets/d66c0445-5fd4-45c5-ae81-b4270cab6378" /> After: --- <img width="827" height="132" alt="image" src="https://github.com/user-attachments/assets/9cc2bd65-c542-4d1f-89de-2212fa968c8e" /> opw-6153161 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262883 Forward-Port-Of: odoo/odoo#261275
This update resolves an error that occurred when calculating benefit costs with property fields in employee contracts. Previously, the system couldn't properly handle these fields, leading to a calculation failure. This fix prevents the system from attempting to sum property fields as cost values, ensuring accurate benefit calculations.
Original PR description
**Steps to Reproduce:** 1. Install `hr_contract_salary_payroll` with demo data. 2. Open Employee (e.g; Abigail Peterson) > Payroll tab > Gear Icon > Edit Properties. 3. Add a new property for Payroll…
**Steps to Reproduce:** 1. Install `hr_contract_salary_payroll` with demo data. 2. Open Employee (e.g; Abigail Peterson) > Payroll tab > Gear Icon > Edit Properties. 3. Add a new property for Payroll and fill in the value also. 4. Go to Payroll > Configuration > Benefits. 5. Create a new benefit with: Salary Structure Type: Worker Cost Field: Payroll Properties (Employee Contract) 6. Save the record. Video: https://drive.google.com/file/d/1gHRkDW5G0bURlo9_IRgCnvqpE-8Fk1xa/view?usp=drive_link **Error:** `TypeError - unsupported operand type(s) for +: 'int' and 'Property'` **Cause:** The method `_get_benefits_costs()` directly sums values using: ``` self[benefit.cost_field] ``` When the selected cost field is a property field, it returns a **fields_properties.Property** object instead of a numeric value, and this object is not directly compatible with the arithmetic sum operation. Before 19.0, property fields were not allowed to be selected as a cost field - [1]. **Fix:** This commit prevents selecting property fields as cost fields from the list of supported field types. [1] : https://github.com/odoo/enterprise/blob/04224abcc7eec1c81df7ad57a9213fd091774888/hr_contract_salary/models/hr_version.py#L183 sentry-7388663038 Forward-Port-Of: odoo/enterprise#113238
This update corrects a problem with the Intrastat CSV export report in the Netherlands. The fix addresses an incorrect data format for 'Commodity flow' and ensures the database is up-to-date before generating the report, preventing inaccurate export data.
Original PR description
Since the technical refactoring of intrastat in 18.0, the csv export in `l10n_nl_intrastat` seems broken. Here is the fixes done in this commit: 1. `Commodity flow` is supposed to be a single diggit (6 or 7) but an empty blank space was hidden. 2. Switching the condition on `country_origin_code` as it was the opposite 3. Add a `flush_all` before calling the report during the export, to be sure the database is up to date. opw-5799126 Forward-Port-Of: odoo/enterprise#116230 Forward-Port-Of: odoo/enterprise#115791
This update resolves an issue where the AI systray button in the Odoo interface had excessive padding. The code was simplified to remove unnecessary styling rules already defined elsewhere, improving the button's visual appearance and overall user experience. This change ensures a cleaner and more consistent look for users.
Original PR description
Remove the `btn` class because it adds additional padding, and eliminate the other unnecessary classes since the rules have already been applied in the `navbar.scss` file. task-5079952 Forward-Port-Of: odoo/enterprise#116423
This update corrects a build error within the Odoo AE (l10n_ae_faf) module related to a dependency issue. By adjusting the view's location, the update eliminates the need for a problematic, automatically installed module, ensuring smoother operation.
Original PR description
the inherited tax view form was raising an error since ubl_cii_tax_category_code is in the view under the module account_edi_ubl_cii and this module is not in the resolved dependencies of l10n_ae_faf but is usually autoinstalled. to fix this we are changing the xpath to be something that doesn't need the dependency of the account_edi_ubl_cii but only account. runbot-239123 Forward-Port-Of: odoo/enterprise#116163
This update fixes an issue where the undo function in the HTML editor would sometimes restore the selection to the wrong position. By staging the selection before deletion, the undo operation now correctly restores the user's previous editing state, ensuring a smoother and more reliable editing experience. This improves overall usability and reduces frustration for users.
Original PR description
Problem: In some cases, undo restores the selection to an incorrect position. Cause: The selection state was not staged before the deletion started, leading to an inconsistent selection being restored during undo. Solution: Stage the selection before performing the deletion to ensure it can be restored to the correct position. Steps to reproduce: - Go to To-Do → Create New. - Type something on the first line and press Enter. - Type something on the second line and apply styling to it. - Use the Up arrow key to move to the first line. - Remove a character. - Press Undo (Ctrl + Z). - Observe that the selection and toolbar appear on the second line. task-6142055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262896 Forward-Port-Of: odoo/odoo#260630
This update resolves an issue where the power button test in the HTML editor was unreliable due to timing inconsistencies. The fix ensures the test consistently triggers, preventing potential delays or failures in the runbot process. This improves the stability and reliability of the HTML editor's testing.
Original PR description
The previous fix [1] removed one animation frame too many because the first one after arow down is needed in order to trigger the hiding of the power buttons in the first place, otherwise the timer can have elapsed without an animation frame when the runbot is slow. Then, for the other ones, the animation frame must not be awaited, otherwise we risk having an animation frame when the runbot waited more than the debouce delay, as explained in [1]. runbot-242466 [1]: https://github.com/odoo/odoo/pull/259654 Forward-Port-Of: odoo/odoo#262929 Forward-Port-Of: odoo/odoo#262679
This update fixes an issue where long translated labels in product category forms (like 'Reserve Packagings') would overlap other fields on narrow screens. The fix allows radio labels to wrap correctly, improving the overall usability and visual appearance of configuration forms, particularly for users with translated data.
Original PR description
Steps to reproduce: - Go to Accounting > Configuration > Product Categories - Open the "Goods" category in a narrow enough form layout - Check the "Reserve Packagings" radio field in Ukrainian #### Issue: In configuration forms, `.o_form_label` is forced to `white-space: nowrap`. Since radio option labels also use `.o_form_label`, long translated labels cannot wrap and can overlap the neighboring valuation field area. #### Fix: Exclude `.form-check-label` from that rule so radio labels can wrap without changing the behavior of regular form labels. opw-6086700 <img width="1872" height="966" alt="image" src="https://github.com/user-attachments/assets/db5e5803-b5e7-4904-a036-8bdfbb5504fc" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261284
A recent issue causing errors when deleting images within the HTML editor has been fixed. This update ensures the editor functions reliably, preventing disruptions to users' ability to format and manage content. The fix corrects a logic error related to image element identification during deletion.
Original PR description
Steps to Reproduce: - Go to the website - Add an image and set it to center alignment - Copy the image - Paste it into a To-Do note - Replace the image - Click the Delete button Description of the issue: - A traceback error occurs when deleting the image after replacement. Cause: - When an image has display: block, the closestBlock function returns the image element itself as the closest block. However, this causes an issue, After the image is deleted, fillEmpty is called on this closestBlock, which refers to an image that has already been removed from the dom resulting in a traceback. Solution: - Instead of finding the image's closestBlock directly, find the closestBlock of its parent element. - This ensures the correct block is found even when the image has display:block. task-6171827 Forward-Port-Of: odoo/odoo#262217
This update corrects a setting for Thai (l10n_th) taxes. By default, WHT taxes no longer create closing entries, aligning with how these taxes are handled through separate payable accounts. This ensures accurate accounting for WHT transactions.
Original PR description
Set tax closing entry to False by default for WHT taxes, as WHT uses separate payable accounts and does not require closing entries. task-6146195 Forward-Port-Of: odoo/odoo#262469 Forward-Port-Of: odoo/odoo#262464
This update fixes a visual issue in the Timesheets section of the project shared form. Previously, the Time Remaining value wasn't highlighted in red when the amount was negative. This change ensures that negative time remaining values are clearly indicated, improving clarity and accuracy for users.
Original PR description
**Steps to reproduce:** - Open project shared form view. - Go to the Timesheets tab. - Observe the Time Remaining value. **Issue:** - The Time Remaining label is red properly but its value does not becomes red even when the value is negative. **Fix:** - Adjusted the logic to ensure the Time Remaining value is highlighted in red when value is negative **Task-id: 5404009** Forward-Port-Of: odoo/odoo#260996 Forward-Port-Of: odoo/odoo#240489
This update corrects a visual inconsistency in the project timesheet interface. Previously, the 'Time Remaining' value wasn't highlighted in red when the time was negative, leading to a confusing display. The fix ensures that negative time values are correctly indicated with a red color, improving clarity and usability.
Original PR description
**Steps to reproduce:** - Open project shared form view. - Go to the Timesheets tab. - Observe the Time Remaining value. **Issue:** - The Time Remaining label is red properly but its value does not becomes red even when the value is negative. **Fix:** In hr_timesheet, the remaining_hours field has a decoration-danger applied In sale_timesheet_enterprise, this field is overridden as portal_remaining_hours So, Added the corresponding decoration-danger on portal_remaining_hours. task-5404009 Forward-Port-Of: odoo/enterprise#114836 Forward-Port-Of: odoo/enterprise#113632
This update fixes a minor calculation error related to the reversal of Quebec Sales Tax (QST) in the Swiss payroll module. The change ensures accurate tax reporting, aligning with Swiss tax regulations and improving the reliability of payroll data. This update was implemented as a correction following a previous enhancement.
Original PR description
opw 6133391 Fix for the source tax correction following PR #114463 Forward-Port-Of: odoo/enterprise#115585
This update fixes an issue preventing non-HR users from modifying their work location within the calendar settings. The change restores the ability for employees to update this information, resolving a previous restriction caused by a code update. This ensures employees can accurately reflect their work locations within the system.
Original PR description
**Steps to reproduce** - Have a user without HR rights and linked to an employee - With this user, open Preferences and in the calendar tab and try to change the work location for one of the days - Error: You do not have enough rights to access the field "version_id" on Employee (hr.employee). **Cause** Issue after 72ac4b03657d617644ae75f2957aaec7acf6c1a8 which removed SELF_READABLE_FIELDS and SELF_WRITEABLE_FIELDS. **Change** Use the `field_employee` function introduced in 9605045313953b4c8c734c0d52e8032e3c36bf3a (commit message contains the explanation as to why it is necessary for fields coming from the employee model). opw-6127522 Forward-Port-Of: odoo/odoo#260394
This update corrects an issue where free services linked to FSM tasks were not appearing on invoices due to a technical setting. The change ensures that prepaid invoice services associated with FSM tasks now correctly appear on invoices, resolving a previous error that prevented proper invoicing. This improves the accuracy of service billing.
Original PR description
Changed _compute_qty_to_invoice in industry_fsm_sale, SaleOrderLine to no longer set qty_to_invoice to 0 for free services with prepaid invoicing. Previous changes seem intended for goods. Steps to reproduce: - Create service product with 0 price, prepaid invoice policy, creates FSM task - Create/Confirm sales order with created product - Attempt to create invoice, get 0 quantity to invoice error Current Behavior: Free services linked to FSM tasks do not appear on invoices due to compute 0 qty_to_invoice Expected Behavior: Prepaid Invoice Services linked to FSM tasks appear on invoices. Other invoice policies can be invoiced through the generated sales order lines (timesheets, delivered quantity, etc.) opw-6047992 Forward-Port-Of: odoo/enterprise#116413 Forward-Port-Of: odoo/enterprise#113718
This update corrects a technical issue where a duplicate email snippet was introduced. The commit removes this redundant template, ensuring consistent email formatting and preventing potential errors in mass mailing campaigns. This change improves the reliability of our email communications.
Original PR description
A duplicated snippet template was introduced in a prior [commit], and is removed through this commit. [commit]: https://github.com/odoo/odoo/commit/81e43a8dd70ffa2746740f7bd5904007e76d2260 task-5959046 Forward-Port-Of: odoo/odoo#262980
This update resolves an issue where tracking monetary properties within Odoo wasn't correctly handling currency information, leading to errors. The fix ensures that currency fields are properly associated with tracking values, improving the reliability of financial data tracking. This enhances the accuracy of reports and processes related to money.
Original PR description
`_create_tracking_values_property` was missing `currency_field` in `col_info` when processing monetary-type properties, causing a traceback. Fixed by injecting it from the property definition dict. task-6175845 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#262353
This update fixes an issue where multiple signed documents with the same subject were not being correctly downloaded into a single zip file. The change ensures that all documents with identical subjects are included in the download, resolving a potential data loss scenario. This improves the reliability of the Sign app's document management.
Original PR description
## Issue In the *Sign* app, when attempting to download multiple documents with similar subjects, only one document appears in the resulting zip file. ## Steps to reproduce 1. Install *Sign* (`sign`)…
## Issue
In the *Sign* app, when attempting to download multiple documents with similar subjects, only one document appears in the resulting zip file.
## Steps to reproduce
1. Install *Sign* (`sign`)
2. Sign a same template twice, using the same subject S1. This gives us Documents D1 an D2.
3. (Optionally), sign the same template a third time, using a different subject S2, creating document D3.
4. In Sign > Documents, select the 2 (3) signed documents and click *Download*.
5. **In the resulting zip file, there's one folder S1 containing a single pdf document (D1) (and one folder S2 containing D3). Document D2 is missing from the zip file.**
## Cause
When generating the zip file, the path used for each document is `{subject}/{doc_name}`.
https://github.com/odoo/enterprise/blob/863abc99469c12acdebcab05788d566c370bb46f/sign/controllers/main.py#L276-L286
Neither of this attribute are unique, which means that two signed documents with the same name and subject can be downloaded simultaneously, but will then overwrite each other.
## Fix
Before version 18.3, the zip file would contain folders named with the (unique) request id, which would consistently make them distinct from one another. This behavior was changed by https://github.com/odoo/enterprise/commit/4254542e8fb4ce3b2b9b46c624d86f7fcac8df7b to use the `sign_request.subject` instead. This commit adds the `request.id` after the subject to keep the clarity of the subject, and add the uniqueness of the id.
opw-6143128
Forward-Port-Of: odoo/enterprise#116179
Forward-Port-Of: odoo/enterprise#116013This update prevents errors that occurred when loading paid orders with loyalty cards whose programs had been deactivated. Previously, the system would fail to open the partner list, causing a disruption in the sales process. This fix ensures smooth operation for all loyalty card transactions.
Original PR description
Before this commit, when loading a paid order with a loyalty card that its program had been archived, an error was raised when opening the partner list due to the missing program. opw-6166079 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261501
This update fixes a misleading notification that appeared when users discarded a reply composer in the History view. Previously, the system incorrectly triggered a 'Message posted' notification even when no message was actually sent. The change ensures notifications are now only displayed when a message is truly sent, improving the clarity and accuracy of the system.
Original PR description
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When replying to messages from the History (Inbox) view, opening the full composer and…
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When replying to messages from the History (Inbox) view, opening the full composer and discarding it could incorrectly trigger a toast notification indicating that a message was posted. This behavior is misleading, as no message is actually sent when the composer is discarded. **Current behavior before PR:** ---------------------------------------------- - Replying to a message from History opens the full composer - Discarding the full composer closes the dialog normally - A “Message posted” toast is shown even though no message was sent - Notification logic depends on dialog close behavior, leading to incorrect triggers **Desired behavior after PR is merged:** ---------------------------------------------- - Discarding the full composer does not show any notification - Notifications are only shown when a message is actually sent Task-5431682 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262004 Forward-Port-Of: odoo/odoo#241705
This update removes unnecessary complexity in how Odoo handles electronic invoices from Belgium (BE). Previously, the system was switching between different invoice formats, which is no longer needed as the standard 0208 format is now used. This simplifies the process and improves efficiency.
Original PR description
When adding peppol, we didn't know if we needed to use the 9925:BE or 0208. Therefore, we switched between them if the endpoint was not found. This has no more use today as we use 0208. opw-5976574 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261307 Forward-Port-Of: odoo/odoo#258297
This update fixes a limitation in how Odoo Enterprise updates its UNSPSC product codes. Previously, new codes could only be added during initial module installation. Now, an upgrade script automatically adds any new UNSPSC codes to the database, ensuring the system remains current with industry standards. Existing codes are not modified.
Original PR description
**Problem:** Periodically, the UNSPSC codes may be updated and they must be added to existing databases. Normally this is done by module update, however, since there are thousands of UNSPSC codes, a CSV imported via SQL is used instead of XML files. This import is only implemented on module install and not module update, so there is no way to update the UNSPSC codes in existing databases. **Solution:** An upgrade script based on the post-init hook has been added, which will add the new codes to the database, if any. Note that: - The version of this upgrade script should be bumped any time the codes list is updated. - Existing records will not be updated opw-5943366 Forward-Port-Of: odoo/enterprise#116063 Forward-Port-Of: odoo/enterprise#112652
This update eliminates a misleading warning message that appeared when sequences didn't begin with the number 1. Sequences can legitimately start at any number, and this change ensures users aren't unnecessarily alerted to a standard configuration. It improves the user experience by removing irrelevant notifications.
Original PR description
We don't want to warn users about their sequence not starting at 1 as it is a perfectly valid case. This removes the warning both in the list view and in the dashboard. task-5253768 Forward-Port-Of: odoo/odoo#263117 Forward-Port-Of: odoo/odoo#235117
This update corrects a visual issue where the 'Time Remaining' value in task timesheets was incorrectly highlighted in red, even with positive values. The fix ensures accurate color display based on the actual time remaining, improving the clarity and usability of the timesheet feature. It also addresses alignment problems with time remaining data on sales orders.
Original PR description
_* = sale_timesheet **Steps to reproduce:** - Open form view of any task. - Go to the Timesheets tab. - Observe the Time Remaining value. - Observe the Time remaining on SO. **Issue:** - The Time Remaining value becomes red even when the value is positive, which incorrectly suggests a warning. - The Time remaining on SO is not properly aligned. **Issue from :** - https://github.com/odoo/odoo/pull/192366 **Fix:** - Adjusted the logic to ensure the Time Remaining value is highlighted in red only when the value is negative. - Positive values now display with normal styling. - Adjusted the logic to ensure Time remaining on SO is displayed properly. **Task-id: 5404009** Forward-Port-Of: odoo/odoo#239610