Tuesday, April 28, 2026
11 changes · 18.0
New functionality added to Odoo
This update prepares Odoo for a change in Belgian accounting regulations. Starting May 1st, businesses will need to use a new 'Tax Provision Account' (411800) instead of their existing accounts for VAT periodic returns. This ensures compliance with updated Belgian tax laws.
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
Resolved issues and error corrections
This update corrects a typographical error within the marketing automation test suite. The fix ensures the tests run smoothly and accurately, maintaining the quality of the marketing automation functionality. This is a routine maintenance task to improve the reliability of our software.
This update fixes an issue where the Partner Ledger report would generate empty exports when filtering by an entry name (like a journal entry number). The fix ensures the report correctly includes entries matching the search bar, resolving a common user workflow problem. This improves the accuracy and usability of the Partner Ledger report.
Original PR description
**Steps to reproduce:** * Install **Accounting** module. * Open the `Partner Ledger report`. * Type an entry/move name (e.g., 'INV/2024/00001') in the search bar. * Export the report as `PDF` or…
**Steps to reproduce:**
* Install **Accounting** module.
* Open the `Partner Ledger report`.
* Type an entry/move name (e.g., 'INV/2024/00001') in the search bar.
* Export the report as `PDF` or `XLSX`.
**Observed behavior:**
* The exported file is empty or improperly generated.
* Filtering by partner name or viewing unfiltered works correctly.
**Cause:**
* When exporting `(export_mode == 'print')`,` _custom_options_initializer` adds a forced_domain to filter AMLs matching the search bar text.
* This domain only checks `partner_id.name` and reconciled partner names (matched_debit_ids/matched_credit_ids), but does NOT check `move_id.name` (the entry/journal entry name).
* As a result, when the search text is an entry name like 'INV/2024', no AML matches the partner-name-only domain, and the query returns no results — producing an empty export.
**Fix:**
* Add ('move_id.name', 'ilike', ...) as an additional OR branch in the forced domain, so AMLs whose journal entry name matches the search text are also included in the export.
opw-5972664This update resolves an issue where power buttons were incorrectly displayed and overlapped other menu items in the HTML editor, particularly on smaller screens. The fix adjusts the editor's width detection to ensure buttons are hidden when they cause overlap, improving the user experience and visual consistency.
Original PR description
Problem: Power buttons are shown regardless of the editor field's actual rendered width, causing them to overlap other menus when the field is small. Solution: Instead of relying solely on the global…
Problem: Power buttons are shown regardless of the editor field's actual rendered width, causing them to overlap other menus when the field is small. Solution: Instead of relying solely on the global `ui.isSmall` (mobile detection), check the editor field's own width and hide power buttons whenever it falls below the overlap threshold. Before: <img width="576" height="301" alt="image" src="https://github.com/user-attachments/assets/dcebed55-5c80-4fe5-8d33-c320549cf347" /> After: <img width="542" height="336" alt="image" src="https://github.com/user-attachments/assets/34a233bb-9958-43ac-adb9-04702a2e403d" /> Steps to reproduce: - Change languange (French to have a long placeholder). - Settings > Customer Invoices > Default Terms & Conditions. - Check "Add a Note". - Resize the screen to smaller size. - Observe the power buttons overlap with the translate button. task-6117734 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a bug that prevented customers from being found correctly when searching by email address. The system was incorrectly using the phone field instead of the email field in its search criteria. This change ensures accurate customer retrieval via email, improving data accuracy and usability.
Original PR description
The email-based lookup was mistakenly checking the phone field (`phone = email`) instead of the email field. Because of this, customers could not be correctly found using their email address. This change fixes the domain to properly match on the email field.
This update fixes an issue where clicking the 'next' page button during a chatter attachment upload would incorrectly upload attachments to the wrong records. The change now disables the pager buttons while an attachment is being uploaded, preventing this behavior and ensuring attachments are correctly placed.
Original PR description
Currently, when uploading a bunch of attachments or a big one to the chatter, if you click on the pager (e.g. next) before the upload is complete, the attachments that have not yet been uploaded are uploaded to the next record. This change disables the pager buttons if there is an ongoing upload in the chatter attachment box. task-5119290
This update resolves an unexpected error that appeared when scanning barcodes offline in the Point of Sale module. The fix ensures that operations are only performed when data is available, preventing a secondary error message. This improves the user experience and stability of the PoS system.
Original PR description
**Steps to reproduce:** - Set a barcode on a product that is not in the used point of sale - Go to PoS, cut the server connection - Go to the debug window and enter the barcode - An error saying the connection is cut appears (expected) - A traceback appears (unexpected) **Why the fix:** This bug only happens in 18.0, so this is a backport of ca1ba4b which was basically fixing the same issue. We check if we have data before making some operations on them as to avoid making operations on an undefined value. opw-5450575
This update stops unnecessary invitation emails from being sent when you add attendees to events that have already passed. Previously, the system would send invitations even for past events, which was a minor annoyance. This change ensures a cleaner and more efficient event management experience.
Original PR description
Backport of fix in 19.0 (https://github.com/odoo/odoo/pull/259844) Prevents invitations to be triggered when adding new attendees to an event in the past. OPW-6125052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261517 Forward-Port-Of: odoo/odoo#260050
This update resolves an issue where a singleton error occurred when Peppol was enabled but then disabled in the settings. The change ensures the system correctly checks if a company is registered with Peppol before attempting to send invoices, improving stability and preventing unexpected errors.
Original PR description
Steps to reproduce: **Note: This does not occur in Peppol demo mode** 1. Install the Peppol module and enable it in Settings 2. Create a portal user, then go to the 'Accounting' tab in their contact…
Steps to reproduce: **Note: This does not occur in Peppol demo mode** 1. Install the Peppol module and enable it in Settings 2. Create a portal user, then go to the 'Accounting' tab in their contact record 3. Under Customer Invoices, set the following: a. Invoice Sending -> By Peppol b. eInvoice Format -> Peppol Bis 3.0 c. Belgian VAT -> A valid VAT 4. Click 'Verify' under 'Peppol Status' and this should change `peppol_verification_status` to `valid` 5. Disable Peppol in Settings 6. Log in as the created user and make a purchase on the web shop 7. Observe that no sale order confirmation email is sent, and a singleton error is logged. When Peppol is installed, but disabled, the `account_peppol_edi_user` field is not set (or gets unset) on the company, which can lead to a singleton error when trying to send an invoice via Peppol. This can occur if Peppol was previously enabled and there were `res.partner` records with Peppol information that was validated. The database checks this after E-Commerce transactions and, if there is no `invoice_sending_method` set on the `res.partner` record, it defaults to Peppol, even if it is disabled, which can cause the singleton error. This change will ensure that we check to see if the company has registered with Peppol before using it to send invoices. [Ticket link](https://www.odoo.com/odoo/project.task/5890740) opw-5890740
This update corrects an issue where the Partner Ledger displayed incorrect initial balances when the date range filter wasn't used. The fix ensures that the total balance accurately reflects the sum of all invoices, resolving a discrepancy between the ledger's summary and individual transactions. This improves the accuracy of financial reporting.
Original PR description
To reproduce the issue: 1) Create an invoice of 100 € for partner A in 2025 2) Create another invoice of 200€ for the same partner in 2026 3) Open the Partner Ledger for 2026. Unfold A. It shows an initial balance of 100€ and a total of 300€. 4) In debug mode, open the Partner Ledger's form view and uncheck the date range option. 5) Open the Partner Ledger like in step 3) ====> An initial balance of 300€ shows, making the total of Partner A (still 300€) inconsistent with the sum of its sublines (600€) feedback-6042305
This update fixes an issue where test tags containing special characters like brackets were not being parsed correctly, leading to errors. The changes enhance the parser's ability to handle complex tag structures, ensuring accurate test execution and stability.
Original PR description
When using test tags for js tests, some tests are not parsed correctly when containing brackets `[ ]` This is because the tag selector use them to set parameters bounds as in…
When using test tags for js tests, some tests are not parsed correctly when containing brackets `[ ]` This is because the tag selector use them to set parameters bounds as in `.test_method[test_param]` The previous implementation using a regex could generate invalid test tags when the params contains comma, and brackets This commits fixes this two ways: Nested brackets will work, meaning that something like `.test_method[test, witch brackets[]]` will be correctly parsed as a tag `.test_method` with a parameter `test, witch brackets[]`since the brakets are balanced. Before, it was parsed as twho tags, `.test_method[test` and ` witch brackets[]]` the second one being considered invalid and spamming logs with errors Brackets and backslashes can be escaped with a backslash, meaning that something like `.test_method[test, with brackets], and backslash\]` can be escaped as `.test_method[test, with brackets\], and backslash\\]` Note that the parser will make it's best effort to parse non escaped strings, so a \ not followed by and escaped character will remain there in order to make potential copy paste easier. For the previous example `.test_method[test, with brackets\], and backslash\` will work the same way. So in practice, we only really need to escape \ when followed by another backslash or a bracket, and we need to escape brackets when they are not balanced. Comma in hoot tests are also a problem since they are used to separate parameters, this can easily be tested by only splitting on `,@` since all hoot test should start with a @ and parameters of test_unit_* tests should be a list of hoot tests. A followup pr will introduce the params to the canonical tag, and escape it as needed