[REF]crm_partner_assign: not inheriting anymore of mail.compose.message, portal views, forward to one or multi partner with automatic assignation, only one email with a list of lead instead of one mail/one lead, restructure of views.
bzr revid: dle@openerp.com-20130621100525-1rxkl0ydm5ogxhp2
This commit is contained in:
commit
74ca07dd1c
|
@ -719,7 +719,6 @@ class crm_lead(base_stage, format_address, osv.osv):
|
|||
continue
|
||||
vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context)
|
||||
self.write(cr, uid, [lead.id], vals, context=context)
|
||||
self.message_post(cr, uid, ids, body=_("Lead <b>converted into an Opportunity</b>"), subtype="crm.mt_lead_convert_to_opportunity", context=context)
|
||||
|
||||
if user_ids or section_id:
|
||||
self.allocate_salesman(cr, uid, ids, user_ids, section_id, context=context)
|
||||
|
|
|
@ -163,12 +163,6 @@
|
|||
<field name="default" eval="False"/>
|
||||
<field name="description">Opportunity created</field>
|
||||
</record>
|
||||
<record id="mt_lead_convert_to_opportunity" model="mail.message.subtype">
|
||||
<field name="name">Lead to Opportunity</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Lead converted into an opportunity</field>
|
||||
</record>
|
||||
<record id="mt_lead_stage" model="mail.message.subtype">
|
||||
<field name="name">Stage Changed</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
|
@ -195,13 +189,6 @@
|
|||
<field name="parent_id" eval="ref('mt_lead_create')"/>
|
||||
<field name="relation_field">section_id</field>
|
||||
</record>
|
||||
<record id="mt_salesteam_lead_opportunity" model="mail.message.subtype">
|
||||
<field name="name">Lead to Opportunity</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="res_model">crm.case.section</field>
|
||||
<field name="parent_id" eval="ref('mt_lead_convert_to_opportunity')"/>
|
||||
<field name="relation_field">section_id</field>
|
||||
</record>
|
||||
<record id="mt_salesteam_lead_stage" model="mail.message.subtype">
|
||||
<field name="name">Opportunity Stage Changed</field>
|
||||
<field name="res_model">crm.case.section</field>
|
||||
|
|
|
@ -601,7 +601,9 @@
|
|||
'default_email_to':'{$object.email or \'\'}',
|
||||
'default_use_template': True,
|
||||
'default_template_id': ref('crm.email_template_opportunity_mail'),
|
||||
}"/>
|
||||
}"
|
||||
groups="base.group_sale_salesman"
|
||||
/>
|
||||
|
||||
<!--Update of email_template defined in crm_lead_data, to add ref_ir_act_window
|
||||
allowing to have a well formed email template (context action considered as set). -->
|
||||
|
@ -617,6 +619,7 @@
|
|||
if context.get('active_model') == 'crm.lead' and context.get('active_ids'):
|
||||
self.case_cancel(cr, uid, context['active_ids'], context=context)
|
||||
</field>
|
||||
<field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="ir_mark_as_lost" model="ir.values">
|
||||
|
|
|
@ -102,7 +102,9 @@
|
|||
res_model="crm.lead2opportunity.partner.mass" src_model="crm.lead"
|
||||
view_mode="form" target="new" view_type="form"
|
||||
context="{'mass_convert' : True}"
|
||||
view_id="view_crm_lead2opportunity_partner_mass"/>
|
||||
view_id="view_crm_lead2opportunity_partner_mass"
|
||||
groups="base.group_sale_salesman"
|
||||
/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -45,7 +45,9 @@
|
|||
multi="True"
|
||||
key2="client_action_multi" name="Merge leads/opportunities"
|
||||
res_model="crm.merge.opportunity" src_model="crm.lead"
|
||||
view_mode="form" target="new" view_type="form"/>
|
||||
view_mode="form" target="new" view_type="form"
|
||||
groups="base.group_sale_salesman"
|
||||
/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
##############################################################################
|
||||
|
||||
import crm_partner_assign
|
||||
import crm_lead
|
||||
import wizard
|
||||
import report
|
||||
|
||||
|
|
|
@ -37,17 +37,23 @@ The most appropriate partner can be assigned.
|
|||
You can also use the geolocalization without using the GPS coordinates.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['crm', 'account'],
|
||||
'depends': ['crm', 'account', 'portal'],
|
||||
'demo': ['res_partner_demo.xml'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'res_partner_view.xml',
|
||||
'wizard/crm_forward_to_partner_view.xml',
|
||||
'wizard/crm_channel_interested_view.xml',
|
||||
'crm_lead_view.xml',
|
||||
'crm_partner_assign_data.xml',
|
||||
'crm_portal_view.xml',
|
||||
'portal_data.xml',
|
||||
'report/crm_lead_report_view.xml',
|
||||
'report/crm_partner_report_view.xml',
|
||||
],
|
||||
'js': [
|
||||
'static/src/js/next.js',
|
||||
],
|
||||
'test': ['test/partner_assign.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp.osv import osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
|
||||
class crm_lead(osv.osv):
|
||||
_inherit = 'crm.lead'
|
||||
|
||||
def get_interested_action(self, cr, uid, interested, context=None):
|
||||
try:
|
||||
model, action_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'crm_lead_channel_interested_act')
|
||||
except ValueError:
|
||||
raise osv.except_osv(_('Error!'), _("The CRM Channel Interested Action is missing"))
|
||||
action = self.pool[model].read(cr, uid, action_id, context=context)
|
||||
action_context = eval(action['context'])
|
||||
action_context['interested'] = interested
|
||||
action['context'] = str(action_context)
|
||||
return action
|
||||
|
||||
def case_interested(self, cr, uid, ids, context=None):
|
||||
return self.get_interested_action(cr, uid, True, context=context)
|
||||
|
||||
def case_disinterested(self, cr, uid, ids, context=None):
|
||||
return self.get_interested_action(cr, uid, False, context=context)
|
|
@ -8,27 +8,33 @@
|
|||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//notebook/page[@string='Lead']" position="after">
|
||||
<page string="Assignation">
|
||||
<page string="Assigned Partner" groups="base.group_sale_manager">
|
||||
<group name="partner_assign_group">
|
||||
<group string="Partner Assignation">
|
||||
<field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<label for="date_assign"/>
|
||||
<group string="Partner Assignation" col="3" colspan="1">
|
||||
<label for="partner_latitude" string="Geolocation" />
|
||||
<div class="oe_title">
|
||||
<h3>
|
||||
<span class="oe_grey">( </span>
|
||||
<field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span>
|
||||
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span>
|
||||
<span class="oe_grey">) </span>
|
||||
</h3>
|
||||
</div>
|
||||
<button string="Automatic Assignation" name="action_assign_partner" type="object" colspan="1"
|
||||
class="oe_inline"/>
|
||||
<field name="partner_assigned_id" class="oe_inline" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<div>
|
||||
<field name="date_assign"/>
|
||||
<button string="Forward"
|
||||
<button string="Send Email"
|
||||
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
||||
name="%(crm_lead_forward_to_partner_act)d"
|
||||
icon="terp-mail-forward" type="action"
|
||||
context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
type="action"
|
||||
context="{'default_composition_mode': 'forward','hide_forward_type': 1 , 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
</div>
|
||||
</group>
|
||||
<group string="Geo Assignation">
|
||||
<field name="partner_latitude"/>
|
||||
<field name="partner_longitude"/>
|
||||
<span/>
|
||||
<button string="Geo Assign" name="action_assign_partner" type="object" colspan="1"
|
||||
icon="gtk-apply"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
|
@ -43,7 +49,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -55,41 +61,46 @@
|
|||
<filter string="Team" position="after">
|
||||
<filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
|
||||
</filter>
|
||||
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_lead_geo_assign_form" model="ir.ui.view">
|
||||
<record id="view_crm_lead_geo_assign_form" model="ir.ui.view">
|
||||
<field name="name">crm.lead.lead.geo_assign.inherit</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="inherit_id" ref="crm.crm_case_form_view_leads"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//notebook/page[@string='Extra Info']" position="after">
|
||||
<page string="Assignation">
|
||||
<page string="Assigned Partner" groups="base.group_sale_manager">
|
||||
<group name="partner_assign_group">
|
||||
<group string="Partner Assignation">
|
||||
<field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<label for="date_assign"/>
|
||||
<group string="Partner Assignation" col="3">
|
||||
<label for="partner_latitude" string="Geolocation" />
|
||||
<div>
|
||||
<field name="date_assign"/>
|
||||
<button string="Forward"
|
||||
<h3>
|
||||
<span class="oe_grey">( </span>
|
||||
<field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span>
|
||||
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span>
|
||||
<span class="oe_grey">) </span>
|
||||
</h3>
|
||||
</div>
|
||||
<button string="Automatic Assignation" name="action_assign_partner" type="object" colspan="1"
|
||||
class="oe_inline" />
|
||||
<field name="partner_assigned_id" class="oe_inline" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<div>
|
||||
<button string="Send Email"
|
||||
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
||||
name="%(crm_lead_forward_to_partner_act)d"
|
||||
icon="terp-mail-forward" type="action"
|
||||
context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
type="action"
|
||||
context="{'default_composition_mode': 'forward','hide_forward_type': 1 , 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
</div>
|
||||
</group>
|
||||
<group string="Geo Assignation">
|
||||
<field name="partner_latitude"/>
|
||||
<field name="partner_longitude"/>
|
||||
<span/>
|
||||
<button string="Geo Assign" name="action_assign_partner" type="object" colspan="1"
|
||||
icon="gtk-apply"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
|
@ -104,7 +115,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -116,12 +127,11 @@
|
|||
<filter string="Team" position="after">
|
||||
<filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
|
||||
</filter>
|
||||
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -66,10 +66,13 @@ class res_partner_grade(osv.osv):
|
|||
_columns = {
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'active': fields.boolean('Active'),
|
||||
'name': fields.char('Grade Name', size=32)
|
||||
'name': fields.char('Grade Name', size=32),
|
||||
'partner_weight': fields.integer('Grade Weight',
|
||||
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *args: 1
|
||||
'active': lambda *args: 1,
|
||||
'partner_weight':1
|
||||
}
|
||||
|
||||
class res_partner_activation(osv.osv):
|
||||
|
@ -88,11 +91,11 @@ class res_partner(osv.osv):
|
|||
'partner_latitude': fields.float('Geo Latitude'),
|
||||
'partner_longitude': fields.float('Geo Longitude'),
|
||||
'date_localization': fields.date('Geo Localization Date'),
|
||||
'partner_weight': fields.integer('Weight',
|
||||
'partner_weight': fields.integer('Grade Weight',
|
||||
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
|
||||
'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\
|
||||
'Assigned Opportunities'),
|
||||
'grade_id': fields.many2one('res.partner.grade', 'Partner Level'),
|
||||
'grade_id': fields.many2one('res.partner.grade', 'Grade'),
|
||||
'activation' : fields.many2one('res.partner.activation', 'Activation', select=1),
|
||||
'date_partnership' : fields.date('Partnership Date'),
|
||||
'date_review' : fields.date('Latest Partner Review'),
|
||||
|
@ -101,6 +104,13 @@ class res_partner(osv.osv):
|
|||
_defaults = {
|
||||
'partner_weight': lambda *args: 0
|
||||
}
|
||||
|
||||
def onchange_grade_id(self, cr, uid, ids, grade_id, context=None):
|
||||
res = {'value' :{'partner_weight':0}}
|
||||
if grade_id:
|
||||
partner_grade = self.pool.get('res.partner.grade').browse(cr, uid, grade_id)
|
||||
res['value']['partner_weight'] = partner_grade.partner_weight
|
||||
return res
|
||||
def geo_localize(self, cr, uid, ids, context=None):
|
||||
# Don't pass context to browse()! We need country names in english below
|
||||
for partner in self.browse(cr, uid, ids):
|
||||
|
@ -124,7 +134,7 @@ class crm_lead(osv.osv):
|
|||
_columns = {
|
||||
'partner_latitude': fields.float('Geo Latitude'),
|
||||
'partner_longitude': fields.float('Geo Longitude'),
|
||||
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner', help="Partner this case has been forwarded/assigned to.", select=True),
|
||||
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner',track_visibility='onchange' , help="Partner this case has been forwarded/assigned to.", select=True),
|
||||
'date_assign': fields.date('Assignation Date', help="Last date this case was forwarded/assigned to a partner"),
|
||||
}
|
||||
def _merge_data(self, cr, uid, ids, oldest, fields, context=None):
|
||||
|
@ -134,6 +144,7 @@ class crm_lead(osv.osv):
|
|||
def onchange_assign_id(self, cr, uid, ids, partner_assigned_id, context=None):
|
||||
"""This function updates the "assignation date" automatically, when manually assign a partner in the geo assign tab
|
||||
"""
|
||||
|
||||
if not partner_assigned_id:
|
||||
return {'value':{'date_assign': False}}
|
||||
else:
|
||||
|
@ -261,4 +272,3 @@ class crm_lead(osv.osv):
|
|||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -1,44 +1,59 @@
|
|||
<?xml version="1.0" encoding='UTF-8'?>
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="crm_partner_assign_email_template" model="email.template">
|
||||
<field name="name">Lead forward</field>
|
||||
<field name="email_from"></field>
|
||||
<field name="subject">Fwd: Lead: ${object.name}</field>
|
||||
<field name="email_to"></field>
|
||||
<field name="lang"></field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<record model="crm.case.stage" id="stage_portal_lead_assigned">
|
||||
<field name="name">Assigned</field>
|
||||
<field eval="1" name="case_default"/>
|
||||
<field eval="0" name="probability"/>
|
||||
<field eval="12" name="sequence"/>
|
||||
<field name="type">lead</field>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="stage_portal_lead_recycle">
|
||||
<field name="name">To Recycle</field>
|
||||
<field eval="1" name="case_default"/>
|
||||
<field eval="0" name="probability"/>
|
||||
<field eval="11" name="sequence"/>
|
||||
<field name="type">lead</field>
|
||||
</record>
|
||||
<record id="email_template_lead_forward_mail" model="email.template">
|
||||
<field name="name">Lead Mass Mail</field>
|
||||
<field name="model_id" model="ir.model" search="[('name', '=', 'crm.lead.forward.to.partner')]"></field>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
<field name="email_to">${ctx['partner_id'].email}</field>
|
||||
<field name="email_from">${user.email or ''}</field>
|
||||
<field name="subject">Fwd: Lead: ${ctx['partner_id'].name}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
Hello ${object.partner_assigned_id.name},
|
||||
<p>
|
||||
Here is a lead that might interest you.
|
||||
</p>
|
||||
<p>
|
||||
Please keep me informed about your actions about it so that I can keep an
|
||||
accurate follow-up of it and help you in the sale cycle.
|
||||
</p>
|
||||
<p>
|
||||
Your account manager,<br/>
|
||||
${object.user_id.name},<br/>
|
||||
${object.user_id.email}
|
||||
</p>
|
||||
|
||||
<p>Hello,</p>
|
||||
|
||||
<p>
|
||||
${ctx["mail_body"].replace('\n','<br>') | safe}
|
||||
</p>
|
||||
|
||||
% if ctx["history_mode"] in ('whole'):
|
||||
% for message in object.message_ids:
|
||||
---- Original Message (${message.date or ''}) ----<br/>
|
||||
${message.body | safe}
|
||||
% endfor
|
||||
<p>We have been contacted by those prospects that are in your region. Thus, the following leads have been assigned to ${ctx['partner_id'].name}:</p>
|
||||
|
||||
<ol>
|
||||
% for lead in ctx['partner_leads']:
|
||||
<li><a href="${lead.lead_link}">${lead.lead_id.name or 'Subject Undefined'}</a>, ${lead.lead_id.contact_name or 'Contact Name Undefined'}, ${lead.lead_id.country_id and lead.lead_id.country_id.name or 'Country Undefined' }, ${lead.lead_id.email_from or 'Email Undefined'}, ${lead.lead_id.phone or ''} </li></br>
|
||||
% endfor
|
||||
</ol>
|
||||
|
||||
% if ctx.get('partner_in_portal'):
|
||||
<p>Please connect to your <a href="${object.get_portal_url()}">Partner Portal</a> to get details. On each lead are two buttons on the top left corner that you should press after having contacted the lead: "I'm interested" & "I'm not interested".</p>
|
||||
% else:
|
||||
<p>
|
||||
You do not have yet a portal access to our database. Please contact
|
||||
${ctx['partner_id'].user_id and ctx['partner_id'].user_id.email and 'your account manager %s (%s)' % (ctx['partner_id'].user_id.name,ctx['partner_id'].user_id.email) or 'us'}.
|
||||
</p>
|
||||
% endif
|
||||
% if ctx['history_mode'] == 'latest':
|
||||
---- Original Message (${object.message_ids[0].date or ''}) ----<br/>
|
||||
${object.message_ids[0].body | safe}
|
||||
<p>The lead will be sent to another partner if you do not contact the lead before 20 days.</p>
|
||||
|
||||
<p>Thanks,</p>
|
||||
|
||||
<pre>
|
||||
${ctx['partner_id'].user_id and ctx['partner_id'].user_id.signature or ''}
|
||||
</pre>
|
||||
% if not ctx['partner_id'].user_id:
|
||||
PS: It looks like you do not have an account manager assigned to you, please contact us.
|
||||
% endif
|
||||
]]></field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
|
@ -0,0 +1,209 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<!-- lead views-->
|
||||
<record model="ir.ui.view" id="crm_lead_portal_tree">
|
||||
<field name="name">partner lead</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done');red:stage_id[1]=='Disinterested';black:stage_id[1]=='Interested'">
|
||||
<field name="date_deadline" invisible="1"/>
|
||||
<field name="create_date"/>
|
||||
<field name="name" string="Subject"/>
|
||||
<field name="contact_name"/>
|
||||
<field name="country_id" invisible="context.get('invisible_country', True)" />
|
||||
<field name="email_from"/>
|
||||
<field name="phone"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="type_id" invisible="1"/>
|
||||
<field name="referred" invisible="1"/>
|
||||
<field name="channel_id" invisible="1"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||
|
||||
<button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/>
|
||||
<button string="I'm not interested" name="case_disinterested" icon="gtk-close" type="object"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model= "ir.ui.view" id="crm_lead_portal_form">
|
||||
<field name="name">crm_portal_form</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Leads" version="7.0">
|
||||
<header>
|
||||
<button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/>
|
||||
<button string="I'm not interested" name="case_disinterested" icon="gtk-close" type="object"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="partner_name" string="Partner Name" readonly="1"/>
|
||||
<field name="title" widget="selection" readonly="1"/>
|
||||
<field name="contact_name" readonly="1"/>
|
||||
<field name="function" readonly="1"/>
|
||||
<field name="email_from" readonly="1"/>
|
||||
<field name="phone" readonly="1"/>
|
||||
<field name="fax" readonly="1"/>
|
||||
<field name="mobile" readonly="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="street" readonly="1"/>
|
||||
<field name="street2" readonly="1"/>
|
||||
<field name="zip" readonly="1"/>
|
||||
<field name="city" readonly="1"/>
|
||||
<field name="country_id" readonly="1"/>
|
||||
<field name="state_id" readonly="1"/>
|
||||
</group>
|
||||
<label for="description" colspan="2"/>
|
||||
<field name="description" nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<!-- opportunity views-->
|
||||
<record model="ir.ui.view" id="crm_opportunity_portal_tree">
|
||||
<field name="name">partner lead</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done')">
|
||||
<field name="date_deadline" invisible="1"/>
|
||||
<field name="create_date" groups="base.group_no_one"/>
|
||||
<field name="name" string="Opportunity"/>
|
||||
<field name="partner_id" string="Customer"/>
|
||||
<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="planned_revenue" sum="Expected Revenues"/>
|
||||
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||
<field name="priority" invisible="1"/>
|
||||
<field name="state" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model= "ir.ui.view" id="crm_opportunity_portal_form">
|
||||
<field name="name">crm_portal_form</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Leads" version="7.0">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name" required="1" string="Opportunity"/>
|
||||
<field name="planned_revenue" readonly="1"/>
|
||||
<field name="probability" readonly="1"/>
|
||||
<field name="date_deadline"/>
|
||||
<newline/>
|
||||
<field name="date_action" readonly="1"/>
|
||||
<field name="title_action" readonly="1"/>
|
||||
<field name="priority" string="Priority" readonly="1"/>
|
||||
<newline/>
|
||||
<field name="type" invisible="1" readonly="1"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Opportunity">
|
||||
<group col="2">
|
||||
<separator string="Contact" colspan="2"/>
|
||||
<group col="2">
|
||||
<field name="partner_id" select="1"
|
||||
on_change="onchange_partner_id(partner_id, email_from)" string="Customer"
|
||||
colspan="2" readonly="1"/>
|
||||
<field name="partner_name" string="Customer Name" readonly="1"/>
|
||||
<field domain="[('domain', '=', 'contact')]" name="title" widget="selection" readonly="1"/>
|
||||
<field name="function" readonly="1"/>
|
||||
<field name="street" readonly="1"/>
|
||||
<field name="street2" readonly="1"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
<field name="zip" readonly="1"/>
|
||||
<field name="city" readonly="1"/>
|
||||
<field name="country_id" readonly="1"/>
|
||||
<field name="state_id" readonly="1"/>
|
||||
<field name="phone" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="2">
|
||||
<group col="2">
|
||||
<separator string="Communication" colspan="2"/>
|
||||
<field name="email_from" readonly="1"/>
|
||||
<field name="phone" readonly="1"/>
|
||||
<field name="fax" readonly="1"/>
|
||||
<field name="mobile" readonly="1"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
<separator string="Categorization" colspan="2"/>
|
||||
<field name="type_id" widget="selection" readonly="1"/>
|
||||
<field name="channel_id" widget="selection" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Details" />
|
||||
<field name="description" nolabel="1" colspan="4"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- leads -->
|
||||
|
||||
<record id="action_portal_leads" model="ir.actions.act_window">
|
||||
<field name="name">Leads</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="crm_lead_portal_tree"/>
|
||||
<field name="domain">[('type','like','lead')]</field>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_lead_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="crm_lead_portal_tree"/>
|
||||
<field name="act_window_id" ref="action_portal_leads"/>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_lead_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_lead_portal_form"/>
|
||||
<field name="act_window_id" ref="action_portal_leads"/>
|
||||
</record>
|
||||
|
||||
<!-- opportunities -->
|
||||
|
||||
<record id="action_portal_opportunities" model="ir.actions.act_window">
|
||||
<field name="name">Opportunities</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="crm_opportunity_portal_tree"/>
|
||||
<field name="domain">[('type','like','opportunity')]</field>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_opportunities_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="crm_opportunity_portal_tree"/>
|
||||
<field name="act_window_id" ref="action_portal_opportunities"/>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_opportunities_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_opportunity_portal_form"/>
|
||||
<field name="act_window_id" ref="action_portal_opportunities"/>
|
||||
</record>
|
||||
|
||||
<!--menus-->
|
||||
<menuitem name="Leads & Opportunities" id="portal_leads" parent="portal.portal_menu" sequence="25"/>
|
||||
<menuitem action="action_portal_leads" sequence="0" id="openerp_portal_menu_sales_leads_current" parent="portal_leads"/>
|
||||
<menuitem action="action_portal_opportunities" sequence="1" id="openerp_portal_menu_sales_leads_current1" parent="portal_leads"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Partner and address -->
|
||||
<record id="res_partner_access" model="ir.model.access">
|
||||
<field name="name">openerp.portal.res.partner</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="group_id" ref="portal.group_portal"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_create" eval="0"/>
|
||||
<field name="perm_write" eval="0"/>
|
||||
<field name="perm_unlink" eval="0"/>
|
||||
</record>
|
||||
<record id="res_partner_rule" model="ir.rule">
|
||||
<field name="name">openerp.portal.res.partner</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="groups" eval="[(6,0,[ref('portal.group_portal')])]"/>
|
||||
<field name="domain_force">[('id','child_of',user.commercial_partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="res_partner_grade_access" model="ir.model.access">
|
||||
<field name="name">openerp.portal.res.partner.grade</field>
|
||||
<field name="model_id" ref="crm_partner_assign.model_res_partner_grade"/>
|
||||
<field name="group_id" ref="portal.group_portal"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_create" eval="0"/>
|
||||
<field name="perm_write" eval="0"/>
|
||||
<field name="perm_unlink" eval="0"/>
|
||||
</record>
|
||||
|
||||
<!-- CRM Lead portal -->
|
||||
<record id="assigned_lead_portal_rule_1" model="ir.rule">
|
||||
<field name="name">openerp.portal.crm.lead</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="groups" eval="[(6,0,[ref('portal.group_portal')])]"/>
|
||||
<field name="domain_force">[('partner_assigned_id','child_of',user.commercial_partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="lead_portal_access" model="ir.model.access">
|
||||
<field name="name">openerp.portal.crm.lead</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="group_id" ref="portal.group_portal"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_create" eval="0"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
<field name="perm_unlink" eval="0"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -2,7 +2,7 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<!--Partner Activation -->
|
||||
<!--Partner Activation -->
|
||||
|
||||
<record model="ir.ui.view" id="res_partner_activation_form">
|
||||
<field name="name">openerp_custom.res.partner.activation.form</field>
|
||||
|
@ -33,145 +33,134 @@
|
|||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="res_partner_activation_config_mi" parent="base.menu_config_address_book" action="res_partner_activation_act" groups="base.group_no_one"/>
|
||||
<menuitem id="res_partner_activation_config_mi" parent="base.menu_config_address_book" action="res_partner_activation_act" groups="base.group_no_one" />
|
||||
|
||||
<!--Partner Grade -->
|
||||
<!--Partner Grade -->
|
||||
|
||||
|
||||
<record id="view_partner_grade_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.tree</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Partner Grade">
|
||||
<field name="sequence" invisible="1"/>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_partner_grade_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.form</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Partner Grade" version="7.0">
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="sequence"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="res_partner_grade_action" model="ir.actions.act_window">
|
||||
<field name="name">Partner Grade</field>
|
||||
<field name="res_model">res.partner.grade</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<menuitem action="res_partner_grade_action" id="menu_res_partner_grade_action"
|
||||
groups="base.group_no_one"
|
||||
parent="base.menu_crm_config_lead" />
|
||||
|
||||
<!-- Partner form -->
|
||||
<record id="view_res_partner_filter_assign_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.tree</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="date_review_next"/>
|
||||
<field name="grade_id"/>
|
||||
<field name="activation"/>
|
||||
<record id="view_partner_grade_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.tree</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Partner Grade">
|
||||
<field name="sequence" invisible="1" />
|
||||
<field name="name" />
|
||||
</tree>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_res_partner_filter_assign" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.search</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_res_partner_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<filter string="Salesperson" position="after">
|
||||
<filter string="Activation" context="{'group_by' : 'activation'}" domain="[]" icon="terp-personal" />
|
||||
</filter>
|
||||
<field name="category_id" position="after">
|
||||
<field name="grade_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_partner_geo_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook[last()]" position="inside">
|
||||
<page string="Geo Localization">
|
||||
<group>
|
||||
</record>
|
||||
<record id="view_partner_grade_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.form</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Partner Grade" version="7.0">
|
||||
<group col="4">
|
||||
<group>
|
||||
<separator string="Partner Activation" colspan="2"/>
|
||||
<field name="grade_id" widget="selection"/>
|
||||
<field name="activation" widget="selection"/>
|
||||
<field name="partner_weight"/>
|
||||
<field name="name" />
|
||||
<field name="partner_weight" />
|
||||
<div>
|
||||
<p class="oe_grey">
|
||||
Define a weight to this grade. The weight will be used as default in the partner form to compute the chance for this partner to get leads. For instance, for business purpose, you can define a target revenue for each grade. To give the same chance to each partner to get leads, keep 1 in this field.
|
||||
</p>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<separator string="Partner Review" colspan="2"/>
|
||||
<field name="date_review"/>
|
||||
<field name="date_review_next"/>
|
||||
<field name="date_partnership"/>
|
||||
<field name="sequence" />
|
||||
<field name="active" />
|
||||
</group>
|
||||
</group>
|
||||
<group colspan="2" col="2">
|
||||
<separator string="Geo Localization" colspan="2"/>
|
||||
<button
|
||||
string="Geo Localize"
|
||||
name="geo_localize"
|
||||
colspan="2"
|
||||
icon="gtk-apply"
|
||||
type="object"/>
|
||||
<field name="partner_latitude"/>
|
||||
<field name="partner_longitude"/>
|
||||
<field name="date_localization"/>
|
||||
</group>
|
||||
<newline/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="res_partner_grade_action" model="ir.actions.act_window">
|
||||
<field name="name">Partner Grade</field>
|
||||
<field name="res_model">res.partner.grade</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<menuitem action="res_partner_grade_action" id="menu_res_partner_grade_action" groups="base.group_no_one" parent="base.menu_crm_config_lead" />
|
||||
|
||||
<field name="opportunity_assigned_ids" colspan="4" nolabel="1">
|
||||
<tree string="Assigned Opportunities" colors="blue:state=='pending';gray:state=='cancel'">
|
||||
<field name="create_date"/>
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="stage_id"/>
|
||||
<button name="stage_previous" string="Previous"
|
||||
states="open,pending" type="object" icon="gtk-go-back" />
|
||||
<button name="stage_next" string="Next"
|
||||
states="open,pending" type="object"
|
||||
icon="gtk-go-forward" />
|
||||
<field name="section_id"
|
||||
invisible="context.get('invisible_section', True)"
|
||||
groups="base.group_multi_salesteams"/>
|
||||
<field name="user_id" />
|
||||
<field name="state" />
|
||||
<button name="case_cancel" string="Cancel"
|
||||
states="draft,open,pending" type="object"
|
||||
icon="gtk-cancel" />
|
||||
<button name="case_open" string="Open"
|
||||
states="draft,pending" type="object"
|
||||
icon="gtk-go-forward" />
|
||||
<button name="case_close" string="Close"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-close" />
|
||||
<button string="Convert to Opportunity"
|
||||
name="convert_opportunity"
|
||||
states="draft,open,pending" icon="gtk-index"
|
||||
type="object" attrs="{'invisible':[('type','=','opportunity')]}" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-go-up" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<!-- Partner form -->
|
||||
<record id="view_res_partner_filter_assign_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.tree</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_tree" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="date_review_next" />
|
||||
<field name="grade_id" />
|
||||
<field name="activation" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_res_partner_filter_assign" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.search</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_res_partner_filter" />
|
||||
<field name="arch" type="xml">
|
||||
<filter string="Salesperson" position="after">
|
||||
<filter string="Activation" context="{'group_by' : 'activation'}" domain="[]" icon="terp-personal" />
|
||||
</filter>
|
||||
<field name="category_id" position="after">
|
||||
<field name="grade_id" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_partner_geo_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook[last()]" position="inside">
|
||||
<page string="Forwarded Leads">
|
||||
<group>
|
||||
<group string="Partner Activation">
|
||||
<label for="partner_latitude" string="Geolocalisation" />
|
||||
<div class="oe_title oe_inline">
|
||||
<h3 class="oe_inline">
|
||||
<span class="oe_grey">( </span>
|
||||
<field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline" />
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span>
|
||||
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1" />
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span>
|
||||
<span class="oe_grey">) </span>
|
||||
</h3>
|
||||
<button string="Geolocalize" name="geo_localize" class="oe_inline" type="object" />
|
||||
</div>
|
||||
<field name="grade_id" widget="selection" on_change="onchange_grade_id(grade_id)" />
|
||||
<field name="partner_weight" class="oe_inline" />
|
||||
<div colspan="2">
|
||||
<p class="oe_grey">
|
||||
Higher is the value, higher is the probability for this partner to get more leads.
|
||||
</p>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<separator string="Partner Review" colspan="2" />
|
||||
<field name="date_review" />
|
||||
<field name="date_review_next" />
|
||||
<field name="date_partnership" />
|
||||
</group>
|
||||
<group>
|
||||
</group>
|
||||
</group>
|
||||
<newline />
|
||||
<separator string="Forwarded Leads" colspan="2" />
|
||||
<field name="opportunity_assigned_ids" colspan="4" nolabel="1">
|
||||
<tree string="Assigned Opportunities" colors="blue:state=='pending';gray:state=='cancel'">
|
||||
<field name="name" />
|
||||
<field name="contact_name" />
|
||||
<field name="email_from" />
|
||||
<field name="phone" />
|
||||
<field name="stage_id" />
|
||||
<field name="state" invisible="1" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -5,3 +5,4 @@ access_crm_partner_report,crm.partner.report.assign.all,model_crm_partner_report
|
|||
access_res_partner_grade,res.partner.grade,model_res_partner_grade,base.group_sale_salesman,1,1,1,0
|
||||
access_res_partner_grade_manager,res.partner.grade.manager,model_res_partner_grade,base.group_sale_manager,1,1,1,1
|
||||
"access_partner_activation_manager","res.partner.activation.manager","model_res_partner_activation","base.group_partner_manager",1,1,1,1
|
||||
partner_access_crm_lead,crm.lead,model_crm_lead,portal.group_portal,1,1,0,0
|
|
|
@ -0,0 +1,13 @@
|
|||
openerp.crm_partner_assign = function (instance) {
|
||||
instance.crm_partner_assign = instance.crm_partner_assign || {};
|
||||
instance.crm_partner_assign.next_or_list = function(parent) {
|
||||
var form = parent.inner_widget.views.form.controller;
|
||||
form.dataset.remove_ids([form.dataset.ids[form.dataset.index]]);
|
||||
form.reload();
|
||||
if (!form.dataset.ids.length){
|
||||
parent.inner_widget.switch_mode('list');
|
||||
}
|
||||
parent.do_action({ type: 'ir.actions.act_window_close' });
|
||||
};
|
||||
instance.web.client_actions.add("next_or_list", "instance.crm_partner_assign.next_or_list");
|
||||
}
|
|
@ -20,3 +20,4 @@
|
|||
##############################################################################
|
||||
|
||||
import crm_forward_to_partner
|
||||
import crm_channel_interested
|
|
@ -0,0 +1,76 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
|
||||
class crm_lead_forward_to_partner(osv.TransientModel):
|
||||
""" Forward info history to partners. """
|
||||
_name = 'crm.lead.channel.interested'
|
||||
_columns = {
|
||||
'interested': fields.boolean('Interested by this lead'),
|
||||
'contacted': fields.boolean('Did you contact the lead?', help="The lead has been contacted"),
|
||||
'comment': fields.text('Comment', help="What are the elements that have led to this decision?", required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'interested': lambda self, cr, uid, c: c.get('interested', True),
|
||||
'contacted': False,
|
||||
}
|
||||
|
||||
def action_confirm(self, cr, uid, ids, context=None):
|
||||
wizard = self.browse(cr, uid, ids[0], context=context)
|
||||
if wizard.interested and not wizard.contacted:
|
||||
raise osv.except_osv(_('Error!'), _("You must contact the lead before saying that you are interested"))
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
lead_obj.check_access_rights(cr, uid, 'write')
|
||||
if wizard.interested:
|
||||
message = _('<p>I am interested by this lead.</p>')
|
||||
values = {}
|
||||
else:
|
||||
stage = 'stage_portal_lead_recycle'
|
||||
message = _('<p>I am not interested by this lead. I %scontacted the lead.</p>') % (not wizard.contacted and 'have not ' or '')
|
||||
values = {'partner_assigned_id': False}
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||
partner_ids = self.pool.get('res.partner').search(cr, SUPERUSER_ID, [('id', 'child_of', user.partner_id.commercial_partner_id.id)], context=context)
|
||||
lead_obj.message_unsubscribe(cr, SUPERUSER_ID, context.get('active_ids'), partner_ids, context=None)
|
||||
try:
|
||||
stage_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', stage)[1]
|
||||
except ValueError:
|
||||
stage_id = False
|
||||
if stage_id:
|
||||
values.update({'stage_id': stage_id})
|
||||
if wizard.comment:
|
||||
message += '<p>%s</p>' % wizard.comment
|
||||
lead_obj.message_post(cr, uid, context.get('active_ids'), body=message, context=context)
|
||||
if values:
|
||||
lead_obj.write(cr, SUPERUSER_ID, context.get('active_ids'), values)
|
||||
if wizard.interested:
|
||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids'), context=context):
|
||||
lead_obj.convert_opportunity(cr, SUPERUSER_ID, [lead.id], lead.partner_id and lead.partner_id.id or None, context=None)
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'next_or_list',
|
||||
'params': {
|
||||
},
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="crm_lead_channel_interested_form">
|
||||
<field name="name">crm_lead_channel_interested</field>
|
||||
<field name="model">crm.lead.channel.interested</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Send Mail" version="7.0">
|
||||
<group col="1">
|
||||
<field name="interested" nolabel="1" invisible="1"/>
|
||||
<div>
|
||||
<div invisible="context.get('interested', True)">
|
||||
<label for="comment" string="Why aren't you interested by this lead?" />
|
||||
</div>
|
||||
<div invisible="not context.get('interested', True)">
|
||||
<label for="comment" string="What is the next action? When? What is the expected revenue?" />
|
||||
</div>
|
||||
</div>
|
||||
<field name="comment" nolabel="1"/>
|
||||
<div class="oe_inline">
|
||||
<field name="contacted" nolabel="1" string="Do you have contacted the customer?"/>
|
||||
<label for="contacted" />
|
||||
</div>
|
||||
<p class="oe_grey" invisible="not context.get('interested', True)">
|
||||
Once the lead is processed, it will be in your "Opportunities" menu.
|
||||
</p>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" special="cancel" class="oe_link"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="crm_lead_channel_interested_act">
|
||||
<field name="name">Lead Feedback</field>
|
||||
<field name="res_model">crm.lead.channel.interested</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_lead_channel_interested_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -27,107 +27,182 @@ from openerp.tools.translate import _
|
|||
class crm_lead_forward_to_partner(osv.TransientModel):
|
||||
""" Forward info history to partners. """
|
||||
_name = 'crm.lead.forward.to.partner'
|
||||
_inherit = "mail.compose.message"
|
||||
|
||||
def _get_composition_mode_selection(self, cr, uid, context=None):
|
||||
composition_mode = super(crm_lead_forward_to_partner, self)._get_composition_mode_selection(cr, uid, context=context)
|
||||
composition_mode.append(('forward', 'Forward'))
|
||||
return composition_mode
|
||||
|
||||
_columns = {
|
||||
'partner_ids': fields.many2many('res.partner',
|
||||
'lead_forward_to_partner_res_partner_rel',
|
||||
'wizard_id', 'partner_id', 'Additional contacts'),
|
||||
'attachment_ids': fields.many2many('ir.attachment',
|
||||
'lead_forward_to_partner_attachment_rel',
|
||||
'wizard_id', 'attachment_id', 'Attachments'),
|
||||
'history_mode': fields.selection([('info', 'Internal notes'),
|
||||
('latest', 'Latest email'), ('whole', 'Whole Story')],
|
||||
'Send history', required=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'history_mode': 'info',
|
||||
}
|
||||
def _convert_to_assignation_line(self, cr, uid, lead, partner, context=None):
|
||||
lead_location = []
|
||||
partner_location = []
|
||||
if lead.country_id:
|
||||
lead_location.append(lead.country_id.name)
|
||||
if lead.city:
|
||||
lead_location.append(lead.city)
|
||||
if partner:
|
||||
if partner.country_id:
|
||||
partner_location.append(partner.country_id.name)
|
||||
if partner.city:
|
||||
partner_location.append(partner.city)
|
||||
return {'lead_id': lead.id,
|
||||
'lead_location': ", ".join(lead_location),
|
||||
'partner_assigned_id': partner and partner.id or False,
|
||||
'partner_location': ", ".join(partner_location),
|
||||
'lead_link': self.get_lead_portal_url(cr, uid, lead.id, lead.type, context=context),
|
||||
}
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
# set as comment, perform overrided document-like action that calls get_record_data
|
||||
old_mode = context.get('default_composition_mode', 'forward')
|
||||
context['default_composition_mode'] = 'comment'
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
email_template_obj = self.pool.get('email.template')
|
||||
try:
|
||||
template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail')[1]
|
||||
except ValueError:
|
||||
template_id = False
|
||||
res = super(crm_lead_forward_to_partner, self).default_get(cr, uid, fields, context=context)
|
||||
# back to forward mode
|
||||
context['default_composition_mode'] = old_mode
|
||||
res['composition_mode'] = context['default_composition_mode']
|
||||
active_ids = context.get('active_ids')
|
||||
default_composition_mode = context.get('default_composition_mode')
|
||||
res['assignation_lines'] = []
|
||||
if template_id:
|
||||
res['body'] = email_template_obj.get_email_template(cr, uid, template_id).body_html
|
||||
if active_ids:
|
||||
lead_ids = lead_obj.browse(cr, uid, active_ids, context=context)
|
||||
if default_composition_mode == 'mass_mail':
|
||||
partner_assigned_ids = lead_obj.search_geo_partner(cr, uid, active_ids, context=context)
|
||||
else:
|
||||
partner_assigned_ids = dict((lead.id, lead.partner_assigned_id and lead.partner_assigned_id.id or False) for lead in lead_ids)
|
||||
res['partner_id'] = lead_ids[0].partner_assigned_id.id
|
||||
for lead in lead_ids:
|
||||
partner_id = partner_assigned_ids.get(lead.id) or False
|
||||
partner = False
|
||||
if partner_id:
|
||||
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||
res['assignation_lines'].append(self._convert_to_assignation_line(cr, uid, lead, partner))
|
||||
return res
|
||||
|
||||
def get_record_data(self, cr, uid, model, res_id, context=None):
|
||||
""" Override of mail.compose.message, to add default values coming
|
||||
form the related lead.
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
res = super(crm_lead_forward_to_partner, self).get_record_data(cr, uid, model, res_id, context=context)
|
||||
if model not in ('crm.lead') or not res_id:
|
||||
return res
|
||||
template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'crm_partner_assign_email_template')[1]
|
||||
context['history_mode'] = context.get('history_mode','whole')
|
||||
mail_body_fields = ['partner_id', 'partner_name', 'title', 'function', 'street', 'street2', 'zip', 'city', 'country_id', 'state_id', 'email_from', 'phone', 'fax', 'mobile', 'description']
|
||||
lead = self.pool.get('crm.lead').browse(cr, uid, res_id, context=context)
|
||||
context['mail_body'] = self.pool.get('crm.lead')._mail_body(cr, uid, lead, mail_body_fields, context=context)
|
||||
template = self.generate_email_for_composer(cr, uid, template_id, res_id, context)
|
||||
res['subject'] = template['subject']
|
||||
res['body'] = template['body']
|
||||
return res
|
||||
|
||||
def on_change_history_mode(self, cr, uid, ids, history_mode, model, res_id, context=None):
|
||||
""" Update body when changing history_mode """
|
||||
if context is None:
|
||||
context = {}
|
||||
if model and model == 'crm.lead' and res_id:
|
||||
lead = self.pool[model].browse(cr, uid, res_id, context=context)
|
||||
context['history_mode'] = history_mode
|
||||
body = self.get_record_data(cr, uid, 'crm.lead', res_id, context=context)['body']
|
||||
return {'value': {'body': body}}
|
||||
|
||||
def create(self, cr, uid, values, context=None):
|
||||
""" TDE-HACK: remove 'type' from context, because when viewing an
|
||||
opportunity form view, a default_type is set and propagated
|
||||
to the wizard, that has a not matching type field. """
|
||||
default_type = context.pop('default_type', None)
|
||||
new_id = super(crm_lead_forward_to_partner, self).create(cr, uid, values, context=context)
|
||||
if default_type:
|
||||
context['default_type'] = default_type
|
||||
return new_id
|
||||
|
||||
def action_forward(self, cr, uid, ids, context=None):
|
||||
""" Forward the lead to a partner """
|
||||
if context is None:
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
record = self.browse(cr, uid, ids[0], context=context)
|
||||
email_template_obj = self.pool.get('email.template')
|
||||
try:
|
||||
template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail')[1]
|
||||
except ValueError:
|
||||
raise osv.except_osv(_('Email Template Error'),
|
||||
_('The Forward Email Template is not in the database'))
|
||||
try:
|
||||
portal_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'portal', 'group_portal')[1]
|
||||
except ValueError:
|
||||
raise osv.except_osv(_('Portal Group Error'),
|
||||
_('The Portal group cannot be found'))
|
||||
|
||||
local_context = context.copy()
|
||||
if not (record.forward_type == 'single'):
|
||||
no_email = set()
|
||||
for lead in record.assignation_lines:
|
||||
if lead.partner_assigned_id and not lead.partner_assigned_id.email:
|
||||
no_email.add(lead.partner_assigned_id.name)
|
||||
if no_email:
|
||||
raise osv.except_osv(_('Email Error'),
|
||||
('Set an email address for the partner(s): %s' % ", ".join(no_email)))
|
||||
if record.forward_type == 'single' and not record.partner_id.email:
|
||||
raise osv.except_osv(_('Email Error'),
|
||||
('Set an email address for the partner %s' % record.partner_id.name))
|
||||
|
||||
partners_leads = {}
|
||||
for lead in record.assignation_lines:
|
||||
partner = record.forward_type == 'single' and record.partner_id or lead.partner_assigned_id
|
||||
lead_details = {
|
||||
'lead_link': lead.lead_link,
|
||||
'lead_id': lead.lead_id,
|
||||
}
|
||||
if partner:
|
||||
partner_leads = partners_leads.get(partner.id)
|
||||
if partner_leads:
|
||||
partner_leads['leads'].append(lead_details)
|
||||
else:
|
||||
partners_leads[partner.id] = {'partner': partner, 'leads': [lead_details]}
|
||||
stage_id = False
|
||||
if record.assignation_lines and record.assignation_lines[0].lead_id.type == 'lead':
|
||||
try:
|
||||
stage_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'stage_portal_lead_assigned')[1]
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
for partner_id, partner_leads in partners_leads.items():
|
||||
in_portal = False
|
||||
for contact in (partner.child_ids or [partner]):
|
||||
if contact.user_ids:
|
||||
in_portal = portal_id in [g.id for g in contact.user_ids[0].groups_id]
|
||||
|
||||
local_context['partner_id'] = partner_leads['partner']
|
||||
local_context['partner_leads'] = partner_leads['leads']
|
||||
local_context['partner_in_portal'] = in_portal
|
||||
email_template_obj.send_mail(cr, uid, template_id, ids[0], context=local_context)
|
||||
lead_ids = [lead['lead_id'].id for lead in partner_leads['leads']]
|
||||
values = {'partner_assigned_id': partner_id, 'user_id': partner_leads['partner'].user_id.id}
|
||||
if stage_id:
|
||||
values['stage_id'] = stage_id
|
||||
lead_obj.write(cr, uid, lead_ids, values)
|
||||
self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner_id], context=context)
|
||||
return True
|
||||
|
||||
def get_lead_portal_url(self, cr, uid, lead_id, type, context=None):
|
||||
action = type == 'opportunity' and 'action_portal_opportunities' or 'action_portal_leads'
|
||||
try:
|
||||
action_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', action)[1]
|
||||
except ValueError:
|
||||
action_id = False
|
||||
portal_link = "%s/?db=%s#id=%s&action=%s&view_type=form" % (self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'), cr.dbname, lead_id, action_id)
|
||||
return portal_link
|
||||
|
||||
def get_portal_url(self, cr, uid, ids, context=None):
|
||||
portal_link = "%s/?db=%s" % (self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'), cr.dbname)
|
||||
return portal_link
|
||||
|
||||
_columns = {
|
||||
'forward_type': fields.selection([('single', 'a single partner: manual selection of partner'), ('assigned', "several partners: automatic assignation, using GPS coordinates and partner's grades"), ], 'Forward selected leads to'),
|
||||
'partner_id': fields.many2one('res.partner', 'Forward Leads To'),
|
||||
'assignation_lines': fields.one2many('crm.lead.assignation', 'forward_id', 'Partner Assignation'),
|
||||
'body': fields.html('Contents', help='Automatically sanitized HTML contents'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'forward_type': lambda self, cr, uid, c: c.get('forward_type') or 'single',
|
||||
}
|
||||
|
||||
|
||||
class crm_lead_assignation (osv.TransientModel):
|
||||
_name = 'crm.lead.assignation'
|
||||
_columns = {
|
||||
'forward_id': fields.many2one('crm.lead.forward.to.partner', 'Partner Assignation'),
|
||||
'lead_id': fields.many2one('crm.lead', 'Lead'),
|
||||
'lead_location': fields.char('Lead Location', size=128),
|
||||
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner'),
|
||||
'partner_location': fields.char('Partner Location', size=128),
|
||||
'lead_link': fields.char('Lead Single Links', size=128),
|
||||
}
|
||||
|
||||
def on_change_lead_id(self, cr, uid, ids, lead_id, context=None):
|
||||
if not context:
|
||||
context = {}
|
||||
# TDE FIX in 7.0: force mass_mailing mode; this way, the message will be
|
||||
# send only to partners; default subtype of mass_mailing is indeed False
|
||||
# Chatter will show 'logged a note', but partner_ids (aka, the assigned partner)
|
||||
# will effectively receive the message if present in the composition window
|
||||
self.write(cr, uid, ids, {'composition_mode': 'mass_mail'}, context=context)
|
||||
res = {'type': 'ir.actions.act_window_close'}
|
||||
wizard = self.browse(cr, uid, ids[0], context=context)
|
||||
if wizard.model not in ('crm.lead'):
|
||||
return res
|
||||
if context.get('active_ids') is None:
|
||||
context['active_ids'] = [wizard.res_id]
|
||||
if not lead_id:
|
||||
return {'value': {'lead_location': False}}
|
||||
lead = self.pool.get('crm.lead').browse(cr, uid, lead_id, context=context)
|
||||
lead_location = []
|
||||
if lead.country_id:
|
||||
lead_location.append(lead.country_id.name)
|
||||
if lead.city:
|
||||
lead_location.append(lead.city)
|
||||
return {'value': {'lead_location': ", ".join(lead_location)}}
|
||||
|
||||
lead = self.pool[wizard.model]
|
||||
lead_ids = wizard.res_id and [wizard.res_id] or []
|
||||
def on_change_partner_assigned_id(self, cr, uid, ids, partner_assigned_id, context=None):
|
||||
if not context:
|
||||
context = {}
|
||||
if not partner_assigned_id:
|
||||
return {'value': {'lead_location': False}}
|
||||
partner = self.pool.get('res.partner').browse(cr, uid, partner_assigned_id, context=context)
|
||||
partner_location = []
|
||||
if partner.country_id:
|
||||
partner_location.append(partner.country_id.name)
|
||||
if partner.city:
|
||||
partner_location.append(partner.city)
|
||||
return {'value': {'partner_location': ", ".join(partner_location)}}
|
||||
|
||||
if wizard.composition_mode == 'mass_mail':
|
||||
lead_ids = context and context.get('active_ids', []) or []
|
||||
value = self.default_get(cr, uid, ['body', 'email_to', 'email_cc', 'subject', 'history_mode'], context=context)
|
||||
value.pop('composition_mode')
|
||||
self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner.id for partner in wizard.partner_ids], context=context)
|
||||
self.write(cr, uid, ids, value, context=context)
|
||||
|
||||
return self.send_mail(cr, uid, ids, context=context)
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -1,36 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="ir.ui.view" id="crm_lead_forward_to_partner_form">
|
||||
<field name="name">crm_lead_forward_to_partner</field>
|
||||
<field name="model">crm.lead.forward.to.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Send Mail" version="7.0">
|
||||
<field name="composition_mode" colspan="2" nolabel="1" invisible="1"/>
|
||||
<field name="model" colspan="2" nolabel="1" invisible="1"/>
|
||||
<field name="res_id" colspan="2" nolabel="1" invisible="1"/>
|
||||
<separator string="Forward to Partner" colspan="4"/>
|
||||
<group col="4">
|
||||
<field name="history_mode" colspan="4"
|
||||
on_change="on_change_history_mode(history_mode, model, res_id)"/>
|
||||
<field name="subject" colspan="4"/>
|
||||
<field name="partner_ids" colspan="4" widget="many2many_tags_email"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Body">
|
||||
<field name="body"/>
|
||||
</page>
|
||||
<page string="Attachments">
|
||||
<field name="attachment_ids"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<group>
|
||||
<field name="forward_type" widget="radio" invisible="context.get('hide_forward_type',False)"/>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="partner_id" attrs="{'invisible': [('forward_type', 'in', ['assigned',False])], 'required': [('forward_type', '=', 'single')]}" />
|
||||
</group>
|
||||
<group>
|
||||
</group>
|
||||
</group>
|
||||
<field name="assignation_lines" attrs="{'invisible': [('forward_type', 'in', ['single',False])]}">
|
||||
<tree create="false" editable="bottom">
|
||||
<field name="lead_id" readonly="1" on_change="on_change_lead_id(lead_id)"/>
|
||||
<field name="lead_location" readonly="1"/>
|
||||
<field name="partner_assigned_id" on_change="on_change_partner_assigned_id(partner_assigned_id)"/>
|
||||
<field name="partner_location" readonly="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
<notebook colspan="4" groups="base.group_no_one">
|
||||
<page string="Email Template">
|
||||
<field name="body" readonly="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<footer>
|
||||
<button name="action_forward" string="Send" type="object"
|
||||
class="oe_highlight"/>
|
||||
<button name="action_forward" string="Send" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" special="cancel"
|
||||
class="oe_link"/>
|
||||
<button string="Cancel" special="cancel" class="oe_link"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
@ -45,14 +47,11 @@
|
|||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<act_window id="action_crm_send_mass_forward"
|
||||
multi="True"
|
||||
key2="client_action_multi" name="Mass forward to partner"
|
||||
res_model="crm.lead.forward.to.partner" src_model="crm.lead"
|
||||
view_mode="form" target="new" view_type="form"
|
||||
context="{'default_composition_mode' : 'mass_mail'}"
|
||||
view_id="crm_lead_forward_to_partner_form"
|
||||
/>
|
||||
<act_window id="action_crm_send_mass_forward" multi="True"
|
||||
key2="client_action_multi" name="Forward to Partner" res_model="crm.lead.forward.to.partner"
|
||||
src_model="crm.lead" view_mode="form" target="new" view_type="form"
|
||||
groups="base.group_sale_manager"
|
||||
context="{'default_composition_mode' : 'mass_mail'}" view_id="crm_lead_forward_to_partner_form" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
Loading…
Reference in New Issue