import crm_lead
import sales_team
import calendar_event
+import ir_http
import crm_phonecall
import report
import wizard
#
##############################################################################
-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'),
('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 = {
'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
'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"
<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>
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',
_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': {
'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',
(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">
<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"/>
<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"/>
<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"/>
<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"/>
<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=""/>
<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=""/>
<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"/>
<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"/>
<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"/>
<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"/>
<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=""/>
<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=""/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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"/>
<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>
<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"/>
<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"/>
<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"/>
</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"/>
--- /dev/null
+# -*- 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()
_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"),
'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),
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,
<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/>
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
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
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
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>
'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'),
'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')]"),
--- /dev/null
+# -*- 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
--- /dev/null
+{
+ '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,
+}
--- /dev/null
+from openerp.osv import osv
+
+
+class MassMailing(osv.Model):
+ _name = 'mail.mass_mailing'
+ _inherit = ['mail.mass_mailing', 'crm.tracking.mixin']
--- /dev/null
+<?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>
+
<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=""/>
<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"/>
<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" />
<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>
<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>
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),
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:
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'}")
<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>
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'])
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