Thursday, September 25, 2025
24 changes · 19.0
Enhancements to existing features
The Turkish Nilvera integration now syncs more invoice types, including E-Archive files and invoices created directly in Nilvera. Users can retrieve invoice statuses and PDFs from one "Sync with Nilvera" action, with PDFs shown in preview and attached automatically for easier record keeping.
Original PR description
[IMP] l10n_tr_nilvera_einvoice: refactor API to include E-Invoices & E-Archive Fixed bugs in API calls triggered during fetch requests and added support for fetching the status of E-Archive files. Updated the action button label to "Sync with Nilvera", which now fetches invoice statuses, retrieves PDFs for both E-Archive and E-Invoices, and includes invoices generated directly in Nilvera, enabling support for additional invoice types currently not supported in Odoo. Invoices/Bills are marked as "Successful" once retrieved. Retrieved PDFs are displayed in the preview and automatically attached to the chatter. The original limit of fetching a maximum of 30 records (status and PDFs) is maintained. task-4714467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225919 Forward-Port-Of: odoo/odoo#223599
When the IoT box cannot fully start because its drivers fail to load, users will now be sent to a helpful error page instead of the database selection screen. The new page better explains that the IoT box is down and provides links to log files for troubleshooting.
Original PR description
Before this commit, if the IoT box enters a state where Odoo can start but the `iot_drivers` module fails to load, the user would be redirected to the database selector instead of the IoT homepage. This commit adds an nginx redirect to instead send the user to the 502 error page, stating that the IoT box is down and with links to see the log files. This page is more representative of the situation and more helpful for the user. task-5111009 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website header and footer background choices now behave consistently when users switch between color combinations, solid colors, and gradients. Applying a color combination clears any previously selected solid color or gradient, making the design controls easier to understand and reducing unexpected results.
Original PR description
It was difficult for the user to understand how the background colorpicker works. The color combination would not be resetted when applying a solid color or a gradient, and vice versa. To simplify the behavior, applying a color combination now resets the solid color or gradient previously applied. The user will then choose to reapply its previous choice or not. task-5062183
The HTML editor now highlights code blocks by language, making technical content easier to read and present. Users can choose the language from a toolbar and copy the original code as plain text, improving the editing experience for documentation and website content.
Original PR description
This integrates the PrismJS library to provide syntax highlighting to code blocks. Whenever a `pre` element is in the editor, it gets wrapped into a `contenteditable=false` container, with an invisible editable `textarea` element overlayed on top of the `pre`. Whenever the contents of the `textarea` change, they pass through the library to get highlighted in the `pre`. A special toolbar appears at the top of the code block, for the user to pick a language and copy the code in plain text. task-4585835 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Odoo now validates Taiwanese business VAT numbers using the latest official checksum rule. This prevents valid newer Taiwan UBNs from being incorrectly rejected as the available number range expands.
Original PR description
As the number of UBN in taiwan is expected to be exhausted, the numbers have been expended. To do so, the verification logic has been revised from the checksum being divisible by 10 to it being divisible by 5. stdnum is not yet supporting this new validation, and if it does it will take some time for Odoo to use the updated package, so we will handle the validation ourselves from now on. see https://www.ntbna.gov.tw/singlehtml/bbabfd4af20541b7859b4c5a099081f6?cntId=0625114d47274366baab1d3317f866ab task-5064712 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228385 Forward-Port-Of: odoo/odoo#225468
Point of Sale now applies fiscal position tax rules consistently with accounting. This prevents customers and staff from seeing one tax amount at checkout while the finalized backend order records a different tax treatment.
Original PR description
If a fiscal position is not related to any tax, when selecting said fiscal position in the pos, the tax from the product is kept. When looking at the paid order in the backend the tax is removed on…
If a fiscal position is not related to any tax, when selecting said fiscal position in the pos, the tax from the product is kept. When looking at the paid order in the backend the tax is removed on the order line and the price unit and price with taxes are different (although no tax recorder on the line). Steps to reproduce: ------------------- * Create a fiscal position and assign no tax to it * On the pos config, add this fiscal position and the domestic one to the available fiscal positions * Open pos session * Select a product that has a 15% tax * Change the fiscal position to the one just created > Observation: We still see that the tax is computed based on the 15% * Pay the order * Go see the order in backend > Observation: price unit: 100, no tax, price with taxes 115 Why the fix: ------------ A recent refactoring happened on the accounting side related to fiscal positions: https://github.com/odoo/odoo/commit/9a97157920c845120861dda49d81d3150e015974 https://github.com/odoo/odoo/blob/e284dfd80bde632e6446fc0b8d3276689da35200/addons/account/models/partner.py#L155-L163 The behavior after this refactoring is the following: When changing fiscal position: - If the original tax is available for the fiscal position, we use it - If the original tax is not available but the fiscal position has an available tax that is set to be replacement for the original one, we use the replacement tax - If the original tax is not available but the fiscal position has an available tax which is NOT a replacement for the original one, we keep the original one - If the fiscal position has no tax available, we remove the tax In this fix we apply the same logic inside the pos. Without the fix we would keep the original tax in the frontend but when passed in the backend the tax with fiscal position was recomputed with the logic from accounting. This explained the difference we observed. opw-4978056 Forward-Port-Of: odoo/odoo#223164
This fixes issues that could leave the IoT Box homepage blank after an update and ensures the service starts only after the update process is complete. It also keeps the IoT Box reachable on the network and improves checkout reliability when switching to Odoo 19.0.
Original PR description
This PR is made of 3 small commits: - `[FIX] iot_drivers: fix blank homepage after checkout` Due to the `odoo.service` starting before the `rc.local` file has finished updating the Odoo code, you can…
This PR is made of 3 small commits: - `[FIX] iot_drivers: fix blank homepage after checkout` Due to the `odoo.service` starting before the `rc.local` file has finished updating the Odoo code, you can end up with the old Python code running but the updated JS code loading in the browser. This can lead to a blank screen as a traceback occurs trying to read the MAC address. We fix this in two ways: - A quick fix, which is just making the JS code robust to the missing value to avoid crashing. - A proper fix that will require a new image, as it modifies the `odoo.service` file to add `rc-local.service` as a dependency. This means Odoo will not start until `rc.local` has finished executing. - `[FIX] iot_box_image: set http_interface explicitly` From Odoo 19.0, a warning is logged when your `http_interface` config setting is not explicitly set. From Odoo 20.0, the default value will change from `0.0.0.0` to `127.0.0.1`, which would break the IoT box as it would only listen to localhost requests. To fix this we explicitly set the `http_interface` value to `0.0.0.0` in `odoo.conf` so that the IoT box will listen to all requests. - `[FIX] iot_drivers: use FETCH_HEAD when checking out` The current 25.07 IoT box image cannot checkout to 19.0 databases due to an issue where the `git reset origin/19.0 --hard` command fails. In the other places where we use `git reset` in the IoT box this was fixed by using `FETCH_HEAD` (an alias for the last branch that was fetched). In this commit we apply the same fix to the `upgrade.py` checkout. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228231
Brazilian service invoices with installments now send installment amounts without taxes, preventing mismatches during tax validation. This reduces invoice rejection errors and helps ensure smoother electronic invoicing with AvaTax.
Original PR description
Service invoices require us to send installments without taxes. If we include taxes we get an error: **Errors**: Rejection: Total Installments doesn’t match Total Lines ∑ installments[m]grossValue - ∑ (lines[n].lineAmount-line[n].lineTaxedDiscount) <> 0 This **PR** clears taxes before tax calculation to ensure the installments we send are correct. **task**-4761630 Forward-Port-Of: odoo/enterprise#95331 Forward-Port-Of: odoo/enterprise#85108
This fix prevents left and right arrow keys used inside dropdowns from accidentally triggering navigation elsewhere in the interface. It also makes select menu group ordering consistent across browsers, reducing unexpected display differences for users on Firefox.
Original PR description
#### First fix because SelectMenu tests where not passing as I just switched to Firefox: The groups sorting function in the SelectMenu component (`groupsList.sort`) was not anti-symmetric, when…
#### First fix because SelectMenu tests where not passing as I just switched to Firefox: The groups sorting function in the SelectMenu component (`groupsList.sort`) was not anti-symmetric, when either group_1 or group_2 was falsy, both sortFn(group_1, group_2) and sortFn(group_2, group_1) would return 1 where it should return -1 in one of the cases. This issue only occured as Firefox seem to have a slightly different sorting algorithm, which would cause (group_2, group_1) to be called instead of (group_1, group_2), raking the group_2 before group_1. Thi commit fixes that by making the function more consistant at handling falsy values. This is probably better explained here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#description #### And the task related fix: This commit prevents arrowleft and arrowright hotkeys to trigger on other parts of the UI when navigating a dropdown. Enterprise: https://github.com/odoo/enterprise/pull/94478 Task: [5048895](https://www.odoo.com/odoo/project.task/5048895) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes misplaced pop-up elements when editing content inside centered iframe previews, such as the mobile preview in the mass mailing builder. Users should now see menus and overlays appear next to the intended item instead of incorrectly shifting to the side.
Original PR description
This commit fixes an issue with containers inside iframes that renders the position computation for the popper incorrect. The problematic situation arises when the popper needs to be positioned near…
This commit fixes an issue with containers inside iframes that renders the position computation for the popper incorrect.
The problematic situation arises when the popper needs to be positioned near an element inside an iframe and the base container used for the computation is inside the same iframe.
This case happens in the mass_mailing builder when in the mobile preview as the iframe is centered in the viewport and the element that enables the scrolling when overflowed is also inside the iframe.
When in this case, the min and max values for the variant and the direction are computed on a container that is really smaller than the viewport. Meaning that when this happens the popper is positioned on the left of the iframe, which is completely incorrect.
To fix this issue, when we detect that we are indeed in the problematic situation, we add the left and top values of the iframeBox to direction{Min/Max} and variant{Min/Max}. This way the variantOffset is computed based on the position of the container adjusted to the iframe.
before:
<img width="3021" height="1549" alt="image" src="https://github.com/user-attachments/assets/f6c6f3b7-cdd1-4699-97ab-732ef3ec5ff1" />
after:
<img width="3099" height="1502" alt="image" src="https://github.com/user-attachments/assets/00c06936-de4d-48a0-b4f7-19cab3fc821d" />
task-5109138
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prPurchase bills in the Indian GST reporting flow now return to a clean reconciliation state when reset to Draft. This prevents old GSTR-2B statuses, return-period links, or exceptions from carrying over and helps ensure the bill can be reconciled correctly again.
Original PR description
When a purchase invoice (bill) is reset to Draft: - Reset GSTR-2B reconciliation status to "pending" - Unlink from GST return period - Clear any existing exceptions This ensures that the bill returns to its initial stage for proper reconciliation. Task ID: 5095582 Forward-Port-Of: odoo/enterprise#95251 Forward-Port-Of: odoo/enterprise#95026
This fix prevents Helpdesk timesheet creation from failing when a linked project has no company set and the user works across multiple companies. It keeps the correct company information during timesheet creation, reducing validation errors for support teams and migrations.
Original PR description
Steps to Reproduce: ------------------ - Open Helpdesk. - Go to Configuration → Helpdesk Teams. - Create a new team. - Enable the Billing feature and assign a project to this team. - Set the…
Steps to Reproduce: ------------------ - Open Helpdesk. - Go to Configuration → Helpdesk Teams. - Create a new team. - Enable the Billing feature and assign a project to this team. - Set the project’s Company field to Null. - Create an employee for the current user in another company. - Ensure the user has employees in both companies. - Create a new ticket (or open an existing one) in the newly created team. - Try creating a new timesheet → a Validation Error is raised. Root Cause: ----------------- When a user has employees associated with multiple companies and tries to log a timesheet with multi-company enabled, a validation error occurs. **This happens because:** - The default company is derived from the project linked to the Helpdesk team. Since the company_id field on the project is no longer required, it may be Null, leading to an error when fetching the correct [employee for the company](https://github.com/odoo/odoo/blob/6a36015e2ee69aafe3880bf1fff38439af5cd673/addons/hr_timesheet/models/hr_timesheet.py#L214-L216 ). - Additionally, the [company check](https://github.com/odoo/enterprise/blob/83a1b88c8cae4db5c9b1bf82ee7ebb4e13c41b2a/helpdesk_timesheet/models/analytic.py#L81-L82) is incorrect. The code is checking whether the `company_id` key exists in a `list of vals`, whereas it should be checked directly on the vals dict itself. Issue Faced: ------------- In version 18.3, timesheets are created during migration [here](https://github.com/odoo/upgrade/blob/24f85bbc3408bf10b1cee93e4c395edf806beaa8/migrations/helpdesk_timesheet/saas~18.3.1.0/post-migrate.py#L44-L58 ). Even though the correct company_id is passed, it gets overridden during the process. and If the associated project does not have a company set, the company_id becomes False [here](https://github.com/odoo/enterprise/blob/83a1b88c8cae4db5c9b1bf82ee7ebb4e13c41b2a/helpdesk_timesheet/models/analytic.py#L81-L82), which results in a Validation Error because the [here](https://github.com/odoo/odoo/blob/6a36015e2ee69aafe3880bf1fff38439af5cd673/addons/hr_timesheet/models/hr_timesheet.py#L214-L216) unable to determine the correct employee linked to the company. OPW: 5004092 Forward-Port-Of: odoo/enterprise#95226 Forward-Port-Of: odoo/enterprise#92507
Fixed an issue where website event pages could identify the wrong event when the event title used non-Latin characters such as Chinese. This ensures users can reliably edit and manage events regardless of the language used in the event name.
Original PR description
Issue: The Website Event page uses a matching regex to get the event id from the url. URLs are formatted like: '/event/[event-title]-[event-id]/register' The event-id is recovered from the url by matching on the first number that is not followed by a word character. However, for non-latin event titles (e.g. Chinese), the characters are converted using '%' characters and numbers (e.g. '%E6%88%91%E'). The regex consistently fails to get the event id in this case, and returns incorrect IDs. Steps to reproduce: 1. Install `website_event` and go to the website view of any event. 2. Edit the event, to add a Chinese title 3. Save, and try to edit again the same title. Solution: The regex is modified to look for the first number that is followed by either a "/" or the end of a String. opw-5038334 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224164
This fixes an issue where non-admin website editors could see an error when changing the website menu bar. The system now avoids loading restricted view fields they are not allowed to access, so editing can continue normally without exposing protected data.
Original PR description
Scenario: - get a user with "Editor and Designer" and no admin rights - with this user, edit the website and change the menu bar Result: A traceback error is shown with this access error the logs: You do not have enough rights to access the field "visibility_password" on View (ir.ui.view). Please contact your system administrator. Operation: read Groups: allowed for groups 'Role / Administrator' Issue: In 9830f77d827c6efeb5f796caac604904350f5a80 the method ir.ui.view()._get_combined_archs was changed to prefetch more fields than before, but prefetching the "visibility_password" field was causing an access error when checking if we had access to it. Fix: prevent prefetching restricted fields. Note: the added test without the fix, fails because of the security warning error, and having the custom view still disabled. opw-4935489 Forward-Port-Of: odoo/odoo#219304
The shop price range filter now uses the corrected search term when Odoo suggests close matches, such as treating "dask" as "desk". This keeps filtering accurate and prevents shoppers from losing the ability to narrow results by price after a fuzzy search.
Original PR description
Versions
--------
- 17.0+
Steps
-----
1. Navigate to the website shop page.
2. Search for a term that is close to an existing one, but not exact ("dask" instead of "desk" for example)
Issue
-----
The price range filter will stop functioning
Cause
-----
The domain used to get the minimum and maximum prices for the price range filter used the original search term regardless of whether the actual search results are from a fuzzy search term or not
Solution
--------
When there is a fuzzy search term use it to get the minimum and maximum prices for the price range filter instead of the original search term
opw-5020545
Forward-Port-Of: odoo/odoo#228203
Forward-Port-Of: odoo/odoo#226059Point of Sale now shows the optional product popup when a cashier scans a product barcode, matching the behavior already seen when selecting a product on screen. This helps ensure upsell or add-on suggestions are not missed during faster barcode-based sales flows.
Original PR description
Before this commit, the optional product popup was only displayed when adding a product by clicking on it. When the product was added through barcode scanning, the popup did not appear. This commit ensures that the optional product popup is consistently shown both when clicking on a product and when scanning its barcode. opw-5089175 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227656
This fix prevents an access error when customers create an invoice from a QR code in Point of Sale configurations involving parent and branch companies. It helps ensure self-service invoicing works reliably when journals and products belong to related companies.
Original PR description
Before this commit, in a multi-company setup, an access error could occur when generating an invoice from a QR code. Steps to reproduce: 1. Create a parent company and a branch company. 2. Create a PoS in the branch company and assign a sales journal from the parent company. 3. Create a product assigned to the branch company. 4. Enable Self Service invoicing in the PoS settings. 5. Create an order in the PoS and then try to create an invoice with the QR code. Result: an access error was raised. opw-5050536 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225483
This fix prevents Point of Sale records created or changed on a device from disappearing during server synchronization. It also makes self-order order retrieval more reliable by tying orders to order-specific details instead of a shared table QR code, reducing confusion across devices.
Original PR description
## Commit 1: *: point_of_sale, pos_loyalty, pos_online_payment, pos_sale, pos_self_order Before this commit, when syncing records from the server, local records that were not yet synced…
## Commit 1: *: point_of_sale, pos_loyalty, pos_online_payment, pos_sale, pos_self_order Before this commit, when syncing records from the server, local records that were not yet synced (isSynced=false) could be lost if they were not present in the server response. This could happen for example when a record was created locally and the server response did not include it. This commit fixes this issue by ensuring that local records are always kept when syncing, even if they are not present in the server response. This is done by merging the local records with the server records based on their keys. --- This commit also replace all checks of the form `typeof id === "number"` with `isSynced` checks. This is because the `id` of a record can be a temporary string id before it is synced with the server. ## Commit 2 Before this commit, `table_access_token` was used to retrieve a customer's orders, making it possible to “share” orders between multiple devices by scanning the same QR code. This caused comprehension and synchronization issues. This commit rectifies this by only taking into account order-related information. - `write_date` - `state` - `access_token` If a user's device contains this information, they will be able to retrieve their orders. These changes are related to commit https://github.com/odoo/odoo/commit/b903acd72142757bfdfc31c51d78b39c8e8786b9, which adds the `self_ordering_table_id` field, allowing multiple orders from Self Order to be linked to the same table at the same time.
This fix prevents point-of-sale records created locally from being lost when data is synchronized with the server. It helps protect in-progress sales, refunds, payment settlements, and related local POS activity when connectivity or server responses are incomplete.
Original PR description
*: l10n_br_edi_pos, pos_settle_due, pos_urban_piper Before this commit, when syncing records from the server, local records that were not yet synced (isSynced=false) could be lost if they were not present in the server response. This could happen for example when a record was created locally and the server response did not include it. This commit fixes this issue by ensuring that local records are always kept when syncing, even if they are not present in the server response. This is done by merging the local records with the server records based on their keys. --- This commit also replace all checks of the form typeof id === "number" with isSynced checks. This is because the id of a record can be a temporary string id before it is synced with the server.
This fixes broken images in several Odoo email templates by replacing SVG files with PNG versions that are supported by most email clients. Customers and event attendees should now see calendar icons and logos properly in emails instead of missing-image placeholders.
Original PR description
[1] and [2] both introduced svg images in mail templates, which are not supported in most mail clients. Consequently, these emails look broken. Instead the SVGs are converted to PNGs (if not already existing) which is widely supported. PNG is required to support transparency. The custom odoo font with font_to_img route cannot be used either as it does not support colored icons. task-5095354 [1]: https://github.com/odoo/odoo/commit/376677f75192caa898dbaf7bb4e76d1a948d9471 [2]: https://github.com/odoo/odoo/commit/2e37c2ece56fa8401e9b50188f320fccbb7e0170
Salespeople can now open CRM leads even when similar leads belong to colleagues they cannot access. This prevents an error page and keeps lead review workflows moving smoothly.
Original PR description
Previously, leads belonging to a salesman with duplicates that were inaccessible to that salesman could not be accessed, instead return a traceback. Steps to reproduce: - Create a fresh database with the CRM module and demo data - Login as Marc Demo - Try to access the "DeltaPC: 10 Computer Desks" lead - A traceback is returned due to lack of access on leads - belonging to Mitchell Admin Fix: The "duplicate_lead_ids" and "duplicate_lead_count" CRM fields are computed as superuser, allowing for errorless computing even if the user does not have access to all similar leads. task-5072901
The live chat widget now respects the configured delay before opening automatically. This prevents chats from popping up immediately when a business has set a timed delay, improving the visitor experience and preserving intended engagement rules.
Original PR description
### Issue: The livechat delay doesn't work as expected. #### To reproduce: 1- Create a livechat channel 2- In channel rules, set these rules: - Live Chat Button: Open automatically - Enable ChatBot: Always - Open automatically: 20 3- In widget tab, you can find channel URL, open it. 4- We expect it opens after 20s but it opens immediately ### Cause: This issue is caused during refactoring: https://github.com/odoo/odoo/commit/6d903ccd0ad48fc8f58094b45f01656b1d47acfe https://github.com/odoo/odoo/blob/6d903ccd0ad48fc8f58094b45f01656b1d47acfe/addons/im_livechat/static/src/embed/common/autopopup_service.js#L21-L27 Here storeService promise is not ready yet but we are trying to use `storeService.livechat_rule?.auto_popup_timer` which is `Nan`, as a result the timeout will be 0, opening it without delay. opw-4988003 Forward-Port-Of: odoo/odoo#228386
This fix prevents the Point of Sale from returning to the first screen when a customer takes time to complete an online payment. It helps keep the active order details intact, avoiding empty ticket screens or unfinished orders after the payment flow resumes.
Original PR description
Description of the issue/feature this PR addresses: When doing online payment in POS, customer may take some time and the POS may go to idle state. This causes when it goes to idle and back to alive,…
Description of the issue/feature this PR addresses: When doing online payment in POS, customer may take some time and the POS may go to idle state. This causes when it goes to idle and back to alive, it will direct to the first screen. Steps to reproduce: - Create POS & setup POS online payment (use Demo online payment) - Open POS, add a product, go to payment screen, select the online payment method - Let it go to idle state (triggered by useIdleTimer) - Move the cursor, or at least make it back to active state - You'll see the screen be redirected to first screen - Do the payment, it will redirect to TicketScreen with empty order info, and when you click new order the previous one is still hanging there Alternatively take a look at the recording: https://github.com/user-attachments/assets/b8e8ae81-df04-41e0-b122-002413714735 Current behavior before PR: - Because it bounces to first screen, when attempting payment the pos does not have the order state Desired behavior after PR is merged: - Do not redirect if in payment screen, so that order context won't be lost --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215651 Forward-Port-Of: odoo/odoo#202220
Users can again add custom fields from the optional columns menu in Knowledge article lists when Studio is installed. The fix ensures Odoo correctly recognizes when this action should be editable, avoiding a blocked customization workflow.
Original PR description
Steps to reproduce ================== - Install knowledge, web_studio - Go to knowledge > Articles - Click on the optional columns dropdown - Click on "Add Custom Field" => This action is not editable by Studio Cause of the issue ================== Since https://github.com/odoo/odoo/pull/205129/commits/c18e93191c516f6e37093f068e8934cba8495891 the event ACTION_MANAGER:UI-UPDATED is triggered before the list renderer has a chance to register for it. Solution ======== We don't actually need to listen to that event to get the info we need. The action xml_id was missing, but it was added in the view subenv config. opw-5066488 Forward-Port-Of: odoo/enterprise#95433 Forward-Port-Of: odoo/enterprise#94794