From ddac26cdbb3535239f5dbb41f5b464366065f3ba Mon Sep 17 00:00:00 2001 From: Julien De Coster Date: Tue, 12 Aug 2014 14:54:26 +0530 Subject: [PATCH] [ADD] Add the website_links module. This module tracks clicks in mass mailing mails and allow the generation of trackable links in a website interface. Modules modifications --------------------- Refractoring of the crm_tracking_* classes in a new module. * Extract the crm_tracking_* from the crm module into a new module "utm" * Remove the crm_mass_mailing bridge module * New dependencies of mass_mailing and website_links to utm. --- addons/crm/crm.py | 78 - addons/crm/crm_data.xml | 39 - addons/crm/crm_lead.py | 2 +- addons/crm/crm_lead_data.xml | 19 +- addons/crm/crm_lead_demo.xml | 144 +- addons/crm/crm_view.xml | 128 - addons/crm/ir_http.py | 2 +- addons/crm/report/crm_lead_report.py | 2 +- addons/crm/report/crm_opportunity_report.py | 2 +- addons/crm/security/ir.model.access.csv | 6 - addons/crm_claim/crm_claim_data.xml | 6 +- addons/crm_helpdesk/crm_helpdesk.py | 2 +- .../report/crm_helpdesk_report.py | 2 +- addons/crm_mass_mailing/__init__.py | 22 - addons/crm_mass_mailing/__openerp__.py | 18 - addons/crm_mass_mailing/i18n/ar.po | 62 - addons/crm_mass_mailing/i18n/bg.po | 62 - .../i18n/crm_mass_mailing.pot | 57 - addons/crm_mass_mailing/i18n/de.po | 68 - addons/crm_mass_mailing/i18n/es.po | 68 - addons/crm_mass_mailing/i18n/hr.po | 62 - addons/crm_mass_mailing/i18n/hu.po | 66 - addons/crm_mass_mailing/i18n/it.po | 67 - addons/crm_mass_mailing/i18n/ko.po | 63 - addons/crm_mass_mailing/i18n/lv.po | 62 - addons/crm_mass_mailing/i18n/mk.po | 65 - addons/crm_mass_mailing/i18n/nl.po | 68 - addons/crm_mass_mailing/i18n/pl.po | 62 - addons/crm_mass_mailing/i18n/pt.po | 66 - addons/crm_mass_mailing/i18n/pt_BR.po | 67 - addons/crm_mass_mailing/i18n/sv.po | 66 - addons/crm_mass_mailing/i18n/tr.po | 66 - addons/crm_mass_mailing/mass_mailing.py | 6 - addons/crm_mass_mailing/mass_mailing.xml | 23 - addons/crm_mass_mailing/mass_mailing_data.xml | 0 addons/crm_partner_assign/crm_lead_demo.xml | 6 +- addons/mail/mail_mail.py | 2 +- addons/mass_mailing/__openerp__.py | 2 + addons/mass_mailing/controllers/main.py | 13 +- .../mass_mailing/data/mass_mailing_demo.xml | 3 + addons/mass_mailing/models/__init__.py | 1 + addons/mass_mailing/models/mass_mailing.py | 133 +- .../mass_mailing/models/mass_mailing_stats.py | 5 +- .../models/website_links_click.py | 10 + addons/mass_mailing/views/mass_mailing.xml | 74 +- addons/sale_crm/sale_crm.py | 2 +- addons/utm/__init__.py | 2 + addons/utm/__openerp__.py | 16 + addons/utm/models/__init__.py | 2 + addons/utm/models/utm.py | 99 + addons/utm/security/ir.model.access.csv | 4 + addons/utm/utm_demo.xml | 64 + addons/utm/views/utm.xml | 112 + .../static/src/js/website.contentMenu.js | 2 +- addons/website_links/__init__.py | 3 + addons/website_links/__openerp__.py | 19 + addons/website_links/controller/__init__.py | 2 + addons/website_links/controller/main.py | 45 + addons/website_links/models/__init__.py | 2 + addons/website_links/models/website_links.py | 237 ++ .../security/ir.model.access.csv | 10 + .../static/src/css/website_links.css | 57 + .../static/src/js/ZeroClipboard.js | 2314 +++++++++++++++++ .../static/src/js/ZeroClipboard.min.map | 1 + .../static/src/js/ZeroClipboard.swf | Bin 0 -> 4036 bytes .../static/src/js/website_links.js | 377 +++ .../static/src/js/website_links_charts.js | 249 ++ .../src/js/website_links_code_editor.js | 83 + .../static/src/js/website_links_menu.js | 12 + .../static/src/xml/recent_link.xml | 42 + addons/website_links/views/website_links.xml | 169 ++ .../views/website_links_graphs.xml | 179 ++ .../views/website_links_template.xml | 123 + 73 files changed, 4524 insertions(+), 1550 deletions(-) delete mode 100644 addons/crm_mass_mailing/__init__.py delete mode 100644 addons/crm_mass_mailing/__openerp__.py delete mode 100644 addons/crm_mass_mailing/i18n/ar.po delete mode 100644 addons/crm_mass_mailing/i18n/bg.po delete mode 100644 addons/crm_mass_mailing/i18n/crm_mass_mailing.pot delete mode 100644 addons/crm_mass_mailing/i18n/de.po delete mode 100644 addons/crm_mass_mailing/i18n/es.po delete mode 100644 addons/crm_mass_mailing/i18n/hr.po delete mode 100644 addons/crm_mass_mailing/i18n/hu.po delete mode 100644 addons/crm_mass_mailing/i18n/it.po delete mode 100644 addons/crm_mass_mailing/i18n/ko.po delete mode 100644 addons/crm_mass_mailing/i18n/lv.po delete mode 100644 addons/crm_mass_mailing/i18n/mk.po delete mode 100644 addons/crm_mass_mailing/i18n/nl.po delete mode 100644 addons/crm_mass_mailing/i18n/pl.po delete mode 100644 addons/crm_mass_mailing/i18n/pt.po delete mode 100644 addons/crm_mass_mailing/i18n/pt_BR.po delete mode 100644 addons/crm_mass_mailing/i18n/sv.po delete mode 100644 addons/crm_mass_mailing/i18n/tr.po delete mode 100644 addons/crm_mass_mailing/mass_mailing.py delete mode 100644 addons/crm_mass_mailing/mass_mailing.xml delete mode 100644 addons/crm_mass_mailing/mass_mailing_data.xml create mode 100644 addons/mass_mailing/models/website_links_click.py create mode 100644 addons/utm/__init__.py create mode 100644 addons/utm/__openerp__.py create mode 100644 addons/utm/models/__init__.py create mode 100644 addons/utm/models/utm.py create mode 100644 addons/utm/security/ir.model.access.csv create mode 100644 addons/utm/utm_demo.xml create mode 100644 addons/utm/views/utm.xml create mode 100644 addons/website_links/__init__.py create mode 100644 addons/website_links/__openerp__.py create mode 100644 addons/website_links/controller/__init__.py create mode 100644 addons/website_links/controller/main.py create mode 100644 addons/website_links/models/__init__.py create mode 100644 addons/website_links/models/website_links.py create mode 100644 addons/website_links/security/ir.model.access.csv create mode 100644 addons/website_links/static/src/css/website_links.css create mode 100755 addons/website_links/static/src/js/ZeroClipboard.js create mode 100755 addons/website_links/static/src/js/ZeroClipboard.min.map create mode 100755 addons/website_links/static/src/js/ZeroClipboard.swf create mode 100644 addons/website_links/static/src/js/website_links.js create mode 100644 addons/website_links/static/src/js/website_links_charts.js create mode 100644 addons/website_links/static/src/js/website_links_code_editor.js create mode 100644 addons/website_links/static/src/js/website_links_menu.js create mode 100644 addons/website_links/static/src/xml/recent_link.xml create mode 100644 addons/website_links/views/website_links.xml create mode 100644 addons/website_links/views/website_links_graphs.xml create mode 100644 addons/website_links/views/website_links_template.xml diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 45f84b899ad..86efc8a4607 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -29,84 +29,6 @@ AVAILABLE_PRIORITIES = [ ('3', 'Very High'), ] - -class crm_tracking_medium(osv.Model): - # OLD crm.case.channel - _name = "crm.tracking.medium" - _description = "Channels" - _order = 'name' - _columns = { - 'name': fields.char('Channel Name', required=True), - 'active': fields.boolean('Active'), - } - _defaults = { - 'active': lambda *a: 1, - } - - -class crm_tracking_campaign(osv.Model): - # OLD crm.case.resource.type - _name = "crm.tracking.campaign" - _description = "Campaign" - _rec_name = "name" - _columns = { - 'name': fields.char('Campaign Name', required=True, translate=True), - 'team_id': fields.many2one('crm.team', 'Sales Team', oldname='section_id'), - } - - -class crm_tracking_source(osv.Model): - _name = "crm.tracking.source" - _description = "Source" - _rec_name = "name" - _columns = { - 'name': fields.char('Source Name', required=True, translate=True), - } - - -class crm_tracking_mixin(osv.AbstractModel): - """Mixin class for objects which can be tracked by marketing. """ - _name = 'crm.tracking.mixin' - - _columns = { - 'campaign_id': fields.many2one('crm.tracking.campaign', 'Campaign', # old domain ="['|',('team_id','=',team_id),('team_id','=',False)]" - help="This is a name that helps you keep track of your different campaign efforts Ex: Fall_Drive, Christmas_Special"), - 'source_id': fields.many2one('crm.tracking.source', 'Source', help="This is the source of the link Ex: Search Engine, another domain, or name of email list"), - 'medium_id': fields.many2one('crm.tracking.medium', 'Channel', help="This is the method of delivery. Ex: Postcard, Email, or Banner Ad", oldname='channel_id'), - } - - def tracking_fields(self): - return [('utm_campaign', 'campaign_id'), ('utm_source', 'source_id'), ('utm_medium', 'medium_id')] - - def tracking_get_values(self, cr, uid, vals, context=None): - for key, fname in self.tracking_fields(): - field = self._fields[fname] - value = vals.get(fname) or (request and request.httprequest.cookies.get(key)) # params.get should be always in session by the dispatch from ir_http - if field.type == 'many2one' and isinstance(value, basestring): - # if we receive a string for a many2one, we search/create the id - if value: - Model = self.pool[field.comodel_name] - rel_id = Model.name_search(cr, uid, value, context=context) - if rel_id: - rel_id = rel_id[0][0] - else: - rel_id = Model.create(cr, uid, {'name': value}, context=context) - vals[fname] = rel_id - else: - # Here the code for others cases that many2one - vals[fname] = value - return vals - - def _get_default_track(self, cr, uid, field, context=None): - return self.tracking_get_values(cr, uid, {}, context=context).get(field) - - _defaults = { - 'source_id': lambda self, cr, uid, ctx: self._get_default_track(cr, uid, 'source_id', ctx), - 'campaign_id': lambda self, cr, uid, ctx: self._get_default_track(cr, uid, 'campaign_id', ctx), - 'medium_id': lambda self, cr, uid, ctx: self._get_default_track(cr, uid, 'medium_id', ctx), - } - - class crm_stage(osv.Model): """ Model for case stages. This models the main stages of a document management flow. Main CRM objects (leads, opportunities, project diff --git a/addons/crm/crm_data.xml b/addons/crm/crm_data.xml index 98abcbf6e23..6d658f3f972 100644 --- a/addons/crm/crm_data.xml +++ b/addons/crm/crm_data.xml @@ -13,45 +13,6 @@ open - - - - Search engine - - - Mailing Partner - - - Newsletter - - - - - Website - - - Phone - - - Direct - - - Email - - - Banner Ad - - - Twitter Ads - - - Television - - - Google Adwords - - - True sales diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index e259de4cb44..6c51afa6a41 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -70,7 +70,7 @@ class crm_lead(format_address, osv.osv): _name = "crm.lead" _description = "Lead/Opportunity" _order = "priority desc,date_action,id desc" - _inherit = ['mail.thread', 'ir.needaction_mixin', 'crm.tracking.mixin'] + _inherit = ['mail.thread', 'ir.needaction_mixin', 'utm.mixin'] _track = { 'stage_id': { diff --git a/addons/crm/crm_lead_data.xml b/addons/crm/crm_lead_data.xml index e10f80a4fbb..b8ee10ac12d 100644 --- a/addons/crm/crm_lead_data.xml +++ b/addons/crm/crm_lead_data.xml @@ -67,24 +67,7 @@ (4, ref('stage_lead5')), (4, ref('stage_lead6')), (4, ref('stage_lead7'))]"/> - - - - Fall Drive - - - - Christmas Special - - - - Email Campaign - Services - - - - Email Campaign - Products - - + Product diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml index a5865b9d3be..92d80d3949b 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -25,9 +25,9 @@ I am Jacques from Le Club SARL. I am interested to attend a training organized in your company. Could you please send me the details ? - - - + + + @@ -57,9 +57,9 @@ Could you please send me the details ? - - - + + + @@ -87,9 +87,9 @@ Could you please send me the details ? - - - + + + @@ -109,9 +109,9 @@ Could you please send me the details ? - - - + + + @@ -143,9 +143,9 @@ Purchase Manager Stonage IT, Franklinville Contact: +1 813 494 5005 - - - + + + @@ -163,9 +163,9 @@ Contact: +1 813 494 5005 - - - + + + @@ -183,9 +183,9 @@ Contact: +1 813 494 5005 - - - + + + @@ -203,9 +203,9 @@ Contact: +1 813 494 5005 - - - + + + @@ -223,9 +223,9 @@ Contact: +1 813 494 5005 - - - + + + @@ -247,9 +247,9 @@ I would like to know more about specification and cost of laptops of your compan Thanks, Andrew - - - + + + @@ -266,9 +266,9 @@ Andrew - - - + + + @@ -285,9 +285,9 @@ Andrew - - - + + + @@ -324,9 +324,9 @@ Andrew - - - + + + @@ -350,9 +350,9 @@ Andrew - - - + + + @@ -374,8 +374,8 @@ Andrew - - + + @@ -402,8 +402,8 @@ Andrew - - + + @@ -427,9 +427,9 @@ Andrew - - - + + + @@ -456,8 +456,8 @@ Andrew - - + + @@ -484,8 +484,8 @@ Andrew - - + + @@ -501,8 +501,8 @@ Andrew - - + + @@ -516,9 +516,9 @@ Andrew - - - + + + @@ -534,9 +534,9 @@ Andrew - - - + + + @@ -551,9 +551,9 @@ Andrew - - - + + + @@ -571,9 +571,9 @@ Andrew - - - + + + @@ -595,8 +595,8 @@ Andrew - - + + @@ -620,9 +620,9 @@ Andrew - - - + + + diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index fa8918ffa55..5b133e9004c 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -23,90 +23,6 @@ - - - crm.tracking.medium.tree - crm.tracking.medium - - - - - - - - - crm.tracking.medium.form - crm.tracking.medium - -
- - - - -
-
-
- - Channels - crm.tracking.medium - form - tree,form - -

