[FIX] account: prevent excess calls of _get_lines_onchange_currency
That method iterates over move lines: https://github.com/odoo/odoo/blob/7623a0c771495cd41bf40af37c0d2b6e4beb7cdc/addons/stock_account/models/account_move.py#L16-L18 So, we have O(n^2) complexity at least. It leads to timeout error on invoices with few hundres products. After this commit it takes 70 seconds to confirm an invoice with 450 lines: 23527 11.038 56.530 (Number of queries / Query time, sec / Remaining time, sec) --- https://github.com/odoo/odoo/commit/9e1aec7873a935b287b4b3c5dbc2688acee5422a opw-2488458 closes odoo/odoo#68797 X-original-commit: 176ecb1239f7e0a8e938de996d174b9c5bf930f4 Signed-off-by: Laurent Smet <smetl@users.noreply.github.com>
This commit is contained in:
committed by
Laurent Smet
parent
76afde138f
commit
5901e7c553
@@ -1267,12 +1267,9 @@ class AccountMove(models.Model):
|
||||
total_residual_currency = 0.0
|
||||
total = 0.0
|
||||
total_currency = 0.0
|
||||
currencies = set()
|
||||
currencies = move._get_lines_onchange_currency().currency_id
|
||||
|
||||
for line in move.line_ids:
|
||||
if line.currency_id and line in move._get_lines_onchange_currency():
|
||||
currencies.add(line.currency_id)
|
||||
|
||||
if move._payment_state_matters():
|
||||
# === Invoices ===
|
||||
|
||||
@@ -1313,7 +1310,7 @@ class AccountMove(models.Model):
|
||||
move.amount_residual_signed = total_residual
|
||||
move.amount_total_in_currency_signed = abs(move.amount_total) if move.move_type == 'entry' else -(sign * move.amount_total)
|
||||
|
||||
currency = len(currencies) == 1 and currencies.pop() or move.company_id.currency_id
|
||||
currency = currencies if len(currencies) == 1 else move.company_id.currency_id
|
||||
|
||||
# Compute 'payment_state'.
|
||||
new_pmt_state = 'not_paid' if move.move_type != 'entry' else False
|
||||
|
||||
Reference in New Issue
Block a user