-
account_id
-
account_id.ids
-
account_id.id
|
purchase_orders_per_project = dict(
self.env['purchase.order']._read_group(
domain=[
('project_id', 'in', self.ids),
('order_line', '!=', False),
],
groupby=['project_id'],
aggregates=['id:array_agg'],
)
)
purchase_orders_count_per_project_from_lines = dict(
self.env['purchase.order.line']._read_group(
domain=[
('order_id', 'not in', [order_id for values in purchase_orders_per_project.values() for order_id in values]),
('analytic_distribution', 'in', self.account_id.ids),
],
groupby=['analytic_distribution'],
aggregates=['__count'],
)
)
projects_no_account = self.filtered(lambda project: not project.account_id)
for project in projects_no_account:
project.purchase_orders_count = len(purchase_orders_per_project.get(project, []))
purchase_orders_per_project = {project.account_id.id: len(orders) for project, orders in purchase_orders_per_project.items()}
for project in (self - projects_no_account):
project.purchase_orders_count = purchase_orders_per_project.get(project.account_id.id, 0) + purchase_orders_count_per_project_from_lines.get(project.account_id.id, 0)
|
|