diff options
| author | Thibault Delavallée <tde@odoo.com> | 2020-06-09 15:33:09 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-06-10 16:10:28 +0000 |
| commit | baa4a73be082df27cd4abdeecf605ee19f6e35ef (patch) | |
| tree | 0484ba202b0cd71d2060454c36525555f5ea03a3 /addons | |
| parent | fbd42b33ad2f316e646e33fe931d4d2ea037d54c (diff) | |
[IMP] event_crm: avoid running rules in import mode
Purpose of this commit is to avoid running lead creation rules when importing
registration data. Indeed import is used to bootstrap databases and/or to
update records in batch. As those are not necessarily "new" customer
information creating leads on this information adds more noise than real
utility. Moreover import can run on huge batch of records and lead creation
imply some computation that would slowdown import process.
LINKS
Task ID 2166679
PR #52334
Upgrade PR odoo/upgrade#1292
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/event_crm/models/event_registration.py | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/addons/event_crm/models/event_registration.py b/addons/event_crm/models/event_registration.py index 7ca4765b4ec..a4b2d04edcd 100644 --- a/addons/event_crm/models/event_registration.py +++ b/addons/event_crm/models/event_registration.py @@ -27,17 +27,18 @@ class EventRegistration(models.Model): """ Trigger rules based on registration creation, and check state for rules based on confirmed / done attendees. """ registrations = super(EventRegistration, self).create(vals_list) - self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'create')]).sudo()._run_on_registrations(registrations) # handle triggers based on creation, then those based on confirm and done # as registrations can be automatically confirmed, or even created directly # with a state given in values - open_registrations = registrations.filtered(lambda reg: reg.state == 'open') - if open_registrations: - self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'confirm')]).sudo()._run_on_registrations(open_registrations) - done_registrations = registrations.filtered(lambda reg: reg.state == 'done') - if done_registrations: - self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'done')]).sudo()._run_on_registrations(done_registrations) + if not self.env.context.get('event_lead_rule_skip'): + self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'create')]).sudo()._run_on_registrations(registrations) + open_registrations = registrations.filtered(lambda reg: reg.state == 'open') + if open_registrations: + self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'confirm')]).sudo()._run_on_registrations(open_registrations) + done_registrations = registrations.filtered(lambda reg: reg.state == 'done') + if done_registrations: + self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'done')]).sudo()._run_on_registrations(done_registrations) return registrations @@ -54,24 +55,37 @@ class EventRegistration(models.Model): Also trigger rules based on confirmed and done attendees (state written to open and done). """ - to_update = self.filtered(lambda reg: reg.lead_ids) + to_update, event_lead_rule_skip = False, self.env.context.get('event_lead_rule_skip') + if not event_lead_rule_skip: + to_update = self.filtered(lambda reg: reg.lead_ids) if to_update: lead_tracked_vals = to_update._get_lead_tracked_values() res = super(EventRegistration, self).write(vals) - if to_update: + if not event_lead_rule_skip and to_update: to_update.flush() # compute notably partner-based fields if necessary to_update.sudo()._update_leads(vals, lead_tracked_vals) # handle triggers based on state - if vals.get('state') == 'open': - self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'confirm')]).sudo()._run_on_registrations(self) - elif vals.get('state') == 'done': - self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'done')]).sudo()._run_on_registrations(self) + if not event_lead_rule_skip: + if vals.get('state') == 'open': + self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'confirm')]).sudo()._run_on_registrations(self) + elif vals.get('state') == 'done': + self.env['event.lead.rule'].search([('lead_creation_trigger', '=', 'done')]).sudo()._run_on_registrations(self) return res + def _load_records_create(self, values): + """ In import mode: do not run rules those are intended to run when customers + buy tickets, not when bootstrapping a database. """ + return super(EventRegistration, self.with_context(event_lead_rule_skip=True))._load_records_create(values) + + def _load_records_write(self, values): + """ In import mode: do not run rules those are intended to run when customers + buy tickets, not when bootstrapping a database. """ + return super(EventRegistration, self.with_context(event_lead_rule_skip=True))._load_records_write(values) + def _update_leads(self, new_vals, lead_tracked_vals): """ Update leads linked to some registrations. Update is based depending on updated fields, see ``_get_lead_contact_fields()`` and ``_get_lead_ |
