From 2428ce871d3de2e115fdc50cddb587f6bd0fa242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Warnon?= Date: Mon, 17 Dec 2018 08:25:23 +0000 Subject: [PATCH] [IMP] mass_mailing: improve mass mailing stat buttons (domain/visibility) Task #1907952 Purpose ======= The number of generated leads/opportunities from the mass mailing on the stat button should count both active and archived leads/opportunities. The stat buttons on mass mailing added by sales and crm apps should appear on every selected 'model' for the recipients (a mass mailing sent to 'leads' can generate sales). Specs ======= Opportunity stat button: - double check that the number is based on both leads or opportunities, active or archived Stat buttons Leads #, Quotations #, Invoice Amount should appear on the form all the time for showcase purposes closes odoo/odoo#29568 --- .../mass_mailing_crm/models/mass_mailing.py | 41 ++++++++++--------- .../views/mass_mailing_views.xml | 6 ++- .../mass_mailing_sale/models/mass_mailing.py | 10 +++-- .../views/mass_mailing_views.xml | 6 ++- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/addons/mass_mailing_crm/models/mass_mailing.py b/addons/mass_mailing_crm/models/mass_mailing.py index 4abd0570129..55749142d3f 100644 --- a/addons/mass_mailing_crm/models/mass_mailing.py +++ b/addons/mass_mailing_crm/models/mass_mailing.py @@ -3,6 +3,7 @@ from odoo import api, fields, models +from odoo.osv import expression class MassMailing(models.Model): @@ -10,34 +11,31 @@ class MassMailing(models.Model): _inherit = 'mail.mass_mailing' crm_lead_activated = fields.Boolean('Use Leads', compute='_compute_crm_lead_activated') - crm_lead_count = fields.Integer('Lead Count', compute='_compute_crm_lead_count') - crm_opportunities_count = fields.Integer('Opportunities Count', compute='_compute_crm_opportunities_count') + 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') def _compute_crm_lead_activated(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_count(self): - for mass_mailing in self: - if mass_mailing.crm_lead_activated: - mass_mailing.crm_lead_count = self.env['crm.lead'].search_count(self._get_crm_utm_domain()) - else: - mass_mailing.crm_lead_count = 0 - - @api.depends('crm_lead_activated') - def _compute_crm_opportunities_count(self): + def _compute_crm_lead_and_opportunities_count(self): 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_opportunities_count = self.env['crm.lead'].search_count(self._get_crm_utm_domain()) + mass_mailing.crm_lead_count = 0 + mass_mailing.crm_opportunities_count = lead_and_opportunities_count @api.multi 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'} + action['context'] = {'default_type': 'lead', 'active_test': False} return action @api.multi @@ -45,16 +43,19 @@ class MassMailing(models.Model): action = self.env.ref('crm.crm_lead_opportunities').read()[0] action['view_mode'] = 'tree,kanban,graph,pivot,form,calendar' action['domain'] = self._get_crm_utm_domain() + action['context'] = {'active_test': False} return action def _get_crm_utm_domain(self): - res = [] + """ We want all records that match the UTMs """ + domain = [] if self.campaign_id: - res.append(('campaign_id', '=', self.campaign_id.id)) + domain = expression.AND([domain, [('campaign_id', '=', self.campaign_id.id)]]) if self.source_id: - res.append(('source_id', '=', self.source_id.id)) + domain = expression.AND([domain, [('source_id', '=', self.source_id.id)]]) if self.medium_id: - res.append(('medium_id', '=', self.medium_id.id)) - if not res: - res.append((0, '=', 1)) - return res + 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/mass_mailing_views.xml b/addons/mass_mailing_crm/views/mass_mailing_views.xml index 889c6ff8529..f0d2e33ebc9 100644 --- a/addons/mass_mailing_crm/views/mass_mailing_views.xml +++ b/addons/mass_mailing_crm/views/mass_mailing_views.xml @@ -11,14 +11,16 @@ type="object" icon="fa-star" class="oe_stat_button" - attrs="{'invisible': ['|', '|', ('state', 'in', ('draft','test')), ('mailing_model_name', '!=', 'crm.lead'), ('crm_lead_activated', '=', False)]}" > + groups="sales_team.group_sale_salesman" + attrs="{'invisible': ['|', ('state', '=', 'draft'), ('crm_lead_activated', '=', False)]}" > diff --git a/addons/mass_mailing_sale/models/mass_mailing.py b/addons/mass_mailing_sale/models/mass_mailing.py index 723bdee7b1a..1f6dff970d2 100644 --- a/addons/mass_mailing_sale/models/mass_mailing.py +++ b/addons/mass_mailing_sale/models/mass_mailing.py @@ -9,8 +9,8 @@ class MassMailing(models.Model): _name = 'mail.mass_mailing' _inherit = 'mail.mass_mailing' - sale_quotation_count = fields.Integer('Quotation Count', compute='_compute_sale_quotation_count') - sale_invoiced_amount = fields.Integer('Invoiced Amount', compute='_compute_sale_invoiced_amount') + sale_quotation_count = fields.Integer('Quotation Count', groups='sales_team.group_sale_salesman', compute='_compute_sale_quotation_count') + sale_invoiced_amount = fields.Integer('Invoiced Amount', groups='sales_team.group_sale_salesman', compute='_compute_sale_invoiced_amount') @api.depends('mailing_domain') def _compute_sale_quotation_count(self): @@ -25,7 +25,10 @@ class MassMailing(models.Model): for mass_mailing in self: if has_so_access and has_invoice_report_access: invoices = self.env['sale.order'].search(self._get_sale_utm_domain()).mapped('invoice_ids') - res = self.env['account.invoice.report'].search_read([('invoice_id', 'in', invoices.ids)], ['user_currency_price_total']) + res = self.env['account.invoice.report'].search_read( + [('invoice_id', 'in', invoices.ids), ('state', 'not in', ['draft', 'cancel'])], + ['user_currency_price_total'] + ) mass_mailing.sale_invoiced_amount = sum(r['user_currency_price_total'] for r in res) else: mass_mailing.sale_invoiced_amount = 0 @@ -43,7 +46,6 @@ class MassMailing(models.Model): invoices = self.env['sale.order'].search(self._get_sale_utm_domain()).mapped('invoice_ids') action['domain'] = [ ('id', 'in', invoices.ids), - ('type', 'in', ['out_invoice', 'out_refund']), ('state', 'not in', ['draft', 'cancel']) ] return action diff --git a/addons/mass_mailing_sale/views/mass_mailing_views.xml b/addons/mass_mailing_sale/views/mass_mailing_views.xml index 40a2b9ad0ce..46d17296926 100644 --- a/addons/mass_mailing_sale/views/mass_mailing_views.xml +++ b/addons/mass_mailing_sale/views/mass_mailing_views.xml @@ -10,14 +10,16 @@ type="object" icon="fa-usd" class="oe_stat_button" - attrs="{'invisible': ['|', ('state', 'in', ('draft','test')), ('mailing_model_name', '!=', 'sale.order')]}" > + groups="sales_team.group_sale_salesman" + attrs="{'invisible': [('state', '=', 'draft')]}">