summaryrefslogtreecommitdiff
path: root/addons/crm/models
diff options
context:
space:
mode:
authorGoffin Simon <sig@odoo.com>2020-11-02 11:39:47 +0000
committerGoffin Simon <sig@odoo.com>2020-11-02 12:25:08 +0000
commitd11fb611fed3a8541d03b7d3e49973ae7c16a768 (patch)
tree6b0f17d75ad9f1f123cf6fceda97a2f4d81a64c8 /addons/crm/models
parent7449c8a6643477742616bf236f2f2c90aec68581 (diff)
[FIX] crm: Opportunity Smart Button Incorrect Value
Steps to reproduce the bug: - Let's consider a company contact C with two children CH1 and CH2 - Create an opportunity for CH1 and a subscription for CH2 Bug: The count of opportunities in C was displaying 0 instead of 2 opw:237344
Diffstat (limited to 'addons/crm/models')
-rw-r--r--addons/crm/models/res_partner.py35
1 files changed, 16 insertions, 19 deletions
diff --git a/addons/crm/models/res_partner.py b/addons/crm/models/res_partner.py
index d9430beada2..742b7b3ed88 100644
--- a/addons/crm/models/res_partner.py
+++ b/addons/crm/models/res_partner.py
@@ -37,25 +37,22 @@ class Partner(models.Model):
return rec
def _compute_opportunity_count(self):
- if self.ids:
- lead_group_data = self.env['crm.lead'].read_group(
- [('partner_id.commercial_partner_id', 'in', self.ids)],
- ['partner_id'], ['partner_id']
- )
- else:
- lead_group_data = []
- partners = dict(
- (m['partner_id'][0], m['partner_id_count'])
- for m in lead_group_data)
- commercial_partners = {}
- for partner in self.browse(partners.keys()):
- commercial_partners.setdefault(partner.commercial_partner_id.id, 0)
- commercial_partners[partner.commercial_partner_id.id] += partners[partner.id]
- for partner in self:
- if partner.is_company:
- partner.opportunity_count = commercial_partners.get(partner.id, 0)
- else:
- partner.opportunity_count = partners.get(partner.id, 0)
+ # retrieve all children partners and prefetch 'parent_id' on them
+ all_partners = self.with_context(active_test=False).search([('id', 'child_of', self.ids)])
+ all_partners.read(['parent_id'])
+
+ opportunity_data = self.env['crm.lead'].read_group(
+ domain=[('partner_id', 'in', all_partners.ids)],
+ fields=['partner_id'], groupby=['partner_id']
+ )
+
+ self.opportunity_count = 0
+ for group in opportunity_data:
+ partner = self.browse(group['partner_id'][0])
+ while partner:
+ if partner in self:
+ partner.opportunity_count += group['partner_id_count']
+ partner = partner.parent_id
def _compute_meeting_count(self):
result = self._compute_meeting()