commit
5c08aa49c3
|
@ -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):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue