summaryrefslogtreecommitdiff
path: root/addons/mass_mailing/models/mass_mailing.py
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2019-07-17 09:26:42 +0000
committerThibault Delavallée <tde@odoo.com>2019-07-17 15:39:06 +0000
commit2896aad34e797b6ca65a8efe3c5d71f31500a9a2 (patch)
tree81f2298b04182860e84f2ca9815f313cc0c75ffc /addons/mass_mailing/models/mass_mailing.py
parent20dfba6e11ac4553509c1a3516c6453b8f8023e7 (diff)
[REF] mass_mailing: rename mail.mail.statistics and reporting model
PURPOSE Mass mailing is currently a bit messy. As SMS will be added as a way to notify people in mass through SMS let us take this opportunity to somehow clean this application: organization, light code cleaning, model renaming. SPECIFICATIONS Rename mail.mail.statistics to mailing.trace and mail.statistics.report to mail.trace.report. Rationale : * mail.mail.statistics is linked to mail.mail model. Soon this model will hold data related to SMS sending. It makes sense to be broader in the naming; * mailing.trace is more inlined with marketing.trace model that is the marketing automation model using it in marketing automation (enterprise application); * mailing.trace is shorter to write; * mail.statistics.report model should sense to be updated at the same time; MIGRATION mail.mail.statistics model -> mailing.trace mail_mail_statistics table -> mailing_trace mail.statistics.report model -> mail.trace.report fields updated (w column change) * link.tracker.click: mail_stat_id -> mailing_trace_id fields updated (no column change) * mail.mail: statistics_ids -> mailing_trace_ids * mail.mass_mailing: statistics_ids -> mailing_trace_ids LINKS Task ID 2037906 Preparing task ID 1997464 (SMS addition in mass mailing) PR #34938
Diffstat (limited to 'addons/mass_mailing/models/mass_mailing.py')
-rw-r--r--addons/mass_mailing/models/mass_mailing.py38
1 files changed, 19 insertions, 19 deletions
diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py
index 3cc86fbebd4..d0249777baf 100644
--- a/addons/mass_mailing/models/mass_mailing.py
+++ b/addons/mass_mailing/models/mass_mailing.py
@@ -89,7 +89,7 @@ class MassMailingCampaign(models.Model):
'the effectiveness of the mailings, without causing duplicate messages.')
color = fields.Integer(string='Color Index')
clicks_ratio = fields.Integer(compute="_compute_clicks_ratio", string="Number of clicks")
- # stat fields
+ # trace statistics fields
total = fields.Integer(compute="_compute_statistics")
scheduled = fields.Integer(compute="_compute_statistics")
failed = fields.Integer(compute="_compute_statistics")
@@ -107,9 +107,9 @@ class MassMailingCampaign(models.Model):
def _compute_clicks_ratio(self):
self.env.cr.execute("""
- SELECT COUNT(DISTINCT(stats.id)) AS nb_mails, COUNT(DISTINCT(clicks.mail_stat_id)) AS nb_clicks, stats.mass_mailing_campaign_id AS id
- FROM mail_mail_statistics AS stats
- LEFT OUTER JOIN link_tracker_click AS clicks ON clicks.mail_stat_id = stats.id
+ SELECT COUNT(DISTINCT(stats.id)) AS nb_mails, COUNT(DISTINCT(clicks.mailing_trace_id)) AS nb_clicks, stats.mass_mailing_campaign_id AS id
+ FROM mailing_trace AS stats
+ LEFT OUTER JOIN link_tracker_click AS clicks ON clicks.mailing_trace_id = stats.id
WHERE stats.mass_mailing_campaign_id IN %s
GROUP BY stats.mass_mailing_campaign_id
""", (tuple(self.ids), ))
@@ -134,7 +134,7 @@ class MassMailingCampaign(models.Model):
COUNT(CASE WHEN s.replied is not null THEN 1 ELSE null END) AS replied ,
COUNT(CASE WHEN s.bounced is not null THEN 1 ELSE null END) AS bounced
FROM
- mail_mail_statistics s
+ mailing_trace s
RIGHT JOIN
mail_mass_mailing_campaign c
ON (c.id = s.mass_mailing_campaign_id)
@@ -169,7 +169,7 @@ class MassMailingCampaign(models.Model):
domain = [('mass_mailing_campaign_id', '=', campaign.id)]
if model:
domain += [('model', '=', model)]
- res[campaign.id] = set(self.env['mail.mail.statistics'].search(domain).mapped('res_id'))
+ res[campaign.id] = set(self.env['mailing.trace'].search(domain).mapped('res_id'))
return res
@api.model
@@ -253,7 +253,7 @@ class MassMailing(models.Model):
contact_ab_pc = fields.Integer(string='A/B Testing percentage',
help='Percentage of the contacts that will be mailed. Recipients will be taken randomly.', default=100)
# statistics data
- statistics_ids = fields.One2many('mail.mail.statistics', 'mass_mailing_id', string='Emails Statistics')
+ mailing_trace_ids = fields.One2many('mailing.trace', 'mass_mailing_id', string='Emails Statistics')
total = fields.Integer(compute="_compute_total")
scheduled = fields.Integer(compute="_compute_statistics")
expected = fields.Integer(compute="_compute_statistics")
@@ -277,9 +277,9 @@ class MassMailing(models.Model):
def _compute_clicks_ratio(self):
self.env.cr.execute("""
- SELECT COUNT(DISTINCT(stats.id)) AS nb_mails, COUNT(DISTINCT(clicks.mail_stat_id)) AS nb_clicks, stats.mass_mailing_id AS id
- FROM mail_mail_statistics AS stats
- LEFT OUTER JOIN link_tracker_click AS clicks ON clicks.mail_stat_id = stats.id
+ SELECT COUNT(DISTINCT(stats.id)) AS nb_mails, COUNT(DISTINCT(clicks.mailing_trace_id)) AS nb_clicks, stats.mass_mailing_id AS id
+ FROM mailing_trace AS stats
+ LEFT OUTER JOIN link_tracker_click AS clicks ON clicks.mailing_trace_id = stats.id
WHERE stats.mass_mailing_id IN %s
GROUP BY stats.mass_mailing_id
""", (tuple(self.ids), ))
@@ -311,7 +311,7 @@ class MassMailing(models.Model):
COUNT(CASE WHEN s.bounced is not null THEN 1 ELSE null END) AS bounced,
COUNT(CASE WHEN s.exception is not null THEN 1 ELSE null END) AS failed
FROM
- mail_mail_statistics s
+ mailing_trace s
RIGHT JOIN
mail_mass_mailing m
ON (m.id = s.mass_mailing_id)
@@ -441,10 +441,10 @@ class MassMailing(models.Model):
def retry_failed_mail(self):
failed_mails = self.env['mail.mail'].search([('mailing_id', 'in', self.ids), ('state', '=', 'exception')])
- failed_mails.mapped('statistics_ids').unlink()
+ failed_mails.mapped('mailing_trace_ids').unlink()
failed_mails.sudo().unlink()
res_ids = self._get_recipients()
- except_mailed = self.env['mail.mail.statistics'].search([
+ except_mailed = self.env['mailing.trace'].search([
('model', '=', self.mailing_model_real),
('res_id', 'in', res_ids),
('exception', '!=', False),
@@ -471,11 +471,11 @@ class MassMailing(models.Model):
def _action_view_documents_filtered(self, view_filter):
if view_filter in ('sent', 'opened', 'replied', 'bounced', 'clicked'):
- opened_stats = self.statistics_ids.filtered(lambda stat: stat[view_filter])
+ opened_stats = self.mailing_trace_ids.filtered(lambda stat: stat[view_filter])
elif view_filter == ('delivered'):
- opened_stats = self.statistics_ids.filtered(lambda stat: stat.sent and not stat.bounced)
+ opened_stats = self.mailing_trace_ids.filtered(lambda stat: stat.sent and not stat.bounced)
else:
- opened_stats = self.env['mail.mail.statistics']
+ opened_stats = self.env['mailing.trace']
res_ids = opened_stats.mapped('res_id')
model_name = self.env['ir.model']._get(self.mailing_model_real).display_name
return {
@@ -551,7 +551,7 @@ class MassMailing(models.Model):
# + use a basic heuristic for extracting emails
query = """
SELECT lower(substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
- FROM mail_mail_statistics s
+ FROM mailing_trace s
JOIN %(target)s t ON (s.res_id = t.id)
WHERE substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)') IS NOT NULL
"""
@@ -561,7 +561,7 @@ class MassMailing(models.Model):
mail_field = 'email'
query = """
SELECT lower(substring(p.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
- FROM mail_mail_statistics s
+ FROM mailing_trace s
JOIN %(target)s t ON (s.res_id = t.id)
JOIN res_partner p ON (t.partner_id = p.id)
WHERE substring(p.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)') IS NOT NULL
@@ -626,7 +626,7 @@ class MassMailing(models.Model):
def _get_remaining_recipients(self):
res_ids = self._get_recipients()
- already_mailed = self.env['mail.mail.statistics'].search_read([
+ already_mailed = self.env['mailing.trace'].search_read([
('model', '=', self.mailing_model_real),
('res_id', 'in', res_ids),
('mass_mailing_id', '=', self.id)], ['res_id'])