From faba7cd5aab1e9d5be2937be4ae5424b732b7d72 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Tue, 8 Jul 2014 17:33:00 +0200 Subject: [PATCH] [IMP] Crm: Add tracking mixin to manage utm campaign and add this mixin to mass_mailing, crm_lead and sale_order --- addons/crm/__init__.py | 1 + addons/crm/crm.py | 86 +++++++++++++++---- addons/crm/crm_data.xml | 25 +++++- addons/crm/crm_lead.py | 10 +-- addons/crm/crm_lead_data.xml | 33 ------- addons/crm/crm_lead_demo.xml | 46 ---------- addons/crm/crm_lead_view.xml | 9 +- addons/crm/crm_view.xml | 86 ++++++++++++++----- addons/crm/ir_http.py | 13 +++ addons/crm/report/crm_lead_report.py | 10 +-- addons/crm/report/crm_lead_report_view.xml | 10 ++- addons/crm/security/ir.model.access.csv | 12 +-- addons/crm_claim/crm_claim_data.xml | 4 +- addons/crm_helpdesk/crm_helpdesk.py | 2 +- .../report/crm_helpdesk_report.py | 2 +- addons/crm_mass_mailing/__init__.py | 22 +++++ addons/crm_mass_mailing/__openerp__.py | 18 ++++ addons/crm_mass_mailing/mass_mailing.py | 6 ++ addons/crm_mass_mailing/mass_mailing.xml | 23 +++++ addons/crm_mass_mailing/mass_mailing_data.xml | 0 addons/crm_partner_assign/crm_lead_demo.xml | 2 - addons/crm_partner_assign/crm_portal_view.xml | 12 +-- addons/marketing_crm/views/crm.xml | 10 ++- addons/mass_mailing/models/mass_mailing.py | 2 - addons/sale_crm/sale_crm.py | 3 +- addons/sale_crm/sale_crm_view.xml | 6 ++ addons/website/models/ir_http.py | 2 +- addons/website_crm/controllers/main.py | 2 +- 28 files changed, 287 insertions(+), 170 deletions(-) create mode 100644 addons/crm/ir_http.py create mode 100644 addons/crm_mass_mailing/__init__.py create mode 100644 addons/crm_mass_mailing/__openerp__.py create mode 100644 addons/crm_mass_mailing/mass_mailing.py create mode 100644 addons/crm_mass_mailing/mass_mailing.xml create mode 100644 addons/crm_mass_mailing/mass_mailing_data.xml diff --git a/addons/crm/__init__.py b/addons/crm/__init__.py index 872d0390303..1cd494b845f 100644 --- a/addons/crm/__init__.py +++ b/addons/crm/__init__.py @@ -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 diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 88933aaf2b9..20d025fd64d 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -19,13 +19,8 @@ # ############################################################################## -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" diff --git a/addons/crm/crm_data.xml b/addons/crm/crm_data.xml index a5a732747ab..c354e2d10c6 100644 --- a/addons/crm/crm_data.xml +++ b/addons/crm/crm_data.xml @@ -13,18 +13,35 @@ open - + + + + Search engine + + + Mailing Partner + + + Newsletter + + + + Website - + Phone - + Direct - + Email + + Banner Ad + + True diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 7d53c1d51eb..b82f5a4d41f 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -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', diff --git a/addons/crm/crm_lead_data.xml b/addons/crm/crm_lead_data.xml index 9ea859937a2..4d5e1982306 100644 --- a/addons/crm/crm_lead_data.xml +++ b/addons/crm/crm_lead_data.xml @@ -68,39 +68,6 @@ (4, ref('stage_lead7'))]"/> - - - Telesales - - - - Email Campaign - Services - - - - Email Campaign - Products - - - - Twitter Ads - - - - Google Adwords - - - - Banner Ads - - - - Television - - - - Newsletter - - diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml index 8acefd5c610..f5b38f8078b 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -16,9 +16,7 @@ Paris 93190 +33 1 25 54 45 69 - - 1 @@ -51,9 +49,7 @@ Could you please send me the details ? Purchase Manager Bordeaux - - 1 @@ -80,9 +76,7 @@ Could you please send me the details ? New-York - - 2 @@ -101,9 +95,7 @@ Could you please send me the details ? Drury - - 2 @@ -126,9 +118,7 @@ Could you please send me the details ? Franklinville NJ 08322 +1 813 494 5005 - - 2 @@ -153,9 +143,7 @@ Contact: +1 813 494 5005 Consultant Roma - - 2 @@ -171,9 +159,7 @@ Contact: +1 813 494 5005 Journalist Kiev - - 0 @@ -190,9 +176,7 @@ Contact: +1 813 494 5005 Sales Cambridge - - 1 @@ -209,9 +193,7 @@ Contact: +1 813 494 5005 Sales Oxford - - 2 @@ -227,9 +209,7 @@ Contact: +1 813 494 5005 Medical illustrator Sevilla - - 2 @@ -250,9 +230,7 @@ Andrew Functional Consultant - - 2 @@ -268,9 +246,7 @@ Andrew Shenzhen - - 2 @@ -303,9 +279,7 @@ Andrew 1 rue Rockfeller Melbourne - - 1 @@ -328,9 +302,7 @@ Andrew Wavre 1300 - - 2 @@ -350,7 +322,6 @@ Andrew Wavre virginie@agrolait.com - 1 @@ -377,7 +348,6 @@ Andrew Liverpool L25 4RL - 2 @@ -401,9 +371,7 @@ Andrew Rue des Palais 51, bte 33 Brussels - - 1 @@ -429,7 +397,6 @@ Andrew 3661 Station Street - 1 @@ -456,7 +423,6 @@ Andrew Liverpool L25 4RL - 1 @@ -476,7 +442,6 @@ Andrew Epic Technologies john.b@tech.info - 2 @@ -489,9 +454,7 @@ Andrew “Resource Planning” project develpment - - 2 @@ -507,9 +470,7 @@ Andrew Benjamin Flores Nebula Business - - 1 @@ -522,9 +483,7 @@ Andrew - - 0 @@ -540,9 +499,7 @@ Andrew info@mycompany.net Lima - - 0 @@ -564,7 +521,6 @@ Andrew Buenos Aires B7313 - 2 Conf call with technical service @@ -585,9 +541,7 @@ Andrew Wavre 1300 - - 2 diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 62c5e14deed..3f10dcf2099 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -230,9 +230,9 @@ - + - + @@ -513,8 +513,9 @@ - - + + + diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index 167fd26efc3..b0e64042af7 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -26,10 +26,10 @@ - - - crm.case.channel.tree - crm.case.channel + + + crm.tracking.medium.tree + crm.tracking.medium @@ -37,9 +37,9 @@ - - crm.case.channel.form - crm.case.channel + + crm.tracking.medium.form + crm.tracking.medium
@@ -49,26 +49,66 @@
- + Channels - crm.case.channel + crm.tracking.medium form tree,form

