summaryrefslogtreecommitdiff
path: root/addons/utm
diff options
context:
space:
mode:
authorJulien De Coster <jdc@odoo.com>2014-08-12 14:54:26 +0530
committerJulien De Coster <jdc@odoo.com>2014-12-17 17:14:33 +0100
commitddac26cdbb3535239f5dbb41f5b464366065f3ba (patch)
treeb54e4d34060f1c7f80a8c6404f7f4fd56d914e52 /addons/utm
parent7f97bf4ec07329e58c818632bf23017b390bb099 (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__.py2
-rw-r--r--addons/utm/__openerp__.py16
-rw-r--r--addons/utm/models/__init__.py2
-rw-r--r--addons/utm/models/utm.py99
-rw-r--r--addons/utm/security/ir.model.access.csv4
-rw-r--r--addons/utm/utm_demo.xml64
-rw-r--r--addons/utm/views/utm.xml112
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