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 @@
+
@@ -303,4 +304,4 @@
-
\ No newline at end of file
+