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