Monday, May 26, 2025
62 changes
16 changes
Resolved issues and error corrections
The Dutch SBR tax report now handles cases where no closing entry exists without crashing. This keeps report generation stable after changes to the tax return process.
Original PR description
After the introduction of the new tax return process, `None` may now be returned as a closing entry, instead of an empty `recordset`. The SBR report may traceback if no closing entry is found.
The test process for importing French FEC accounting files now reads the full file every time, avoiding occasional failures with larger files. This improves build reliability without changing user-facing functionality.
Original PR description
The JS unit test of the FEC parser was having a flaky build error because for reading files, the test was using `.getReader().read()` which would read only one chunk from the stream, causing incomplete files to be processed for large files. This commit makes the unit test use `response.arrayBuffer()` instead to guarantee the processing of the complete files all the time. build_error-161014
A display issue in accounting reports was fixed so the submission date now appears as expected in the Kanban view. This helps users quickly see when returns were submitted without opening each record.
Original PR description
The submission date is never visible due to incorrect record access in Kanban view. used `record.date_submission.raw_value` Instead of incorrect direct usage.
Importing a Winbooks ZIP file with empty data files no longer causes an error. This prevents accounting users from being blocked when an export contains no partner records to import.
Original PR description
Currently, an error is produced when importing a **Winbooks** `.zip` file that contains empty `.dbf` data files. **Steps to reproduce:** - Install the `accountant`, `l10n_be` and…
Currently, an error is produced when importing a **Winbooks** `.zip` file that contains empty `.dbf` data files. **Steps to reproduce:** - Install the `accountant`, `l10n_be` and `account_winbooks_import` module. - Change the default company to **BE Company CoA**. - Navigate to accounting settings and Under **Accounting Import** click to **import** button. - Click **Import WBK** button and upload [this](https://drive.google.com/file/d/1wsLin2kOvlZvl0HcrzUafgRxPOVxPrcS/view?usp=sharing) file. **Error:** `AssertionError` Here, an error occurs because `partner_data_dict.values()` at [1] returns an `dict_values` object, which may be empty. This value is passed directly to `ResPartner.create(...),` but the ORM method requires a list or tuple, by an assertion added at [2]. [1] - https://github.com/odoo/enterprise/blob/9d51f5171b3c2478599dde1ce991c90fa6fed32b/account_winbooks_import/wizard/import_wizard.py#L126 [2] - https://github.com/odoo/odoo/blob/6ef8565053352e4f679d26032e5485474fda62ce/odoo/orm/models.py#L4309 This commit resolves the issue when files are empty and no partner data is available for import. Sentry - 6611894804
Miscellaneous changes
* Previously, the domain only included payments in the "in_process" state, which is incorrect when only the Invoicing app is installed -paid payments should also be allowed-. * Test was failing with single app installed when accountant module was not installed. When only Invoicing, we can validate a batch payment even when payments are in paid state, so the Warning was not raised causing tests to fail. Forward-Port-Of: odoo/enterprise#86217
Original PR description
* Previously, the domain only included payments in the "in_process" state, which is incorrect when only the Invoicing app is installed -paid payments should also be allowed-. * Test was failing with single app installed when accountant module was not installed. When only Invoicing, we can validate a batch payment even when payments are in paid state, so the Warning was not raised causing tests to fail. Forward-Port-Of: odoo/enterprise#86217
9 changes
Enhancements to existing features
The Time Off app now shows leave type names consistently between the management form and the dashboard. This reduces confusion for users and improves the overall experience when reviewing or managing leave requests.
Original PR description
- in the management form view, the leave type display name is diffrent than dash borad one which is not the best for UX. So, remove the restriction on the display name as multiple request is handeled on its own wizard now. Task: 4774751 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The test relies on the admin partner having full contact in order for the "Confirm Address" step to "just work". If the test is run without demo data, this is rather not the case and the test fails on the next step, as "Confirm Address" causes a form submission failure due to required fields not being filled. https://runbot.odoo.com/odoo/error/161633 Forward-Port-Of: odoo/enterprise#86417
Original PR description
The test relies on the admin partner having full contact in order for the "Confirm Address" step to "just work". If the test is run without demo data, this is rather not the case and the test fails on the next step, as "Confirm Address" causes a form submission failure due to required fields not being filled. https://runbot.odoo.com/odoo/error/161633 Forward-Port-Of: odoo/enterprise#86417
Sendcloud and ups_rest miss the override to allow sending the actual type of the carrier (in a recognizable way) to Amazon. opw-4771192 Forward-Port-Of: odoo/enterprise#86100 Forward-Port-Of: odoo/enterprise#84772
Original PR description
Sendcloud and ups_rest miss the override to allow sending the actual type of the carrier (in a recognizable way) to Amazon. opw-4771192 Forward-Port-Of: odoo/enterprise#86100 Forward-Port-Of: odoo/enterprise#84772
This was green before this commit, matching the community badge color. Enterprise is red, which is the prettiest and most well-known color for badge, but due to being unavailable in bundle it was shown as green rather than red. Discuss public page also lacked it, which this commit fixes too. Forward-Port-Of: odoo/enterprise#86378
Original PR description
This was green before this commit, matching the community badge color. Enterprise is red, which is the prettiest and most well-known color for badge, but due to being unavailable in bundle it was shown as green rather than red. Discuss public page also lacked it, which this commit fixes too. Forward-Port-Of: odoo/enterprise#86378
Related to https://github.com/odoo/odoo/pull/210767 Forward-Port-Of: odoo/enterprise#86045 Forward-Port-Of: odoo/enterprise#85952
Original PR description
Related to https://github.com/odoo/odoo/pull/210767 Forward-Port-Of: odoo/enterprise#86045 Forward-Port-Of: odoo/enterprise#85952
**Steps to reproduce:** - Install `sale_commission_linked_achievement` module - Enable Commissions in settings - Go to Sales > Commissions > Commissions - Group By Sales Team - Error `psycopg2.errors.UndefinedFunction: operator does not exist: text = integer` is triggered **Issue:** When generating a raw query with a untyped `NULL` value (`NULL AS team_id`) in a `WITH` subquery, PostgreSQL infers the type as `text` (instead of default `unknown`) when the clause is done. This leads to a
Original PR description
**Steps to reproduce:** - Install `sale_commission_linked_achievement` module - Enable Commissions in settings - Go to Sales > Commissions > Commissions - Group By Sales Team - Error…
**Steps to reproduce:**
- Install `sale_commission_linked_achievement` module
- Enable Commissions in settings
- Go to Sales > Commissions > Commissions
- Group By Sales Team
- Error `psycopg2.errors.UndefinedFunction: operator does not exist: text = integer` is triggered
**Issue:**
When generating a raw query with a untyped `NULL` value (`NULL AS team_id`) in a `WITH` subquery, PostgreSQL infers the type as `text` (instead of default `unknown`) when the clause is done. This leads to a comparison error when joining results during the `group_by` operation.
`ON ("sale_commission_report"."team_id" = "sale_commission_report__team_id"."id")`
Explanation in PostgreSQL source code:
```
* If all the inputs were UNKNOWN type --- ie, unknown-type literals ---
* then resolve as type TEXT. This situation comes up with constructs
* like SELECT (CASE WHEN foo THEN 'bar' ELSE 'baz' END); SELECT 'foo'
* UNION SELECT 'bar'; It might seem desirable to leave the construct's
* output type as UNKNOWN, but that really doesn't work, because we'd
* probably end up needing a runtime coercion from UNKNOWN to something
* else, and we usually won't have it. We need to coerce the unknown
* literals while they are still literals, so a decision has to be made
* now.
```
This can be reproduced manually by doing :
```
WITH example AS (
SELECT NULL AS team_id
)
SELECT pg_typeof(team_id) FROM example;
pg_typeof
-----------
text
(1 row)
```
**Fix:**
Explicitly cast the `NULL` value to the proper type using `NULL::INTEGER` to ensure it is treated as an integer during the comparison.
The issue was introduced here : https://github.com/odoo/enterprise/commit/80beef2077c3b4fa7ee6e20dd2f9400a7d1d2273
And, as the `sale_commission_linked_achievement` will be removed, as well as the `Sales Team` grouping, it should disappear with this : https://github.com/odoo/enterprise/commit/b1e41f9b23aa62bfd6f9be1feb1059b3507f2ce5
opw-4765421
Forward-Port-Of: odoo/enterprise#85399
Forward-Port-Of: odoo/enterprise#85097Issues: i) When coming from another app (Fleet, Project, etc.), the control panel does not correctly display the subfolders. ii) The “All” folder should always be displayed. Technical Reason: i) Correctly set folder_id as False for documents whose parent folder is inaccessible, ensuring a clean and accurate folder hierarchy in the search panel. ii) It was intended, add a condition when coming from other modules 'All' should not display. After this commit: i) Correctly
Original PR description
Issues:
i) When coming from another app (Fleet, Project, etc.), the control panel
does not correctly display the subfolders.
ii) The “All” folder should always be displayed.
Technical Reason:
i) Correctly set folder_id as False for documents whose parent folder is
inaccessible, ensuring a clean and accurate folder hierarchy in the
search panel.
ii) It was intended, add a condition when coming from other modules 'All'
should not display.
After this commit:
i) Correctly display folders in hierarchy in a search panel when coming from other modules.
ii) 'All' folder should always be displayed.
Task-4669259
Forward-Port-Of: odoo/enterprise#84244PR #64267 implemented a reconnection mechanism, but it is only triggered when the WebSocket close event is fired. In practice, we noticed that the WebSocket would sometimes silently lose connection. When this happens, one should just send data through the WebSocket to refresh it. This commit enables SIP.js keep-alive feature, hopefully reducing the number of disconnections, or at least preventing them to go unnoticed. Forward-Port-Of: odoo/enterprise#86294 Forward-Port-Of: odoo/enterprise#86
Original PR description
PR #64267 implemented a reconnection mechanism, but it is only triggered when the WebSocket close event is fired. In practice, we noticed that the WebSocket would sometimes silently lose connection. When this happens, one should just send data through the WebSocket to refresh it. This commit enables SIP.js keep-alive feature, hopefully reducing the number of disconnections, or at least preventing them to go unnoticed. Forward-Port-Of: odoo/enterprise#86294 Forward-Port-Of: odoo/enterprise#86213
* Hide smart buttons when there are no elements and include `in process` payments to the collections smart button. * Consider all payments linked to a mandate as Collections not only the ones have journal entries * Log in the payment chatter the inclusion/exclusion of the payment in a batch. * Validate only in process payments task-4531618 Forward-Port-Of: odoo/enterprise#86006 Forward-Port-Of: odoo/enterprise#80494
Original PR description
* Hide smart buttons when there are no elements and include `in process` payments to the collections smart button. * Consider all payments linked to a mandate as Collections not only the ones have journal entries * Log in the payment chatter the inclusion/exclusion of the payment in a batch. * Validate only in process payments task-4531618 Forward-Port-Of: odoo/enterprise#86006 Forward-Port-Of: odoo/enterprise#80494
Fixes were made regarding the fraud prevention headers, but we have still odoo requests that send invalid headers. When checking the odoo requests on the hmrc website, we can group by `Gov-Vendor-Version`, which is currently set to the Installed Version of the base module, twice (for some reasons). This commit send the version of the `l10n_uk_reports` module. So when a new fix is made, we can bump the module version and see if failing requests are up-to-date. task-4627086 Forward
Original PR description
Fixes were made regarding the fraud prevention headers, but we have still odoo requests that send invalid headers. When checking the odoo requests on the hmrc website, we can group by `Gov-Vendor-Version`, which is currently set to the Installed Version of the base module, twice (for some reasons). This commit send the version of the `l10n_uk_reports` module. So when a new fix is made, we can bump the module version and see if failing requests are up-to-date. task-4627086 Forward-Port-Of: odoo/enterprise#84692
…tems When using OSS, the user has to put the OSS tag on the product. This test ensures the OSS tag is well propagated from the product to the accounting items representing the invoice line plus the generated tax lines. task_id: 4789153 Forward-Port-Of: odoo/enterprise#85859 Forward-Port-Of: odoo/enterprise#85381
Original PR description
…tems When using OSS, the user has to put the OSS tag on the product. This test ensures the OSS tag is well propagated from the product to the accounting items representing the invoice line plus the generated tax lines. task_id: 4789153 Forward-Port-Of: odoo/enterprise#85859 Forward-Port-Of: odoo/enterprise#85381
In this commit we fix the website_sale_renting_select_wrong_period tour that can cause undeterministic errors. Forward-Port-Of: odoo/enterprise#83700 Forward-Port-Of: odoo/enterprise#83568
Original PR description
In this commit we fix the website_sale_renting_select_wrong_period tour that can cause undeterministic errors. Forward-Port-Of: odoo/enterprise#83700 Forward-Port-Of: odoo/enterprise#83568
Resolved issues and error corrections
This fix updates the test setup for QR code payments in Point of Sale so it can create the needed payment methods without permission-related failures. It helps keep automated checks stable and prevents false test failures that could slow down development.
Original PR description
Creating POS payment methods requires being a POS admin, which the POS user is not, and the test user may not be. Bypass issue by creating payment methods in sudo. https://runbot.odoo.com/odoo/error/222989
This fix prevents the website editor’s snippet preview dialog from failing when automated tests select a snippet faster than the preview can finish loading. It improves test stability without changing normal user behavior.
Original PR description
The adaptations from [1] and [2] added some code to the snippet preview dialog, mainly to adapt text highlights in the snippets content (starting from `18.0`) and enable the snippets preview interactions (starting from `18.3`) [A]. In a runbot test context, the snippet selection happens too fast that the code from [A] (linked to the async behaviour of `insertSnippets`) can still process the snippets dialog `iframeDocument` (lost after the dialog being closed on snippet selection). The goal of this commit is to fix this behaviour by simply taking into consideration the fact that the preview content can be lost (since in a real use case, a user will select a snippet in a reasonable time). [1]: https://github.com/odoo/odoo/commit/1aaf483c5d3b8e8816cfbea7da96ac007a42d492 [2]: https://github.com/odoo/odoo/commit/e008c92fcad2b8cc160586ba6ab94bc077b9bf3d Remark: This commit will be adapted on `18.3` to fix the code from [2]. runbot-190596
Payments will now only automatically choose or update their journal when the payment is first created or when its company changes. This prevents existing payments from unexpectedly switching journals during normal edits, reducing accounting errors and manual corrections.
Original PR description
We only want to compute a journal id for a payment if: - it's a new payment (never saved). - the company changed. Backport of #199573 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Time Off calendar now shows the correct “Cancel” label for approved leave requests in month, week, and day views. This removes confusion because the action cancels the leave rather than deleting it, matching the behavior already shown in the year view.
Original PR description
**Steps to reproduce this issue:** 1) Install Time Off 2) Create an approved leave record 3) Click on the approved leave record in month mode(calendar view) 4) The Delete button appears instead of the Cancel button **Issue:-** In the Time off dashboard, in the year view, if I click on a leave and open the popup, I can click on “Cancel” to cancel my leave But this “Cancel” button appears as “Delete” in the month, week and day views. However, it does cancel the leave, not delete it. **Solution:-** This button should be renamed “Cancel” to be consistent with the system. opw-4782277
Email signatures now avoid carrying over dark mode-only table colors when messages are prepared for sending. This prevents signatures from showing unintended dark backgrounds or colors after users switch back to light mode, while preserving important layout formatting.
Original PR description
Problem: When in dark mode, additional styles are applied to improve display. However, these styles are inadvertently preserved during `convert_inline`, which processes HTML for email rendering. This…
Problem: When in dark mode, additional styles are applied to improve display. However, these styles are inadvertently preserved during `convert_inline`, which processes HTML for email rendering. This causes unwanted dark mode styles (e.g., `background-color`, `border-color`, and `color`) to persist even after switching back to light mode, especially in email signatures. Solution: Skip stylesheets that only affect `color`, `background-color`, or `border-color` on `table` elements. This avoids incorrect rendering in light mode without removing essential formatting styles. Note: Skipping all styles caused layout issues, so the fix targets only problematic styles. Fixed in `web_editor`: https://github.com/odoo/odoo/commit/d076dbcc273be5c8f337de9263effa82c9d9c0c8 Steps to reproduce: 1. Switch to dark mode. 2. Add an email signature in user preferences. 3. Switch back to light mode. 4. Open the mail composer. → The signature table shows a dark background. 5. Send the email. → The table in the mail thread still has a dark background. opw-4713718 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an error that could occur when users sorted the Assets list by one accounting field and then another. This keeps asset management views stable and avoids interruptions for accounting users.
Original PR description
Currently, an error occurs when sorting is applied again on a different related field after sorting another related field first. Steps to reproduce: - Install `accountant` module - Navigate `Accounting > Accounting > Assets (list view)` - Apply Sorting on column `Fixed Asset Account` - Try to sort the column `Depreciation Account` - Observe the error Error: `AssertionError` The issue occurs when attempting to add a JOIN on an SQL query without verifying whether it has already been included. - [1] This commit resolves the issue by adding a conditional check before adding a join in the query, ensuring that duplicate joins are not added. [1] - https://github.com/odoo/odoo/blob/b2e564f07f6883111da4581bccfb0f45c7588063/addons/account/models/account_account.py#L150-L152 Sentry-6039417751
Code cleanup and technical improvements
This update improves how Odoo explains unstable web tour test failures by showing what changed in the targeted page element. This helps teams identify and fix test issues faster, improving development reliability without changing end-user functionality.
Original PR description
When we detect an indeterminism in the towers, it means that the targeted element has mutated or been modified. However, it is very complicated to know exactly what has changed. The goal of this commit is to facilitate the understanding of these modifications to be able to more easily know which state of the element to target to correct the indeterminism. 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
Miscellaneous changes
Scenario: add a popup on a website page with enough text above the button so the button is not visible on the page without scrolling. Display the popup. Result: the popup is opened scrolled at the bottom (depends on if we are logged in or not), this usually works in incognito. Issue: in 89e2513f577e9455d5bfd933d7e479b295d45a26 we focused on the first tabbable element in the modal, but if that element is not in the view, the browser automatically scrolls to it. So there is this side effect tha
Original PR description
Scenario: add a popup on a website page with enough text above the button so the button is not visible on the page without scrolling. Display the popup. Result: the popup is opened scrolled at the bottom (depends on if we are logged in or not), this usually works in incognito. Issue: in 89e2513f577e9455d5bfd933d7e479b295d45a26 we focused on the first tabbable element in the modal, but if that element is not in the view, the browser automatically scrolls to it. So there is this side effect that happen if the first tabbable element is hidden by the scroll. Fix: after we focus to the element, we reset the scrollTop to 0 to ensure we stay at the top of the popup. opw-4647172 Forward-Port-Of: odoo/odoo#209706 Forward-Port-Of: odoo/odoo#206318