Saturday, March 14, 2026
24 changes · saas-19.2
New functionality added to Odoo
This update introduces a new interactive onboarding tour within the Field Service Planning module. This tour guides new users through the key features and functionalities, making it easier for them to quickly understand and utilize the system. It improves the user experience and accelerates adoption of this important module.
Original PR description
task-5265667
This update enables Danish companies to automatically generate official FIK payment references on customer invoices through sales journals. Users simply configure their bank's FIK creditor number, ensuring compliant payments without disrupting existing workflows. This simplifies Danish accounting processes and improves data accuracy.
Original PR description
Before: - Danish companies had to rely on manual or non-standard payment communication on invoices. - They could not generate official FIK payment references. After: - Sales journals can now generate Danish FIK payment references automatically. - Users configure an 8-digit bank-issued FIK creditor number on sales journal. Impact: - Enables compliant Danish FIK payments without changing user workflows. Related PR: https://github.com/odoo/enterprise/pull/102612 taskID-5401553 Forward-Port-Of: odoo/odoo#240829
Enhancements to existing features
This update removes a restriction on outgoing stock sequence codes for Turkish companies, allowing users to include warehouse identifiers. This change ensures compatibility with Nilvera's e-Dispatch requirements while retaining operational flexibility. Additionally, the UI has been slightly improved for easier Nilvera status viewing.
Original PR description
# Description of the issue/feature this PR addresses: Previously, the `sequence_code` of `stock.picking.type` was restricted to exactly 3 characters for outgoing pickings of Turkish companies. This…
Resolved issues and error corrections
This update addresses several usability issues within the timesheet grid, particularly in the systray view. It includes fixes for display accuracy, expanded descriptions, and improved user interface elements like button labels and icons, ultimately streamlining timesheet management.
Original PR description
Task-5956044
# Description of the issue/feature this PR addresses: Previously, the `sequence_code` of `stock.picking.type` was restricted to exactly 3 characters for outgoing pickings of Turkish companies. This was introduced because Nilvera requires a 3-character prefix when sending e-Dispatch documents. However, enforcing a 3-character sequence code prevents users from including warehouse identifiers in the prefix (e.g. `WH/OUT`). Odoo normally relies on this structure to help users filter and distinguish warehouses. With the restriction in place, this functionality was lost. # Desired behavior after PR is merged: This commit removes the 3-character restriction on the sequence code and introduces a computed field that extracts the required 3-character GIB prefix from the sequence code. The computed prefix is used when sending documents to Nilvera, while users can keep meaningful sequence codes for operational use. Additional improvements: - Move the e-Dispatch tab next to "Operations" in `view_picking_form` - Reduce the spacing between the text and reload button for the "Nilvera Status" field in `view_picking_form` task-5964505 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a previous limitation that prevented sales products from being reinvoiced. With the new Services and Materials upselling flow, the ability to reinvoice sales products is now enabled, aligning with current business processes. This change ensures consistent and flexible reinvoicing options across all product types.
Original PR description
This commit fixes an issue where the reinvoicing policy option was only available for `purchase_ok` products. The `expense_policy` field was originally limited to expense-related use cases, which is why it was not shown for `sale_ok` products. However, with the introduction of the new Services and Materials upselling flow in Sales, this restriction is no longer valid. The reinvoicing policy should therefore also be available for `sale_ok` products. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent tour update was causing a crash due to incomplete data synchronization. This fix adds a brief delay to ensure all data is fully updated before the tour finishes, preventing the error. This improves the stability and reliability of the tour experience.
Original PR description
The crash occurs due to the test case introduced in PR https://github.com/odoo/odoo/pull/240366. The data is not fully synced with the backend when the tour execution completes, which leads to a crash. This commit introduces a delay to ensure that the data is properly synchronized with the backend before the tour finishes. Runbot-241918
This update fixes an issue where component pick transfers weren't correctly linking to all relevant manufacturing orders (MOs) when using a two-step manufacturing process (pick then manufacture). The fix ensures that all MOs associated with a sales order are linked to the pick transfer, improving order fulfillment accuracy. This prevents missed production steps and potential delays.
Original PR description
Current behavior --- When confirming 1 SO with 2 products with 1 BoM and 1 Rerouting Rule with 0 min/max, with warehouse rule pbm (2 steps: Pick then manufacture), it creates a picking transfer with…
Current behavior --- When confirming 1 SO with 2 products with 1 BoM and 1 Rerouting Rule with 0 min/max, with warehouse rule pbm (2 steps: Pick then manufacture), it creates a picking transfer with only 1 MO attached. Expected behavior --- The picking transfer should have 2 MO's. Steps to reproduce --- 1. Create 2 Products with different BoM's, keep per-product routes empty. 2. Set reordering rules for both to route: Manufacture. 3. Go to warehouses config and set manufacture rule to 2 step (pick -> manufacture) 4. Confirm a SO with those 2 products. Cause of the issue --- If we don't have any Make-to-Order routes for a product, the Make-to-Stock default rule of the warehouse would be used. In such case, all MO's related to such OP (orderpoint/warehouse) would be linked into one picking. The stock.picking model uses related fields to compute product_ids, which calculates relation using next(...) in the ORM. This takes only the first MO's stock move and ignores the second, hence ignoring other production groups. Fix --- Instead of using related fields, use compute to access every relavent production ids. --- opw-5442012 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249996
A bug was causing leave accruals to be missed in February. This update corrects a calculation error that was incorrectly applying accruals based on the previous year's carry-over date, ensuring accurate accrual calculations for each month.
Original PR description
steps to reproduce: ------------------- 1. Install Time Off 2. Go to Configuration > Accrual Plans 3. Create an accrual plan: * Set the accrued gain time to "At the start of the accrual period" * Set…
steps to reproduce: ------------------- 1. Install Time Off 2. Go to Configuration > Accrual Plans 3. Create an accrual plan: * Set the accrued gain time to "At the start of the accrual period" * Set the carry-over time to "At the start of the year" 4. Create a milestone: * Set the number of accrued days to 1 * Set the accrual frequency to "monthly" and the carry over to "None.Accrued time reset to 0" 5. Go to Management > Allocations 6. Create an allocation: * Set the start date to 2025-01-01 * Set the accrual plan to the one created above 7. Use future allocations to check accruals current behavior: ----------------- - On 2026-01-01 --> accrued days = 1 (correct) - On 2026-02-01 --> accrued days = 1 (should be 2) - On 2026-03-01 --> accrued days = 2 (delayed accrual, off by one month) cause of the issue: ------------------- Commit 30c7011 introduced a condition that accrues time off on the carry over date: https://github.com/odoo/odoo/blob/1416aad902a97ce56aaecc2aadc4dd9f7814ee53/addons/hr_holidays/models/hr_leave_allocation.py#L559 This incorrectly evaluates accruals across the carry over period instead of restricting to the current month, causing February accruals to be skipped. **Reason February accruals are skipped:** https://github.com/odoo/odoo/blob/dcb072f675c5630327d27d785b86e1ec8e2d442d/addons/hr_holidays/models/hr_leave_allocation.py#L559-L561 https://github.com/odoo/odoo/blob/dcb072f675c5630327d27d785b86e1ec8e2d442d/addons/hr_holidays/models/hr_leave_allocation.py#L541-L544 * After January, the last_executed_carryover_date is set to 2026-01-01. * Therefore, February uses last_executed_carryover_date = 2026-01-01. * The condition evaluates as true for February: ```python3 last_executed_carryover_date <= allocation.nextcall <= carryover_period_end 2026-01-01 <= 2026-02-01 <= 2026-02-01 ``` As a result, the February accrual is skipped. **Why it works correctly in March:** * After February, the last_executed_carryover_date is updated to 2027-01-01. * March now uses this updated date: ```python3 last_executed_carryover_date <= allocation.nextcall <= carryover_period_end 2027-01-01 <= 2026-03-01 <= 2027-02-01 ``` The condition is not satisfied, so accruals are processed correctly. solution: ---------- Add a condition to check if the loop has already run for the current carryover period. This ensures the system avoids applying the carryover twice, allowing subsequent accruals to process as expected. opw-5020834 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253409 Forward-Port-Of: odoo/odoo#227646
This update ensures that Danish SEPA payments are correctly formatted with the necessary FIK reference information. The change refactors the XML generation process to handle country-specific reference formats, making the system more robust and compliant with Danish regulations. This prevents errors and ensures accurate payment processing.
Original PR description
Issue: - A related PR introduced Danish FIK payment references on customer invoices. - The generated SEPA payment XML did not include this reference, resulting in missing structured communication for Danish payments. IMP: - Extended the SEPA payment XML generation to include the Danish FIK reference when present. - Refactored the structured reference XML builder to use lxml elements instead of string-based XML construction, ensuring proper escaping of structured references. Impact: - Ensures compliant Danish SEPA payments with correct FIK references. - Makes SEPA XML generation future-proof for country-specific structured references containing non-numeric characters. Related PR: https://github.com/odoo/odoo/pull/240829 Task: 5401553 Forward-Port-Of: odoo/enterprise#102612
This update resolves an issue preventing users from setting up Amazon accounts when using multiple companies within Odoo Enterprise. The fix allows access to all company accounts during the onboarding process, ensuring compatibility with connected Amazon accounts. This improves the onboarding experience for users managing multiple businesses.
Original PR description
The onboarding return route is a website route with access restricted to the website company only. This causes an error when the company doesn't match the Amazon account being connected. This commit allows users to access all their companies during Amazon account setup to avoid this mismatch error. opw-5944078 Forward-Port-Of: odoo/enterprise#110081 Forward-Port-Of: odoo/enterprise#109590
This update resolves latency issues experienced on iOS devices when interacting with the Point of Sale and self-ordering systems. The fix involves adjusting how the system responds to touch input on iOS, ensuring a smoother and more responsive user experience. Additionally, pinch-zoom functionality has been disabled to improve performance.
Original PR description
On IOS devices, there was a latency issue when hitting different elements in the POS and self. Actually, the issue is because IOS devices don't react in the same way as Android devices. IOS adds a delay of +/-300ms when the element is not considered as a button. Instead of replacing a lot of elements with a button element we can add the parameter role="button". I also disabled the pinch zoom in the POS, self and preparation display. It's mandatory to add the parameter touch-action: pan-x pan-y to the * selector. task: 5976364 enterprise pr : https://github.com/odoo/enterprise/pull/109483 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253014 Forward-Port-Of: odoo/odoo#251198
This update resolves latency issues experienced by users on iOS devices when interacting with the Point of Sale system. The fix addresses differences in how iOS and Android devices respond to user input, ensuring a smoother and more responsive experience. Additionally, pinch-zoom functionality has been disabled to improve performance.
Original PR description
On IOS devices, there was a latency issue when hitting different elements in the POS and self. Actually, the issue is because IOS devices don't react in the same way as Android devices. IOS adds a delay of +/-300ms when the element is not considered as a button. Instead of replacing a lot of elements with a button element we can add the parameter role="button". I also disabled the pinch zoom in the POS, self and preparation display. It's mandatory to add the parameter touch-action: pan-x pan-y to the * selector. task: 5976364 community pr : https://github.com/odoo/odoo/pull/251198 Forward-Port-Of: odoo/enterprise#110104 Forward-Port-Of: odoo/enterprise#109483
This update fixes a problem where the media editor in the product page editor would sometimes get stuck loading indefinitely. The fix ensures the UI is always released after an action, regardless of its completion, and improves the editor's responsiveness. This prevents frustrating delays for users adding media to product pages.
Original PR description
*: website_sale Commit [1] added a UI block when doing a reloadable operation, and unblocked it once the action finished. However, if the action didn't complete, `ui.unblock` would never be called,…
*: website_sale Commit [1] added a UI block when doing a reloadable operation, and unblocked it once the action finished. However, if the action didn't complete, `ui.unblock` would never be called, leaving the UI blocked indefinitely. To reproduce the issue in website_sale: - Install Website & eCommerce - Go to /shop page - Open a product page - Open the editor - Click on the main product image - In the "Images" section > Click on "Add more" in the Extra media field - Popup shows up but it loads indefinitely Fix this by always calling `ui.unblock` regardless of the reload outcome. Also move the media dialog opening to `load`, which runs before the UI is blocked, passing the selected media as `loadResult` to `apply`. [1]: https://github.com/odoo/odoo/commit/453b7eb8e038ee8e8a54de16fc1a45fb2fab573a Co-authored by: Robin Lejeune (role) <role@odoo.com> opw-6003505, opw-6006393, opw-6016898, opw-6013484, opw-6014383 Forward-Port-Of: odoo/odoo#253490 Forward-Port-Of: odoo/odoo#252755
This update resolves an issue where purchase orders created with the Dropship route were missing the required 'Dropship Address' field. The fix ensures that this field is correctly populated when setting the delivery type to 'Dropship', allowing users to confirm purchase orders without errors. This improves the Dropshipping process and prevents order confirmation failures.
Original PR description
## Issue When setting up a product with both the MTO and the *Dropship* routes, the *Purchase Order* genereated when confirming a *Sales Order* does not contain a *Dropship Address*…
## Issue
When setting up a product with both the MTO and the *Dropship* routes, the *Purchase Order* genereated when confirming a *Sales Order* does not contain a *Dropship Address* (`purchase.order.dest_address_id`). It is problematic because that field is both readonly and required to confirm the order.
## Steps to reproduce
1. Install *Stock* (`stock`), *Purchase* (`purchase`) and *Sales* (`sale_management`)
2. In Settings, enable *Dropshipping* and *Replenish on Order (MTO)*
3. Create a Product P
- Set a vendor in the Purchase tab
- Enable the *Buy*, *Dropship* and *Replenish on Order (MTO)* routes
4. Create a Sales Order
- Any Customer
- Product P
- Confirm the Sales Order
5. Click on the *Purchase* smart button
6. Set the *Delivery To* (`purchase.order.picking_type_id`) field to *"Dropship"*
7. **The _Dropship Address_ (`purchase.order.dest_address_id`) field appears, but it's empty and readonly. The purchase order cannot be confirmed, as the field is required and cannot be updated.**
## Cause
When confirming a Sales Order, the created Purchase Order has a `dest_addres_id` set by `StockRule._prepare_purchase_order`:
https://github.com/odoo/odoo/blob/19.0/addons/purchase_stock/models/stock_rule.py#L350
At that point, the `picking_type_id` of the PO is set to `"Receipts"`, which `default_location_dest_id` is the user's Stock, and the `usage` of that location is set to `"internal"`. When `_compute_dest_address_id` is triggered, it starts by calling the method in `sale_purchase`:
https://github.com/odoo/odoo/blob/9d96a8a4ae23bd331296ee0fd628c2be3de4bfe3/addons/sale_purchase/models/purchase_order.py#L25-L30
Which calls the one in `purchase_stock`:
https://github.com/odoo/odoo/blob/9d96a8a4ae23bd331296ee0fd628c2be3de4bfe3/addons/purchase_stock/models/purchase_order.py#L80-L82
Which sets the `dest_address_id` to `False`. This impacts the rest of first `_compute_dest_address_id`, as the PO does not have a `dest_address_id` anymore, its value will never be updated by the `_compute_dest_address_id` methods.
## Fix
The `dest_address_id` should only be set when dropshipping. The easiest way to do so is to override the `_compute_dest_address_id` in the `stock_dropshipping` module by following a similar logic as in `sale_purchase`:
https://github.com/odoo/odoo/blob/7a39185f83d0daca207c8007512f4700537c7e88/addons/sale_purchase/models/purchase_order.py#L25-L30
opw-5426322
Forward-Port-Of: odoo/odoo#252590
Forward-Port-Of: odoo/odoo#245284This update fixes a problem where AI translations on the Odoo SaaS platform would fail after multiple requests due to rate limits. The fix reduces the number of simultaneous requests and now displays a helpful message if some translations are skipped, ensuring a smoother user experience. This prevents complete translation failures.
Original PR description
Scenario: - be on odoo SaaS instance - be on non-translated page with enough content to do 4 requests to /html_editor/generate_text (that are done in chunk of 2000 characters per request currently) -…
Scenario:
- be on odoo SaaS instance
- be on non-translated page with enough content to do 4 requests
to /html_editor/generate_text (that are done in chunk of 2000
characters per request currently)
- open the editor and use "Translate to {lang}" (ai translation)
Result: you see a message "Connection lost. Trying to reconnect..." and
after waiting 10-20 seconds, no translation are inserted in the page.
In reality the requests after the 3 first ones were cancelled (with
error 429 too many requests) by nginx, and the 3 first ones worked
correctly but their result was not used because of the error of the
other ones.
Fix:
- decrease the number of concurrent request from 5 to 3 which is the
current default for this route on SaaS
- adapt the code so if there is errors on one request, successfull
requests will still be applied with the text "Translation Error.
{number} text blocks were skipped during translation. Please try
again." for the blocks that were missed.
This way even if there is an error, the translation is not totally
blocked and doesn't need to be restarted from zero (making it impossible
in the original scenario).
Side note: the number of text blocks not translated was a multiplication
of the total number of text blocks by the number of failed response.
This fix adapts it to just the total of words substrating the number of
translation applied.
opw-5892402
Forward-Port-Of: odoo/odoo#253683
Forward-Port-Of: odoo/odoo#250611This update fixes a calculation error in the equity reports. Previously, `equity_unaffected` accounts were incorrectly using outdated currency rates. The change reorders a key statement to ensure these accounts now utilize the correct, current rate conversion, leading to more accurate financial reporting.
Original PR description
Due to the order of the CASE statement, `equity_unaffected` accounts used 'historical' rate_type Change the order of the CASE statement. no-task Forward-Port-Of: odoo/enterprise#110112
This update fixes a bug where loyalty discounts weren't applied to sales orders using different currencies when the total amount was below a threshold. The change ensures the order's currency is used for discount calculations, guaranteeing discounts are applied correctly for all sales, regardless of value. This improves the accuracy of loyalty program rewards.
Original PR description
When the company currency rounds on unit and we try to apply a reward on a sale order that uses another currency and that has a total of less than 0.5, no reward is applied Steps to reproduce: 1.…
When the company currency rounds on unit and we try to apply a reward on a sale order that uses another currency and that has a total of less than 0.5, no reward is applied Steps to reproduce: 1. Install Sales app and l10n_cl and loyalty module 2. Switch to CL Company 3. Go to Sales > Products > Discount & Loyalty 4. Create a new program and change the rule's minimum purchase to 0.00 5. Go to Sales and create a new quotation for customer Acme Corporation and add any product 6. Change the sale order line unit price to 0.4 and click on Reward 7. No discount is applied Problem: The company currency is used to compute the discountable amount but when this currency rounds on unit, any amount that is less than 0.5 will be considered as zero so no discount will be applied. This is because the `compute_all` method is called without specifying the currency, so we fallback on the company currency. Solution: Pass the order currency when computing the discountable amount opw-5946975 Forward-Port-Of: odoo/odoo#252756 Forward-Port-Of: odoo/odoo#250153
This update resolves an issue preventing Argentinian companies with 'IVA Sujeto Exento' (VAT exempt) AFIP responsibility types from creating 'Export Invoices' documents. The fix ensures that these companies can properly generate export invoices, aligning with Argentinian tax regulations. This change improves functionality for a key segment of Odoo users.
Original PR description
**Steps to reproduce:** - Install l10n_ar - Create a Argentinian company with "AFIP Responsibility Type" set to "IVA Sujeto Exento" (VAT exempt) - Switch to the created company - In Accounting settings, set up "AFIP Web Services" - Create a journal for export invoices - Create a customer with "AFIP Responsibility Type" set to "Cliente del Exterior" - Create an invoice - Select the created customer - Try to set the document type for export invoices **Issue:** It is not possible to select "(19) EXPORT INVOICES" as "Document Type" for companies having "AFIP Responsibility Type" set to "IVA Sujeto Exento". It is not because the company is "VAT exempt" that it should not be able to create an export invoice. opw-5974268 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252232
This update resolves an issue where loyalty reward products were sometimes hidden within the Point of Sale (PoS) system. This change ensures that reward products are always visible and selectable during transactions, improving the customer experience and preventing lost sales. The fix was part of a larger effort to maintain the stability and reliability of the Odoo POS module.
Original PR description
Before this commit, a product used as a loyalty reward could be hidden in the PoS. opw-5918550 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251285 Forward-Port-Of: odoo/odoo#248481
This update fixes a problem where payment processing through Authorize.Net would sometimes fail due to a system conflict. By adding a temporary lock to payment records, Odoo now safely handles retries and ensures payment tokens are used correctly, preventing charges from being incorrectly marked as failed.
Original PR description
Currently, when processing a payment through Authorize.Net, a concurrent update (e.g., from a background cron job) can trigger a PostgreSQL `SERIALIZATION_FAILURE` right after the API request succeeds. Because Odoo automatically retries the request upon this failure, the second attempt sends the same One-Time-Use (OTS) token. Authorize.Net rejects the reused token ("Invalid OTS Token"), causing a successful charge to be incorrectly marked as failed in Odoo.
This commit introduces a pessimistic lock (`FOR NO KEY UPDATE`) on the `payment_transaction` record before making the call to Authorize.Net. This serializes access to the transaction row, ensuring that any lock waits or serialization failures occur *before* the single-use token is consumed, allowing Odoo's automatic retry mechanism to succeed safely.
opw-5475032
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#252370
Forward-Port-Of: odoo/odoo#249088This update fixes a potential issue where the Point of Sale system wasn't reliably displaying orders correctly. The change ensures the system waits for all order items to fully load before rendering, preventing display problems caused by delays in data processing or UI animations. This improves the overall user experience for Point of Sale transactions.
Original PR description
Updated the assertion to use the :count() pseudo-selector directly in the trigger. Instead of synchronously throwing an error as soon as .ticket-screen mounts, the framework will now correctly wait for the exact number of .order-row elements to render, resolving timing issues with pending requests or UI animations. build_error-241246 Forward-Port-Of: odoo/odoo#253781
This update resolves an issue preventing proper printing using wkhtmltopdf. The HTML Editor has reverted to a more reliable static file box implementation, addressing a previous bug. This change ensures consistent printing functionality across the Odoo platform.
Original PR description
Purpose of this commit: - Restore the static file box implementation and drop the embedded component, as it breaks printing with wkhtmltopdf. - The original issue with the static file box was fixed in [#241591](https://github.com/odoo/odoo/pull/241591) Reverts: https://github.com/odoo/odoo/pull/216572 enterprise: https://github.com/odoo/enterprise/pull/108999 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251752 Forward-Port-Of: odoo/odoo#251098
This update resolves conflicts in how transactions are managed for our German Point of Sale (POS) system, specifically related to Fiskaly reporting. The changes ensure that transactions are correctly handled, preventing errors and improving data accuracy by intelligently managing transaction states and isolating transactions to individual terminals.
Original PR description
Changes:
- cancelActiveTransactions: use the TSS-scoped endpoint
/tss/{tss_id}/tx and filter results by client_id so only orphaned
transactions from this terminal are cancelled, never those from
other POS sessions sharing the same TSS
- transactionCall: on non-retryable errors (400 revision conflict or
terminal state mismatch), call _handleTransactionStateConflict which
GETs the actual transaction state and recovers:
- Cancelling already CANCELLED → silent success
- Finishing already FINISHED → return existing tx data
- Finishing a CANCELLED tx → create a fresh transaction and finish it
- handleFiskalyCancellation: correctly reset transactionState to
inactive on the uiState after cancellation
opw-5972708
Forward-Port-Of: odoo/enterprise#110400
Forward-Port-Of: odoo/enterprise#109996This update optimizes the process of deleting calls in our VoIP system. Previously, deleting related mail activities or messages caused significant delays due to inefficient database searches. By adding indexes, we’ve dramatically sped up these deletions, improving overall system responsiveness and reducing potential bottlenecks.
Original PR description
Description ----------- Commit odoo/enterprise@5751f93c53d3cf37ae8cb627fb8d10a81b7b8833 adds a few new `Many2one` fields, but they're are not indexed, leading to a `Seq.Scan` on `voip.call` when deleting a `mail.activity` or `mail.message`, whos tables are usually large. This commit adds an index on the fields to speed up the deletion. Benchmark --------- Deletion of a `mail.activity` on a database with a `voip.call` table with ~13M rows. (on hot) | Before | After | |--------|---------| | 2.3s | 0.85 ms | Forward-Port-Of: odoo/enterprise#110622