[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:
Olivier Dony 2010-07-14 17:17:13 +02:00
parent 202db5c609
commit 7ae4ed20ea
9 changed files with 71 additions and 67 deletions

View File

@ -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 = {

View File

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

View File

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

View File

@ -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()

View File

@ -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"/>

View File

@ -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.'))

View File

@ -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,

View File

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

View File

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