Merge PR #1105 into 16.0

Signed-off-by pedrobaeza
pull/1111/head
OCA-git-bot 2024-02-01 13:56:19 +00:00
commit 5c08aa49c3
1 changed files with 22 additions and 18 deletions

View File

@ -1,5 +1,7 @@
# Copyright 2019 ACSONE SA/NV (<http://acsone.eu>) # Copyright 2019 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).-
from collections import defaultdict
from odoo import api, fields, models from odoo import api, fields, models
@ -12,24 +14,26 @@ class AccountMoveLine(models.Model):
@api.depends("analytic_distribution") @api.depends("analytic_distribution")
def _compute_analytic_account_ids(self): def _compute_analytic_account_ids(self):
for record in self: # Prefetch all involved analytic accounts
if not record.analytic_distribution: with_distribution = self.filtered("analytic_distribution")
record.analytic_account_ids = False batch_by_analytic_account = defaultdict(list)
else: for record in with_distribution:
record.update( for account_id in map(int, record.analytic_distribution):
{ batch_by_analytic_account[account_id].append(record.id)
"analytic_account_ids": [ existing_account_ids = set(
( self.env["account.analytic.account"]
6, .browse(map(int, batch_by_analytic_account))
0, .exists()
self.env["account.analytic.account"] .ids
.browse([int(k) for k in record.analytic_distribution]) )
.exists() # Store them
.ids, self.analytic_account_ids = False
) for account_id, record_ids in batch_by_analytic_account.items():
] if account_id not in existing_account_ids:
} continue
) self.browse(record_ids).analytic_account_ids = [
fields.Command.link(account_id)
]
def init(self): def init(self):
""" """