Tuesday, May 19, 2026
20 changes · saas-19.3
Enhancements to existing features
This update enhances the timesheet interface by pausing the timer when a time sheet is selected for editing, and now displays timesheets in order of most recent activity. This provides a smoother and more efficient workflow for users managing their time.
Original PR description
- Make the timer pause when a time sheet is selected to be edited - Adjust the project listing sorting method to show the most recent first --- task-6131398 Forward-Port-Of: odoo/enterprise#114795
Resolved issues and error corrections
This update resolves an issue where the Planning Gantt view didn't correctly calculate working hours when the view wasn't grouped by resources. The fix ensures the total row accurately displays working schedule data regardless of grouping, improving planning accuracy for users.
Original PR description
Issue: ---------------------------------------- In the Planning Gantt view when we don't group by resources, the total row is not considering the working hours. Steps to reproduce:…
Issue: ---------------------------------------- In the Planning Gantt view when we don't group by resources, the total row is not considering the working hours. Steps to reproduce: ---------------------------------------- - Open Planning - Remove the default group by resources - Have at least a planning slot for a non-flexible employee - The total row doesn't take the working schedule into account Cause: ---------------------------------------- Since [an improvement,](https://github.com/odoo/enterprise/commit/cc35e1a4729453e4f788034a94402ab048eadfcb) the working hours data in given to the `PlanningGanttRenderer` through the progress bars data. This is an issue because the progress bars are only there if we group by resources. ([src](https://github.com/odoo/enterprise/blob/423ab064847dd41d36778a812390e3bec53ba4dc/planning/models/planning_slot.py#L2669-L2678)) Solution: ---------------------------------------- In this commit we partially revert the commit adding the working intervals in the progress bars. Instead of doing it in `_gantt_progress_bar_resource_id()` we create a new method `_get_gantt_planning_data()` which is called directly in `get_gantt_data()` and returns useful information even when there are no progress bars. opw-5507063 Forward-Port-Of: odoo/enterprise#116914 Forward-Port-Of: odoo/enterprise#112522
This update resolves an issue where kitchen tickets were incorrectly printed when platform orders were cancelled, regardless of where the cancellation occurred (Odoo PoS or provider platform). Now, cancelled platform orders will no longer trigger kitchen ticket printing, improving order accuracy and reducing unnecessary printing.
Original PR description
This fixes platform orders should not send to kitchen printer when the platform orders being cancelled. Currently accepting platform orders will not send to kitchen printer. However when cancelling platform orders on either provider platform, or within Odoo PoS. It will print a kitchen ticket of customer note. task-6071740 Forward-Port-Of: odoo/enterprise#114171
This update resolves an issue where list markers with trailing empty lines or complex formatting (links, copy-paste) didn't consistently receive color or font size adjustments. The fix ensures that list items are fully recognized for styling, regardless of formatting, improving the user experience when applying text and font styles to lists.
Original PR description
### Steps to reproduce: **Issue 1:** - Create a list with multiple items and leave the last item empty. - Press Ctrl + A to select all content. - Apply a text color from the toolbar. - The list…
### Steps to reproduce: **Issue 1:** - Create a list with multiple items and leave the last item empty. - Press Ctrl + A to select all content. - Apply a text color from the toolbar. - The list marker of the last item does not receive the color. **Issue 2:** - Create a list and type some text. - Press Ctrl+A to select all. - Apply a font size via the font-size input (inline style=`font-size: ...`). - Then apply a font size via the font-size dropdown (class-based). - Font size from the dropdown is not applied. **Issue 3:** - Create a list item and type some text. - Convert the text into a link. - Copy the link. - Press Enter and paste the link. - Select the entire list using the mouse. - Apply font size & observe that font size is not applied to some list items. **Issue 4:** - Go to Todo and create a list. - Select all items (Ctrl + A). - Apply a background color class from the toolbar. - Apply a font color using inline styling. - Observe that the font color is not visible. ### Description of the issue/feature this PR addresses: - Full-selection detection relied on Range.isPointInRange() checks on list item leaf nodes. When a list item ended with a trailing empty line, the selection often stopped on the `<li>` element and did not include the `<br>` placeholder. As a result, such list items were not considered fully selected when applying text color, and their markers remained unstyled. - Applying a font-size class on a fully-selected list item could leave existing inline font-size on list item, so new class didn’t take effect. - Creating links inside list items & repeated copy-paste operations left empty text nodes (feff cleanup). Manual selection doesn't include these nodes, `areNodeContentsFullySelected` reports that list item is not fully selected. As a result, some list items were not considered fully selected, and font size was not applied. - Background color `(bg-*)` classes also define a color property. When a font color is applied, the color is set on the `<li>`, but the nested `font.bg-*` element’s color takes precedence, causing the applied font color to be overridden. ### Desired behavior after PR is merged: - List items with trailing empty line are now treated as fully selected, even when selection ends before the `<br>` placeholder. - Clear any existing font-size styles on the list item before applying the new font-size class, so the dropdown font size applies correctly. - Empty text nodes are removed before applying font size, ensuring full list item selection and consistent font-size application. - When a list item (li) has a text color (inline style or text-* class), and nested font element has only a background color class then font element now inherits the color from the li. task - 5454639 Forward-Port-Of: odoo/odoo#264759 Forward-Port-Of: odoo/odoo#241827
This update resolves issues that occurred when archiving employees with attendance and planning modules. Specifically, it ensures employees are properly checked out of attendance and planning slots during archiving, preventing access errors and data inconsistencies. The fix utilizes a 'sudo' method to grant necessary permissions for updates.
Original PR description
- Attendance checkout - Step to reproduce: with attendance installed and an employee checked in, archive that employee by HR user. If missing attendance rights, the employee will be archived but not…
- Attendance checkout
- Step to reproduce: with attendance installed and an employee checked in, archive that employee by HR user. If missing attendance rights, the employee will be archived but not checked out from its ongoing attendance.
- Cause: if no role set for Attendance (default), no permission to update the employee attendance while archiving.
- Solution: using sudo method so that any user with sufficient rights to archive an employee, can trigger check out of the corresponding attendance.
- Planning access error (fixed in 18.0 by https://github.com/odoo/odoo/pull/219395)
- Step to reproduce: with attendance and planning installed, archive an employee having planning slots. If missing planning rights, an access error is raised
- Cause: on employee archive, the corresponding planning.slots are updated and some fields recomputed with insufficient rights.
- Solution: using sudo method for recompute.
Task: 6131692
Forward-Port-Of: odoo/odoo#264518
Forward-Port-Of: odoo/odoo#260566This update fixes a bug that caused remote meeting tabs to crash when the host ended a call. The change ensures that call action dropdowns handle call disconnections gracefully, preventing errors and maintaining the existing user interface. This improves stability and reliability for users accessing meetings from multiple tabs.
Original PR description
**Steps to Reproduce:** - Start a new meeting (Host Tab). - Duplicate the tab or open the same meeting URL in another tab (remote tab). - In the remote tab, open the call menu (dropdown). - From the…
**Steps to Reproduce:** - Start a new meeting (Host Tab). - Duplicate the tab or open the same meeting URL in another tab (remote tab). - In the remote tab, open the call menu (dropdown). - From the host tab, disconnect/end the call. - Crashes on Remote Tab. **Current behavior before PR:** Before this PR, duplicating a meeting tab could leave the remote tab with a stale call action dropdown after the host ended the call. Since some action properties and handlers still assumed that selfSession and channel were always available, interacting with the dropdown could crash with errors. **Desired behavior after PR is merged:** After this PR, call action labels/classes defensively tolerate missing selfSession or channel references, and stale click handlers gracefully no-op when the call disappears mid-interaction. This prevents remote tab crashes during call teardown while preserving the existing UI behavior. task-[6191740](https://www.odoo.com/odoo/project/1519/tasks/6191740) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264989
This update addresses an issue where customers could automatically have orders confirmed when using gift card balances to cover event costs. Now, Odoo requires the standard checkout process to be completed, even with a fully covered cart, ensuring accurate order processing and preventing potential errors. This improves order reliability and customer experience.
Original PR description
**Before this commit** If a gift card balance fully covers a shopping cart containing multiple events, Odoo auto-confirms the order as soon as the last event is added, skipping the final checkout step. **After this commit** Sale orders will no longer be automatically confirmed when a customer registers for a paid event, even if an applied gift card brings the total balance to zero. opw-5896626 Forward-Port-Of: odoo/odoo#264830 Forward-Port-Of: odoo/odoo#246629
This update fixes an issue where tax returns were incorrectly including all tax amounts, regardless of the specific region (like British Columbia or Manitoba). Previously, tax returns generated entries with taxes from multiple locations. Now, tax returns accurately reflect taxes related to the specific return type and region, ensuring accurate reporting for Canadian businesses. This improves the reliability of tax return data.
Original PR description
Issue: Validating a tax return creates an entry with all the tax aml from the company instead of filtering them according to the tax return type. Steps to reproduce: - In a company in Canada - Invoice a Customer from British Columbia in the previous month (A) - Confirm - Go to tax report -> Return - Review and Validate tax return for "Manitoba PST Return (CA)" for month A - Click on the 3 dots -> View Entry Current Behavior: - Entry has lines for PST in British-Columbia and GST taxes Expected behavior: - Entry has lines for PST in Manitoba only Cause: https://github.com/odoo/enterprise/pull/98158 introduces method `_get_vat_closing_entry_additional_domain` in the wrong class. opw-6065838 Forward-Port-Of: odoo/enterprise#116813 Forward-Port-Of: odoo/enterprise#116366
This update fixes an issue where e-Faktura invoices for non-Polish customers incorrectly included the country code in the VAT number. The change ensures the correct VAT number format is used, aligning with KSeF regulations and preventing potential invoice rejection. This ensures compliance and accurate invoice generation.
Original PR description
Currently, an incorrect VAT format is used in the generated `FA3 XML` for non-Polish partners, where the VAT number includes the country code. **Steps to reproduce:** - Install the `l10n_pl_edi`…
Currently, an incorrect VAT format is used in the generated `FA3 XML` for non-Polish partners, where the VAT number includes the country code. **Steps to reproduce:** - Install the `l10n_pl_edi` module and switch to a `PL Company`. - Go to Settings and enable `Allow KSeF integration` (refer to [1]). - Create and confirm an invoice for a customer (e.g., Azure Interior). - Send the invoice using `by KSeF (e-Faktura)`. **Observation:** In the generated XML file, the `NrID` field contains the VAT number `with the country code` for non-Polish partners. **Root Cause:** At [2], `get_vat_number` sets the VAT number using `compact` from `stdnum.pl.nip`, which only works for Polish VAT numbers. At [3], `get_vat_number` correctly formats Polish VAT numbers without the country code in the `if condition`. However, in the fallback (else) case, it returns the VAT number as it is, including the country code. **Fix:** This commit ensures that for non-Polish VAT numbers, the country code is removed before setting the `NrID` or `NrVatUE` values in the XML, aligning the format with KSeF requirements. Ref: https://ksef.podatki.gov.pl/media/4u1bmhx4/information-sheet-on-the-fa-3-logical-structure.pdf (Page no.: 19) [1]: https://www.odoo.com/mail/message/1057847327 [2]: https://github.com/odoo/odoo/blob/d73e5662a0af7c549008661f743ba5d51f765339/addons/l10n_pl_edi/models/account_move.py#L257 [3]: https://github.com/odoo/odoo/blob/d73e5662a0af7c549008661f743ba5d51f765339/addons/l10n_pl_edi/data/fa3_template.xml#L67-L82 opw-6120118 Forward-Port-Of: odoo/odoo#263081
This update resolves several bugs impacting the AI Fields functionality within Odoo Enterprise. Specifically, it corrects an error message that previously appeared to users and ensures accurate source citations are used when generating AI responses, improving the reliability of the AI Fields tool. This enhances the overall user experience and data integrity.
Original PR description
This commit fixes the following bugs: - In 99f76c1, tools.py was moved from ai_fields module instead ai_fields_tools in the ai module. However, the 'odoo.addons.ai_fields.tools.UnresolvedQuery' error which is caught in _computeAiField method wasn't changed to reflect the new file path which made the error appear to the user instead of just being a toaster message. - When performing web_grounding, the URL citations are replaced by [WEB_SOURCE:<id>] to prevent LLM hallucinating sources during the agentic_loop. These placeholders are replaced again by the actual URLs before sending the response back to the user. However, this wasn't done in the case of _get_direct_response when the web_grounding completion option was set to True and was only done if the custom web_search tool was used. This caused these placeholders to appear in AI Fields. task-6209766
This update resolves an issue where users couldn't create new templates after undoing a previous template conversion. The fix ensures the original project documents folder is properly restored, eliminating a conflict that prevented subsequent template creation. This improves the user experience and workflow for managing project templates.
Original PR description
Steps to Reproduce: --- 1. Create a new project. 2. Convert it into a template. 3. Click on "Undo". 4. Try to convert the project into a template again. Issue: --- After undoing the template…
Steps to Reproduce: --- 1. Create a new project. 2. Convert it into a template. 3. Click on "Undo". 4. Try to convert the project into a template again. Issue: --- After undoing the template conversion, the project's original documents folder remained archived while the template's documents folder stayed active. This inconsistent state prevented subsequent template creation from the same project. Current behaviour: --- A UserError is raised: "You cannot duplicate document(s) in the Trash." Expected behaviour: --- Undoing the template conversion should properly restore the original project's documents folder to active state and clean up the template's documents folder, allowing template conversion again without document folder conflicts. Fix: --- - Archive original project's documents folder during template creation to prevent mixed active/inactive states during copy operations - Implement callback system to properly unarchive original project's documents folder during undo task-4916027 Forward-Port-Of: odoo/odoo#264429 Forward-Port-Of: odoo/odoo#223152
This update resolves a bug where undoing a template conversion would leave the project's documents folder in an inconsistent state, preventing further template creation. The fix ensures the original project's documents are properly restored and cleaned up during the undo process, improving template management.
Original PR description
Steps to Reproduce: --- 1. Create a project with documents. 2. Convert it into a template. 3. Click on "Undo". 4. Try to convert the project into a template again. Issue: --- After undoing the template conversion, the project's original documents folder remained archived while the template's documents folder stayed active. This inconsistent state prevented subsequent template creation from the same project. Current behaviour: --- A UserError is raised: "You cannot duplicate document(s) in the Trash." Expected behaviour: --- Undoing template conversion should properly restore original project's documents folder and clean up template's documents folder. Fix: --- - Archive original project's documents folder during template creation - Implement documents folder unarchival during undo operations task-4916027 Forward-Port-Of: odoo/enterprise#117303 Forward-Port-Of: odoo/enterprise#91595
This update fixes an issue where prepaid tax calculations were inaccurate due to rounding errors, specifically when dealing with downpayment invoices. The change ensures that tax amounts are calculated correctly using global rounding, preventing discrepancies and improving financial reporting accuracy. This impacts users relying on the l10n_sa_edi module for Saudi Arabian tax compliance.
Original PR description
### Steps to reproduce: - Download 'Sales', 'Accounting', and 'l10n_sa_edi' modules - Settings > Accounting > Rounding Method > Enable global rounding - Create sale order with 8 lines at 29.7 each…
### Steps to reproduce: - Download 'Sales', 'Accounting', and 'l10n_sa_edi' modules - Settings > Accounting > Rounding Method > Enable global rounding - Create sale order with 8 lines at 29.7 each with 15% taxes (triggers rounding precision issues) - Create and confirm 100% downpayment invoice - Deliver, then create final invoice with downpayment lines - Call `_l10n_sa_get_prepaid_amount()` on final invoice > Tax amount was calculated as 35.67 instead of correct 35.64 ### Cause of Issue: The prepaid amount calculation was summing pre-rounded `tax_amount_currency` values from individual downpayment lines (4.45 + 4.46 + 4.46... = 35.67), instead of summing unrounded `raw_tax_amount_currency` values (4.455 × 8 = 35.64) to calculate `tax_amount`. https://github.com/odoo/odoo/blob/27930ae41a5f03bd499983109de7f632472c3650/addons/l10n_sa_edi/models/account_edi_xml_ubl_21_zatca.py#L227-L240 This violates Odoo's [recent change](https://github.com/odoo/odoo/pull/180062) in `round_globally` pattern which states: https://github.com/odoo/odoo/blob/8a88756bed194910bc5a47e93f0e29610dbeee1f/addons/account/models/account_tax.py#L2208 ### Fix: Ensure cumulative rounding errors are avoided and correct global rounding is applied. opw-5881564 Forward-Port-Of: odoo/odoo#264713 Forward-Port-Of: odoo/odoo#261278
This update resolves an issue where dragging calendar events with their popovers open was impossible. The fix ensures that the popover closes automatically during a drag, allowing for smooth event movement. It also eliminates popover flickering that occurred during the drag and drop process.
Original PR description
[FIX] web: fix event drag and drop with opened popover Fix impossible event drag and drop when the event has its popover opened. On drag start, the popover should close to allow dragging the event. [FIX] web,calendar: fix popover flicker on event drag Fix the popover flickering when drag and dropping an event with its popover opened. Task-5965017 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264347
This update fixes an issue where POS Managers couldn't access key features after a system update. The changes granted POS Managers the necessary permissions to access customer information and navigate the system, ensuring they can perform their roles effectively. A duplicate test was also removed to streamline the testing process.
Original PR description
POS Manager heavily relied on stock user to access many different models, after the seperation of `point_of_sale` and `pos_stock`, we needed to allow `point_of_sale` users to access `res.partners` as well as adding `group_user` to it, so it can access the home menu, which without it managers aren't able to do a bunch of actions. Morever, there was a duplicated test that was removed. Runbot Error: 242929 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update optimizes a key calculation within the MRP subcontracting purchase module, reducing unnecessary database queries. By checking if a product is linked to a bill of materials, the system avoids redundant searches, particularly when processing a large number of order points. This results in significantly faster lead time calculations, improving overall system performance.
Original PR description
When computing `qty_to_order` 1-3 extra queries are made by `get_lead_days()`, which can cause performance issues when computing `qty_to_order` for a large number of orderpoints. This commit aims to…
When computing `qty_to_order` 1-3 extra queries are made by `get_lead_days()`, which can cause performance issues when computing `qty_to_order` for a large number of orderpoints. This commit aims to prevent these extra queries by returning early if the current product is not associated with a bom. The amount this commit speeds up the compute depends on how many of products passed into `_get_lead_days()` are associated with a bom. `qty_to_order` is no longer a stored field after this commit: https://github.com/odoo/odoo/pull/159432 This benchmark was done in 18.0 on /stock.warehouse.orderpoint/search_panel_select_range. This call does not trigger the compute on all orderpoints in 17.0 as the field is stored but calling the compute directly on all orderpoints results in the same speed up as seen in 18.0. | Orderpoints | % of products linked to a bom | Time before | Queries before | Time after | Queries After | |-------------|-------------------------------|-------------|----------------|------------|---------------| | 800 | 50% | 2.8s | 1570 | 2.3s | 818 | | 8,000 | 0% | 28.2s | 16,698 | 15.3s | 242 | | 8,000 | 25% | 29.6s | 16,833 | 19.2s | 4497 | | 8,000 | 50% | 29.8s | 16,925 | 23.2s | 8693 | | 8,000 | 75% | 31.6s | 16,949 | 27.6s | 12827 | Forward-Port-Of: odoo/odoo#264848 Forward-Port-Of: odoo/odoo#262321
This update corrects a bug where purchase order quantities were incorrectly calculated due to a mismatch between product units of measure. The fix ensures accurate quantity received, preventing invoicing errors and improving order processing. Additionally, a related issue with error messages has been resolved for improved debugging.
Original PR description
Bug introduced in: https://github.com/odoo/odoo/commit/385e4cab3ba6d3b2c4975565125389eb07f2ef45 Steps to reproduce: - Create a new database with only the Purchase module installed - Enable the "Units…
Bug introduced in: https://github.com/odoo/odoo/commit/385e4cab3ba6d3b2c4975565125389eb07f2ef45 Steps to reproduce: - Create a new database with only the Purchase module installed - Enable the "Units of Measure & Packagings" option - Create a storable product "P1" with the following vendor pricelist: - Vendor: Azure Interior (1 pack of 6 for $10) - Create a purchase order: - Vendor: Azure Interior - Quantity: 3 packs of 6 of P1 - Confirm the PO - Click the Receive button (available without the Stock module since v19.1) Problem: 1:/ Expected behavior: qty_received = 3 (in purchase UoM: packs of 6) Actual behavior: qty_received = 18 (product UoM: units) `product_uom_qty` (expressed in the product's UoM) was used instead of `product_qty` (expressed in the purchase line's UoM) when computing `qty_received`. Since `qty_received` feeds into `quantity_to_invoice`, this caused the invoicing autocomplete to suggest 18 packs of 6 instead of the correct 3 packs of 6. 2:/ The parameter `invalid_targets` was not properly passed to the translation function in the error message, causing a traceback when trying to receive a PO in an invalid state. opw-6080527 Forward-Port-Of: odoo/odoo#261630 Forward-Port-Of: odoo/odoo#260163
This update corrects a bug that prevented users from successfully purchasing multiple gift cards through the website. The fix involved adjusting a function to correctly handle the 'post_confirm' argument, resolving a type error that was causing the issue. This ensures a smoother purchase experience for customers.
Original PR description
Currently, an error will occur when user tries to buy multiple giftcards from the website. Error: ``` TypeError: SaleOrder._get_real_points_for_coupon() got an unexpected keyword argument 'post_confirm' ``` This occurred because the function `_get_real_points_for_coupon()` accepts the argument `_post_confirm`[1] (changed by this [PR]), whereas here in this template we pass `post_confirm`. Changed the method signature to accept the argument `post_confirm`. [1]: https://github.com/odoo/odoo/blob/32d02f22a0f397ddcc83fe1cee53f8f62d73338d/addons/sale_loyalty/models/sale_order.py#L850 [PR]: https://github.com/odoo/odoo/pull/237354/changes#diff-05c263ea6063dd0045f2cd5be1888d608448ef8ff11f23371616334273c133e5L781-R845 sentry-7482959769 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where stock valuations were inaccurate when users had timezones different from UTC. The change ensures that stock valuation calculations correctly account for the user's timezone, leading to accurate inventory reporting. This impacts how stock values are calculated for AVCO and FIFO methods.
Original PR description
**Issue** While performing stock valuation, when a `to_date` is selected, the resulting valuation may be incorrect depending on the user's timezone. **Steps to reproduce** - Set the user timezone to…
**Issue** While performing stock valuation, when a `to_date` is selected, the resulting valuation may be incorrect depending on the user's timezone. **Steps to reproduce** - Set the user timezone to UTC+1 - Create a storable product with: - quantity: 10 (created today) - unit cost: 5 - valuation method: AVCO - Go to Accounting > Review > Inventory > Inventory Valuation - Select today's date - Click on "Ending Stock" -> The total value and quantity in stock are 0 instead of respectively 50 and 10. **Cause** When selecting a date (e.g. 12/04), the `to_date` is initially set at 00:00 in the user's timezone. An attempt is then made to convert it to 23:59 to avoid excluding quantities created during that day: https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/stock_account/models/product.py#L147-L150 However, this conversion is performed on a naive UTC datetime. For a user in UTC+1, this results in the following situation: - 12/04 00:00 (user timezone) -> 11/04 23:00 UTC - Converted to 23:59 UTC -> 12/04 00:59 in user timezone As a consequence, most of the quantities created on 12/04 are excluded from the valuation. This issue impacts AVCO (and FIFO as well), as `at_date` is used during cost computation: https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/stock_account/models/product.py#L147-L150 In addition, `at_date` is added to the context, while `qty_available` relies on `to_date` instead: https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/stock/models/product.py#L151-L153 This inconsistency leads to incorrect quantities and valuation results. opw-5491743 Forward-Port-Of: odoo/odoo#255230 Forward-Port-Of: odoo/odoo#246163
This update optimizes a key process in Odoo's accounting and sales modules for Vietnam (l10n_in and l10n_in_sale). The change eliminates a redundant database query, significantly speeding up import operations and invoice processing. This improves overall system performance and responsiveness.
Original PR description
There is no need to do a query to get a random foreign state. This search can be performed many times during imports. While the query is generally not reading a lot of data, it is still doing a seq…
There is no need to do a query to get a random foreign state. This search can be performed many times during imports.
While the query is generally not reading a lot of data, it is still doing a seq scan because of the ORDER BY, while the query can be avoided completely.
```sql
EXPLAIN ANALYZE
SELECT "res_country_state"."id"
FROM "res_country_state"
WHERE "res_country_state"."code" NOT IN ('IN')
ORDER BY "res_country_state"."code", "res_country_state"."id"
LIMIT 1;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Limit (cost=84.93..84.94 rows=1 width=8) (actual time=0.450..0.450 rows=1 loops=1)
-> Sort (cost=84.93..90.49 rows=2224 width=8) (actual time=0.449..0.449 rows=1 loops=1)
Sort Key: code, id
Sort Method: top-N heapsort Memory: 25kB
-> Seq Scan on res_country_state (cost=0.00..73.81 rows=2224 width=8) (actual time=0.012..0.281 rows=2223 loops=1)
Filter: ((code)::text <> 'IN'::text)
Rows Removed by Filter: 2
Planning Time: 0.075 ms
Execution Time: 0.462 ms
```
This can be worse if when the table is not in the buffer.
Forward-Port-Of: odoo/odoo#265007