[IMP] Crm: Add tracking mixin to manage utm campaign and add this mixin to mass_maili...
authorJeremy Kersten <jke@odoo.com>
Tue, 8 Jul 2014 15:33:00 +0000 (17:33 +0200)
committerJeremy Kersten <jke@odoo.com>
Tue, 8 Jul 2014 15:33:00 +0000 (17:33 +0200)
28 files changed:
addons/crm/__init__.py
addons/crm/crm.py
addons/crm/crm_data.xml
addons/crm/crm_lead.py
addons/crm/crm_lead_data.xml
addons/crm/crm_lead_demo.xml
addons/crm/crm_lead_view.xml
addons/crm/crm_view.xml
addons/crm/ir_http.py [new file with mode: 0644]
addons/crm/report/crm_lead_report.py
addons/crm/report/crm_lead_report_view.xml
addons/crm/security/ir.model.access.csv
addons/crm_claim/crm_claim_data.xml
addons/crm_helpdesk/crm_helpdesk.py
addons/crm_helpdesk/report/crm_helpdesk_report.py
addons/crm_mass_mailing/__init__.py [new file with mode: 0644]
addons/crm_mass_mailing/__openerp__.py [new file with mode: 0644]
addons/crm_mass_mailing/mass_mailing.py [new file with mode: 0644]
addons/crm_mass_mailing/mass_mailing.xml [new file with mode: 0644]
addons/crm_mass_mailing/mass_mailing_data.xml [new file with mode: 0644]
addons/crm_partner_assign/crm_lead_demo.xml
addons/crm_partner_assign/crm_portal_view.xml
addons/marketing_crm/views/crm.xml
addons/mass_mailing/models/mass_mailing.py
addons/sale_crm/sale_crm.py
addons/sale_crm/sale_crm_view.xml
addons/website/models/ir_http.py
addons/website_crm/controllers/main.py

index 872d039..1cd494b 100644 (file)
@@ -24,6 +24,7 @@ import crm_segmentation
 import crm_lead
 import sales_team
 import calendar_event
+import ir_http
 import crm_phonecall
 import report
 import wizard
index 88933aa..20d025f 100644 (file)
 #
 ##############################################################################
 
