summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Rousseau <pro@odoo.com>2019-05-15 11:32:55 +0000
committerPierre Rousseau <pro@odoo.com>2019-05-15 12:39:08 +0000
commit11cab26fb0f2167bfccfc3f11db10ff308f067b4 (patch)
tree1327a9d0996c0dd9b8c99408afcc7279a4781a97
parente0b33e280e6f9739e5015f936674456dfd0f8bcd (diff)
[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) <pro@odoo.com>
-rw-r--r--addons/crm_iap_lead_website/models/crm_reveal_rule.py13
-rw-r--r--addons/crm_iap_lead_website/models/crm_reveal_view.py4
-rw-r--r--addons/crm_iap_lead_website/models/ir.py3
-rw-r--r--addons/crm_iap_lead_website/views/crm_reveal_views.xml3
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 @@
</group>
<group string="Website Traffic Conditions">
<field name="country_ids" widget="many2many_tags"/>
+ <field name="website_id" options="{'no_open': True, 'no_create_edit': True}" groups="website.group_multi_website"/>
<field name="state_ids" widget="many2many_tags" attrs="{'invisible': [('country_ids', '=', [])]}" domain="[('country_id', 'in', country_ids)]"/>
- <field name="regex_url" widget="website_urls"/>
+ <field name="regex_url" widget="website_urls" placeholder="e.g. /page"/>
<field name="sequence"/>
</group>
</div>