diff options
| author | Julien De Coster <jdc@odoo.com> | 2014-08-12 14:54:26 +0530 |
|---|---|---|
| committer | Julien De Coster <jdc@odoo.com> | 2014-12-17 17:14:33 +0100 |
| commit | ddac26cdbb3535239f5dbb41f5b464366065f3ba (patch) | |
| tree | b54e4d34060f1c7f80a8c6404f7f4fd56d914e52 /addons/utm | |
| parent | 7f97bf4ec07329e58c818632bf23017b390bb099 (diff) | |
[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.
Diffstat (limited to 'addons/utm')
| -rw-r--r-- | addons/utm/__init__.py | 2 | ||||
| -rw-r--r-- | addons/utm/__openerp__.py | 16 | ||||
| -rw-r--r-- | addons/utm/models/__init__.py | 2 | ||||
| -rw-r--r-- | addons/utm/models/utm.py | 99 | ||||
| -rw-r--r-- | addons/utm/security/ir.model.access.csv | 4 | ||||
| -rw-r--r-- | addons/utm/utm_demo.xml | 64 | ||||
| -rw-r--r-- | addons/utm/views/utm.xml | 112 |
7 files changed, 299 insertions, 0 deletions
diff --git a/addons/utm/__init__.py b/addons/utm/__init__.py new file mode 100644 index 00000000000..0f7cb6b2272 --- /dev/null +++ b/addons/utm/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +import models
\ No newline at end of file diff --git a/addons/utm/__openerp__.py b/addons/utm/__openerp__.py new file mode 100644 index 00000000000..36c96eebbd5 --- /dev/null +++ b/addons/utm/__openerp__.py @@ -0,0 +1,16 @@ +{ + 'name': 'UTM Trackers', + 'category': 'Hidden', + 'description': """ +Enable UTM trackers in shared links. +===================================================== + """, + 'version': '1.0', + 'depends':['marketing'], + 'data' : [ + 'security/ir.model.access.csv', + 'views/utm.xml', + ], + 'demo': ['utm_demo.xml'], + 'auto_install': True, +} diff --git a/addons/utm/models/__init__.py b/addons/utm/models/__init__.py new file mode 100644 index 00000000000..2ee8f89fad8 --- /dev/null +++ b/addons/utm/models/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +import utm
\ No newline at end of file diff --git a/addons/utm/models/utm.py b/addons/utm/models/utm.py new file mode 100644 index 00000000000..4f4d905795d --- /dev/null +++ b/addons/utm/models/utm.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-today Odoo SA (<http://www.odoo.com>) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from openerp.osv import osv, fields +from openerp.http import request + + +class utm_medium(osv.Model): + # OLD crm.case.channel + _name = "utm.medium" + _description = "Channels" + _order = 'name' + _columns = { + 'name': fields.char('Channel Name', required=True), + 'active': fields.boolean('Active'), + } + _defaults = { + 'active': lambda *a: 1, + } + + +class utm_campaign(osv.Model): + # OLD crm.case.resource.type + _name = "utm.campaign" + _description = "Campaign" + _rec_name = "name" + _columns = { + 'name': fields.char('Campaign Name', required=True, translate=True), + } + + +class utm_source(osv.Model): + _name = "utm.source" + _description = "Source" + _rec_name = "name" + _columns = { + 'name': fields.char('Source Name', required=True, translate=True), + } + + +class utm_mixin(osv.AbstractModel): + """Mixin class for objects which can be tracked by marketing. """ + _name = 'utm.mixin' + + _columns = { + 'campaign_id': fields.many2one('utm.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('utm.source', 'Source', help="This is the source of the link Ex: Search Engine, another domain, or name of email list"), + 'medium_id': fields.many2one('utm.medium', 'Medium', 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), + }
\ No newline at end of file diff --git a/addons/utm/security/ir.model.access.csv b/addons/utm/security/ir.model.access.csv new file mode 100644 index 00000000000..126f6ca10a6 --- /dev/null +++ b/addons/utm/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_utm_campaign,access_utm_campaign,model_utm_campaign,,1,1,1,1 +access_utm_medium,access_utm_medium,model_utm_medium,,1,1,1,1 +access_utm_source,access_utm_source,model_utm_source,,1,1,1,1
\ No newline at end of file diff --git a/addons/utm/utm_demo.xml b/addons/utm/utm_demo.xml new file mode 100644 index 00000000000..4e021490d0e --- /dev/null +++ b/addons/utm/utm_demo.xml @@ -0,0 +1,64 @@ +<?xml version="1.0"?> +<openerp> + <data> + <!-- UTM Campain --> + <record model="utm.campaign" id="utm_campaign_fall_drive"> + <field name="name">Fall Drive</field> + </record> + <record model="utm.campaign" id="utm_campaign_christmas_special"> + <field name="name">Christmas Special</field> + </record> + <record model="utm.campaign" id="utm_campaign_email_campaign_services"> + <field name="name">Email Campaign - Services</field> + </record> + <record model="utm.campaign" id="utm_campaign_email_campaign_products"> + <field name="name">Email Campaign - Products</field> + </record> + + <!-- UTM Source --> + <record model="utm.source" id="utm_source_search_engine"> + <field name="name">Search engine</field> + </record> + <record model="utm.source" id="utm_source_mailing"> + <field name="name">Mailing Partner</field> + </record> + <record model="utm.source" id="utm_source_newsletter"> + <field name="name">Newsletter</field> + </record> + <record model="utm.source" id="utm_source_facebook"> + <field name="name">Facebook</field> + </record> + <record model="utm.source" id="utm_source_twitter"> + <field name="name">Twitter</field> + </record> + + <!-- UTM Medium --> + <record model="utm.medium" id="utm_medium_website"> + <field name="name">Website</field> + </record> + <record model="utm.medium" id="utm_medium_phone"> + <field name="name">Phone</field> + </record> + <record model="utm.medium" id="utm_medium_direct"> + <field name="name">Direct</field> + </record> + <record model="utm.medium" id="utm_medium_email"> + <field name="name">Email</field> + </record> + <record model="utm.medium" id="utm_medium_banner"> + <field name="name">Banner Ads</field> + </record> + <record model="utm.medium" id="utm_medium_twitter"> + <field name="name">Twitter Ads</field> + </record> + <record model="utm.medium" id="utm_medium_facebook"> + <field name="name">Facebook Ads</field> + </record> + <record model="utm.medium" id="utm_medium_television"> + <field name="name">Television</field> + </record> + <record model="utm.medium" id="utm_medium_google_adwords"> + <field name="name">Google Adwords</field> + </record> + </data> +</openerp>
\ No newline at end of file diff --git a/addons/utm/views/utm.xml b/addons/utm/views/utm.xml new file mode 100644 index 00000000000..1147af4b5e3 --- /dev/null +++ b/addons/utm/views/utm.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <menuitem name="UTMs" id="marketing_utm" + parent="base.marketing_menu" sequence="99"/> + + <!-- utm.campaign --> + <record model="ir.ui.view" id="utm_campaign_tree"> + <field name="name">utm.campaign.tree</field> + <field name="model">utm.campaign</field> + <field name="arch" type="xml"> + <tree string="Campaign"> + <field name="name"/> + </tree> + </field> + </record> + + <record model="ir.ui.view" id="utm_campaign_form"> + <field name="name">utm.campaign.form</field> + <field name="model">utm.campaign</field> + <field name="arch" type="xml"> + <form string="Campaign"> + <group> + <field name="name"/> + </group> + </form> + </field> + </record> + + <record id="utm_campaign_act" model="ir.actions.act_window"> + <field name="name">Campaigns</field> + <field name="res_model">utm.campaign</field> + <field name="view_type">form</field> + <field name="view_id" ref="utm_campaign_tree"/> + </record> + + <menuitem action="utm_campaign_act" id="menu_utm_campaign_act" sequence="4" + groups="base.group_no_one" parent="marketing_utm"/> + + <!-- utm.medium --> + <record id="utm_medium_view_tree" model="ir.ui.view"> + <field name="name">utm.medium.tree</field> + <field name="model">utm.medium</field> + <field name="arch" type="xml"> + <tree string="Medium"> + <field name="name"/> + <field name="active"/> + </tree> + </field> + </record> + <record id="utm_medium_view_form" model="ir.ui.view"> + <field name="name">utm.medium.form</field> + <field name="model">utm.medium</field> + <field name="arch" type="xml"> + <form string="Channel"> + <group> + <field name="name"/> + <field name="active"/> + </group> + </form> + </field> + </record> + <record id="utm_medium_action" model="ir.actions.act_window"> + <field name="name">Medium</field> + <field name="res_model">utm.medium</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to define a new medium. + </p> + </field> + </record> + + <menuitem action="utm_medium_action" id="menu_utm_medium" parent="marketing_utm" sequence="4" groups="base.group_no_one"/> + + <!-- utm.source --> + <record id="utm_source_view_tree" model="ir.ui.view"> + <field name="name">utm.source.tree</field> + <field name="model">utm.source</field> + <field name="arch" type="xml"> + <tree string="Medium"> + <field name="name"/> + </tree> + </field> + </record> + <record id="utm_source_view_form" model="ir.ui.view"> + <field name="name">utm.source.form</field> + <field name="model">utm.source</field> + <field name="arch" type="xml"> + <form string="Channel"> + <group> + <field name="name"/> + </group> + </form> + </field> + </record> + <record id="utm_source_action" model="ir.actions.act_window"> + <field name="name">Sources</field> + <field name="res_model">utm.source</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to define a new source. + </p> + </field> + </record> + + <menuitem action="utm_source_action" id="menu_utm_source" parent="marketing_utm" sequence="4" groups="base.group_no_one"/> + </data> +</openerp>
\ No newline at end of file |
