Thursday, May 7, 2026
28 changes · saas-19.3
New functionality added to Odoo
This update introduces a new VAT provision account (411800) in the Odoo accounting module for Belgium, aligning with new regulations. Starting May 1st, businesses will need to use this account for their periodic VAT returns instead of the previous account. This change ensures compliance with Belgian tax law.
Original PR description
Starting May 1st, in Belgium the VAT provision account will replace the current account for periodic returns - Adding the new bank account - Adding a new account 'Tax Provision Account' 411800 Enterprise PR: odoo/enterprise#111599 Task [link](https://www.odoo.com/odoo/project.task/6044017) task-6044017 Forward-Port-Of: odoo/odoo#262897 Forward-Port-Of: odoo/odoo#255272
This update prepares Odoo for a new Belgian tax regulation. Starting May 1st, a new 'Tax Provision Account' (411800) is added to ensure accurate VAT reporting for periodic returns. This change simplifies the accounting process for Belgian users.
Original PR description
Starting May 1st, in Belgium the VAT provision account will replace the current account for periodic returns - Adding the new bank account - Adding a new account 'Tax Provision Account' 411800 Community PR: odoo/odoo#255272 Task [link](https://www.odoo.com/odoo/project.task/6044017) task-6044017 Forward-Port-Of: odoo/enterprise#116290 Forward-Port-Of: odoo/enterprise#111599
This update aligns Odoo's data with the latest ISO 3166-2 standards by adding Georgian states. The address format has also been updated to display state names instead of codes, improving data clarity and accuracy for users. This ensures consistent and reliable address information.
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 display of online order notifications on smaller devices. By using a full-width layout and improved alignment, the notifications are now more visible and easier to read for customers. This ensures a better user experience when placing orders through the online portal.
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 uploading an empty file to the Sign Documents feature would cause an error. The fix ensures that the system correctly handles empty file uploads, preventing a technical error and improving the stability of the Sign module. This ensures users can consistently upload files without encountering this specific problem.
Original PR description
## Steps to Reproduce: - Install the Sign module. - Try to upload an empty file in Sign Documents. Sample File: https://drive.google.com/file/d/1ik3b7Z--Xla_TmvRj92uTCGy1PspQ_cP/view?usp=drive_link ## Error: `TypeError - a bytes-like object is required, not 'bool'` ## Cause: Before saas-19.2, at [1] `datas` returns an empty binary string (`b''`) when the file content is empty. After the [refactor], `raw` is used instead, which returns `False` for empty content, leading to this error. ## Fix: This commit ensures that when the attachment raw value is False, it is replaced with an empty binary string (`b''`). [refactor]: https://github.com/odoo/enterprise/commit/8d66ffa62ab3fb3334528999d4534a9a995c6830 [1] - https://github.com/odoo/enterprise/blob/0d70215fb5d7b72dcfe86ac23fd04208329aad5d/sign/models/sign_document.py#L65 sentry-7432818850 Forward-Port-Of: odoo/enterprise#115917
This update corrects a technical issue where the demo user's employee record was being duplicated, leading to a database constraint violation. The fix ensures the demo user always utilizes the existing employee record, preventing errors and maintaining data integrity. This improves the stability of the HR holiday testing environment.
Original PR description
Issue: The test was creating a new employee linked to the demo user, but if the demo user already had an employee, it would violate the (user_id, company_id) uniqueness constraint. Fix: Before creating a new employee, we check if the demo user already has one. If not, we create it, otherwise we use the existing one. task-6050719
This change corrects a visual issue in the online store where a product offering free shipping (a reward) displayed a border in the shopping cart. The fix removes this border by adjusting the styling of the quantity field, 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 corrects a problem with the Intrastat CSV export report in the Netherlands. The fix addresses an issue where data was incorrectly formatted (specifically the 'Commodity flow' field) and ensures the database is up-to-date before generating the report, improving data accuracy.
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 power button test in the HTML editor was unreliable, particularly on slower runbots. The fix ensures the test consistently triggers the correct behavior by correctly managing animation frames, preventing delays and ensuring accurate timing.
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 corrects a problem where payroll period calculations in the Hong Kong module were failing when tests were run outside the default date range. Specifically, the calculation relied on a date derived from today, causing issues with payslips generated in different years. This ensures accurate payroll reporting.
Original PR description
ir56b._compute_period depends on year_of_employer_return, which is derived from submission_date (defaults to today). If tests are run in a different year (mocked time or different environment), the period won't cover the January 2026 payslip. Forward-Port-Of: odoo/enterprise#116246 Forward-Port-Of: odoo/enterprise#116172
This update fixes an issue where long translated labels in product category configuration forms would overlap other fields, creating a cluttered and difficult-to-use interface. The fix allows radio button labels to wrap correctly, ensuring a cleaner and more readable layout, particularly when using localized content.
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
This update fixes a technical issue that caused a traceback error when users replaced images within the HTML editor. The fix ensures the system correctly identifies the relevant block when deleting images, preventing errors and improving the overall stability of the HTML editor functionality. This ensures a smoother experience for users editing content.
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 resolves an issue where the AI systray button in the Odoo interface had excessive padding. The change removed unnecessary styling classes, streamlining the button's appearance and improving the user experience. This ensures a cleaner and more consistent look for the application.
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 resolves a few minor issues related to appointment scheduling within the Odoo Enterprise system. Specifically, it ensures resources are correctly filtered based on appointment types, addresses a warning in the search filter component, and corrects a problem where the wrong customer form was used when booking appointments from the Gantt view. These changes enhance the user experience and data accuracy.
Original PR description
1. Filter resources based on the appointment type When adding a closing day from the Gantt view, every resource could be selected, even those not related to the current appointment type. Now, if a default appointment type is set in the context, resources are filtered to only show those related to that appointment type. 2. Warning with PosAppointmentSearchFilter A console warning was logged because the empty props of the PosAppointmentSearchFilter component were not explicitly declared. 3. Change partner form view when booking from the Gantt view When creating or editing a booking from the Gantt view, we could select a customer, but the default partner form was used instead of the one already created for the PartnerList component. --- Task: https://www.odoo.com/odoo/project/1737/tasks/6147711
This update resolves a technical glitch where a tour triggered incorrectly in the VoIP settings. The fix narrows the trigger to only activate when using the keypad tab, ensuring a smoother user experience. This prevents the tour from appearing unexpectedly.
Original PR description
Similar as [1], trigger `.o-voip-Softphone .o-voip-countryFlag` can be found on both recent and keypad tab. It's possible to find it before dom actually change to keypad tab. In this commit, we narrow down the trigger so that it can only be found on keypad tab. [1]: d838dd6dccdaeb8e9d6676ef4ccb5bbced4441a9
This update corrects a visual issue in the maintenance request form where the 'Block Workcenter' field was incorrectly positioned. The change ensures the field appears in the correct location after recent UI updates, improving the user experience. This fix addresses a minor layout discrepancy.
Original PR description
Issue: ---------------------------- In the maintenance request form view, the 'Block Workcenter' field was displayed near the priority field in the top-right corner. Steps to Reproduce:…
Issue: ---------------------------- In the maintenance request form view, the 'Block Workcenter' field was displayed near the priority field in the top-right corner. Steps to Reproduce: ---------------------------- - Install `mrp_maintenance` module. - Open a maintenance request linked to a work center. - Notice that the 'Block Workcenter' field appears beside the priority field in the top-right section. Cause of the issue: ---------------------------- Following the UI changes introduced in [PR](https://github.com/odoo/odoo/pull/251761), the position of the priority field was updated. However, the inherited XPath used for the 'Block Workcenter' field was still targeting the priority field, causing the field to be inserted at an incorrect position. With this commit: ---------------------------- Update the XPath to match the new form view structure, ensuring that the 'Block Workcenter' field is displayed in the correct location and aligned with the updated UI layout.
This update resolves an issue causing instability in the Point of Sale (POS) tour. By making the tour predictable and ensuring it correctly identifies the order, the problem is fixed. A minor typo in a test was also corrected to improve reliability.
Original PR description
Remove the `undeterministicTour_doNotCopy` key from `OrderFlowTour` and make the tour deterministic by properly selecting the order. Also, fix a typo in the assertion in `test_01_order_flow`. Task-6065459 Forward-Port-Of: odoo/enterprise#111915
This update fixes a minor calculation error in the Swiss payroll module (l10n_ch_hr_payroll) related to the reversal of source tax. The change ensures accurate tax reporting for Swiss businesses, aligning with local regulations. This improves the reliability of payroll reporting.
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 where a blank box was sometimes visible on smaller screens when rental dates weren't entered. The change ensures the display is only shown when rental dates are present, improving the user experience and visual consistency across devices. This is a minor fix to enhance usability.
Original PR description
Previously, the `<div>` was displayed even when its content was hidden due to the "invisible" attribute. To fix this, we move the visibility condition to the parent. This works since the `<button>` (in charge of updating rental line prices) already has a stricter invisibility condition. Note that `.o_input_box` doesn't exist anymore. Related commit: https://github.com/odoo/enterprise/commit/7cdfe5bd1541380d746f3208bc198fb89f7cb22a
This pull request corrects a technical issue where a duplicate email snippet template was introduced. The change removes this redundant template, ensuring consistent email formatting and preventing potential errors in mass mailing campaigns. This 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 the 'Back to edit mode' link in the land portal invoice section of the Invoicing app was incorrectly directing users to the wrong application. Switching to the correct action ensures users always access the Invoicing app, improving usability and data accuracy. This was a minor fix to ensure proper functionality.
Original PR description
The "Back to edit mode" link used action_move_out_invoice_type, which isn't bound to any menu, so the backend fell back to whichever app happened to match (e.g. Website when installed) instead of Invoicing. Switch to action_move_out_invoice (the one referenced by the Invoicing menu) so the webclient resolves the correct app automatically. task-5882256 Forward-Port-Of: odoo/odoo#259263 Forward-Port-Of: odoo/odoo#257841
This update resolves an issue where inactive reports were appearing in search results, and a bug impacting VAT Return reports in the Czech language. The fix ensures accurate report filtering and correct navigation, improving the user experience and data accuracy.
Original PR description
When searching for reports through the search panel inactive reports still show up in the result, this change hide the inactive variant reports from the search result. Also, fixes a minor bug related the l10n_cz, When search for VAT Return (CZ) it would cause a bug due to missing the target report to look into. task: 6149101
This update ensures payrun steps are reliably marked as complete after the 'Continue' action. Previously, errors could linger, making it appear like steps weren't processed correctly. Now, the system validates completed steps, providing a clearer picture of payrun status and improving data accuracy.
Original PR description
## Before: - Clicking Continue moved the payrun to the next step, but the previous step could remain in `error` if anomalies were still present. - This made explicitly passed steps (version/time/attendance) look unresolved. ## After: - Continue marks the passed step as `valid`. - because if the user willfully ignore an error, then it's ok to put it as validated. - This is applied consistently for all payrun step state points. Task-6053982
This update fixes an issue where multiple documents with the same subject wouldn't all be included in the downloaded zip file. The change ensures that all signed documents with identical subjects are correctly bundled together, resolving a potential data loss scenario. This improves the reliability of the Sign app's document download feature.
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 resolves an issue where a key form element, `.o_input_box`, was removed from the Odoo system. The change adapts the form views for the MRP and POS Self-Order modules to ensure proper functionality and data input. This ensures these features continue to operate as expected.
Original PR description
`.o_input_box` doesn't exist anymore, and this commit adapts the form view accordingly. 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
This update removes unnecessary code that previously handled multiple formats for receiving electronic invoices from Belgium (BE). Previously, the system was unsure which format to use, leading to complexity. Now, the system consistently uses the standard 0208 format, simplifying the process and improving 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 required a full module installation, but now an upgrade script automatically adds missing codes to the database during module updates. Existing codes remain unchanged.
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 fixes an issue where the 'Time Remaining' value in task timesheets was incorrectly highlighted in red, even when the time was positive. The fix ensures the color accurately reflects negative time values, improving the clarity and usability of the timesheet. It also corrects alignment of time remaining 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