From 2c9499d1d76dd40ac614fdc2c22f4f6e78f2418a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Henr=C3=ADquez?= Date: Fri, 16 Nov 2018 11:49:28 +0100 Subject: [PATCH] [IMP] account_analytic_parent: performance (#200) --- .../models/account_analytic_account.py | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/account_analytic_parent/models/account_analytic_account.py b/account_analytic_parent/models/account_analytic_account.py index 4154a094ae..b8758e94c3 100644 --- a/account_analytic_parent/models/account_analytic_account.py +++ b/account_analytic_parent/models/account_analytic_account.py @@ -28,10 +28,25 @@ def _compute_debit_credit_balance(self): of analytic account changes """ super(AccountAnalyticAccount, self)._compute_debit_credit_balance() - for account in self: - account.debit += sum(account.mapped("child_ids.debit")) - account.credit += sum(account.mapped("child_ids.credit")) - account.balance += sum(account.mapped("child_ids.balance")) + analytic_line_obj = self.env['account.analytic.line'] + # compute only analytic line + for account in self.filtered(lambda x: x.child_ids): + domain = [('account_id', 'child_of', account.ids)] + credit_groups = analytic_line_obj.read_group( + domain=domain + [('amount', '>', 0.0)], + fields=['account_id', 'amount'], + groupby=['account_id'] + ) + data_credit = sum(l['amount'] for l in credit_groups) + debit_groups = analytic_line_obj.read_group( + domain=domain + [('amount', '<', 0.0)], + fields=['account_id', 'amount'], + groupby=['account_id'] + ) + data_debit = sum(l['amount'] for l in debit_groups) + account.debit = data_debit + account.credit = data_credit + account.balance = account.credit - account.debit @api.multi @api.constrains("parent_id")