diff --git a/addons/website_crm_score/models/website_crm_score.py b/addons/website_crm_score/models/website_crm_score.py index 23767e1002e..22c8854d204 100644 --- a/addons/website_crm_score/models/website_crm_score.py +++ b/addons/website_crm_score/models/website_crm_score.py @@ -41,6 +41,14 @@ class website_crm_score(models.Model): name = fields.Char('Name', required=True) value = fields.Float('Value', required=True) domain = fields.Char('Domain', required=True) + event_based = fields.Boolean( + 'Event-based rule', + help='When checked, the rule will be re-evaluated every time, even for leads ' + 'that have already been checked previously. This option incurs a large ' + 'performance penalty, so it should be checked only for rules that depend ' + 'on dynamic events', + default=False + ) running = fields.Boolean('Active', default=True) leads_count = fields.Integer(compute='_count_leads') @@ -64,6 +72,13 @@ class website_crm_score(models.Model): where_clause += """ AND (id NOT IN (SELECT lead_id FROM crm_lead_score_rel WHERE score_id = %s)) """ where_params.append(score['id']) + if not self.event_based: + # Only check leads that are newer than the last matching lead. + # Could be based on a "last run date" for a more precise optimization + where_clause += """ AND (id > (SELECT COALESCE(max(lead_id), 0) + FROM crm_lead_score_rel WHERE score_id = %s)) """ + where_params.append(score['id']) + self._cr.execute("""INSERT INTO crm_lead_score_rel SELECT crm_lead.id as lead_id, %s as score_id FROM crm_lead diff --git a/addons/website_crm_score/views/marketing.xml b/addons/website_crm_score/views/marketing.xml index fa8b554d2ab..be6ecae1601 100644 --- a/addons/website_crm_score/views/marketing.xml +++ b/addons/website_crm_score/views/marketing.xml @@ -80,6 +80,7 @@ +