From eebaf55fde2fea1a4d4fefedc5183fe959fb2660 Mon Sep 17 00:00:00 2001
From: TWA
Date: Tue, 18 Sep 2018 11:34:29 +0200
Subject: [PATCH] [ADD] crm_reveal: New IAP module
crm_reveal will allow the automated generation of leads based on the
visits of the website.
---
addons/crm_reveal/__init__.py | 5 +
addons/crm_reveal/__manifest__.py | 20 +
addons/crm_reveal/controllers/__init__.py | 4 +
addons/crm_reveal/controllers/main.py | 19 +
.../crm_reveal/data/crm.reveal.industry.csv | 238 +++
addons/crm_reveal/data/crm.reveal.role.csv | 23 +
.../crm_reveal/data/crm.reveal.seniority.csv | 4 +
addons/crm_reveal/data/message_template.xml | 123 ++
addons/crm_reveal/data/reveal_data.xml | 40 +
addons/crm_reveal/i18n/crm_reveal.pot | 1892 +++++++++++++++++
addons/crm_reveal/models/__init__.py | 7 +
addons/crm_reveal/models/crm_lead.py | 13 +
addons/crm_reveal/models/crm_reveal_rule.py | 517 +++++
addons/crm_reveal/models/crm_reveal_view.py | 57 +
addons/crm_reveal/models/ir.py | 38 +
.../crm_reveal/models/res_config_settings.py | 16 +
.../crm_reveal/security/ir.model.access.csv | 6 +
addons/crm_reveal/views/crm_lead_view.xml | 33 +
addons/crm_reveal/views/crm_reveal_views.xml | 165 ++
.../views/res_config_settings_views.xml | 23 +
20 files changed, 3243 insertions(+)
create mode 100644 addons/crm_reveal/__init__.py
create mode 100644 addons/crm_reveal/__manifest__.py
create mode 100644 addons/crm_reveal/controllers/__init__.py
create mode 100644 addons/crm_reveal/controllers/main.py
create mode 100644 addons/crm_reveal/data/crm.reveal.industry.csv
create mode 100644 addons/crm_reveal/data/crm.reveal.role.csv
create mode 100644 addons/crm_reveal/data/crm.reveal.seniority.csv
create mode 100644 addons/crm_reveal/data/message_template.xml
create mode 100644 addons/crm_reveal/data/reveal_data.xml
create mode 100644 addons/crm_reveal/i18n/crm_reveal.pot
create mode 100644 addons/crm_reveal/models/__init__.py
create mode 100644 addons/crm_reveal/models/crm_lead.py
create mode 100644 addons/crm_reveal/models/crm_reveal_rule.py
create mode 100644 addons/crm_reveal/models/crm_reveal_view.py
create mode 100644 addons/crm_reveal/models/ir.py
create mode 100644 addons/crm_reveal/models/res_config_settings.py
create mode 100644 addons/crm_reveal/security/ir.model.access.csv
create mode 100644 addons/crm_reveal/views/crm_lead_view.xml
create mode 100644 addons/crm_reveal/views/crm_reveal_views.xml
create mode 100644 addons/crm_reveal/views/res_config_settings_views.xml
diff --git a/addons/crm_reveal/__init__.py b/addons/crm_reveal/__init__.py
new file mode 100644
index 00000000000..7d34c7c054a
--- /dev/null
+++ b/addons/crm_reveal/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import controllers
+from . import models
diff --git a/addons/crm_reveal/__manifest__.py b/addons/crm_reveal/__manifest__.py
new file mode 100644
index 00000000000..d209c6b804d
--- /dev/null
+++ b/addons/crm_reveal/__manifest__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': 'Lead Generation',
+ 'summary': 'Create Leads/Opportunities from your website\'s traffic',
+ 'category': 'CRM',
+ 'depends': ['iap', 'crm', 'website_form'],
+ 'data': [
+ 'data/crm.reveal.industry.csv',
+ 'data/crm.reveal.role.csv',
+ 'data/crm.reveal.seniority.csv',
+ 'data/message_template.xml',
+ 'data/reveal_data.xml',
+ 'security/ir.model.access.csv',
+ 'views/crm_lead_view.xml',
+ 'views/crm_reveal_views.xml',
+ 'views/res_config_settings_views.xml'
+ ]
+}
diff --git a/addons/crm_reveal/controllers/__init__.py b/addons/crm_reveal/controllers/__init__.py
new file mode 100644
index 00000000000..5d4b25db9c0
--- /dev/null
+++ b/addons/crm_reveal/controllers/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import main
diff --git a/addons/crm_reveal/controllers/main.py b/addons/crm_reveal/controllers/main.py
new file mode 100644
index 00000000000..e824a57bbef
--- /dev/null
+++ b/addons/crm_reveal/controllers/main.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+import json
+
+from odoo import http
+from odoo.addons.website_form.controllers.main import WebsiteForm
+from odoo.http import request
+
+
+class ContactController(WebsiteForm):
+
+ @http.route('/website_form/', type='http', auth="public", methods=['POST'], website=True)
+ def website_form(self, model_name, **kwargs):
+ if model_name == 'crm.lead':
+ # Add the ip_address to the request in order to add this to the lead
+ # that will be created. With this, we avoid to create a lead from
+ # reveal if a lead is already created from the contact form.
+ request.params['reveal_ip'] = request.httprequest.remote_addr
+
+ return super(ContactController, self).website_form(model_name, **kwargs)
diff --git a/addons/crm_reveal/data/crm.reveal.industry.csv b/addons/crm_reveal/data/crm.reveal.industry.csv
new file mode 100644
index 00000000000..ea365d6bb21
--- /dev/null
+++ b/addons/crm_reveal/data/crm.reveal.industry.csv
@@ -0,0 +1,238 @@
+"id",name,reveal_id
+"crm_reveal_industry_1","3D Printing","1"
+"crm_reveal_industry_2","Accounting","2"
+"crm_reveal_industry_3","Aerospace & Defense","3"
+"crm_reveal_industry_4","Agriculture","4"
+"crm_reveal_industry_5","Airlines","5"
+"crm_reveal_industry_6","Alternative Medicine","6"
+"crm_reveal_industry_7","Animation","7"
+"crm_reveal_industry_8","Apparel & Footwear","8"
+"crm_reveal_industry_9","Architecture","9"
+"crm_reveal_industry_10","Arts","10"
+"crm_reveal_industry_11","Arts & Crafts","11"
+"crm_reveal_industry_12","Asset Management","12"
+"crm_reveal_industry_13","Audio","13"
+"crm_reveal_industry_14","Automation","14"
+"crm_reveal_industry_15","Automotive","15"
+"crm_reveal_industry_16","Banking & Mortgages","16"
+"crm_reveal_industry_17","Beverages","17"
+"crm_reveal_industry_18","Biotechnology","18"
+"crm_reveal_industry_19","Broadcasting","19"
+"crm_reveal_industry_20","Building Materials","20"
+"crm_reveal_industry_21","Business Supplies","21"
+"crm_reveal_industry_22","Chemicals","22"
+"crm_reveal_industry_23","Civil Engineering","23"
+"crm_reveal_industry_24","Cloud Services","24"
+"crm_reveal_industry_25","Communications","25"
+"crm_reveal_industry_26","Computer Hardware","26"
+"crm_reveal_industry_27","Construction","27"
+"crm_reveal_industry_28","Construction Contractors & Services","28"
+"crm_reveal_industry_29","Consulting & Professional Services","29"
+"crm_reveal_industry_30","Consumer Discretionary","30"
+"crm_reveal_industry_31","Consumer Electronics","31"
+"crm_reveal_industry_32","Consumer Goods","32"
+"crm_reveal_industry_33","Consumer Staples","33"
+"crm_reveal_industry_34","Corporate & Business","34"
+"crm_reveal_industry_35","Cosmetics","35"
+"crm_reveal_industry_36","Design","36"
+"crm_reveal_industry_37","E-Commerce & Marketplaces","37"
+"crm_reveal_industry_38","E-Learning","38"
+"crm_reveal_industry_39","Education","39"
+"crm_reveal_industry_40","Electrical","40"
+"crm_reveal_industry_41","Energy","41"
+"crm_reveal_industry_42","Energy & Utilities","42"
+"crm_reveal_industry_43","Entertainment & Recreation","43"
+"crm_reveal_industry_44","Events","44"
+"crm_reveal_industry_45","Eyewear","45"
+"crm_reveal_industry_46","Facilities","46"
+"crm_reveal_industry_47","Family Services","47"
+"crm_reveal_industry_48","Finance","48"
+"crm_reveal_industry_49","Financial Services","49"
+"crm_reveal_industry_50","Fine Art","50"
+"crm_reveal_industry_51","Firearms","51"
+"crm_reveal_industry_52","Fishery","52"
+"crm_reveal_industry_53","Food","53"
+"crm_reveal_industry_54","Food Production","54"
+"crm_reveal_industry_55","Forums","55"
+"crm_reveal_industry_56","Fundraising","56"
+"crm_reveal_industry_57","Gambling & Casinos","57"
+"crm_reveal_industry_58","Government","58"
+"crm_reveal_industry_59","Ground Transportation","59"
+"crm_reveal_industry_60","Health & Wellness","60"
+"crm_reveal_industry_61","Health Care","61"
+"crm_reveal_industry_62","Higher Education","62"
+"crm_reveal_industry_63","Home & Furniture","63"
+"crm_reveal_industry_64","Home Improvement","64"
+"crm_reveal_industry_65","Human Resources","65"
+"crm_reveal_industry_66","Import & Export","66"
+"crm_reveal_industry_67","Industrials & Manufacturing","67"
+"crm_reveal_industry_68","Information Technology & Services","68"
+"crm_reveal_industry_69","Insurance","69"
+"crm_reveal_industry_70","International Relations","70"
+"crm_reveal_industry_71","International Trade","71"
+"crm_reveal_industry_72","Internet","72"
+"crm_reveal_industry_73","Investment","73"
+"crm_reveal_industry_74","Investment Banking","74"
+"crm_reveal_industry_75","Investment Management","75"
+"crm_reveal_industry_76","Jewelry, Watches & Luxury Goods","76"
+"crm_reveal_industry_77","Judiciary","77"
+"crm_reveal_industry_78","Law Enforcement","78"
+"crm_reveal_industry_79","Legal Services","79"
+"crm_reveal_industry_80","Libraries","80"
+"crm_reveal_industry_81","Machinery","81"
+"crm_reveal_industry_82","Maritime","82"
+"crm_reveal_industry_83","Market Research","83"
+"crm_reveal_industry_84","Marketing & Advertising","84"
+"crm_reveal_industry_85","Mechanical Engineering","85"
+"crm_reveal_industry_86","Media","86"
+"crm_reveal_industry_87","Medicine","87"
+"crm_reveal_industry_88","Military","88"
+"crm_reveal_industry_89","Mining & Metals","89"
+"crm_reveal_industry_90","Movies & TV","90"
+"crm_reveal_industry_91","Museums","91"
+"crm_reveal_industry_92","Music","92"
+"crm_reveal_industry_93","Nanotechnology","93"
+"crm_reveal_industry_94","Networking","94"
+"crm_reveal_industry_95","Non-Profit & Philanthropy","95"
+"crm_reveal_industry_96","Oil & Gas","96"
+"crm_reveal_industry_97","Outsourcing","97"
+"crm_reveal_industry_98","Packaging & Containers","98"
+"crm_reveal_industry_99","Paper Goods","99"
+"crm_reveal_industry_100","Payments","100"
+"crm_reveal_industry_101","Performing Arts","101"
+"crm_reveal_industry_102","Pharmaceuticals","102"
+"crm_reveal_industry_103","Pharmacy","103"
+"crm_reveal_industry_104","Photography","104"
+"crm_reveal_industry_105","Plastics","105"
+"crm_reveal_industry_106","Plumbing","106"
+"crm_reveal_industry_107","Political Organization","107"
+"crm_reveal_industry_108","Pornography","108"
+"crm_reveal_industry_109","Primary & Secondary Education","109"
+"crm_reveal_industry_110","Printing","110"
+"crm_reveal_industry_111","Public Relations","111"
+"crm_reveal_industry_112","Publishing","112"
+"crm_reveal_industry_113","Ranching","113"
+"crm_reveal_industry_114","Real Estate","114"
+"crm_reveal_industry_115","Religion","115"
+"crm_reveal_industry_116","Renewables & Environment","116"
+"crm_reveal_industry_117","Restaurants","117"
+"crm_reveal_industry_118","Retail","118"
+"crm_reveal_industry_119","Sanitization Services","119"
+"crm_reveal_industry_120","Scientific & Academic Research","120"
+"crm_reveal_industry_121","Security","121"
+"crm_reveal_industry_122","Services","122"
+"crm_reveal_industry_123","Shipbuilding","123"
+"crm_reveal_industry_124","Shipping & Logistics","124"
+"crm_reveal_industry_125","Society","125"
+"crm_reveal_industry_126","Sporting Goods","126"
+"crm_reveal_industry_127","Sports & Fitness","127"
+"crm_reveal_industry_128","Stores","128"
+"crm_reveal_industry_129","Talent Agencies","129"
+"crm_reveal_industry_130","Technology","130"
+"crm_reveal_industry_131","Telecommunications","131"
+"crm_reveal_industry_132","Textiles","132"
+"crm_reveal_industry_133","Tobacco","133"
+"crm_reveal_industry_134","Tools","134"
+"crm_reveal_industry_135","Translation","135"
+"crm_reveal_industry_136","Transportation","136"
+"crm_reveal_industry_137","Travel & Leisure","137"
+"crm_reveal_industry_138","Utilities","138"
+"crm_reveal_industry_139","Venture Capital","139"
+"crm_reveal_industry_140","Veterinary","140"
+"crm_reveal_industry_141","Video Games","141"
+"crm_reveal_industry_142","Warehousing","142"
+"crm_reveal_industry_143","Web Services & Apps","143"
+"crm_reveal_industry_144","Wholesale","144"
+"crm_reveal_industry_145","Financials","145"
+"crm_reveal_industry_146","Industrials","146"
+"crm_reveal_industry_147","Information Technology","147"
+"crm_reveal_industry_148","Materials","148"
+"crm_reveal_industry_149","Telecommunication Services","149"
+"crm_reveal_industry_150","Consumer Services","150"
+"crm_reveal_industry_151","Diversified Consumer Services","151"
+"crm_reveal_industry_152","Retailing","152"
+"crm_reveal_industry_153","Food & Staples Retailing","153"
+"crm_reveal_industry_154","Food, Beverage & Tobacco","154"
+"crm_reveal_industry_155","Household & Personal Products","155"
+"crm_reveal_industry_156","Energy Equipment & Services","156"
+"crm_reveal_industry_157","Banks","157"
+"crm_reveal_industry_158","Diversified Financial Services","158"
+"crm_reveal_industry_159","Diversified Financials","159"
+"crm_reveal_industry_160","Health Care Equipment & Services","160"
+"crm_reveal_industry_161","Pharmaceuticals, Biotechnology & Life Sciences","161"
+"crm_reveal_industry_162","Capital Goods","162"
+"crm_reveal_industry_163","Commercial & Professional Services","163"
+"crm_reveal_industry_164","Semiconductors & Semiconductor Equipment","164"
+"crm_reveal_industry_165","Software & Services","165"
+"crm_reveal_industry_166","Technology Hardware & Equipment","166"
+"crm_reveal_industry_167","Construction Materials","167"
+"crm_reveal_industry_168","Independent Power and Renewable Electricity Producers","168"
+"crm_reveal_industry_169","Hotels, Restaurants & Leisure","169"
+"crm_reveal_industry_170","Education Services","170"
+"crm_reveal_industry_171","Specialized Consumer Services","171"
+"crm_reveal_industry_172","Distributors","172"
+"crm_reveal_industry_173","Specialty Retail","173"
+"crm_reveal_industry_174","Food Products","174"
+"crm_reveal_industry_175","Personal Products","175"
+"crm_reveal_industry_176","Gas Utilities","176"
+"crm_reveal_industry_177","Capital Markets","177"
+"crm_reveal_industry_178","Health Care Equipment & Supplies","178"
+"crm_reveal_industry_179","Health Care Providers & Services","179"
+"crm_reveal_industry_180","Life Sciences Tools & Services","180"
+"crm_reveal_industry_181","Commercial Services & Supplies","181"
+"crm_reveal_industry_182","Construction & Engineering","182"
+"crm_reveal_industry_183","Electrical Equipment","183"
+"crm_reveal_industry_184","Industrial Conglomerates","184"
+"crm_reveal_industry_185","Trading Companies & Distributors","185"
+"crm_reveal_industry_186","Professional Services","186"
+"crm_reveal_industry_187","Air Freight & Logistics","187"
+"crm_reveal_industry_188","Marine","188"
+"crm_reveal_industry_189","Road & Rail","189"
+"crm_reveal_industry_190","Internet Software & Services","190"
+"crm_reveal_industry_191","IT Services","191"
+"crm_reveal_industry_192","Software","192"
+"crm_reveal_industry_193","Communications Equipment","193"
+"crm_reveal_industry_194","Electronic Equipment, Instruments & Components","194"
+"crm_reveal_industry_195","Technology Hardware, Storage & Peripherals","195"
+"crm_reveal_industry_196","Containers & Packaging","196"
+"crm_reveal_industry_197","Metals & Mining","197"
+"crm_reveal_industry_198","Paper & Forest Products","198"
+"crm_reveal_industry_199","Diversified Telecommunication Services","199"
+"crm_reveal_industry_200","Wireless Telecommunication Services","200"
+"crm_reveal_industry_201","Renewable Electricity","201"
+"crm_reveal_industry_202","Electric Utilities","202"
+"crm_reveal_industry_203","Casinos & Gaming","203"
+"crm_reveal_industry_204","Leisure Facilities","204"
+"crm_reveal_industry_205","Advertising","205"
+"crm_reveal_industry_206","Movies & Entertainment","206"
+"crm_reveal_industry_207","Home Improvement Retail","207"
+"crm_reveal_industry_208","Homefurnishing Retail","208"
+"crm_reveal_industry_209","Food Retail","209"
+"crm_reveal_industry_210","Agricultural Products","210"
+"crm_reveal_industry_211","Packaged Foods & Meats","211"
+"crm_reveal_industry_212","Asset Management & Custody Banks","212"
+"crm_reveal_industry_213","Diversified Capital Markets","213"
+"crm_reveal_industry_214","Investment Banking & Brokerage","214"
+"crm_reveal_industry_215","Health Care Services","215"
+"crm_reveal_industry_216","Commercial Printing","216"
+"crm_reveal_industry_217","Industrial Machinery","217"
+"crm_reveal_industry_218","Consulting","218"
+"crm_reveal_industry_219","Human Resource & Employment Services","219"
+"crm_reveal_industry_220","Research & Consulting Services","220"
+"crm_reveal_industry_221","Semiconductors","221"
+"crm_reveal_industry_222","Data Processing & Outsourced Services","222"
+"crm_reveal_industry_223","Graphic Design","223"
+"crm_reveal_industry_224","Computer Networking","224"
+"crm_reveal_industry_225","Commodity Chemicals","225"
+"crm_reveal_industry_226","Gold","226"
+"crm_reveal_industry_227","Paper Products","227"
+"crm_reveal_industry_228","Integrated Telecommunication Services","228"
+"crm_reveal_industry_229","Renewable Energy","229"
+"crm_reveal_industry_230","B2B","230"
+"crm_reveal_industry_231","B2C","231"
+"crm_reveal_industry_232","E-Commerce","232"
+"crm_reveal_industry_233","Enterprise","233"
+"crm_reveal_industry_234","ISP","234"
+"crm_reveal_industry_235","Marketplace","235"
+"crm_reveal_industry_236","Mobile","236"
+"crm_reveal_industry_237","SAAS","237"
\ No newline at end of file
diff --git a/addons/crm_reveal/data/crm.reveal.role.csv b/addons/crm_reveal/data/crm.reveal.role.csv
new file mode 100644
index 00000000000..e82b77e8876
--- /dev/null
+++ b/addons/crm_reveal/data/crm.reveal.role.csv
@@ -0,0 +1,23 @@
+"id",name,reveal_id
+"crm_reveal_role_1","ceo","ceo"
+"crm_reveal_role_2","communications","communications"
+"crm_reveal_role_3","consulting","consulting"
+"crm_reveal_role_4","customer_service","customer_service"
+"crm_reveal_role_5","education","education"
+"crm_reveal_role_6","engineering","engineering"
+"crm_reveal_role_7","finance","finance"
+"crm_reveal_role_8","founder","founder"
+"crm_reveal_role_9","health_professional","health_professional"
+"crm_reveal_role_10","human_resources","human_resources"
+"crm_reveal_role_11","information_technology","information_technology"
+"crm_reveal_role_12","legal","legal"
+"crm_reveal_role_13","marketing","marketing"
+"crm_reveal_role_14","operations","operations"
+"crm_reveal_role_15","owner","owner"
+"crm_reveal_role_16","president","president"
+"crm_reveal_role_17","product","product"
+"crm_reveal_role_18","public_relations","public_relations"
+"crm_reveal_role_19","real_estate","real_estate"
+"crm_reveal_role_20","recruiting","recruiting"
+"crm_reveal_role_21","research","research"
+"crm_reveal_role_22","sale","sale"
diff --git a/addons/crm_reveal/data/crm.reveal.seniority.csv b/addons/crm_reveal/data/crm.reveal.seniority.csv
new file mode 100644
index 00000000000..0f5af1170e4
--- /dev/null
+++ b/addons/crm_reveal/data/crm.reveal.seniority.csv
@@ -0,0 +1,4 @@
+"id",name,reveal_id
+"crm_reveal_seniority_1","director","director"
+"crm_reveal_seniority_2","executive","executive"
+"crm_reveal_seniority_3","manager","manager"
\ No newline at end of file
diff --git a/addons/crm_reveal/data/message_template.xml b/addons/crm_reveal/data/message_template.xml
new file mode 100644
index 00000000000..e71d0a7de21
--- /dev/null
+++ b/addons/crm_reveal/data/message_template.xml
@@ -0,0 +1,123 @@
+
+
+
+
+ Opportunity created by Odoo Lead Generation
+
+
+
diff --git a/addons/crm_reveal/data/reveal_data.xml b/addons/crm_reveal/data/reveal_data.xml
new file mode 100644
index 00000000000..ccc5ad0743d
--- /dev/null
+++ b/addons/crm_reveal/data/reveal_data.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+ Lead Generation: Leads/Opportunities Generation
+
+ code
+ model._process_lead_generation()
+
+ 1
+ days
+ -1
+
+
+
+
+ IAP Lead Generation Notification
+ iap@odoo.com
+ iap@odoo.com
+ IAP Lead Generation Notification
+
+
+ Dear,
+ There is no more credits on your IAP Lead Generation account.
+ You can charge your IAP Lead Generation account in the settings of the CRM app.
+
+
Best regards,
+ Odoo S.A.
+ ]]>
+
+
+
+
+
+ crm.lead
+
+
+
diff --git a/addons/crm_reveal/i18n/crm_reveal.pot b/addons/crm_reveal/i18n/crm_reveal.pot
new file mode 100644
index 00000000000..beaac368e4d
--- /dev/null
+++ b/addons/crm_reveal/i18n/crm_reveal.pot
@@ -0,0 +1,1892 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * crm_reveal
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-07-04 06:10+0000\n"
+"PO-Revision-Date: 2018-07-04 06:10+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: crm_reveal
+#: model:mail.template,body_html:crm_reveal.reveal_no_credits
+msgid "\n"
+" \n"
+" Dear,
\n"
+" There is no more credits on your IAP Leads Generation account. \n"
+" You can charge your IAP Leads Generation account in the settings of the CRM app. \n"
+"\n"
+"
Best regards,
\n"
+" Odoo S.A.
\n"
+" \n"
+" "
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "(Time Now)"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_1
+msgid "3D Printing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Contacts "
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Phone : "
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Timezone : "
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid " Leads "
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid " Opportunities "
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid " people "
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_2
+msgid "Accounting"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_active
+msgid "Active"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_205
+msgid "Advertising"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_3
+msgid "Aerospace & Defense"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_210
+msgid "Agricultural Products"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_4
+msgid "Agriculture"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_187
+msgid "Air Freight & Logistics"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_5
+msgid "Airlines"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_6
+msgid "Alternative Medicine"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_7
+msgid "Animation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_8
+msgid "Apparel & Footwear"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_9
+msgid "Architecture"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_10
+msgid "Arts"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_11
+msgid "Arts & Crafts"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_12
+msgid "Asset Management"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_212
+msgid "Asset Management & Custody Banks"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_13
+msgid "Audio"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_14
+msgid "Automation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_15
+msgid "Automotive"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_230
+msgid "B2B"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_231
+msgid "B2C"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_16
+msgid "Banking & Mortgages"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_157
+msgid "Banks"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_17
+msgid "Beverages"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_18
+msgid "Biotechnology"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_19
+msgid "Broadcasting"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_20
+msgid "Building Materials"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_21
+msgid "Business Supplies"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.res_config_settings_view_form
+msgid "Buy IAP Credits"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_crm_reveal_rule
+msgid "CRM Leads Generation Rules"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_162
+msgid "Capital Goods"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_177
+msgid "Capital Markets"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_203
+msgid "Casinos & Gaming"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.res_config_settings_view_form
+msgid "Charge your IAP account to generate Leads/Opportunities from your website's traffic"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_22
+msgid "Chemicals"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_23
+msgid "Civil Engineering"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_24
+msgid "Cloud Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_color
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_color
+msgid "Color Index"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_163
+msgid "Commercial & Professional Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_216
+msgid "Commercial Printing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_181
+msgid "Commercial Services & Supplies"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_225
+msgid "Commodity Chemicals"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_25
+msgid "Communications"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_193
+msgid "Communications Equipment"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,lead_for:0
+msgid "Companies"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,lead_for:0
+msgid "Companies + Contacts"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_26
+msgid "Computer Hardware"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_224
+msgid "Computer Networking"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_27
+msgid "Construction"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_182
+msgid "Construction & Engineering"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_28
+msgid "Construction Contractors & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_167
+msgid "Construction Materials"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_218
+msgid "Consulting"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_29
+msgid "Consulting & Professional Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_30
+msgid "Consumer Discretionary"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_31
+msgid "Consumer Electronics"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_32
+msgid "Consumer Goods"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_150
+msgid "Consumer Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_33
+msgid "Consumer Staples"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "Contact Filter"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_196
+msgid "Containers & Packaging"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_34
+msgid "Corporate & Business"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_35
+msgid "Cosmetics"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_country_ids
+msgid "Countries"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_create_date
+msgid "Create Date"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.actions.act_window,help:crm_reveal.crm_reveal_rule_action
+msgid "Create rules to generate B2B leads/opportunities by tracking data of your website visitors."
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_create_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_create_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_create_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_create_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_create_date
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_create_date
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_create_date
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_create_date
+msgid "Created on"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_calculate_credits
+msgid "Credit Used"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_222
+msgid "Data Processing & Outsourced Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_lead_for
+msgid "Data Tracking"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_36
+msgid "Design"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_display_name
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_display_name
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_display_name
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_display_name
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_172
+msgid "Distributors"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_213
+msgid "Diversified Capital Markets"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_151
+msgid "Diversified Consumer Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_158
+msgid "Diversified Financial Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_159
+msgid "Diversified Financials"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_199
+msgid "Diversified Telecommunication Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_232
+msgid "E-Commerce"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_37
+msgid "E-Commerce & Marketplaces"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_38
+msgid "E-Learning"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_39
+msgid "Education"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_170
+msgid "Education Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_202
+msgid "Electric Utilities"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_40
+msgid "Electrical"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_183
+msgid "Electrical Equipment"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_194
+msgid "Electronic Equipment, Instruments & Components"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Email"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_41
+msgid "Energy"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_42
+msgid "Energy & Utilities"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_156
+msgid "Energy Equipment & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: code:private/crm_reveal/models/crm_reveal_rule.py:73
+#, python-format
+msgid "Enter Valid Regex."
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_233
+msgid "Enterprise"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_43
+msgid "Entertainment & Recreation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_44
+msgid "Events"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_extra_contacts
+msgid "Extra Contacts"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_45
+msgid "Eyewear"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_46
+msgid "Facilities"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_47
+msgid "Family Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_48
+msgid "Finance"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_49
+msgid "Financial Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_145
+msgid "Financials"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_50
+msgid "Fine Art"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_51
+msgid "Firearms"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_52
+msgid "Fishery"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_53
+msgid "Food"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_153
+msgid "Food & Staples Retailing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_54
+msgid "Food Production"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_174
+msgid "Food Products"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_209
+msgid "Food Retail"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_154
+msgid "Food, Beverage & Tobacco"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_55
+msgid "Forums"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_56
+msgid "Fundraising"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_57
+msgid "Gambling & Casinos"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_176
+msgid "Gas Utilities"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_lead_ids
+msgid "Generated Lead / Opportunity"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_226
+msgid "Gold"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_58
+msgid "Government"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_223
+msgid "Graphic Design"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_59
+msgid "Ground Transportation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_ir_http
+msgid "HTTP routing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_60
+msgid "Health & Wellness"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_61
+msgid "Health Care"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_160
+msgid "Health Care Equipment & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_178
+msgid "Health Care Equipment & Supplies"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_179
+msgid "Health Care Providers & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_215
+msgid "Health Care Services"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,priority:0
+msgid "High"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_62
+msgid "Higher Education"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_63
+msgid "Home & Furniture"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_64
+msgid "Home Improvement"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_207
+msgid "Home Improvement Retail"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_208
+msgid "Homefurnishing Retail"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_169
+msgid "Hotels, Restaurants & Leisure"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_155
+msgid "Household & Personal Products"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_219
+msgid "Human Resource & Employment Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_65
+msgid "Human Resources"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_lead_reveal_iap_credits
+msgid "IAP Credits"
+msgstr ""
+
+#. module: crm_reveal
+#: model:mail.template,subject:crm_reveal.reveal_no_credits
+msgid "IAP Leads Generation Notification"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.res_config_settings_view_form
+msgid "IAP Leads Generations"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_id
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_id
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_id
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_id
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_id
+msgid "ID"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_lead_reveal_ip
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_reveal_ip
+msgid "IP Address"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_234
+msgid "ISP"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_191
+msgid "IT Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_lead_for
+msgid "If you track company data, one credit will be consumed per lead/opportunity created. If you track company and contacts data, two credits will be consumed. Such data will be visible in the lead/opportunity."
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_66
+msgid "Import & Export"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_168
+msgid "Independent Power and Renewable Electricity Producers"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_184
+msgid "Industrial Conglomerates"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_217
+msgid "Industrial Machinery"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_146
+msgid "Industrials"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_67
+msgid "Industrials & Manufacturing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_crm_reveal_industry
+msgid "Industry Tag"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_industry_tag_ids
+msgid "Industry Tags"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_147
+msgid "Information Technology"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_68
+msgid "Information Technology & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_69
+msgid "Insurance"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_228
+msgid "Integrated Telecommunication Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_70
+msgid "International Relations"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_71
+msgid "International Trade"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_72
+msgid "Internet"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_190
+msgid "Internet Software & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_73
+msgid "Investment"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_74
+msgid "Investment Banking"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_214
+msgid "Investment Banking & Brokerage"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_75
+msgid "Investment Management"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_76
+msgid "Jewelry, Watches & Luxury Goods"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_77
+msgid "Judiciary"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry___last_update
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role___last_update
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule___last_update
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority___last_update
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_write_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_write_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_write_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_write_uid
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_write_date
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_write_date
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_write_date
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_write_date
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_78
+msgid "Law Enforcement"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,lead_type:0
+msgid "Lead"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "Lead Data"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_crm_lead
+msgid "Lead/Opportunity"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_lead_form
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_lead_opportunity_form
+msgid "Leads Generation Information"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_lead_reveal_rule_id
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_reveal_rule_id
+msgid "Leads Generation Rule"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.actions.act_window,name:crm_reveal.crm_reveal_rule_action
+#: model:ir.ui.menu,name:crm_reveal.crm_reveal_rule_menu_action
+msgid "Leads Generation Rules"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.actions.act_window,name:crm_reveal.crm_reveal_view_action
+#: model:ir.ui.menu,name:crm_reveal.crm_reveal_view_menu_action
+msgid "Leads Generation Views"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.actions.server,name:crm_reveal.ir_cron_crm_reveal_lead_ir_actions_server
+#: model:ir.cron,cron_name:crm_reveal.ir_cron_crm_reveal_lead
+#: model:ir.cron,name:crm_reveal.ir_cron_crm_reveal_lead
+msgid "Leads Generation: Leads/Opportunities Generation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_industry_tag_ids
+msgid "Leave empty to always match. Odoo will not create lead if no match"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_company_size_max
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_company_size_min
+msgid "Leave it as 0 if you don't want to use this filter."
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_79
+msgid "Legal Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_204
+msgid "Leisure Facilities"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_80
+msgid "Libraries"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_180
+msgid "Life Sciences Tools & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,priority:0
+msgid "Low"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_81
+msgid "Machinery"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_188
+msgid "Marine"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_82
+msgid "Maritime"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_83
+msgid "Market Research"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_84
+msgid "Marketing & Advertising"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_235
+msgid "Marketplace"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_148
+msgid "Materials"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_company_size_max
+msgid "Max Company Size"
+msgstr ""
+
+#. module: crm_reveal
+#: sql_constraint:crm.reveal.rule:0
+msgid "Maximum 5 extra contacts are allowed!"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_85
+msgid "Mechanical Engineering"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_86
+msgid "Media"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_87
+msgid "Medicine"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_197
+msgid "Metals & Mining"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_88
+msgid "Military"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_company_size_min
+msgid "Min Company Size"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_89
+msgid "Mining & Metals"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_236
+msgid "Mobile"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_206
+msgid "Movies & Entertainment"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_90
+msgid "Movies & TV"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_91
+msgid "Museums"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_92
+msgid "Music"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_name
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Name"
+msgstr ""
+
+#. module: crm_reveal
+#: sql_constraint:crm.reveal.seniority:0
+msgid "Name already exists!"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_93
+msgid "Nanotechnology"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_94
+msgid "Networking"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "No credit is consumed if the company is not found. \n"
+" 1 credit is consumed if the company is found. "
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.actions.act_window,help:crm_reveal.crm_reveal_rule_action
+msgid "No rule found"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_95
+msgid "Non-Profit & Philanthropy"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,priority:0
+msgid "Normal"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.view,reveal_state:0
+msgid "Not Found"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_leads_count
+msgid "Number of Generated Leads"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_opportunity_count
+msgid "Number of Generated Opportunity"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_96
+msgid "Oil & Gas"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_country_ids
+msgid "Only visitors of following countries will be converted into leads/opportunities (using GeoIP)."
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,lead_type:0
+msgid "Opportunity"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "Opportunity Data"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "Opportunity Generation Conditions"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Opportunity created by Odoo Leads Generation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_other_role_ids
+msgid "Other Roles"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_97
+msgid "Outsourcing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_211
+msgid "Packaged Foods & Meats"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_98
+msgid "Packaging & Containers"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_198
+msgid "Paper & Forest Products"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_99
+msgid "Paper Goods"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_227
+msgid "Paper Products"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_100
+msgid "Payments"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_crm_reveal_role
+msgid "People Role"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_crm_reveal_seniority
+msgid "People Seniority"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_101
+msgid "Performing Arts"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_175
+msgid "Personal Products"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_102
+msgid "Pharmaceuticals"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_161
+msgid "Pharmaceuticals, Biotechnology & Life Sciences"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_103
+msgid "Pharmacy"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Phone"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_104
+msgid "Photography"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_105
+msgid "Plastics"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_106
+msgid "Plumbing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_107
+msgid "Political Organization"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_108
+msgid "Pornography"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_preferred_role_id
+msgid "Preferred Role"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_109
+msgid "Primary & Secondary Education"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_110
+msgid "Printing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_priority
+msgid "Priority"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_186
+msgid "Professional Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_111
+msgid "Public Relations"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_112
+msgid "Publishing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_113
+msgid "Ranching"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_114
+msgid "Real Estate"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_regex_url
+msgid "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"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_115
+msgid "Religion"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_201
+msgid "Renewable Electricity"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_229
+msgid "Renewable Energy"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_116
+msgid "Renewables & Environment"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_220
+msgid "Research & Consulting Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_117
+msgid "Restaurants"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_118
+msgid "Retail"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_152
+msgid "Retailing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_reveal_id
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_reveal_id
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_seniority_reveal_id
+msgid "Reveal"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_lead_reveal_id
+msgid "Reveal ID"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_189
+msgid "Road & Rail"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_role_name
+msgid "Role Name"
+msgstr ""
+
+#. module: crm_reveal
+#: sql_constraint:crm.reveal.role:0
+msgid "Role name already exists!"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_name
+msgid "Rule Name"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_237
+msgid "SAAS"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_team_id
+msgid "Sales Channel"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_user_id
+msgid "Salesperson"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_119
+msgid "Sanitization Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_120
+msgid "Scientific & Academic Research"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_121
+msgid "Security"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_221
+msgid "Semiconductors"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_164
+msgid "Semiconductors & Semiconductor Equipment"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_seniority_id
+msgid "Seniority"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_122
+msgid "Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_123
+msgid "Shipbuilding"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_124
+msgid "Shipping & Logistics"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_125
+msgid "Society"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_192
+msgid "Software"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_165
+msgid "Software & Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_171
+msgid "Specialized Consumer Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_173
+msgid "Specialty Retail"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_126
+msgid "Sporting Goods"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_127
+msgid "Sports & Fitness"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_view_reveal_state
+msgid "State"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_128
+msgid "Stores"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_suffix
+msgid "Suffix"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_industry_name
+msgid "Tag Name"
+msgstr ""
+
+#. module: crm_reveal
+#: sql_constraint:crm.reveal.industry:0
+msgid "Tag name already exists!"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_tag_ids
+msgid "Tags"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_129
+msgid "Talent Agencies"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_130
+msgid "Technology"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_166
+msgid "Technology Hardware & Equipment"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_195
+msgid "Technology Hardware, Storage & Peripherals"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Technology Used :"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_149
+msgid "Telecommunication Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_131
+msgid "Telecommunications"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_132
+msgid "Textiles"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_extra_contacts
+msgid "This is the number of extra contacts to track if their role and seniority match your criteria.Their details will show up in the history thread of generated leads/opportunities. One credit is consumed per tracked contact."
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_suffix
+msgid "This will be appended in name of generated lead so you can identify lead/opportunity is generated with this rule"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.lead_message_template
+msgid "Title"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.view,reveal_state:0
+msgid "To Process"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_133
+msgid "Tobacco"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_134
+msgid "Tools"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_185
+msgid "Trading Companies & Distributors"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_135
+msgid "Translation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_136
+msgid "Transportation"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_137
+msgid "Travel & Leisure"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_lead_type
+msgid "Type"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,field_description:crm_reveal.field_crm_reveal_rule_regex_url
+msgid "URL Expression"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model.fields,help:crm_reveal.field_crm_reveal_rule_sequence
+msgid "Used to order the rules with same URL and countries. Rules with a lower sequence number will be processed first."
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_138
+msgid "Utilities"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_139
+msgid "Venture Capital"
+msgstr ""
+
+#. module: crm_reveal
+#: selection:crm.reveal.rule,priority:0
+msgid "Very High"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_140
+msgid "Veterinary"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_141
+msgid "Video Games"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_142
+msgid "Warehousing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_143
+msgid "Web Services & Apps"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "Website Traffic Conditions"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_144
+msgid "Wholesale"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.industry,name:crm_reveal.crm_reveal_industry_200
+msgid "Wireless Telecommunication Services"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_1
+msgid "ceo"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_2
+msgid "communications"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_3
+msgid "consulting"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "credits are consumed if the company matches the rule."
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_crm_reveal_view
+msgid "crm.reveal.view"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_4
+msgid "customer_service"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.seniority,name:crm_reveal.crm_reveal_seniority_1
+msgid "director"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.ui.view,arch_db:crm_reveal.crm_reveal_rule_form
+msgid "e.g. US Visitors"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_5
+msgid "education"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_6
+msgid "engineering"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.seniority,name:crm_reveal.crm_reveal_seniority_2
+msgid "executive"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_7
+msgid "finance"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_8
+msgid "founder"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_9
+msgid "health_professional"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_10
+msgid "human_resources"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_11
+msgid "information_technology"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_12
+msgid "legal"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.seniority,name:crm_reveal.crm_reveal_seniority_3
+msgid "manager"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_13
+msgid "marketing"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_14
+msgid "operations"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_15
+msgid "owner"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_16
+msgid "president"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_17
+msgid "product"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_18
+msgid "public_relations"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_19
+msgid "real_estate"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_20
+msgid "recruiting"
+msgstr ""
+
+#. module: crm_reveal
+#: model:ir.model,name:crm_reveal.model_res_config_settings
+msgid "res.config.settings"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_21
+msgid "research"
+msgstr ""
+
+#. module: crm_reveal
+#: model:crm.reveal.role,name:crm_reveal.crm_reveal_role_22
+msgid "sale"
+msgstr ""
+
diff --git a/addons/crm_reveal/models/__init__.py b/addons/crm_reveal/models/__init__.py
new file mode 100644
index 00000000000..3e82a35b377
--- /dev/null
+++ b/addons/crm_reveal/models/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import crm_lead
+from . import crm_reveal_rule
+from . import crm_reveal_view
+from . import ir
+from . import res_config_settings
diff --git a/addons/crm_reveal/models/crm_lead.py b/addons/crm_reveal/models/crm_lead.py
new file mode 100644
index 00000000000..559ca19a8ba
--- /dev/null
+++ b/addons/crm_reveal/models/crm_lead.py
@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class Lead(models.Model):
+ _inherit = 'crm.lead'
+
+ reveal_ip = fields.Char(string='IP Address')
+ reveal_iap_credits = fields.Integer(string='IAP Credits')
+ reveal_rule_id = fields.Many2one('crm.reveal.rule', string='Lead Generation Rule', index=True)
+ reveal_id = fields.Char(string='Reveal ID', index=True)
diff --git a/addons/crm_reveal/models/crm_reveal_rule.py b/addons/crm_reveal/models/crm_reveal_rule.py
new file mode 100644
index 00000000000..b62d498dd54
--- /dev/null
+++ b/addons/crm_reveal/models/crm_reveal_rule.py
@@ -0,0 +1,517 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import datetime
+import itertools
+import logging
+import re
+from dateutil.relativedelta import relativedelta
+from math import floor, log10
+
+from odoo import api, fields, models, tools, _
+from odoo.addons.iap import jsonrpc
+from odoo.addons.crm.models import crm_stage
+from odoo.exceptions import ValidationError
+
+_logger = logging.getLogger(__name__)
+
+DEFAULT_ENDPOINT = 'https://iap-services.odoo.com'
+DEFAULT_REVEAL_BATCH_LIMIT = 25
+DEFAULT_REVEAL_MONTH_VALID = 6
+
+class CRMRevealRule(models.Model):
+ _name = 'crm.reveal.rule'
+ _description = 'CRM Lead Generation Rules'
+ _order = 'sequence'
+
+ name = fields.Char(string='Rule Name', required=True)
+ active = fields.Boolean(default=True)
+
+ # 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).')
+ 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. '
+ 'Rules with a lower sequence number will be processed first.')
+
+ # Company Criteria Filter
+ industry_tag_ids = fields.Many2many('crm.reveal.industry', string='Industry Tags', help='Leave empty to always match. Odoo will not create lead if no match')
+ company_size_min = fields.Integer(string='Min Company Size', help="Leave it as 0 if you don't want to use this filter.")
+ company_size_max = fields.Integer(string='Max Company Size', help="Leave it as 0 if you don't want to use this filter.")
+
+ # Contact Generation Filter
+ preferred_role_id = fields.Many2one('crm.reveal.role', string='Preferred Role')
+ other_role_ids = fields.Many2many('crm.reveal.role', string='Other Roles')
+ seniority_id = fields.Many2one('crm.reveal.seniority', string='Seniority')
+ extra_contacts = fields.Integer(string='Extra Contacts', help='This is the number of extra contacts to track if their role and seniority match your criteria.Their details will show up in the history thread of generated leads/opportunities. One credit is consumed per tracked contact.')
+
+ calculate_credits = fields.Integer(compute='_compute_credit_count', string='Credit Used', readonly=True)
+
+ # Lead / Opportunity Data
+ lead_for = fields.Selection([('companies', 'Companies'), ('people', 'Companies + Contacts')], string='Data Tracking', required=True, default='companies', help='If you track company data, one credit will be consumed per lead/opportunity created. If you track company and contacts data, two credits will be consumed. Such data will be visible in the lead/opportunity.')
+ lead_type = fields.Selection([('lead', 'Lead'), ('opportunity', 'Opportunity')], string='Type', required=True, default='opportunity')
+ suffix = fields.Char(string='Suffix', help='This will be appended in name of generated lead so you can identify lead/opportunity is generated with this rule')
+ team_id = fields.Many2one('crm.team', string='Sales Channel')
+ tag_ids = fields.Many2many('crm.lead.tag', string='Tags')
+ user_id = fields.Many2one('res.users', string='Salesperson')
+ priority = fields.Selection(crm_stage.AVAILABLE_PRIORITIES, string='Priority')
+ lead_ids = fields.One2many('crm.lead', 'reveal_rule_id', string='Generated Lead / Opportunity')
+ leads_count = fields.Integer(compute='_compute_leads_count', string='Number of Generated Leads')
+ opportunity_count = fields.Integer(compute='_compute_leads_count', string='Number of Generated Opportunity')
+
+ # This limits the number of extra contact.
+ # Even if more than 5 extra contacts provided service will return only 5 contacts (see service module for more)
+ _sql_constraints = [
+ ('limit_extra_contacts', 'check(extra_contacts >= 0 and extra_contacts <= 5)', 'Maximum 5 extra contacts are allowed!'),
+ ]
+
+ @api.constrains('regex_url')
+ def _check_regex_url(self):
+ try:
+ if self.regex_url:
+ re.compile(self.regex_url)
+ except Exception:
+ raise ValidationError(_('Enter Valid Regex.'))
+
+ @api.model
+ def create(self, vals):
+ self.clear_caches() # Clear the cache in order to recompute _get_active_rules
+ return super(CRMRevealRule, self).create(vals)
+
+ def write(self, vals):
+ fields_set = {
+ 'country_ids', 'regex_url', 'active'
+ }
+ if set(vals.keys()) & fields_set:
+ self.clear_caches() # Clear the cache in order to recompute _get_active_rules
+ return super(CRMRevealRule, self).write(vals)
+
+ def unlink(self):
+ self.clear_caches() # Clear the cache in order to recompute _get_active_rules
+ return super(CRMRevealRule, self).unlink()
+
+ @api.depends('extra_contacts', 'lead_for')
+ def _compute_credit_count(self):
+ """ Computes maximum IAP credit can be consumed per lead """
+ credit = 1
+ if self.lead_for == 'people':
+ credit += 1
+ if self.extra_contacts:
+ credit += self.extra_contacts
+ self.calculate_credits = credit
+
+ def _compute_leads_count(self):
+ leads = self.env['crm.lead'].read_group([
+ ('reveal_rule_id', 'in', self.ids)
+ ], fields=['reveal_rule_id', 'type'], groupby=['reveal_rule_id', 'type'], lazy=False)
+ mapping = {(lead['reveal_rule_id'][0], lead['type']): lead['__count'] for lead in leads}
+ for rule in self:
+ rule.leads_count = mapping.get((rule.id, 'lead'), 0)
+ rule.opportunity_count = mapping.get((rule.id, 'opportunity'), 0)
+
+ def action_get_lead_tree_view(self):
+ action = self.env.ref('crm.crm_lead_all_leads').read()[0]
+ action['domain'] = [('id', 'in', self.lead_ids.ids), ('type', '=', 'lead')]
+ return action
+
+ def action_get_opportunity_tree_view(self):
+ action = self.env.ref('crm.crm_lead_opportunities').read()[0]
+ action['domain'] = [('id', 'in', self.lead_ids.ids), ('type', '=', 'opportunity')]
+ return action
+
+ @api.model
+ @tools.ormcache()
+ def _get_active_rules(self):
+ """
+ Returns informations about the all rules.
+ The return is in the form :
+ {
+ 'country_rules': {
+ 'BE': [0, 1],
+ 'US': [0]
+ },
+ 'rules': [
+ {
+ 'id': 0,
+ 'url': ***,
+ 'country_codes': ['BE', 'US']
+ },
+ {
+ 'id': 1,
+ 'url': ***,
+ 'country_codes': ['BE']
+ }
+ ]
+ }
+ """
+ country_rules = {}
+ rules_records = self.search([])
+ rules = []
+ # Fixes for special cases
+ for rule in rules_records:
+ regex_url = rule['regex_url']
+ if not regex_url:
+ regex_url = '.*' # for all pages if url not given
+ elif regex_url == '/':
+ regex_url = '.*/$' # for home
+ countries = rule.country_ids.mapped('code')
+ rules.append({
+ 'id': rule.id,
+ 'regex': regex_url,
+ 'country_codes': countries
+ })
+ for country in countries:
+ country_rules = self._add_to_country(country_rules, country, len(rules) - 1)
+ return {
+ 'country_rules': country_rules,
+ 'rules': rules,
+ }
+
+ def _add_to_country(self, country_rules, country, rule_index):
+ """
+ Add the rule index to the country code in the country_rules
+ """
+ if country not in country_rules:
+ country_rules[country] = []
+ country_rules[country].append(rule_index)
+ return country_rules
+
+ def _match_url(self, url, country_code, rules_excluded):
+ """
+ Return the matching rule based on the country and URL.
+ """
+ all_rules = self._get_active_rules()
+ rules_id = all_rules['country_rules'].get(country_code, [])
+ rules_matched = []
+ for rule_index in rules_id:
+ rule = all_rules['rules'][rule_index]
+ if str(rule['id']) not in rules_excluded and re.search(rule['regex'], url):
+ rules_matched.append(rule)
+ return rules_matched
+
+ @api.model
+ def _process_lead_generation(self, autocommit=True):
+ """ Cron Job for lead generation from page view """
+ _logger.info('Start Reveal Lead Generation')
+ self.env['crm.reveal.view']._clean_reveal_views()
+ self._unlink_unrelevant_reveal_view()
+ reveal_views = self._get_reveal_views_to_process()
+ view_count = 0
+ while reveal_views:
+ view_count += len(reveal_views)
+ server_payload = self._prepare_iap_payload(dict(reveal_views))
+ enough_credit = self._perform_reveal_service(server_payload)
+ if autocommit:
+ # auto-commit for batch processing
+ self._cr.commit()
+ if enough_credit:
+ reveal_views = self._get_reveal_views_to_process()
+ else:
+ reveal_views = False
+ _logger.info('End Reveal Lead Generation - %s views processed', view_count)
+
+ @api.model
+ def _unlink_unrelevant_reveal_view(self):
+ """
+ We don't want to create the lead if in past (<6 months) we already
+ created lead with given IP. So, we unlink crm.reveal.view with same IP
+ as a already created lead.
+ """
+ months_valid = self.env['ir.config_parameter'].sudo().get_param('reveal.lead_month_valid', DEFAULT_REVEAL_MONTH_VALID)
+ try:
+ months_valid = int(months_valid)
+ except ValueError:
+ months_valid = DEFAULT_REVEAL_MONTH_VALID
+ domain = []
+ domain.append(('reveal_ip', '!=', False))
+ domain.append(('create_date', '>', fields.Datetime.to_string(datetime.date.today() - relativedelta(months=months_valid))))
+ leads = self.env['crm.lead'].with_context(active_test=False).search(domain)
+ self.env['crm.reveal.view'].search([('reveal_ip', 'in', [lead.reveal_ip for lead in leads])]).unlink()
+
+ @api.model
+ def _get_reveal_views_to_process(self):
+ """ Return list of reveal rule ids grouped by IPs """
+ batch_limit = self.env['ir.config_parameter'].sudo().get_param('reveal.fetch_limit', DEFAULT_REVEAL_BATCH_LIMIT)
+ try:
+ batch_limit = int(batch_limit)
+ except ValueError:
+ batch_limit = DEFAULT_REVEAL_BATCH_LIMIT
+
+ query = """
+ SELECT v.reveal_ip, array_agg(v.reveal_rule_id ORDER BY r.sequence)
+ FROM crm_reveal_view v
+ INNER JOIN crm_reveal_rule r
+ ON v.reveal_rule_id = r.id
+ WHERE v.reveal_state='to_process'
+ GROUP BY v.reveal_ip
+ LIMIT %d
+ """ % batch_limit
+
+ self.env.cr.execute(query)
+ return self.env.cr.fetchall()
+
+ def _prepare_iap_payload(self, pgv):
+ """ This will prepare the page view and returns payload
+ Payload sample
+ {
+ ips: {
+ '192.168.1.1': [1,4],
+ '192.168.1.6': [2,4]
+ },
+ rules: {
+ 1: {rule_data},
+ 2: {rule_data},
+ 4: {rule_data}
+ }
+ }
+ """
+ new_list = list(set(itertools.chain.from_iterable(pgv.values())))
+ rule_records = self.browse(new_list)
+ return {
+ 'ips': pgv,
+ 'rules': rule_records._get_rules_payload()
+ }
+
+ def _get_rules_payload(self):
+ company_country = self.env.user.company_id.country_id
+ rule_payload = {}
+ for rule in self:
+ data = {
+ 'rule_id': rule.id,
+ 'lead_for': rule.lead_for,
+ 'countries': rule.country_ids.mapped('code'),
+ 'company_size_min': rule.company_size_min,
+ 'company_size_max': rule.company_size_max,
+ 'industry_tags': rule.industry_tag_ids.mapped('reveal_id'),
+ 'user_country': company_country and company_country.code or False
+ }
+ if rule.lead_for == 'people':
+ data.update({
+ 'preferred_role': rule.preferred_role_id.reveal_id or '',
+ 'other_roles': rule.other_role_ids.mapped('reveal_id'),
+ 'seniority': rule.seniority_id.reveal_id or '',
+ 'extra_contacts': rule.extra_contacts
+ })
+ rule_payload[rule.id] = data
+ return rule_payload
+
+ def _perform_reveal_service(self, server_payload):
+ result = False
+ account_token = self.env['iap.account'].get('reveal')
+ endpoint = self.env['ir.config_parameter'].sudo().get_param('reveal.endpoint', DEFAULT_ENDPOINT) + '/iap/clearbit/1/reveal'
+ params = {
+ 'account_token': account_token.account_token,
+ 'data': server_payload
+ }
+ result = jsonrpc(endpoint, params=params)
+ for res in result.get('reveal_data', []):
+ if not res.get('not_found'):
+ lead = self._create_lead_from_response(res)
+ self.env['crm.reveal.view'].search([('reveal_ip', '=', res['ip'])]).unlink()
+ else:
+ self.env['crm.reveal.view'].search([('reveal_ip', '=', res['ip'])]).write({
+ 'reveal_state': 'not_found'
+ })
+ if result.get('credit_error'):
+ self._notify_no_more_credit()
+ return False
+ else:
+ self.env['ir.config_parameter'].sudo().set_param('reveal.already_notified', False)
+ return True
+
+ def _notify_no_more_credit(self):
+ """
+ Notify about the number of credit.
+ In order to avoid to spam people each hour, an ir.config_parameter is set
+ """
+ already_notified = self.env['ir.config_parameter'].sudo().get_param('reveal.already_notified', False)
+ if already_notified:
+ return
+ mail_template = self.env.ref('crm_reveal.reveal_no_credits')
+ iap_account = self.env['iap.account'].search([('service_name', '=', 'reveal')], limit=1)
+ # Get the email address of the creators of the Lead Generation Rules
+ res = self.env['crm.reveal.rule'].search_read([], ['create_uid'])
+ uids = set(r['create_uid'][0] for r in res if r.get('create_uid'))
+ res = self.env['res.users'].search_read([('id', 'in', list(uids))], ['email'])
+ emails = set(r['email'] for r in res if r.get('email'))
+
+ mail_values = mail_template.generate_email(iap_account.id)
+ mail_values['email_to'] = ','.join(emails)
+ mail = self.env['mail.mail'].create(mail_values)
+ mail.send()
+ self.env['ir.config_parameter'].sudo().set_param('reveal.already_notified', True)
+
+
+ def _create_lead_from_response(self, result):
+ """ This method will get response from service and create the lead accordingly """
+ if result['rule_id']:
+ rule = self.browse(result['rule_id'])
+ else:
+ # Not create a lead if the information match no rule
+ # If there is no match, the service still returns all informations
+ # in order to let custom code use it.
+ return False
+ if not result['clearbit_id']:
+ return False
+ already_created_lead = self.env['crm.lead'].search([('reveal_id', '=', result['clearbit_id'])])
+ if already_created_lead:
+ _logger.info('Existing lead for this clearbit_id [%s]', result['clearbit_id'])
+ # Does not create a lead if the reveal_id is already known
+ return False
+ lead_vals = rule._lead_vals_from_response(result)
+ lead = self.env['crm.lead'].create(lead_vals)
+ lead.message_post_with_view(
+ 'crm_reveal.lead_message_template',
+ values=self._format_data_for_message_post(result),
+ subtype_id=self.env.ref('mail.mt_note').id
+ )
+ return lead
+
+ # Methods responsible for format response data in to valid odoo lead data
+ def _lead_vals_from_response(self, result):
+ self.ensure_one()
+ reveal_data = result['reveal_data']
+ people_data = result.get('people_data')
+ country_id = self.env['res.country'].search([('code', '=', reveal_data['country_code'])]).id
+ website_url = 'https://www.%s' % reveal_data['domain'] if reveal_data['domain'] else False
+ lead_vals = {
+ # Lead vals from rule itself
+ 'type': self.lead_type,
+ 'team_id': self.team_id.id,
+ 'tag_ids': [(6, 0, self.tag_ids.ids)],
+ 'priority': self.priority,
+ 'user_id': self.user_id.id,
+ 'reveal_ip': result['ip'],
+ 'reveal_rule_id': self.id,
+ 'reveal_id': result['clearbit_id'],
+ 'referred': 'Website Visitor',
+ # Lead vals from response
+ 'name': reveal_data['name'],
+ 'reveal_iap_credits': result['credit'],
+ 'partner_name': reveal_data['legal_name'] or reveal_data['name'],
+ 'email_from': ",".join(reveal_data['email'] or []),
+ 'phone': reveal_data['phone'] or (reveal_data['phone_numbers'] and reveal_data['phone_numbers'][0]) or '',
+ 'website': website_url,
+ 'street': reveal_data['location'],
+ 'city': reveal_data['city'],
+ 'zip': reveal_data['postal_code'],
+ 'country_id': country_id,
+ 'state_id': self._find_state_id(reveal_data['state_name'], reveal_data['state_code'], country_id),
+ 'description': self._prepare_lead_description(reveal_data),
+ }
+
+ if self.suffix:
+ lead_vals['name'] = '%s - %s' % (lead_vals['name'], self.suffix)
+
+ # If type is people then add first contact in lead data
+ if people_data:
+ lead_vals.update({
+ 'contact_name': people_data[0]['full_name'],
+ 'email_from': people_data[0]['email'],
+ 'function': people_data[0]['title'],
+ })
+ return lead_vals
+
+ def _find_state_id(self, state_code, state_name, country_id):
+ state_id = self.env['res.country.state'].search([('code', '=', state_code), ('country_id', '=', country_id)])
+ if state_id:
+ return state_id.id
+ return False
+
+ def _prepare_lead_description(self, reveal_data):
+ description = ''
+ if reveal_data['sector']:
+ description += reveal_data['sector']
+ if reveal_data['website_title']:
+ description += '\n' + reveal_data['website_title']
+ if reveal_data['twitter_bio']:
+ description += '\n' + "Twitter Bio: " + reveal_data['twitter_bio']
+ if reveal_data['twitter_followers']:
+ description += ('\nTwitter %s followers, %s \n') % (reveal_data['twitter_followers'], reveal_data['twitter_location'] or '')
+
+ numbers = ['raised', 'market_cap', 'employees', 'estimated_annual_revenue']
+ millnames = ['', ' K', ' M', ' B', 'T']
+
+ def millify(n):
+ try:
+ n = float(n)
+ millidx = max(0, min(len(millnames) - 1, int(floor(0 if n == 0 else log10(abs(n)) / 3))))
+ return '{:.0f}{}'.format(n / 10**(3 * millidx), millnames[millidx])
+ except Exception:
+ return n
+
+ for key in numbers:
+ if reveal_data.get(key):
+ description += ' %s : %s,' % (key.replace('_', ' ').title(), millify(reveal_data[key]))
+ return description
+
+ def _format_data_for_message_post(self, result):
+ reveal_data = result['reveal_data']
+ people_data = result.get('people_data')
+ log_data = {
+ 'twitter': reveal_data['twitter'],
+ 'description': reveal_data['description'],
+ 'logo': reveal_data['logo'],
+ 'name': reveal_data['name'],
+ 'phone_numbers': reveal_data['phone_numbers'],
+ 'facebook': reveal_data['facebook'],
+ 'linkedin': reveal_data['linkedin'],
+ 'crunchbase': reveal_data['crunchbase'],
+ 'tech': [t.replace('_', ' ').title() for t in reveal_data['tech']],
+ 'people_data': people_data,
+ }
+ timezone = result['ip_time_zone'] or reveal_data['timezone']
+ if timezone:
+ log_data.update({
+ 'timezone': timezone.replace('_', ' ').title(),
+ 'timezone_link': timezone.lower().replace('_', '-'),
+ })
+ return log_data
+
+
+class IndustryTag(models.Model):
+ """ Industry Tags of Acquisition Rules """
+ _name = 'crm.reveal.industry'
+ _description = 'Industry Tag'
+
+ name = fields.Char(string='Tag Name', required=True, translate=True)
+ reveal_id = fields.Char(required=True)
+ color = fields.Integer(string='Color Index')
+
+ _sql_constraints = [
+ ('name_uniq', 'unique (name)', 'Tag name already exists!'),
+ ]
+
+
+class PeopleRole(models.Model):
+ """ CRM Reveal People Roles for People """
+ _name = 'crm.reveal.role'
+ _description = 'People Role'
+
+ name = fields.Char(string='Role Name', required=True, translate=True)
+ reveal_id = fields.Char(required=True)
+ color = fields.Integer(string='Color Index')
+
+ _sql_constraints = [
+ ('name_uniq', 'unique (name)', 'Role name already exists!'),
+ ]
+
+ @api.depends('name')
+ def name_get(self):
+ return [(role.id, role.name.replace('_', ' ').title()) for role in self]
+
+
+class PeopleSeniority(models.Model):
+ """ Seniority for People Rules """
+ _name = 'crm.reveal.seniority'
+ _description = 'People Seniority'
+
+ name = fields.Char(string='Name', required=True, translate=True)
+ reveal_id = fields.Char(required=True)
+
+ _sql_constraints = [
+ ('name_uniq', 'unique (name)', 'Name already exists!'),
+ ]
+
+ @api.depends('name')
+ def name_get(self):
+ return [(seniority.id, seniority.name.replace('_', ' ').title()) for seniority in self]
diff --git a/addons/crm_reveal/models/crm_reveal_view.py b/addons/crm_reveal/models/crm_reveal_view.py
new file mode 100644
index 00000000000..7a732f8ff2f
--- /dev/null
+++ b/addons/crm_reveal/models/crm_reveal_view.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import datetime
+from dateutil.relativedelta import relativedelta
+from odoo import api, fields, models
+
+DEFAULT_REVEAL_VIEW_WEEKS_VALID = 5
+
+class CRMRevealView(models.Model):
+ _name = 'crm.reveal.view'
+ _order = 'id desc'
+
+ reveal_ip = fields.Char(string='IP Address', index=True)
+ reveal_rule_id = fields.Many2one('crm.reveal.rule', string='Lead Generation Rule', index=True)
+ reveal_state = fields.Selection([('to_process', 'To Process'), ('not_found', 'Not Found')], default='to_process', string="State", index=True)
+ create_date = fields.Datetime(index=True)
+
+ @api.model_cr
+ def init(self):
+ self._cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('crm_reveal_view_ip_rule_id',))
+ if not self._cr.fetchone():
+ self._cr.execute('CREATE UNIQUE INDEX crm_reveal_view_ip_rule_id ON crm_reveal_view (reveal_rule_id,reveal_ip)')
+ self._cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('crm_reveal_view_state_create_date',))
+ if not self._cr.fetchone():
+ self._cr.execute('CREATE INDEX crm_reveal_view_state_create_date ON crm_reveal_view (reveal_state,create_date)')
+
+
+ @api.model
+ def _clean_reveal_views(self):
+ """ Remove old views (> 1 month) """
+ weeks_valid = self.env['ir.config_parameter'].sudo().get_param('reveal.view_weeks_valid', DEFAULT_REVEAL_VIEW_WEEKS_VALID)
+ try:
+ weeks_valid = int(weeks_valid)
+ except ValueError:
+ weeks_valid = DEFAULT_REVEAL_VIEW_WEEKS_VALID
+ domain = []
+ domain.append(('reveal_state', '=', 'not_found'))
+ 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, 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, rules_excluded)
+ if rules:
+ query = """
+ INSERT INTO crm_reveal_view (reveal_ip, reveal_rule_id, reveal_state, create_date)
+ VALUES (%s, %s, 'to_process', now() at time zone 'UTC')
+ ON CONFLICT DO NOTHING;
+ """ * len(rules)
+ params = []
+ for rule in rules:
+ params += [ip_address, rule['id']]
+ rules_excluded.append(str(rule['id']))
+ self.env.cr.execute(query, params)
+ return rules_excluded
+ return False
\ No newline at end of file
diff --git a/addons/crm_reveal/models/ir.py b/addons/crm_reveal/models/ir.py
new file mode 100644
index 00000000000..fcc3eac46c7
--- /dev/null
+++ b/addons/crm_reveal/models/ir.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+import logging
+import time
+
+from odoo import models
+from odoo.http import request
+
+_logger = logging.getLogger(__name__)
+
+class IrHttp(models.AbstractModel):
+ _inherit = 'ir.http'
+
+ @classmethod
+ def _serve_page(cls):
+ response = super(IrHttp, cls)._serve_page()
+ if response and getattr(response, 'status_code', 0) == 200 and request.env.user._is_public():
+ lead_id = request.httprequest.cookies.get('lead_id')
+ # We are avoiding to create a reveal_view if a lead is already
+ # created from another module, e.g. website_form
+ if not lead_id:
+ country_code = 'geoip' in request.session and request.session['geoip'].get('country_code')
+ if country_code:
+ try:
+ url = request.httprequest.url
+ ip_address = request.httprequest.remote_addr
+ 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, 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,
+ ip_address)
+ if new_rules_excluded:
+ response.set_cookie('rule_ids', ','.join(new_rules_excluded))
+ except Exception:
+ # just in case - we never want to crash a page view
+ _logger.exception("Failed to process reveal rules")
+ return response
diff --git a/addons/crm_reveal/models/res_config_settings.py b/addons/crm_reveal/models/res_config_settings.py
new file mode 100644
index 00000000000..981533b36cd
--- /dev/null
+++ b/addons/crm_reveal/models/res_config_settings.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+class ResConfigSettings(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+ @api.multi
+ def action_buy_reveal_iap_credits(self):
+ url = self.env['iap.account'].get_credits_url('reveal', 'https://iap.odoo.com/iap/1/credit', 0)
+ return {
+ 'type': 'ir.actions.act_url',
+ 'url': url,
+ 'target': 'new',
+ }
diff --git a/addons/crm_reveal/security/ir.model.access.csv b/addons/crm_reveal/security/ir.model.access.csv
new file mode 100644
index 00000000000..cf928b4b1c3
--- /dev/null
+++ b/addons/crm_reveal/security/ir.model.access.csv
@@ -0,0 +1,6 @@
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
+access_crm_reveal_rule,access_crm_reveal_rule,model_crm_reveal_rule,sales_team.group_sale_manager,1,1,1,1
+access_crm_reveal_view,access_crm_reveal_view,model_crm_reveal_view,sales_team.group_sale_manager,1,1,1,1
+access_crm_reveal_industry,access_crm_reveal_industry,model_crm_reveal_industry,sales_team.group_sale_manager,1,1,1,1
+access_crm_reveal_role,access_crm_reveal_role,model_crm_reveal_role,sales_team.group_sale_manager,1,1,1,1
+access_crm_reveal_seniority,access_crm_reveal_seniority,model_crm_reveal_seniority,sales_team.group_sale_manager,1,1,1,1
diff --git a/addons/crm_reveal/views/crm_lead_view.xml b/addons/crm_reveal/views/crm_lead_view.xml
new file mode 100644
index 00000000000..dceca922350
--- /dev/null
+++ b/addons/crm_reveal/views/crm_lead_view.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ crm.lead.form
+ crm.lead
+
+
+
+
+
+
+
+
+
+
+
+
+
+ crm.lead.opportunity.inherited.crm
+ crm.lead
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/crm_reveal/views/crm_reveal_views.xml b/addons/crm_reveal/views/crm_reveal_views.xml
new file mode 100644
index 00000000000..45bc19b2f1f
--- /dev/null
+++ b/addons/crm_reveal/views/crm_reveal_views.xml
@@ -0,0 +1,165 @@
+
+
+
+ crm.reveal.rule.form
+ crm.reveal.rule
+
+
+
+
+
+
+ crm.reveal.rule.tree
+ crm.reveal.rule
+
+
+
+
+
+
+
+
+
+
+ Lead Generation Rules
+ crm.reveal.rule
+ tree,form
+
+
+ No rule found
+
+ Create rules to generate B2B leads/opportunities by tracking data of your website visitors.
+
+
+
+
+
+ crm.reveal.view.form
+ crm.reveal.view
+
+
+
+
+
+
+ crm.reveal.view.tree
+ crm.reveal.view
+
+
+
+
+
+
+
+
+
+
+
+ Lead Generation Views
+ crm.reveal.view
+ tree,form
+
+
+
+
+
+
+
+
diff --git a/addons/crm_reveal/views/res_config_settings_views.xml b/addons/crm_reveal/views/res_config_settings_views.xml
new file mode 100644
index 00000000000..e1c2945430a
--- /dev/null
+++ b/addons/crm_reveal/views/res_config_settings_views.xml
@@ -0,0 +1,23 @@
+
+
+
+ res.config.settings.view.form.inherit.crm.reveal
+ res.config.settings
+
+
+
+
+
+
+
+ Charge your IAP account to generate Leads/Opportunities from your website's traffic
+
+
+
+
+
+
+
+
+
+