- Click to define a new channel. -

- Use channels to track the type of source of your leads and opportunities. Channels - are mostly used in reporting to analyse sales performance - related to marketing efforts. -

- Some examples of channels: company website, phone call - campaign, reseller, banner, etc. -

-
-
- - - - crm.tracking.source.tree - crm.tracking.source - - - - - - - - crm.tracking.source.form - crm.tracking.source - -
- - - -
-
-
- - Source - crm.tracking.source - form - tree,form - -

- Click to define a new source. -

- Use channels to track the source of your leads and opportunities. Channels - are mostly used in reporting to analyse sales performance - related to marketing efforts. -

- Some examples of channels: partner's website, google.com, - email list name, etc. -

-
-
- - - crm.lost.reason.form @@ -180,55 +96,11 @@ - Stages crm.stage form - - - - - crm.tracking.campaign.tree - crm.tracking.campaign - - - - - - - - - - - - crm.tracking.campaign.form - crm.tracking.campaign - -
- - - - -
-
-
- - - - - Campaigns - crm.tracking.campaign - form - - - - - diff --git a/addons/crm/ir_http.py b/addons/crm/ir_http.py index c3e1f445e9a..7efd80f0737 100644 --- a/addons/crm/ir_http.py +++ b/addons/crm/ir_http.py @@ -11,7 +11,7 @@ class ir_http(orm.AbstractModel): def _dispatch(self): response = super(ir_http, self)._dispatch() - for var, dummy in self.pool['crm.tracking.mixin'].tracking_fields(): + for var, dummy in self.pool['utm.mixin'].tracking_fields(): if var in request.params and (var not in request.session or request.session[var] != request.params[var]): response.set_cookie(var, request.params[var], domain=self.get_utm_domain_cookies()) return response diff --git a/addons/crm/report/crm_lead_report.py b/addons/crm/report/crm_lead_report.py index 7a398d738dc..4c68d2198e3 100644 --- a/addons/crm/report/crm_lead_report.py +++ b/addons/crm/report/crm_lead_report.py @@ -29,7 +29,7 @@ class crm_lead_report(osv.Model): _auto = False _description = "CRM Lead Analysis" _rec_name = 'date_deadline' - _inherit = ["crm.tracking.mixin"] + _inherit = ["utm.mixin"] _columns = { 'date_deadline': fields.date('Expected Closing', readonly=True), diff --git a/addons/crm/report/crm_opportunity_report.py b/addons/crm/report/crm_opportunity_report.py index 3db5bd7ef16..376ff44c3a4 100644 --- a/addons/crm/report/crm_opportunity_report.py +++ b/addons/crm/report/crm_opportunity_report.py @@ -30,7 +30,7 @@ class crm_opportunity_report(osv.Model): _auto = False _description = "CRM Opportunity Analysis" _rec_name = 'date_deadline' - _inherit = ["crm.tracking.mixin"] + _inherit = ["utm.mixin"] _columns = { 'date_deadline': fields.date('Expected Closing', readonly=True), diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv index fff272c55de..09150132f14 100644 --- a/addons/crm/security/ir.model.access.csv +++ b/addons/crm/security/ir.model.access.csv @@ -1,16 +1,10 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_crm_tracking_medium_user,crm.tracking.medium user,model_crm_tracking_medium,base.group_sale_salesman,1,0,0,0 -access_crm_tracking_medium_manager,crm.tracking.medium manager,model_crm_tracking_medium,base.group_sale_manager,1,1,1,1 -access_crm_tracking_source_user,crm.tracking.source user,model_crm_tracking_source,base.group_sale_salesman,1,0,0,0 -access_crm_tracking_source_manager,crm.tracking.source manager,model_crm_tracking_source,base.group_sale_manager,1,1,1,1 access_crm_lead_manager,crm.lead.manager,model_crm_lead,base.group_sale_manager,1,1,1,1 access_crm_phonecall_manager,crm.phonecall.manager,model_crm_phonecall,base.group_sale_manager,1,1,1,1 access_crm_lead,crm.lead,model_crm_lead,base.group_sale_salesman,1,1,1,0 access_crm_phonecall,crm.phonecall,model_crm_phonecall,base.group_sale_salesman,1,1,1,0 access_crm_stage,crm.stage,model_crm_stage,,1,0,0,0 access_crm_stage_manager,crm.stage,model_crm_stage,base.group_sale_manager,1,1,1,1 -access_crm_tracking_campaign_user,crm_tracking_campaign user,model_crm_tracking_campaign,base.group_sale_salesman,1,1,1,0 -access_crm_tracking_campaign_manager,crm_tracking_campaign manager,model_crm_tracking_campaign,base.group_sale_manager,1,1,1,1 access_crm_phonecall_report_user,crm.phonecall.report.user,model_crm_phonecall_report,base.group_sale_salesman,1,0,0,0 access_crm_phonecall_report_manager,crm.phonecall.report,model_crm_phonecall_report,base.group_sale_manager,1,1,1,1 access_res_partner_manager,res.partner.crm.manager,base.model_res_partner,base.group_sale_manager,1,0,0,0 diff --git a/addons/crm_claim/crm_claim_data.xml b/addons/crm_claim/crm_claim_data.xml index 44eb291acd6..8f0462f091e 100644 --- a/addons/crm_claim/crm_claim_data.xml +++ b/addons/crm_claim/crm_claim_data.xml @@ -25,14 +25,12 @@ Case Category2 --> - + Corrective - - + Preventive - @@ -337,8 +343,11 @@ type="action" class="oe_stat_button"> - + + - Related Mailing(s) - - - - - - - - - - + Stats + + + + \ No newline at end of file diff --git a/addons/website_links/views/website_links.xml b/addons/website_links/views/website_links.xml new file mode 100644 index 00000000000..9ea8f83d271 --- /dev/null +++ b/addons/website_links/views/website_links.xml @@ -0,0 +1,169 @@ + + + + + Statistics of Clicks + website.links.click + graph + [('link_id', 'IN', ids)] + + + + + Links + website.links + + + + + + + + + + + website.links.form + website.links + +
+ +
+ + +
+ + + + + + + + + + + +
+
+
+
+ + + + website.links.my.form + website.links + +
+ + + + + + + + + +
+
+
+ + + website.links.form.graph.action + website.links + form + form + + + + + website.links.tree + website.links + + + + + + + + + + + + + website.links.graph + website.links + + + + + + + + + + + Link Tracker + website.links + form + tree,form,graph + + + + + website.links.click.form + website.links.click + +
+
+
+ + + + + + + +
+
+
+ + + website.links.click.tree + website.links.click + + + + + + + + + + + website.links.click.graph + website.links.click + + + + + + + + + + + + Tracked Links + website.links.click + form + graph,tree,form + + + + +
+
diff --git a/addons/website_links/views/website_links_graphs.xml b/addons/website_links/views/website_links_graphs.xml new file mode 100644 index 00000000000..4c71baf669e --- /dev/null +++ b/addons/website_links/views/website_links_graphs.xml @@ -0,0 +1,179 @@ + + + + + + + + \ No newline at end of file diff --git a/addons/website_links/views/website_links_template.xml b/addons/website_links/views/website_links_template.xml new file mode 100644 index 00000000000..7b019403ba5 --- /dev/null +++ b/addons/website_links/views/website_links_template.xml @@ -0,0 +1,123 @@ + + + + + + + + + + +