diff options
| -rw-r--r-- | addons/link_tracker/models/link_tracker.py | 19 | ||||
| -rw-r--r-- | addons/mass_mailing/models/mailing.py | 2 | ||||
| -rw-r--r-- | addons/mass_mailing/models/utm.py | 11 |
3 files changed, 27 insertions, 5 deletions
diff --git a/addons/link_tracker/models/link_tracker.py b/addons/link_tracker/models/link_tracker.py index ec73046e1be..8ea1a04f50e 100644 --- a/addons/link_tracker/models/link_tracker.py +++ b/addons/link_tracker/models/link_tracker.py @@ -38,8 +38,17 @@ class LinkTracker(models.Model): @api.depends('link_click_ids.link_id') def _compute_count(self): + if self.ids: + clicks_data = self.env['link.tracker.click'].read_group( + [('link_id', 'in', self.ids)], + ['link_id'], + ['link_id'] + ) + mapped_data = {m['link_id'][0]: m['link_id_count'] for m in clicks_data} + else: + mapped_data = dict() for tracker in self: - tracker.count = len(tracker.link_click_ids) + tracker.count = mapped_data.get(tracker.id, 0) @api.depends('code') def _compute_short_url(self): @@ -187,8 +196,12 @@ class LinkTrackerClick(models.Model): _rec_name = "link_id" _description = "Link Tracker Click" - campaign_id = fields.Many2one(string='UTM Campaign', comodel_name="utm.campaign", related="link_id.campaign_id", store=True) - link_id = fields.Many2one('link.tracker', 'Link', required=True, ondelete='cascade') + campaign_id = fields.Many2one( + 'utm.campaign', 'UTM Campaign', + related="link_id.campaign_id", store=True) + link_id = fields.Many2one( + 'link.tracker', 'Link', + index=True, required=True, ondelete='cascade') ip = fields.Char(string='Internet Protocol') country_id = fields.Many2one('res.country', 'Country') diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 2446c03dd0a..e644f4b0d7c 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -65,7 +65,7 @@ class MassMailing(models.Model): attachment_ids = fields.Many2many('ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id', string='Attachments') keep_archives = fields.Boolean(string='Keep Archives') - campaign_id = fields.Many2one('utm.campaign', string='UTM Campaign') + campaign_id = fields.Many2one('utm.campaign', string='UTM Campaign', index=True) source_id = fields.Many2one('utm.source', string='Source', required=True, ondelete='cascade', help="This is the link source, e.g. Search Engine, another domain, or name of email list") medium_id = fields.Many2one( diff --git a/addons/mass_mailing/models/utm.py b/addons/mass_mailing/models/utm.py index 783703d3961..54ea93bf62c 100644 --- a/addons/mass_mailing/models/utm.py +++ b/addons/mass_mailing/models/utm.py @@ -20,8 +20,17 @@ class UtmCampaign(models.Model): @api.depends('mailing_mail_ids') def _compute_mailing_mail_count(self): + if self.ids: + mailing_data = self.env['mailing.mailing'].read_group( + [('campaign_id', 'in', self.ids)], + ['campaign_id'], + ['campaign_id'] + ) + mapped_data = {m['campaign_id'][0]: m['campaign_id_count'] for m in mailing_data} + else: + mapped_data = dict() for campaign in self: - campaign.mailing_mail_count = len(campaign.mailing_mail_ids) + campaign.mailing_mail_count = mapped_data.get(campaign.id, 0) def _compute_statistics(self): """ Compute statistics of the mass mailing campaign """ |
