summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqmo-odoo <qmo@odoo.com>2019-10-14 12:36:23 +0000
committerThibault Delavallée <tde@odoo.com>2020-01-15 10:02:35 +0000
commitb4cbad1bedc666c234dfa0809602341dbf8e7246 (patch)
tree5bb8cdddadc0db1f5db1255c159434a5747a32e1
parent66ce1e630212d82c3d734af7a176beafb2cef5f7 (diff)
[IMP] mass_mailing_crm: Improve lead/opportunity computation
Prior to this commit, two fields were used for lead and opportunities count. As both of these fields were set with the same values and only existed for labelling purposes, this commit replaces them by a single field and handles the the labels in the xml. This commit also improves the way lead count is computed by using a read_group instead of a search in a loop. LINKS: closes odoo/odoo#38707 Taskid: 2086863 Pr: #38707 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
-rw-r--r--addons/mass_mailing_crm/models/mailing_mailing.py56
-rw-r--r--addons/mass_mailing_crm/views/mailing_mailing_views.xml20
2 files changed, 24 insertions, 52 deletions
diff --git a/addons/mass_mailing_crm/models/mailing_mailing.py b/addons/mass_mailing_crm/models/mailing_mailing.py
index e4c23086bb4..97de181c798 100644
--- a/addons/mass_mailing_crm/models/mailing_mailing.py
+++ b/addons/mass_mailing_crm/models/mailing_mailing.py
@@ -10,50 +10,26 @@ class MassMailing(models.Model):
_name = 'mailing.mailing'
_inherit = 'mailing.mailing'
- crm_lead_activated = fields.Boolean('Use Leads', compute='_compute_crm_lead_activated')
- crm_lead_count = fields.Integer('Lead Count', groups='sales_team.group_sale_salesman', compute='_compute_crm_lead_and_opportunities_count')
- crm_opportunities_count = fields.Integer('Opportunities Count', groups='sales_team.group_sale_salesman', compute='_compute_crm_lead_and_opportunities_count')
+ use_leads = fields.Boolean('Use Leads', compute='_compute_use_leads')
+ crm_lead_count = fields.Integer('Leads/Opportunities Count', groups='sales_team.group_sale_salesman', compute='_compute_crm_lead_count')
- def _compute_crm_lead_activated(self):
+ def _compute_use_leads(self):
for mass_mailing in self:
- mass_mailing.crm_lead_activated = self.env.user.has_group('crm.group_use_lead')
-
- @api.depends('crm_lead_activated')
- def _compute_crm_lead_and_opportunities_count(self):
+ mass_mailing.use_leads = self.env.user.has_group('crm.group_use_lead')
+
+ def _compute_crm_lead_count(self):
+ lead_data = self.env['crm.lead'].with_context(active_test=False).read_group(
+ [('source_id', 'in', self.source_id.ids)],
+ ['source_id'], ['source_id']
+ )
+ mapped_data = {datum['source_id'][0]: datum['source_id_count'] for datum in lead_data}
for mass_mailing in self:
- lead_and_opportunities_count = mass_mailing.crm_lead_count = self.env['crm.lead'] \
- .with_context(active_test=False) \
- .search_count(self._get_crm_utm_domain())
- if mass_mailing.crm_lead_activated:
- mass_mailing.crm_lead_count = lead_and_opportunities_count
- mass_mailing.crm_opportunities_count = 0
- else:
- mass_mailing.crm_lead_count = 0
- mass_mailing.crm_opportunities_count = lead_and_opportunities_count
-
- def action_redirect_to_leads(self):
- action = self.env.ref('crm.crm_lead_all_leads').read()[0]
- action['domain'] = self._get_crm_utm_domain()
- action['context'] = {'default_type': 'lead', 'active_test': False, 'create': False}
- return action
+ mass_mailing.crm_lead_count = mapped_data.get(mass_mailing.source_id.id, 0)
- def action_redirect_to_opportunities(self):
- action = self.env.ref('crm.crm_lead_opportunities').read()[0]
+ def action_redirect_to_leads_and_opportunities(self):
+ view = 'crm.crm_lead_all_leads' if self.use_leads else 'crm.crm_lead_opportunities'
+ action = self.env.ref(view).read()[0]
action['view_mode'] = 'tree,kanban,graph,pivot,form,calendar'
- action['domain'] = self._get_crm_utm_domain()
+ action['domain'] = [('source_id', 'in', self.source_id.ids)]
action['context'] = {'active_test': False, 'create': False}
return action
-
- def _get_crm_utm_domain(self):
- """ We want all records that match the UTMs """
- domain = []
- if self.campaign_id:
- domain = expression.AND([domain, [('campaign_id', '=', self.campaign_id.id)]])
- if self.source_id:
- domain = expression.AND([domain, [('source_id', '=', self.source_id.id)]])
- if self.medium_id:
- domain = expression.AND([domain, [('medium_id', '=', self.medium_id.id)]])
- if not domain:
- domain = expression.AND([domain, [(0, '=', 1)]])
-
- return domain
diff --git a/addons/mass_mailing_crm/views/mailing_mailing_views.xml b/addons/mass_mailing_crm/views/mailing_mailing_views.xml
index d8fd50830ac..e5edbd55c54 100644
--- a/addons/mass_mailing_crm/views/mailing_mailing_views.xml
+++ b/addons/mass_mailing_crm/views/mailing_mailing_views.xml
@@ -6,22 +6,18 @@
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@id='button_view_sent']" position="before">
- <field name="crm_lead_activated" invisible="1"/>
- <button name="action_redirect_to_leads"
+ <button name="action_redirect_to_leads_and_opportunities"
type="object"
icon="fa-star"
class="oe_stat_button"
groups="sales_team.group_sale_salesman"
- attrs="{'invisible': ['|', ('state', '=', 'draft'), ('crm_lead_activated', '=', False)]}" >
- <field name="crm_lead_count" string="Leads" widget="statinfo"/>
- </button>
- <button name="action_redirect_to_opportunities"
- type="object"
- icon="fa-star"
- class="oe_stat_button"
- groups="sales_team.group_sale_salesman"
- attrs="{'invisible': ['|', ('state', '=', 'draft'), ('crm_lead_activated', '=', True)]}" >
- <field name="crm_opportunities_count" string="Opportunities" widget="statinfo"/>
+ attrs="{'invisible': [('state', '=', 'draft')]}">
+ <div class="o_field_widget o_stat_info">
+ <field name="use_leads" invisible="1"/>
+ <span class="o_stat_value"><field nolabel="1" name="crm_lead_count"/></span>
+ <span class="o_stat_text" attrs="{'invisible': [('use_leads', '=', False)]}">Leads</span>
+ <span class="o_stat_text" attrs="{'invisible': [('use_leads', '=', True)]}">Opportunities</span>
+ </div>
</button>
</xpath>
</field>