[FIX] mass_mailing: avoid computing statistics when creating campaigns

When creating a new mass mailing campaign, the _compute_mailing_items method made a SQL request on an empty recordset.
This resulted in a SQL request error ("id in ()").

This commit checks if there are self.ids to compute before executing the SQL.

closes odoo/odoo#36872

Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
Aurélien Warnon
2019-09-13 13:28:45 +00:00
parent 17237ff31c
commit 7b8178693e
+12 -9
View File
@@ -36,15 +36,18 @@ class UtmCampaign(models.Model):
def _compute_mailing_items(self):
super(UtmCampaign, self)._compute_clicks_ratio()
query = """SELECT trace.campaign_id AS campaign_id, COUNT(DISTINCT(trace.id)) AS items_total, COUNT(DISTINCT(click.mailing_trace_id)) AS clicked_total
FROM mailing_trace AS trace
LEFT OUTER JOIN link_tracker_click as click ON click.mailing_trace_id = trace.id
WHERE trace.campaign_id IN %s
GROUP BY trace.campaign_id """
params = [tuple(self.ids)]
self.env.cr.execute(query, params)
clicked_data = self.env.cr.dictfetchall()
mapped_data = {datum['campaign_id']: {'clicked_total': datum['clicked_total'], 'items_total': datum['items_total']} for datum in clicked_data}
mapped_data = {}
if self.ids:
query = """SELECT trace.campaign_id AS campaign_id, COUNT(DISTINCT(trace.id)) AS items_total, COUNT(DISTINCT(click.mailing_trace_id)) AS clicked_total
FROM mailing_trace AS trace
LEFT OUTER JOIN link_tracker_click as click ON click.mailing_trace_id = trace.id
WHERE trace.campaign_id IN %s
GROUP BY trace.campaign_id """
params = [tuple(self.ids)]
self.env.cr.execute(query, params)
clicked_data = self.env.cr.dictfetchall()
mapped_data = {datum['campaign_id']: {'clicked_total': datum['clicked_total'], 'items_total': datum['items_total']} for datum in clicked_data}
for campaign in self:
campaign_items_values = mapped_data.get(campaign.id, {})