-import calendar
-from datetime import date, datetime
-from dateutil import relativedelta
-
-from openerp import tools
-from openerp.osv import fields
-from openerp.osv import osv
+from openerp.osv import osv, fields
+from openerp.http import request
 
 AVAILABLE_PRIORITIES = [
     ('0', 'Very Low'),
@@ -35,8 +30,10 @@ AVAILABLE_PRIORITIES = [
     ('4', 'Very High'),
 ]
 
-class crm_case_channel(osv.osv):
-    _name = "crm.case.channel"
+
+class crm_tracking_medium(osv.Model):
+    # OLD crm.case.channel
+    _name = "crm.tracking.medium"
     _description = "Channels"
     _order = 'name'
     _columns = {
@@ -47,6 +44,67 @@ class crm_case_channel(osv.osv):
         '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),
+        'section_id': fields.many2one('crm.case.section', 'Sales Team'),
+    }
+
+
+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 ="['|',('section_id','=',section_id),('section_id','=',False)]"
+                                       help="This is a name that helps you keep track of your different campaign efforts Example: Fall_Drive, Christmas_Special"),
+        'source_id': fields.many2one('crm.tracking.source', 'Source', help="This is the source of the link Example: 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"),
+    }
+
+    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, field in self.tracking_fields():
+            column = self._all_columns[field].column
+            value = vals.get(field) or (request and request.session.get(key))  # params.get sould be always in session by the dispatch from ir_http
+            if column._type in ['many2one'] and isinstance(value, basestring):  # if we receive a string for a many2one, we search / create  the id
+                if value:
+                    Model = self.pool[column._obj]
+                    rel_id = Model.name_search(cr, uid, value, context=context)
+                    if not rel_id:
+                        rel_id = Model.create(cr, uid, {'name': value}, context=context)
+                vals[field] = rel_id
+            # Here the code for other cases that many2one
+            else:
+                vals[field] = 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_case_stage(osv.osv):
     """ Model for case stages. This models the main stages of a document
         management flow. Main CRM objects (leads, opportunities, project
@@ -106,16 +164,6 @@ class crm_case_categ(osv.osv):
         'object_id' : _find_object_id
     }
 
-class crm_case_resource_type(osv.osv):
-    """ Resource Type of case """
-    _name = "crm.case.resource.type"
-    _description = "Campaign"
-    _rec_name = "name"
-    _columns = {
-        'name': fields.char('Campaign Name', required=True, translate=True),
-        'section_id': fields.many2one('crm.case.section', 'Sales Team'),
-    }
-
 class crm_payment_mode(osv.osv):
     """ Payment Mode for Fund """
     _name = "crm.payment.mode"
index a5a7327..c354e2d 100644 (file)
             <field name="state">open</field>
         </record>
 
-        <record model="crm.case.channel" id="crm_case_channel_website">
+
+        <!-- Crm Source -->
+        <record model="crm.tracking.source" id="crm_source_search_engine">
+            <field name="name">Search engine</field>
+        </record>
+        <record model="crm.tracking.source" id="crm_source_mailing">
+            <field name="name">Mailing Partner</field>
+        </record>
+        <record model="crm.tracking.source" id="crm_source_newsletter">
+            <field name="name">Newsletter</field>
+        </record>
+
+        <!-- Crm Medium -->
+        <record model="crm.tracking.medium" id="crm_medium_website">
             <field name="name">Website</field>
         </record>
-        <record model="crm.case.channel" id="crm_case_channel_phone">
+        <record model="crm.tracking.medium" id="crm_medium_phone">
             <field name="name">Phone</field>
         </record>
-        <record model="crm.case.channel" id="crm_case_channel_direct">
+        <record model="crm.tracking.medium" id="crm_medium_direct">
             <field name="name">Direct</field>
         </record>
-        <record model="crm.case.channel" id="crm_case_channel_email">
+        <record model="crm.tracking.medium" id="crm_medium_email">
             <field name="name">Email</field>
         </record>
+        <record model="crm.tracking.medium" id="crm_medium_banner">
+            <field name="name">Banner Ad</field>
+        </record>
+
 
         <record model="crm.case.section" id="sales_team.section_sales_department">
             <field name="use_leads">True</field>
index 7d53c1d..b82f5a4 100644 (file)
@@ -32,13 +32,14 @@ from openerp.tools.translate import _
 
 CRM_LEAD_FIELDS_TO_MERGE = ['name',
     'partner_id',
-    'channel_id',
+    'campaign_id',
     'company_id',
     'country_id',
     'section_id',
     'state_id',
     'stage_id',
-    'type_id',
+    'medium_id',
+    'source_id',
     'user_id',
     'title',
     'city',
@@ -67,7 +68,7 @@ class crm_lead(format_address, osv.osv):
     _name = "crm.lead"
     _description = "Lead/Opportunity"
     _order = "priority,date_action,id desc"
-    _inherit = ['mail.thread', 'ir.needaction_mixin']
+    _inherit = ['mail.thread', 'ir.needaction_mixin', 'crm.tracking.mixin']
 
     _track = {
         'stage_id': {
@@ -214,9 +215,6 @@ class crm_lead(format_address, osv.osv):
         'write_date': fields.datetime('Update Date', readonly=True),
         'categ_ids': fields.many2many('crm.case.categ', 'crm_lead_category_rel', 'lead_id', 'category_id', 'Tags', \
             domain="['|', ('section_id', '=', section_id), ('section_id', '=', False), ('object_id.model', '=', 'crm.lead')]", help="Classify and analyze your lead/opportunity categories like: Training, Service"),
-        'type_id': fields.many2one('crm.case.resource.type', 'Campaign', \
-            domain="['|',('section_id','=',section_id),('section_id','=',False)]", help="From which campaign (seminar, marketing campaign, mass mailing, ...) did this contact come from?"),
-        'channel_id': fields.many2one('crm.case.channel', 'Channel', help="Communication channel (mail, direct, phone, ...)"),
         'contact_name': fields.char('Contact Name', size=64),
         'partner_name': fields.char("Customer Name", size=64,help='The name of the future partner company that will be created while converting the lead into opportunity', select=1),
         'opt_out': fields.boolean('Opt-Out', oldname='optout',
index 9ea8599..4d5e198 100644 (file)
                                             (4, ref('stage_lead7'))]"/>
         </record>
 
-        <!-- Crm campain -->
-        <record model="crm.case.resource.type" id="type_lead1">
-            <field name="name">Telesales</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
-        <record model="crm.case.resource.type" id="type_lead2">
-            <field name="name">Email Campaign - Services</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
-        <record model="crm.case.resource.type" id="type_lead3">
-            <field name="name">Email Campaign - Products</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
-        <record model="crm.case.resource.type" id="type_lead4">
-            <field name="name">Twitter Ads</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
-        <record model="crm.case.resource.type" id="type_lead5">
-            <field name="name">Google Adwords</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
-        <record model="crm.case.resource.type" id="type_lead6">
-            <field name="name">Banner Ads</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
-        <record model="crm.case.resource.type" id="type_lead7">
-            <field name="name">Television</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
-        <record model="crm.case.resource.type" id="type_lead8">
-            <field name="name">Newsletter</field>
-            <field name="section_id" ref="sales_team.section_sales_department"/>
-        </record>
 
         <!--  crm categories -->
         <record model="crm.case.categ" id="categ_oppor1">
index 8acefd5..f5b38f8 100644 (file)
@@ -16,9 +16,7 @@
             <field name="city">Paris</field>
             <field name="zip">93190</field>
             <field name="phone">+33 1 25 54 45 69</field>
-            <field name="type_id" ref="type_lead2"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor6])]"/>
-            <field name="channel_id" ref="crm_case_channel_email"/>
             <field name="priority">1</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
             <field name="user_id" ref="base.user_root"/>
@@ -51,9 +49,7 @@ Could you please send me the details ?</field>
             <field name="function">Purchase Manager</field>
             <field name="country_id" ref="base.fr"/>
             <field name="city">Bordeaux</field>
-            <field name="type_id" ref="type_lead7"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor2])]"/>
-            <field name="channel_id" ref="crm_case_channel_website"/>
             <field name="priority">1</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
             <field name="user_id" ref="base.user_root"/>
@@ -80,9 +76,7 @@ Could you please send me the details ?</field>
             <field name="partner_id" ref=""/>
             <field name="country_id" ref="base.us"/>
             <field name="city">New-York</field>
-            <field name="type_id" ref="type_lead5"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor4])]"/>
-            <field name="channel_id" ref=""/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_1"/>
             <field name="user_id" ref="base.user_demo"/>
@@ -101,9 +95,7 @@ Could you please send me the details ?</field>
             <field name="partner_id" ref=""/>
             <field name="country_id" ref="base.uk"/>
             <field name="city">Drury</field>
-            <field name="type_id" ref="type_lead8"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor5])]"/>
-            <field name="channel_id" ref=""/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_2"/>
             <field name="user_id" ref="base.user_demo"/>
@@ -126,9 +118,7 @@ Could you please send me the details ?</field>
             <field name="city">Franklinville</field>
             <field name="zip">NJ 08322</field>
             <field name="phone">+1 813 494 5005</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
-            <field name="channel_id" ref="crm_case_channel_website"/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_1"/>
             <field name="user_id" ref=""/>
@@ -153,9 +143,7 @@ Contact: +1 813 494 5005</field>
             <field name="function">Consultant</field>
             <field name="country_id" ref="base.it"/>
             <field name="city">Roma</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor3,categ_oppor4])]"/>
-            <field name="channel_id" ref=""/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_2"/>
             <field name="user_id" ref=""/>
@@ -171,9 +159,7 @@ Contact: +1 813 494 5005</field>
             <field name="function">Journalist</field>
             <field name="country_id" ref="base.ua"/>
             <field name="city">Kiev</field>
-            <field name="type_id" ref="type_lead8"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor4])]"/>
-            <field name="channel_id" ref=""/>
             <field name="priority">0</field>
             <field name="section_id" ref="sales_team.crm_case_section_2"/>
             <field name="user_id" ref="base.user_root"/>
@@ -190,9 +176,7 @@ Contact: +1 813 494 5005</field>
             <field name="function">Sales</field>
             <field name="country_id" ref="base.uk"/>
             <field name="city">Cambridge</field>
-            <field name="type_id" ref="type_lead5"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor6,categ_oppor8])]"/>
-            <field name="channel_id" ref=""/>
             <field name="priority">1</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
             <field name="user_id" ref="base.user_root"/>
@@ -209,9 +193,7 @@ Contact: +1 813 494 5005</field>
             <field name="function">Sales</field>
             <field name="country_id" ref="base.uk"/>
             <field name="city">Oxford</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor7])]"/>
-            <field name="channel_id" ref="crm_case_channel_phone"/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
             <field name="user_id" ref="base.user_demo"/>
@@ -227,9 +209,7 @@ Contact: +1 813 494 5005</field>
             <field name="function">Medical illustrator</field>
             <field name="country_id" ref="base.es"/>
             <field name="city">Sevilla</field>
-            <field name="type_id" ref="type_lead8"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
-            <field name="channel_id" ref="crm_case_channel_email"/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_2"/>
             <field name="user_id" ref="base.user_demo"/>
@@ -250,9 +230,7 @@ Andrew</field>
             <field name="partner_id" ref="base.res_partner_1"/>
             <field name="function">Functional Consultant</field>
             <field name="country_id" ref=""/>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor7])]"/>
-            <field name="channel_id" ref="crm_case_channel_direct"/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_1"/>
             <field name="user_id" ref=""/>
@@ -268,9 +246,7 @@ Andrew</field>
             <field name="partner_id" ref="base.res_partner_1"/>
             <field name="country_id" ref="base.cn"/>
             <field name="city">Shenzhen</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
-            <field name="channel_id" ref="crm_case_channel_website"/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
             <field name="user_id" ref=""/>
@@ -303,9 +279,7 @@ Andrew</field>
             <field name="street">1 rue Rockfeller</field>
             <field name="country_id" ref="base.at"/>
             <field name="city">Melbourne</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
-            <field name="channel_id" ref="crm_case_channel_email"/>
             <field name="priority">1</field>
             <field eval="time.strftime('%Y-%m-25')" name="date_deadline"/>
             <field eval="time.strftime('%Y-%m-12')" name="date_action"/>
@@ -328,9 +302,7 @@ Andrew</field>
             <field name="country_id" ref="base.be"/>
             <field name="city">Wavre</field>
             <field name="zip">1300</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor2])]"/>
-            <field name="channel_id" ref="crm_case_channel_website"/>
             <field name="priority">2</field>
             <field eval="time.strftime('%Y-%m-23')" name="date_deadline"/>
             <field eval="time.strftime('%Y-%m-10')" name="date_action"/>
@@ -350,7 +322,6 @@ Andrew</field>
             <field name="city">Wavre</field>
             <field name="email_from">virginie@agrolait.com</field>
             <field name="partner_id" ref="base.res_partner_2"/>
-            <field name="type_id" ref="type_lead8"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
             <field name="priority">1</field>
             <field eval="time.strftime('%Y-%m-12')" name="date_deadline"/>
@@ -377,7 +348,6 @@ Andrew</field>
             <field name="country_id" ref="base.uk"/>
             <field name="city">Liverpool</field>
             <field name="zip">L25 4RL</field>
-            <field name="type_id" ref="type_lead5"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor5])]"/>
             <field name="priority">2</field>
             <field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
@@ -401,9 +371,7 @@ Andrew</field>
             <field name="street">Rue des Palais 51, bte 33</field>
             <field name="country_id" ref="base.be"/>
             <field name="city">Brussels</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor3,categ_oppor4])]"/>
-            <field name="channel_id" ref="crm_case_channel_website"/>
             <field name="priority">1</field>
             <field eval="time.strftime('%Y-%m-8')" name="date_deadline"/>
             <field eval="time.strftime('%Y-%m-3')" name="date_action"/>
@@ -429,7 +397,6 @@ Andrew</field>
             <field name="street">3661 Station Street</field>
             <field name="country_id" ref="base.uk"/>
             <field name="partner_id" ref="base.res_partner_4"/>
-            <field name="type_id" ref="type_lead8"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor4,categ_oppor6])]"/>
             <field name="priority">1</field>
             <field eval="time.strftime('%Y-%m-13')" name="date_deadline"/>
@@ -456,7 +423,6 @@ Andrew</field>
             <field name="country_id" ref="base.uk"/>
             <field name="city">Liverpool</field>
             <field name="zip">L25 4RL</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
             <field name="priority">1</field>
             <field eval="time.strftime('%Y-%m-10')" name="date_deadline"/>
@@ -476,7 +442,6 @@ Andrew</field>
             <field name="partner_name">Epic Technologies</field>
             <field name="email_from">john.b@tech.info</field>
             <field name="partner_id" ref="base.res_partner_5"/>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor4,categ_oppor8])]"/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_1"/>
@@ -489,9 +454,7 @@ Andrew</field>
             <field name="name">“Resource Planning” project develpment</field>
             <field eval="350" name="planned_revenue"/>
             <field name="partner_id" ref="base.res_partner_7"/>
-            <field name="type_id" ref="type_lead2"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor7])]"/>
-            <field name="channel_id" ref="crm_case_channel_phone"/>
             <field name="priority">2</field>
             <field name="section_id" ref="sales_team.crm_case_section_2"/>
             <field name="user_id" ref="base.user_root"/>
@@ -507,9 +470,7 @@ Andrew</field>
             <field name="contact_name">Benjamin Flores</field>
             <field name="partner_name">Nebula Business</field>
             <field name="partner_id" ref="base.res_partner_17"/>
-            <field name="type_id" ref="type_lead7"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor3])]"/>
-            <field name="channel_id" ref="crm_case_channel_email"/>
             <field name="priority">1</field>
             <field name="section_id" ref="sales_team.crm_case_section_2"/>
             <field name="user_id" ref="base.user_root"/>
@@ -522,9 +483,7 @@ Andrew</field>
             <field eval="2000" name="planned_revenue"/>
             <field eval="80.0" name="probability"/>
             <field name="partner_id" ref="base.res_partner_18"/>
-            <field name="type_id" ref="type_lead5"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor3])]"/>
-            <field name="channel_id" ref="crm_case_channel_direct"/>
             <field name="priority">0</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
             <field name="user_id" ref="base.user_demo"/>
@@ -540,9 +499,7 @@ Andrew</field>
             <field name="email_from">info@mycompany.net</field>
             <field name="country_id" ref="base.pe"/>
             <field name="city">Lima</field>
-            <field name="type_id" ref="type_lead8"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor7])]"/>
-            <field name="channel_id" ref="crm_case_channel_website"/>
             <field name="priority">0</field>
             <field eval="time.strftime('%Y-%m-6')" name="date_deadline"/>
             <field name="section_id" ref="sales_team.section_sales_department"/>
@@ -564,7 +521,6 @@ Andrew</field>
             <field name="country_id" ref="base.ar"/>
             <field name="city">Buenos Aires</field>
             <field name="zip">B7313</field>
-            <field name="type_id" ref="type_lead4"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor4])]"/>
             <field name="priority">2</field>
             <field name="title_action">Conf call with technical service</field>
@@ -585,9 +541,7 @@ Andrew</field>
             <field name="country_id" ref="base.be"/>
             <field name="city">Wavre</field>
             <field name="zip">1300</field>
-            <field name="type_id" ref="type_lead3"/>
             <field name="categ_ids" eval="[(6, 0, [categ_oppor2])]"/>
-            <field name="channel_id" ref="crm_case_channel_website"/>
             <field name="priority">2</field>
             <field eval="time.strftime('%Y-%m-23')" name="date_deadline"/>
             <field eval="time.strftime('%Y-%m-10')" name="date_action"/>
index 62c5e14..3f10dcf 100644 (file)
                     <field name="partner_id" invisible="1"/>
                     <field name="section_id" groups="base.group_multi_salesteams"/>
                     <field name="probability" invisible="1"/>
-                    <field name="type_id" invisible="1"/>
+                    <field name="campaign_id" invisible="1"/>
                     <field name="referred" invisible="1"/>
-                    <field name="channel_id" invisible="1"/>
+                    <field name="medium_id" invisible="1"/>
                     <field name="message_unread" invisible="1"/>
                 </tree>
             </field>
                     <field name="country_id"/>
                     <field name="date_action"/>
                     <field name="title_action"/>
-                    <field name="channel_id" invisible="1"/>
-                    <field name="type_id" invisible="1"/>
+                    <field name="medium_id" invisible="1"/>
+                    <field name="campaign_id" invisible="1"/>
+                    <field name="source_id" invisible="1"/>
                     <field name="stage_id"/>
                     <field name="planned_revenue" sum="Expected Revenues"/>
                     <field name="probability" avg="Avg. of Probability"/>
index 167fd26..b0e6404 100644 (file)
         <menuitem id="base.next_id_64" name="Sales"
             parent="base.menu_reporting" sequence="1"/>
 
-        <!-- crm.case.channel -->
-        <record id="crm_case_channel_view_tree" model="ir.ui.view">
-            <field name="name">crm.case.channel.tree</field>
-            <field name="model">crm.case.channel</field>
+        <!-- crm.tracking.medium -->
+        <record id="crm_tracking_medium_view_tree" model="ir.ui.view">
+            <field name="name">crm.tracking.medium.tree</field>
+            <field name="model">crm.tracking.medium</field>
             <field name="arch" type="xml">
                 <tree string="Channels">
                     <field name="name"/>
@@ -37,9 +37,9 @@
                 </tree>
             </field>
         </record>
-        <record id="crm_case_channel_view_form" model="ir.ui.view">
-            <field name="name">crm.case.channel.form</field>
-            <field name="model">crm.case.channel</field>
+        <record id="crm_tracking_medium_view_form" model="ir.ui.view">
+            <field name="name">crm.tracking.medium.form</field>
+            <field name="model">crm.tracking.medium</field>
             <field name="arch" type="xml">
                 <form string="Channel">
                     <group>
                 </form>
             </field>
         </record>
-        <record id="crm_case_channel_action" model="ir.actions.act_window">
+        <record id="crm_tracking_medium_action" model="ir.actions.act_window">
             <field name="name">Channels</field>
-            <field name="res_model">crm.case.channel</field>
+            <field name="res_model">crm.tracking.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 channel.
               </p><p>
-                Use channels to track the soure of your leads and opportunities. Channels
+                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.
               </p><p>
                 Some examples of channels: company website, phone call
-                campaign, reseller, etc.
+                campaign, reseller, banner, etc.
               </p>
             </field>
         </record>
 
-        <menuitem action="crm_case_channel_action" id="menu_crm_case_channel" parent="base.menu_crm_config_lead" sequence="4" groups="base.group_no_one"/>
+        <!-- crm.tracking.source -->
+        <record id="crm_tracking_source_view_tree" model="ir.ui.view">
+            <field name="name">crm.tracking.source.tree</field>
+            <field name="model">crm.tracking.source</field>
+            <field name="arch" type="xml">
+                <tree string="Channels">
+                    <field name="name"/>
+                </tree>
+            </field>
+        </record>
+        <record id="crm_tracking_source_view_form" model="ir.ui.view">
+            <field name="name">crm.tracking.source.form</field>
+            <field name="model">crm.tracking.source</field>
+            <field name="arch" type="xml">
+                <form string="Channel">
+                    <group>
+                        <field name="name"/>
+                    </group>
+                </form>
+            </field>
+        </record>
+        <record id="crm_tracking_source_action" model="ir.actions.act_window">
+            <field name="name">Source</field>
+            <field name="res_model">crm.tracking.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><p>
+                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.
+              </p><p>
+                Some examples of channels: partner's website, google.com, 
+                email list name, etc.
+              </p>
+            </field>
+        </record>
+
+        <menuitem action="crm_tracking_source_action" id="menu_crm_tracking_source" parent="base.menu_crm_config_lead" sequence="4" groups="base.group_no_one"/>
 
         <!-- CRM Stage Tree View -->
 
 
         <!-- Resource Type of case Tree View -->
 
-        <record model="ir.ui.view" id="crm_case_resource_type_tree">
-            <field name="name">crm.case.resource.type.tree</field>
-            <field name="model">crm.case.resource.type</field>
+        <record model="ir.ui.view" id="crm_tracking_campaign_tree">
+            <field name="name">crm.tracking.campaign.tree</field>
+            <field name="model">crm.tracking.campaign</field>
             <field name="arch" type="xml">
                 <tree string="Campaign">
                     <field name="name"/>
 
         <!-- Resource Type of case Form View -->
 
-        <record model="ir.ui.view" id="crm_case_resource_type_form">
-            <field name="name">crm.case.resource.type.form</field>
-            <field name="model">crm.case.resource.type</field>
+        <record model="ir.ui.view" id="crm_tracking_campaign_form">
+            <field name="name">crm.tracking.campaign.form</field>
+            <field name="model">crm.tracking.campaign</field>
             <field name="arch" type="xml">
                 <form string="Campaign">
                     <group>
 
         <!-- Resource Type of case Action -->
 
-        <record id="crm_case_resource_type_act" model="ir.actions.act_window">
+        <record id="crm_tracking_campaign_act" model="ir.actions.act_window">
             <field name="name">Campaigns</field>
-            <field name="res_model">crm.case.resource.type</field>
+            <field name="res_model">crm.tracking.campaign</field>
             <field name="view_type">form</field>
-            <field name="view_id" ref="crm_case_resource_type_tree"/>
+            <field name="view_id" ref="crm_tracking_campaign_tree"/>
         </record>
 
-        <menuitem action="crm_case_resource_type_act"
-            id="menu_crm_case_resource_type_act" sequence="4"
+        <menuitem action="crm_tracking_campaign_act"
+            id="menu_crm_tracking_campaign_act" sequence="4"
             groups="base.group_no_one"
             parent="base.menu_crm_config_lead"/>
 
diff --git a/addons/crm/ir_http.py b/addons/crm/ir_http.py
new file mode 100644 (file)
index 0000000..e2bc9be
--- /dev/null
@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+from openerp.http import request
+from openerp.osv import orm
+
+
+class ir_http(orm.AbstractModel):
+    _inherit = 'ir.http'
+
+    def _dispatch(self):
+        for var, dummy in self.pool['crm.tracking.mixin'].tracking_fields():
+            if var in request.params and (var not in request.session or request.session[var] != request.params[var]):
+                    request.session[var] = request.params[var]
+        return super(ir_http, self)._dispatch()
index 7cb355c..32851a7 100644 (file)
@@ -44,6 +44,7 @@ class crm_lead_report(osv.osv):
     _auto = False
     _description = "CRM Lead Analysis"
     _rec_name = 'date_deadline'
+    _inherit = ["crm.tracking.mixin"]
 
     _columns = {
         'date_deadline': fields.date('Exp. Closing', readonly=True, help="Expected Closing"),
@@ -58,10 +59,8 @@ class crm_lead_report(osv.osv):
         'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
 
         'user_id':fields.many2one('res.users', 'User', readonly=True),
+       'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
         'country_id':fields.many2one('res.country', 'Country', readonly=True),
-        'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
-        'channel_id':fields.many2one('crm.case.channel', 'Channel', readonly=True),
-        'type_id':fields.many2one('crm.case.resource.type', 'Campaign', readonly=True),
         'company_id': fields.many2one('res.company', 'Company', readonly=True),
         'probability': fields.float('Probability',digits=(16,2),readonly=True, group_operator="avg"),
         'planned_revenue': fields.float('Planned Revenue',digits=(16,2),readonly=True),
@@ -101,8 +100,9 @@ class crm_lead_report(osv.osv):
                     c.company_id,
                     c.priority,
                     c.section_id,
-                    c.channel_id,
-                    c.type_id,
+                    c.campaign_id,
+                    c.source_id,
+                    c.medium_id,
                     c.partner_id,
                     c.country_id,
                     c.planned_revenue,
index 74564d8..8882b8a 100644 (file)
                     <group expand="0" string="Extended Filters">
                         <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
                         <field name="stage_id" domain="[('section_ids', '=', 'section_id')]" />
-                        <field name="type_id"/>
-                        <field name="channel_id"/>
+                        <field name="campaign_id"/>
+                        <field name="medium_id"/>
+                        <field name="source_id"/>
                         <field name="company_id" groups="base.group_multi_company"/>
                         <separator orientation="vertical"/>
                         <field name="stage_id" widget="selection" domain="[('section_ids', '=', 'section_id')]" />
-                        <field name="type_id" widget="selection"/>
-                        <field name="channel_id" widget="selection"/>
+                        <field name="campaign_id" widget="selection"/>
+                        <field name="medium_id" widget="selection"/>
+                        <field name="source_id" widget="selection"/>
                         <separator orientation="vertical"/>
                         <field name="company_id" widget="selection" groups="base.group_multi_company"/>
                         <newline/>
index 3c6fc05..abfe3eb 100644 (file)
@@ -3,8 +3,10 @@ access_crm_segmentation_user,crm.segmentation user,model_crm_segmentation,base.g
 access_crm_segmentation_line_user,crm.segmentation.line user,model_crm_segmentation_line,base.group_sale_salesman,1,0,0,0\r
 access_crm_segmentation,crm.segmentation,model_crm_segmentation,base.group_sale_manager,1,1,1,1\r
 access_crm_segmentation_line,crm.segmentation.line,model_crm_segmentation_line,base.group_sale_manager,1,1,1,1\r
-access_crm_case_channel_user,crm.case.channel user,model_crm_case_channel,base.group_sale_salesman,1,0,0,0\r
-access_crm_case_channel_manager,crm.case.channel manager,model_crm_case_channel,base.group_sale_manager,1,1,1,1\r
+access_crm_tracking_medium_user,crm.tracking.medium user,model_crm_tracking_medium,base.group_sale_salesman,1,0,0,0\r
+access_crm_tracking_medium_manager,crm.tracking.medium manager,model_crm_tracking_medium,base.group_sale_manager,1,1,1,1\r
+access_crm_tracking_source_user,crm.tracking.source user,model_crm_tracking_source,base.group_sale_salesman,1,0,0,0\r
+access_crm_tracking_source_manager,crm.tracking.source manager,model_crm_tracking_source,base.group_sale_manager,1,1,1,1\r
 access_crm_case_categ,crm.case.categ,model_crm_case_categ,base.group_sale_salesman,1,1,1,0\r
 access_crm_lead_manager,crm.lead.manager,model_crm_lead,base.group_sale_manager,1,1,1,1\r
 access_crm_phonecall_manager,crm.phonecall.manager,model_crm_phonecall,base.group_sale_manager,1,1,1,1\r
@@ -13,8 +15,8 @@ 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\r
 access_crm_case_stage,crm.case.stage,model_crm_case_stage,,1,0,0,0\r
 access_crm_case_stage_manager,crm.case.stage,model_crm_case_stage,base.group_sale_manager,1,1,1,1\r
-access_crm_case_resource_type_user,crm_case_resource_type user,model_crm_case_resource_type,base.group_sale_salesman,1,1,1,0\r
-access_crm_case_resource_type_manager,crm_case_resource_type manager,model_crm_case_resource_type,base.group_sale_manager,1,1,1,1\r
+access_crm_tracking_campaign_user,crm_tracking_campaign user,model_crm_tracking_campaign,base.group_sale_salesman,1,1,1,0\r
+access_crm_tracking_campaign_manager,crm_tracking_campaign manager,model_crm_tracking_campaign,base.group_sale_manager,1,1,1,1\r
 access_crm_phonecall_report_user,crm.phonecall.report.user,model_crm_phonecall_report,base.group_sale_salesman,1,0,0,0\r
 access_crm_phonecall_report_manager,crm.phonecall.report,model_crm_phonecall_report,base.group_sale_manager,1,1,1,1\r
 access_res_partner_manager,res.partner.crm.manager,base.model_res_partner,base.group_sale_manager,1,0,0,0\r
@@ -29,4 +31,4 @@ access_res_partner_bank_type_crm_user,res.partner.bank.type.crm.user,base.model_
 access_crm_lead_partner_manager,crm.lead.partner.manager,model_crm_lead,base.group_partner_manager,1,0,0,0\r
 access_crm_phonecall_partner_manager,crm.phonecall.partner.manager,model_crm_phonecall,base.group_partner_manager,1,1,1,1\r
 access_crm_payment_mode_user,crm.payment.mode,model_crm_payment_mode,base.group_sale_salesman,1,0,0,0\r
-access_crm_payment_mode,crm.payment.mode,model_crm_payment_mode,base.group_sale_manager,1,1,1,1\r
+access_crm_payment_mode,crm.payment.mode,model_crm_payment_mode,base.group_sale_manager,1,1,1,1
\ No newline at end of file
index 86cf988..58ed29f 100644 (file)
         Case Category2
         -->
         
-        <record model="crm.case.resource.type" id="type_claim1">
+        <record model="crm.tracking.campaign" id="claim_source1">
             <field name="name">Corrective</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
         </record>
         
-        <record model="crm.case.resource.type" id="type_claim2">
+        <record model="crm.tracking.campaign" id="claim_source2">
             <field name="name">Preventive</field>
             <field name="section_id" ref="sales_team.section_sales_department"/>
         </record>
index 0fdcfeb..3800efd 100644 (file)
@@ -56,7 +56,7 @@ class crm_helpdesk(osv.osv):
             'date': fields.datetime('Date'),
             'ref': fields.reference('Reference', selection=openerp.addons.base.res.res_request.referencable_models),
             'ref2': fields.reference('Reference 2', selection=openerp.addons.base.res.res_request.referencable_models),
-            'channel_id': fields.many2one('crm.case.channel', 'Channel', help="Communication channel."),
+            'channel_id': fields.many2one('crm.tracking.medium', 'Channel', help="Communication channel."),
             'planned_revenue': fields.float('Planned Revenue'),
             'planned_cost': fields.float('Planned Costs'),
             'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority'),
index 1163db9..f7180ef 100644 (file)
@@ -56,7 +56,7 @@ class crm_helpdesk_report(osv.osv):
         'date_deadline': fields.date('Deadline', select=True),
         'priority': fields.selection([('5', 'Lowest'), ('4', 'Low'), \
                     ('3', 'Normal'), ('2', 'High'), ('1', 'Highest')], 'Priority'),
-        'channel_id': fields.many2one('crm.case.channel', 'Channel'),
+        'channel_id': fields.many2one('crm.tracking.medium', 'Channel'),
         'categ_id': fields.many2one('crm.case.categ', 'Category', \
                             domain="[('section_id','=',section_id),\
                             ('object_id.model', '=', 'crm.helpdesk')]"),
diff --git a/addons/crm_mass_mailing/__init__.py b/addons/crm_mass_mailing/__init__.py
new file mode 100644 (file)
index 0000000..983faeb
--- /dev/null
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2014-Today OpenERP SA (<http://www.openerp.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/>.
+#
+##############################################################################
+
+import mass_mailing
diff --git a/addons/crm_mass_mailing/__openerp__.py b/addons/crm_mass_mailing/__openerp__.py
new file mode 100644 (file)
index 0000000..5e2e320
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    'name': 'Campaign in Mass Mailing',
+    'version': '1.0',
+    'summary': 'This module allow to specify a campaign, a source and a channel for a mass mailing campaign.',
+    'author': 'OpenERP SA',
+    'description': """
+Mass Mailing with Crm Marketing
+================================
+
+Link module mass mailing with the marketing mixin from crm.
+        """,
+    'depends': ['crm', 'mass_mailing'],
+    'data': [
+        'mass_mailing.xml',
+    ],
+    'installable': True,
+    'auto_install': True,
+}
diff --git a/addons/crm_mass_mailing/mass_mailing.py b/addons/crm_mass_mailing/mass_mailing.py
new file mode 100644 (file)
index 0000000..6a2e132
--- /dev/null
@@ -0,0 +1,6 @@
+from openerp.osv import osv
+
+
+class MassMailing(osv.Model):
+    _name = 'mail.mass_mailing'
+    _inherit = ['mail.mass_mailing', 'crm.tracking.mixin']
diff --git a/addons/crm_mass_mailing/mass_mailing.xml b/addons/crm_mass_mailing/mass_mailing.xml
new file mode 100644 (file)
index 0000000..a6768e7
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+        <record model="ir.ui.view" id="view_tracking_mass_mailing_form">
+            <field name="name">mail.mass_mailing.inherit.form</field>
+            <field name="model">mail.mass_mailing</field>
+            <field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_form"/>
+
+            <field name="arch" type="xml">
+                <xpath expr="//notebook/page[@string='Options']" position="after">
+                    <page string="Tracking">
+                        <group>
+                            <field name="campaign_id" />
+                            <field name="medium_id" />
+                            <field name="source_id" />
+                        </group>
+                    </page>
+                </xpath>
+            </field>
+        </record>
+    </data>
+</openerp>
+
diff --git a/addons/crm_mass_mailing/mass_mailing_data.xml b/addons/crm_mass_mailing/mass_mailing_data.xml
new file mode 100644 (file)
index 0000000..e69de29
index a6373ff..a9da670 100644 (file)
@@ -12,9 +12,7 @@
                   <field name="function">Reseller</field>
                   <field name="country_id" ref="base.uk"/>
                   <field name="city">Edinburgh</field>
-                  <field name="type_id" ref="crm.type_lead8"/>
                   <field name="categ_ids" eval="[(6, 0, [ref('crm.categ_oppor1')])]"/>
-                  <field name="channel_id" ref="crm.crm_case_channel_email"/>
                   <field name="priority">2</field>
                   <field name="section_id" ref="sales_team.crm_case_section_2"/>
                   <field name="user_id" ref=""/>
index c3334cf..0efeaaa 100644 (file)
@@ -15,9 +15,9 @@
               <field name="email_from"/>
               <field name="phone"/>
               <field name="stage_id" invisible="1"/>
-              <field name="type_id" invisible="1"/>
+              <field name="campaign_id" invisible="1"/>
               <field name="referred" invisible="1"/>
-              <field name="channel_id" invisible="1"/>
+              <field name="medium_id" invisible="1"/>
               <field name="section_id" invisible="context.get('invisible_section', True)" groups="base.group_multi_salesteams"/>
 
               <button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/>
@@ -80,8 +80,8 @@
                    <field name="country_id" invisible="context.get('invisible_country', True)" />
                    <field name="date_action"/>
                    <field name="title_action" />
-                   <field name="channel_id" invisible="1"/>
-                   <field name="type_id" invisible="1"/>
+                   <field name="medium_id" invisible="1"/>
+                   <field name="campaign_id" invisible="1"/>
                    <field name="planned_revenue" sum="Expected Revenues"/>
                    <field name="probability" widget="progressbar" avg="Avg. of Probability"/>
                    <field name="section_id" groups="base.group_multi_salesteams" invisible="context.get('invisible_section', True)" />
                       </group>
                       <group col="2">
                          <separator string="Categorization" colspan="2"/>
-                        <field name="type_id" readonly="1"/>
-                        <field name="channel_id" readonly="1"/>
+                        <field name="campaign_id" readonly="1"/>
+                        <field name="medium_id" readonly="1"/>
                       </group>
                     </group>
                     <separator string="Details" />
index 1e4c784..dff7545 100644 (file)
@@ -12,8 +12,9 @@
                     <attribute name="groups"></attribute>
                 </xpath>
                 <xpath expr="//field[@name='company_id']" position="after">
-                    <field name="type_id"/>
-                    <field name="channel_id" widget="selection"/>
+                    <field name="campaign_id" />
+                    <field name="medium_id"/>
+                    <field name="source_id" />
                 </xpath>
             </field>
         </record>
@@ -25,8 +26,9 @@
             <field name="arch" type="xml">
                 <xpath expr="//group[@name='mailings']" position="before">
                     <group string="Marketing">
-                        <field name="type_id" />
-                        <field name="channel_id" widget="selection"/>
+                        <field name="campaign_id" />
+                        <field name="medium_id" />
+                        <field name="source_id" />
                     </group>
                 </xpath>
             </field>
index 33e66a2..5844bcf 100644 (file)
@@ -144,7 +144,6 @@ class MassMailingCampaign(osv.Model):
             row['replied_ratio'] = 100.0 * row['replied'] / total
         return results
 
-
     _columns = {
         'name': fields.char('Name', required=True),
         'stage_id': fields.many2one('mail.mass_mailing.stage', 'Stage', required=True),
@@ -326,7 +325,6 @@ class MassMailing(osv.Model):
             row['replied_ratio'] = 100.0 * row['replied'] / total
         return results
 
-
     def _get_mailing_model(self, cr, uid, context=None):
         res = []
         for model_name in self.pool:
index c6d7783..8155502 100644 (file)
@@ -22,7 +22,8 @@
 from openerp.osv import osv, fields
 
 class sale_order(osv.osv):
-    _inherit = 'sale.order'
+    _name = "sale.order"
+    _inherit = ['sale.order', 'crm.tracking.mixin']
     _columns = {
         'categ_ids': fields.many2many('crm.case.categ', 'sale_order_category_rel', 'order_id', 'category_id', 'Tags', \
             domain="['|', ('section_id', '=', section_id), ('section_id', '=', False), ('object_id.model', '=', 'crm.lead')]", context="{'object_name': 'crm.lead'}")
index 070b8ef..d49f090 100644 (file)
                 <field name="user_id" position="after">
                     <field name="categ_ids" widget="many2many_tags"/>
                 </field>
+                <field name="origin" position="after">
+                    <field name="campaign_id" />
+                    <field name="medium_id" />
+                    <field name="source_id" />
+                </field>
+
             </field>
         </record>
     </data>
index 96b1edf..8521d83 100644 (file)
@@ -76,7 +76,7 @@ class ir_http(orm.AbstractModel):
             if self.geo_ip_resolver and request.httprequest.remote_addr:
                 record = self.geo_ip_resolver.record_by_addr(request.httprequest.remote_addr) or {}
             request.session['geoip'] = record
-
+            
         if request.website_enabled:
             if func:
                 self._authenticate(func.routing['auth'])
index 9b47140..ce9ea9b 100644 (file)
@@ -62,7 +62,7 @@ class contactus(http.Controller):
             return request.website.render("website.contactus", values)
 
         try:
-            values['channel_id'] = request.registry['ir.model.data'].get_object_reference(request.cr, SUPERUSER_ID, 'crm', 'crm_case_channel_website')[1]
+            values['medium_id'] = request.registry['ir.model.data'].get_object_reference(request.cr, SUPERUSER_ID, 'crm', 'crm_tracking_medium_website')[1]
             values['section_id'] = request.registry['ir.model.data'].xmlid_to_res_id(request.cr, SUPERUSER_ID, 'website.salesteam_website_sales')
         except ValueError:
             pass