[REF/IMP] crm, partner_geo_assign: moved basic partner assignation inside crm, added m2m with assigned opportunities to partner history, changed forward-to-partner to use same visual wizard everywhere
bzr revid: odo@openerp.com-20100714151713-c2hwebfuvcb2s5qd
This commit is contained in:
parent
202db5c609
commit
7ae4ed20ea
|
@ -154,6 +154,8 @@ and users"),
|
||||||
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
|
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
|
||||||
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True),('model','=',_name)], readonly=True),
|
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True),('model','=',_name)], readonly=True),
|
||||||
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False),('model','=',_name)], readonly=True),
|
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False),('model','=',_name)], readonly=True),
|
||||||
|
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner', 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"),
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
|
|
@ -193,11 +193,10 @@
|
||||||
name="%(crm.action_crm_send_mail)d"
|
name="%(crm.action_crm_send_mail)d"
|
||||||
context="{'mail':'new', 'model': 'crm.lead'}"
|
context="{'mail':'new', 'model': 'crm.lead'}"
|
||||||
icon="gtk-go-forward" type="action" />
|
icon="gtk-go-forward" type="action" />
|
||||||
<button colspan="2" string="Forward to Partner"
|
<button colspan="2" string="Forward"
|
||||||
name="%(crm_lead_forward_to_partner_act)d"
|
name="%(crm_lead_forward_to_partner_act)d"
|
||||||
icon="gtk-go-forward" type="action" />
|
icon="gtk-go-forward" type="action" />
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
</notebook>
|
</notebook>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -190,6 +190,21 @@
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
|
<page string="Assignation" groups="base.group_extended">
|
||||||
|
<group name="partner_assign_group" col="5" colspan="4">
|
||||||
|
<separator string="Partner Assignation" colspan="5"/>
|
||||||
|
<field name="partner_assigned_id"/>
|
||||||
|
<field name="date_assign"/>
|
||||||
|
<group colspan="1" col="1">
|
||||||
|
<button string="Forward"
|
||||||
|
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
||||||
|
name="%(crm_lead_forward_to_partner_act)d"
|
||||||
|
icon="gtk-go-forward" type="action"
|
||||||
|
context="{'default_name': 'partner', 'default_partner_id': partner_assigned_id}"
|
||||||
|
/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -26,11 +26,13 @@ class res_partner(osv.osv):
|
||||||
_inherit = 'res.partner'
|
_inherit = 'res.partner'
|
||||||
_columns = {
|
_columns = {
|
||||||
'opportunity_ids': fields.one2many('crm.lead', 'partner_id',\
|
'opportunity_ids': fields.one2many('crm.lead', 'partner_id',\
|
||||||
'Leads and Opportunities'),
|
'Leads and Opportunities'),
|
||||||
'meeting_ids': fields.one2many('crm.meeting', 'partner_id',\
|
'meeting_ids': fields.one2many('crm.meeting', 'partner_id',\
|
||||||
'Meetings'),
|
'Meetings'),
|
||||||
'phonecall_ids': fields.one2many('crm.phonecall', 'partner_id',\
|
'phonecall_ids': fields.one2many('crm.phonecall', 'partner_id',\
|
||||||
'Phonecalls'),
|
'Phonecalls'),
|
||||||
|
'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\
|
||||||
|
'Assigned Opportunities'),
|
||||||
}
|
}
|
||||||
res_partner()
|
res_partner()
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,39 @@
|
||||||
icon="gtk-cancel" />
|
icon="gtk-cancel" />
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="opportunity_assigned_ids" colspan="4" nolabel="1">
|
||||||
|
<tree string="Assigned Opportunities" colors="blue:state=='pending';grey: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)" />
|
||||||
|
<field name="user_id" />
|
||||||
|
<field name="state" />
|
||||||
|
<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" />
|
||||||
|
<button name="case_escalate" string="Escalate"
|
||||||
|
states="open,draft,pending" type="object"
|
||||||
|
icon="gtk-go-up" />
|
||||||
|
<button name="case_cancel" string="Cancel"
|
||||||
|
states="draft,open,pending" type="object"
|
||||||
|
icon="gtk-cancel" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
<field name="meeting_ids" colspan="4" nolabel="1" >
|
<field name="meeting_ids" colspan="4" nolabel="1" >
|
||||||
<tree string="Meetings" colors="gray:state in ('draft', 'cancel','done','pending')">
|
<tree string="Meetings" colors="gray:state in ('draft', 'cancel','done','pending')">
|
||||||
<field name="user_id" string="Responsible"/>
|
<field name="user_id" string="Responsible"/>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
import itertools
|
import itertools
|
||||||
|
import time
|
||||||
|
|
||||||
from osv import osv, fields
|
from osv import osv, fields
|
||||||
import tools
|
import tools
|
||||||
|
@ -218,6 +219,10 @@ class crm_lead_forward_to_partner(osv.osv_memory):
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
case_pool.history(cr, uid, [case], _('Forward'), history=True, email=this.email_to, subject=this.subject, details=body, email_from=email_from, attach=attach)
|
case_pool.history(cr, uid, [case], _('Forward'), history=True, email=this.email_to, subject=this.subject, details=body, email_from=email_from, attach=attach)
|
||||||
|
to_write = {'date_assign': time.strftime('%Y-%m-%d')}
|
||||||
|
if (this.name == 'partner' and this.partner_id):
|
||||||
|
to_write['partner_assigned_id'] = this.partner_id.id
|
||||||
|
case_pool.write(cr, uid, case.id, to_write)
|
||||||
else:
|
else:
|
||||||
raise osv.except_osv(_('Error!'), _('Unable to send mail. Please check SMTP is configured properly.'))
|
raise osv.except_osv(_('Error!'), _('Unable to send mail. Please check SMTP is configured properly.'))
|
||||||
|
|
||||||
|
|
|
@ -26,12 +26,14 @@
|
||||||
'category': 'Generic Modules/Production',
|
'category': 'Generic Modules/Production',
|
||||||
'description': """
|
'description': """
|
||||||
This is the module used by OpenERP SA to redirect customers to his partners,
|
This is the module used by OpenERP SA to redirect customers to his partners,
|
||||||
based on geolocalisation.
|
based on geolocalization.
|
||||||
""",
|
""",
|
||||||
'author': 'OpenERP SA',
|
'author': 'OpenERP SA',
|
||||||
'depends': ['crm'],
|
'depends': ['crm'],
|
||||||
'update_xml': ['res_partner_view.xml'],
|
'data': [
|
||||||
'demo_xml': [],
|
'res_partner_view.xml',
|
||||||
|
'crm_lead_view.xml',
|
||||||
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'active': False,
|
'active': False,
|
||||||
'certificate': False,
|
'certificate': False,
|
||||||
|
|
|
@ -39,14 +39,14 @@ def geo_find(addr):
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
raise osv.except_osv(_('Network error'),
|
raise osv.except_osv(_('Network error'),
|
||||||
_('Could not contact geolocation servers, please make sure you have a working internet connection (%s)') % e)
|
_('Could not contact geolocation servers, please make sure you have a working internet connection (%s)') % e)
|
||||||
|
|
||||||
|
|
||||||
class res_partner(osv.osv):
|
class res_partner(osv.osv):
|
||||||
_inherit = "res.partner"
|
_inherit = "res.partner"
|
||||||
_columns = {
|
_columns = {
|
||||||
'partner_latitude': fields.float('Geo Latitude'),
|
'partner_latitude': fields.float('Geo Latitude'),
|
||||||
'partner_longitude': fields.float('Geo Longitude'),
|
'partner_longitude': fields.float('Geo Longitude'),
|
||||||
'date_assign': fields.date('Assignation Date'),
|
'date_localization': fields.date('Geo Localization Date'),
|
||||||
'partner_weight': fields.integer('Weight',
|
'partner_weight': fields.integer('Weight',
|
||||||
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
|
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ class res_partner(osv.osv):
|
||||||
self.write(cr, uid, [partner.id], {
|
self.write(cr, uid, [partner.id], {
|
||||||
'partner_latitude': result[0],
|
'partner_latitude': result[0],
|
||||||
'partner_longitude': result[1],
|
'partner_longitude': result[1],
|
||||||
'date_assign': time.strftime('%Y-%m-%d')
|
'date_localization': time.strftime('%Y-%m-%d')
|
||||||
}, context=context)
|
}, context=context)
|
||||||
return True
|
return True
|
||||||
res_partner()
|
res_partner()
|
||||||
|
@ -74,33 +74,7 @@ class crm_lead(osv.osv):
|
||||||
_columns = {
|
_columns = {
|
||||||
'partner_latitude': fields.float('Geo Latitude'),
|
'partner_latitude': fields.float('Geo Latitude'),
|
||||||
'partner_longitude': fields.float('Geo Longitude'),
|
'partner_longitude': fields.float('Geo Longitude'),
|
||||||
'partner_assigned_id': fields.many2one('res.partner','Assigned Partner'),
|
|
||||||
'date_assign': fields.date('Assignation Date')
|
|
||||||
}
|
}
|
||||||
def forward_to_partner(self, cr, uid, ids, context=None):
|
|
||||||
fobj = self.pool.get('crm.lead.forward.to.partner')
|
|
||||||
for lead in self.browse(cr, uid, ids, context=context):
|
|
||||||
context = {'active_id': lead.id, 'active_ids': [lead.id], 'active_model': 'crm.lead'}
|
|
||||||
if lead.partner_assigned_id:
|
|
||||||
email = False
|
|
||||||
if lead.partner_assigned_id.address:
|
|
||||||
email = lead.partner_assigned_id.address[0].email
|
|
||||||
if not email:
|
|
||||||
raise osv.except_osv(_('Error !'), _('No email on the partner assigned to this opportunity'))
|
|
||||||
|
|
||||||
values = fobj.default_get(cr, uid, ['name', 'email_from'], context=context)
|
|
||||||
if not values.get('email_from'):
|
|
||||||
raise osv.except_osv(_('Error !'), _('Please set an email address in your user preferences'))
|
|
||||||
values.update({
|
|
||||||
'history': 'whole',
|
|
||||||
'email_to': email,
|
|
||||||
'message': fobj._get_case_history(cr, uid, 'whole', lead.id, context) or False,
|
|
||||||
})
|
|
||||||
forward = fobj.create(cr, uid, values, context)
|
|
||||||
fobj.action_forward(cr, uid, [forward], context)
|
|
||||||
else:
|
|
||||||
raise osv.except_osv(_('Error !'), _('No partner assigned to this opportunity'))
|
|
||||||
return True
|
|
||||||
|
|
||||||
def assign_partner(self, cr, uid, ids, context=None):
|
def assign_partner(self, cr, uid, ids, context=None):
|
||||||
ok = False
|
ok = False
|
||||||
|
|
|
@ -1,33 +1,6 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<openerp>
|
<openerp>
|
||||||
<data>
|
<data>
|
||||||
<record id="view_crm_opportunity_geo_assign_form" model="ir.ui.view">
|
|
||||||
<field name="name">crm.lead.geo_assign.inherit</field>
|
|
||||||
<field name="model">crm.lead</field>
|
|
||||||
<field name="type">form</field>
|
|
||||||
<field name="inherit_id" ref="crm.crm_case_form_view_oppor"/>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//notebook[last()]" position="inside">
|
|
||||||
<page string="Geo Assignation">
|
|
||||||
<field name="partner_assigned_id"/>
|
|
||||||
<newline/>
|
|
||||||
<field name="partner_latitude"/>
|
|
||||||
<field name="partner_longitude"/>
|
|
||||||
<field name="date_assign"/>
|
|
||||||
<label string="" colspan="1"/>
|
|
||||||
<group colspan="1" col="2">
|
|
||||||
<button string="Geo Assign" name="assign_partner" type="object" colspan="1"
|
|
||||||
icon="gtk-apply"/>
|
|
||||||
<button string="Forward"
|
|
||||||
name="forward_to_partner" attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
|
||||||
icon="gtk-apply"
|
|
||||||
type="object"/>
|
|
||||||
</group>
|
|
||||||
</page>
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_crm_partner_geo_form" model="ir.ui.view">
|
<record id="view_crm_partner_geo_form" model="ir.ui.view">
|
||||||
<field name="name">res.partner.geo.inherit</field>
|
<field name="name">res.partner.geo.inherit</field>
|
||||||
<field name="model">res.partner</field>
|
<field name="model">res.partner</field>
|
||||||
|
@ -35,7 +8,7 @@
|
||||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//notebook[last()]" position="inside">
|
<xpath expr="//notebook[last()]" position="inside">
|
||||||
<page string="Geo Location">
|
<page string="Geo Localization">
|
||||||
<field name="partner_weight"/>
|
<field name="partner_weight"/>
|
||||||
<label string="" colspan="1"/>
|
<label string="" colspan="1"/>
|
||||||
<button
|
<button
|
||||||
|
@ -46,11 +19,10 @@
|
||||||
<newline/>
|
<newline/>
|
||||||
<field name="partner_latitude"/>
|
<field name="partner_latitude"/>
|
||||||
<field name="partner_longitude"/>
|
<field name="partner_longitude"/>
|
||||||
<field name="date_assign"/>
|
<field name="date_localization"/>
|
||||||
</page>
|
</page>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
Loading…
Reference in New Issue