summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/link_tracker/models/link_tracker.py19
-rw-r--r--addons/mass_mailing/models/mailing.py2
-rw-r--r--addons/mass_mailing/models/utm.py11
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 """