[IMP] website_crm_score: optimize computation of static rules
Added new field `event_based` for marking dynamic rules that need to be re-evaluated even for leads that were checked previously and did not match. (default: False) If this field is not set to true, check only newer leads that were never checked before, significantly speeding up the check when there are hundreds of thousands of leads. Closes #6019
This commit is contained in:
committed by
Olivier Dony
parent
fd73263c51
commit
7fecbc91eb
@@ -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
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
<group>
|
||||
<field name="value"/>
|
||||
<field name="domain"/>
|
||||
<field name="event_based"/>
|
||||
<field name="running"/>
|
||||
</group>
|
||||
<button name="assign_scores_to_leads" type="object" string=" Score Now" class="oe_link"/>
|
||||
@@ -303,4 +304,4 @@
|
||||
<menuitem id="leads_dry_run" name="Assignation dry run" parent="leads_menu" action="lead_dry_run_action" groups="base.group_no_one"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
||||
|
||||
Reference in New Issue
Block a user