diff options
| author | Thibault Delavallée <tde@odoo.com> | 2019-07-17 09:26:42 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2019-07-17 15:39:06 +0000 |
| commit | 2896aad34e797b6ca65a8efe3c5d71f31500a9a2 (patch) | |
| tree | 81f2298b04182860e84f2ca9815f313cc0c75ffc /addons/mass_mailing/models/mass_mailing.py | |
| parent | 20dfba6e11ac4553509c1a3516c6453b8f8023e7 (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.py | 38 |
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']) |
