summaryrefslogtreecommitdiff
path: root/addons/crm_iap_lead
diff options
context:
space:
mode:
authorVictor Feyens <vfe@odoo.com>2020-02-11 12:18:21 +0000
committerThibault Delavallée <tde@odoo.com>2020-04-21 12:28:52 +0000
commitb415533dca2af9b84725b0c48ee5d26359760300 (patch)
tree1eb5c445bb7fe5abd880aa2d20ce3532cc686f6b /addons/crm_iap_lead
parent623567eba0884aba1213edacab767cc4c2732053 (diff)
[REF] crm(_iap_lead): use read_group instead of computing len of one2many fields
PURPOSE Several counter fields are performed inefficiently. They use compute methods using length of 2many fields instead of making use of more efficient ORM methods like read_group. SPECIFICATIONS No functional change, only technical performance improvements. Purpose is to improve lead_count performance. Some people claim to gain a lot of queries: from 90 to 30 SQL queries to read 39 partners. Hard to reproduce. LINKS Task ID 2196182 PR odoo/odoo#44662 Co-Authored-By: Fabien Pinckaers <fp@odoo.com> Co-Authored-By: Victor Feyens <vfe@odoo.com> Co-Authored-By: Thibault Delavallee <tde@odoo.com>
Diffstat (limited to 'addons/crm_iap_lead')
-rw-r--r--addons/crm_iap_lead/models/crm_iap_lead_mining_request.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py b/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py
index b62e454ccbb..df7b9fa531a 100644
--- a/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py
+++ b/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py
@@ -76,8 +76,17 @@ class CRMLeadMiningRequest(models.Model):
@api.depends('lead_ids')
def _compute_leads_count(self):
- for req in self:
- req.leads_count = len(req.lead_ids)
+ if self.ids:
+ leads_data = self.env['crm.lead'].read_group(
+ [('lead_mining_request_id', 'in', self.ids)],
+ ['lead_mining_request_id'], ['lead_mining_request_id'])
+ else:
+ leads_data = []
+ mapped_data = dict(
+ (m['lead_mining_request_id'][0], m['lead_mining_request_id_count'])
+ for m in leads_data)
+ for request in self:
+ request.leads_count = mapped_data.get(request.id, 0)
@api.onchange('lead_number')
def _onchange_lead_number(self):