Click to define a new channel.

- 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.

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

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

+ Click to define a new source. +

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

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

+
+
+ + @@ -155,9 +195,9 @@ - - crm.case.resource.type.tree - crm.case.resource.type + + crm.tracking.campaign.tree + crm.tracking.campaign @@ -168,9 +208,9 @@ - - crm.case.resource.type.form - crm.case.resource.type + + crm.tracking.campaign.form + crm.tracking.campaign
@@ -183,15 +223,15 @@ - + Campaigns - crm.case.resource.type + crm.tracking.campaign form - + - diff --git a/addons/crm/ir_http.py b/addons/crm/ir_http.py new file mode 100644 index 00000000000..e2bc9be4867 --- /dev/null +++ b/addons/crm/ir_http.py @@ -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() diff --git a/addons/crm/report/crm_lead_report.py b/addons/crm/report/crm_lead_report.py index 7cb355c74d4..32851a753bc 100644 --- a/addons/crm/report/crm_lead_report.py +++ b/addons/crm/report/crm_lead_report.py @@ -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, diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml index 74564d8df92..8882b8a1f81 100644 --- a/addons/crm/report/crm_lead_report_view.xml +++ b/addons/crm/report/crm_lead_report_view.xml @@ -74,13 +74,15 @@ - - + + + - - + + + diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv index 3c6fc05a70d..abfe3ebc903 100644 --- a/addons/crm/security/ir.model.access.csv +++ b/addons/crm/security/ir.model.access.csv @@ -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 access_crm_segmentation,crm.segmentation,model_crm_segmentation,base.group_sale_manager,1,1,1,1 access_crm_segmentation_line,crm.segmentation.line,model_crm_segmentation_line,base.group_sale_manager,1,1,1,1 -access_crm_case_channel_user,crm.case.channel user,model_crm_case_channel,base.group_sale_salesman,1,0,0,0 -access_crm_case_channel_manager,crm.case.channel manager,model_crm_case_channel,base.group_sale_manager,1,1,1,1 +access_crm_tracking_medium_user,crm.tracking.medium user,model_crm_tracking_medium,base.group_sale_salesman,1,0,0,0 +access_crm_tracking_medium_manager,crm.tracking.medium manager,model_crm_tracking_medium,base.group_sale_manager,1,1,1,1 +access_crm_tracking_source_user,crm.tracking.source user,model_crm_tracking_source,base.group_sale_salesman,1,0,0,0 +access_crm_tracking_source_manager,crm.tracking.source manager,model_crm_tracking_source,base.group_sale_manager,1,1,1,1 access_crm_case_categ,crm.case.categ,model_crm_case_categ,base.group_sale_salesman,1,1,1,0 access_crm_lead_manager,crm.lead.manager,model_crm_lead,base.group_sale_manager,1,1,1,1 access_crm_phonecall_manager,crm.phonecall.manager,model_crm_phonecall,base.group_sale_manager,1,1,1,1 @@ -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 access_crm_case_stage,crm.case.stage,model_crm_case_stage,,1,0,0,0 access_crm_case_stage_manager,crm.case.stage,model_crm_case_stage,base.group_sale_manager,1,1,1,1 -access_crm_case_resource_type_user,crm_case_resource_type user,model_crm_case_resource_type,base.group_sale_salesman,1,1,1,0 -access_crm_case_resource_type_manager,crm_case_resource_type manager,model_crm_case_resource_type,base.group_sale_manager,1,1,1,1 +access_crm_tracking_campaign_user,crm_tracking_campaign user,model_crm_tracking_campaign,base.group_sale_salesman,1,1,1,0 +access_crm_tracking_campaign_manager,crm_tracking_campaign manager,model_crm_tracking_campaign,base.group_sale_manager,1,1,1,1 access_crm_phonecall_report_user,crm.phonecall.report.user,model_crm_phonecall_report,base.group_sale_salesman,1,0,0,0 access_crm_phonecall_report_manager,crm.phonecall.report,model_crm_phonecall_report,base.group_sale_manager,1,1,1,1 access_res_partner_manager,res.partner.crm.manager,base.model_res_partner,base.group_sale_manager,1,0,0,0 @@ -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 access_crm_phonecall_partner_manager,crm.phonecall.partner.manager,model_crm_phonecall,base.group_partner_manager,1,1,1,1 access_crm_payment_mode_user,crm.payment.mode,model_crm_payment_mode,base.group_sale_salesman,1,0,0,0 -access_crm_payment_mode,crm.payment.mode,model_crm_payment_mode,base.group_sale_manager,1,1,1,1 +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 diff --git a/addons/crm_claim/crm_claim_data.xml b/addons/crm_claim/crm_claim_data.xml index 86cf988ff45..58ed29f0a0a 100644 --- a/addons/crm_claim/crm_claim_data.xml +++ b/addons/crm_claim/crm_claim_data.xml @@ -28,12 +28,12 @@ Case Category2 --> - + Corrective - + Preventive diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py index 0fdcfeb4210..3800efd7cf4 100644 --- a/addons/crm_helpdesk/crm_helpdesk.py +++ b/addons/crm_helpdesk/crm_helpdesk.py @@ -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'), diff --git a/addons/crm_helpdesk/report/crm_helpdesk_report.py b/addons/crm_helpdesk/report/crm_helpdesk_report.py index 1163db948d2..f7180ef0908 100644 --- a/addons/crm_helpdesk/report/crm_helpdesk_report.py +++ b/addons/crm_helpdesk/report/crm_helpdesk_report.py @@ -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 index 00000000000..983faeb18a6 --- /dev/null +++ b/addons/crm_mass_mailing/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2014-Today OpenERP SA (). +# +# 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 . +# +############################################################################## + +import mass_mailing diff --git a/addons/crm_mass_mailing/__openerp__.py b/addons/crm_mass_mailing/__openerp__.py new file mode 100644 index 00000000000..5e2e320f9f0 --- /dev/null +++ b/addons/crm_mass_mailing/__openerp__.py @@ -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 index 00000000000..6a2e1322136 --- /dev/null +++ b/addons/crm_mass_mailing/mass_mailing.py @@ -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 index 00000000000..a6768e7be84 --- /dev/null +++ b/addons/crm_mass_mailing/mass_mailing.xml @@ -0,0 +1,23 @@ + + + + + mail.mass_mailing.inherit.form + mail.mass_mailing + + + + + + + + + + + + + + + + + diff --git a/addons/crm_mass_mailing/mass_mailing_data.xml b/addons/crm_mass_mailing/mass_mailing_data.xml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/crm_partner_assign/crm_lead_demo.xml b/addons/crm_partner_assign/crm_lead_demo.xml index a6373ff2f8a..a9da6701c8b 100644 --- a/addons/crm_partner_assign/crm_lead_demo.xml +++ b/addons/crm_partner_assign/crm_lead_demo.xml @@ -12,9 +12,7 @@ Reseller Edinburgh - - 2 diff --git a/addons/crm_partner_assign/crm_portal_view.xml b/addons/crm_partner_assign/crm_portal_view.xml index c3334cfb9ee..0efeaaa2ae7 100644 --- a/addons/crm_partner_assign/crm_portal_view.xml +++ b/addons/crm_partner_assign/crm_portal_view.xml @@ -15,9 +15,9 @@ - + - +