From 11cab26fb0f2167bfccfc3f11db10ff308f067b4 Mon Sep 17 00:00:00 2001 From: Pierre Rousseau Date: Wed, 15 May 2019 11:32:55 +0000 Subject: [PATCH] [IMP] crm_iap_lead_website: make it compatible with multi-website The purpose of this commit is to allow to define lead generations rules based on the website visited. Task-ID: 1964025 closes odoo/odoo#33391 Signed-off-by: Pierre Rousseau (pro) --- .../crm_iap_lead_website/models/crm_reveal_rule.py | 13 +++++++++---- .../crm_iap_lead_website/models/crm_reveal_view.py | 4 ++-- addons/crm_iap_lead_website/models/ir.py | 3 ++- .../crm_iap_lead_website/views/crm_reveal_views.xml | 3 ++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/addons/crm_iap_lead_website/models/crm_reveal_rule.py b/addons/crm_iap_lead_website/models/crm_reveal_rule.py index 4e0e2c0c831..d7c6089e821 100644 --- a/addons/crm_iap_lead_website/models/crm_reveal_rule.py +++ b/addons/crm_iap_lead_website/models/crm_reveal_rule.py @@ -28,6 +28,7 @@ class CRMRevealRule(models.Model): # Website Traffic Filter country_ids = fields.Many2many('res.country', string='Countries', help='Only visitors of following countries will be converted into leads/opportunities (using GeoIP).') + website_id = fields.Many2one('website', help='Restrict Lead generation to this website.') state_ids = fields.Many2many('res.country.state', string='States', help='Only visitors of following states will be converted into leads/opportunities.') regex_url = fields.Char(string='URL Expression', help='Regex to track website pages. Leave empty to track the entire website, or / to target the homepage. Example: /page* to track all the pages which begin with /page') sequence = fields.Integer(help='Used to order the rules with same URL and countries. ' @@ -122,13 +123,15 @@ class CRMRevealRule(models.Model): 'rules': [ { 'id': 0, - 'url': ***, + 'regex': ***, + 'website_id': 1, 'country_codes': ['BE', 'US'], 'state_codes': [('BE', False), ('US', 'NY'), ('US', 'CA')] }, { 'id': 1, - 'url': ***, + 'regex': ***, + 'website_id': 1, 'country_codes': ['BE'], 'state_codes': [('BE', False)] } @@ -159,6 +162,7 @@ class CRMRevealRule(models.Model): rules.append({ 'id': rule.id, 'regex': regex_url, + 'website_id': rule.website_id.id if rule.website_id else False, 'country_codes': countries, 'state_codes': states }) @@ -178,9 +182,9 @@ class CRMRevealRule(models.Model): country_rules[country].append(rule_index) return country_rules - def _match_url(self, url, country_code, state_code, rules_excluded): + def _match_url(self, website_id, url, country_code, state_code, rules_excluded): """ - Return the matching rule based on the country and URL. + Return the matching rule based on the country, the website and URL. """ all_rules = self._get_active_rules() rules_id = all_rules['country_rules'].get(country_code, []) @@ -189,6 +193,7 @@ class CRMRevealRule(models.Model): for rule_index in rules_id: rule = all_rules['rules'][rule_index] if ((country_code, state_code) in rule['state_codes'] or (country_code, False) in rule['state_codes'])\ + and (not rule['website_id'] or rule['website_id'] == website_id)\ and str(rule['id']) not in rules_excluded\ and re.search(rule['regex'], url): rules_matched.append(rule) diff --git a/addons/crm_iap_lead_website/models/crm_reveal_view.py b/addons/crm_iap_lead_website/models/crm_reveal_view.py index 3159bc30b4f..fb0705adcdc 100644 --- a/addons/crm_iap_lead_website/models/crm_reveal_view.py +++ b/addons/crm_iap_lead_website/models/crm_reveal_view.py @@ -40,9 +40,9 @@ class CRMRevealView(models.Model): domain.append(('create_date', '<', fields.Datetime.to_string(datetime.date.today() - relativedelta(weeks=weeks_valid)))) self.search(domain).unlink() - def _create_reveal_view(self, url, ip_address, country_code, state_code, rules_excluded): + def _create_reveal_view(self, website_id, url, ip_address, country_code, state_code, rules_excluded): # we are avoiding reveal if reveal_view already created for this IP - rules = self.env['crm.reveal.rule']._match_url(url, country_code, state_code, rules_excluded) + rules = self.env['crm.reveal.rule']._match_url(website_id, url, country_code, state_code, rules_excluded) if rules: query = """ INSERT INTO crm_reveal_view (reveal_ip, reveal_rule_id, reveal_state, create_date) diff --git a/addons/crm_iap_lead_website/models/ir.py b/addons/crm_iap_lead_website/models/ir.py index ef514a052ad..fb844a833dd 100644 --- a/addons/crm_iap_lead_website/models/ir.py +++ b/addons/crm_iap_lead_website/models/ir.py @@ -24,9 +24,10 @@ class IrHttp(models.AbstractModel): try: url = request.httprequest.url ip_address = request.httprequest.remote_addr + website_id = request.website.id rules_excluded = (request.httprequest.cookies.get('rule_ids') or '').split(',') before = time.time() - new_rules_excluded = request.env['crm.reveal.view'].sudo()._create_reveal_view(url, ip_address, country_code, state_code, rules_excluded) + new_rules_excluded = request.env['crm.reveal.view'].sudo()._create_reveal_view(website_id, url, ip_address, country_code, state_code, rules_excluded) # even when we match, no view may have been created if this is a duplicate _logger.info('Reveal process time: [%s], match rule: [%s?], country code: [%s], ip: [%s]', time.time() - before, new_rules_excluded == rules_excluded, country_code, diff --git a/addons/crm_iap_lead_website/views/crm_reveal_views.xml b/addons/crm_iap_lead_website/views/crm_reveal_views.xml index 34cf43c1895..2e1b1a634e2 100644 --- a/addons/crm_iap_lead_website/views/crm_reveal_views.xml +++ b/addons/crm_iap_lead_website/views/crm_reveal_views.xml @@ -36,8 +36,9 @@ + - +