diff --git a/addons/crm/crm_opportunity.py b/addons/crm/crm_opportunity.py
index 98ed99df376..84141bdbfc2 100644
--- a/addons/crm/crm_opportunity.py
+++ b/addons/crm/crm_opportunity.py
@@ -46,6 +46,7 @@ class crm_opportunity(osv.osv):
'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128),
'date_closed': fields.datetime('Closed', readonly=True),
'user_id': fields.many2one('res.users', 'Salesman'),
+ 'phone': fields.char("Phone", size=64),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True,
help='The state is set to \'Draft\', when a case is created.\
\nIf the case is in progress the state is set to \'Open\'.\
diff --git a/addons/crm/crm_opportunity_view.xml b/addons/crm/crm_opportunity_view.xml
index 8f71bbf0558..9fa6108e70f 100644
--- a/addons/crm/crm_opportunity_view.xml
+++ b/addons/crm/crm_opportunity_view.xml
@@ -58,7 +58,7 @@
-
+
diff --git a/addons/crm/wizard/crm_lead_wizard.py b/addons/crm/wizard/crm_lead_wizard.py
index c049aa78d71..cfb63acbc38 100644
--- a/addons/crm/wizard/crm_lead_wizard.py
+++ b/addons/crm/wizard/crm_lead_wizard.py
@@ -27,7 +27,18 @@ import ir
import pooler
from tools.translate import _
-class lead2opportunity(wizard.interface):
+class partner_create(wizard.interface):
+
+ case_form = """
+ """
+
+ case_fields = {
+ 'close': {'type':'boolean', 'string':'Close Lead'}
+ }
partner_form = """
"""
partner_fields = {
'action': {'type':'selection',
'selection':[('exist','Link to an existing partner'),('create','Create a new partner')],
- 'string':'Action', 'required':True, 'default': lambda *a:'create'},
+ 'string':'Action', 'required':True, 'default': lambda *a:'exist'},
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
}
+ def _selectPartner(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ case_obj = pool.get('crm.lead')
+ partner_obj = pool.get('res.partner')
+ contact_obj = pool.get('res.partner.address')
+ for case in case_obj.browse(cr, uid, data['ids']):
+ if case.partner_id:
+ raise wizard.except_wizard(_('Warning !'),
+ _('A partner is already defined on this lead.'))
+
+ partner_ids = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
+ if not partner_ids and case.email_from:
+ address_ids = contact_obj.search(cr, uid, [('email', '=', case.email_from)])
+ if address_ids:
+ addresses = contact_obj.browse(cr, uid, address_ids)
+ partner_ids = addresses and [addresses[0].partner_id.id] or False
+
+ partner_id = partner_ids and partner_ids[0] or False
+ return {'partner_id': partner_id}
+
+ def _create_partner(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ case_obj = pool.get('crm.lead')
+ partner_obj = pool.get('res.partner')
+ contact_obj = pool.get('res.partner.address')
+ partner_ids = []
+ partner_id = False
+ contact_id = False
+ for case in case_obj.browse(cr, uid, data['ids']):
+ if data['form']['action'] == 'create':
+ partner_id = partner_obj.create(cr, uid, {
+ 'name': case.partner_name or case.name,
+ 'user_id': case.user_id.id,
+ 'comment': case.description,
+ })
+ contact_id = contact_obj.create(cr, uid, {
+ 'partner_id': partner_id,
+ 'name': case.name,
+ 'phone': case.phone,
+ 'mobile': case.mobile,
+ 'email': case.email_from
+ })
+
+ else:
+ if data['form']['partner_id']:
+ partner = partner_obj.browse(cr,uid,data['form']['partner_id'])
+ partner_id = partner.id
+ contact_id = partner.address and partner.address[0].id
+
+ partner_ids.append(partner_id)
+ vals = {}
+ if partner_id:
+ vals.update({'partner_id': partner_id})
+ if contact_id:
+ vals.update({'partner_address_id': contact_id})
+ case_obj.write(cr, uid, [case.id], vals)
+ return partner_ids
+
+ def _make_partner(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ partner_ids = self._create_partner(cr, uid, data, context)
+ mod_obj = pool.get('ir.model.data')
+ result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
+ res = mod_obj.read(cr, uid, result, ['res_id'])
+ value = {
+ 'domain': "[]",
+ 'view_type': 'form',
+ 'view_mode': 'form,tree',
+ 'res_model': 'res.partner',
+ 'res_id': partner_ids and int(partner_ids[0]) or False,
+ 'view_id': False,
+ 'type': 'ir.actions.act_window',
+ 'search_view_id': res['res_id']
+ }
+ return value
+
+ states = {
+ 'init': {
+ 'actions': [_selectPartner],
+ 'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
+ 'state' : [('end', 'Cancel', 'gtk-cancel'),('create_partner', 'Create Partner', 'gtk-go-forward')]}
+ },
+ 'create_partner': {
+ 'actions': [],
+ 'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
+ 'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
+ },
+ 'create': {
+ 'actions': [],
+ 'result': {'type': 'action', 'action': _make_partner, 'state': 'end'}
+ }
+ }
+
+partner_create('crm.lead.partner_create')
+
+
+class lead2opportunity(partner_create):
+
case_form = """
"""
-
- case_fields = {
- 'close': {'type':'boolean', 'string':'Close Lead'}
- }
-
- def _selectPartner(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- case_obj = pool.get('crm.lead')
- for case in case_obj.browse(cr, uid, data['ids']):
- if case.partner_id:
- raise wizard.except_wizard(_('Warning !'),
- _('A partner is already defined on this lead.'))
- return {}
-
- def _makeOrder(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod_obj = pool.get('ir.model.data')
- result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
- res = mod_obj.read(cr, uid, result, ['res_id'])
- case_obj = pool.get('crm.lead')
- partner_obj = pool.get('res.partner')
- contact_obj = pool.get('res.partner.address')
- for case in case_obj.browse(cr, uid, data['ids']):
- partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
- if partner_id:
- raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
- else:
- partner_id = partner_obj.create(cr, uid, {
- 'name': case.partner_name or case.name,
- 'user_id': case.user_id.id,
- 'comment': case.description,
- })
- contact_id = contact_obj.create(cr, uid, {
- 'partner_id': partner_id,
- 'name': case.partner_name2,
- 'phone': case.partner_phone,
- 'mobile': case.partner_mobile,
- 'email': case.email_from
- })
-
-
- case_obj.write(cr, uid, data['ids'], {
- 'partner_id': partner_id,
- 'partner_address_id': contact_id
- })
- if data['form']['close']:
- case_obj.case_close(cr, uid, data['ids'])
-
- value = {
- 'domain': "[]",
- 'view_type': 'form',
- 'view_mode': 'form,tree',
- 'res_model': 'res.partner',
- 'res_id': int(partner_id),
- 'view_id': False,
- 'type': 'ir.actions.act_window',
- 'search_view_id': res['res_id']
- }
- return value
-
- states = {
- 'init': {
- 'actions': [_selectPartner],
- 'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
- 'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Partner', 'gtk-go-forward')]}
- },
- 'confirm': {
- 'actions': [],
- 'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
- }
- }
-
-partner_create('crm.lead.partner_create')
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm/wizard/crm_phonecall_wizard.py b/addons/crm/wizard/crm_phonecall_wizard.py
index b2d717a553a..550417561d7 100644
--- a/addons/crm/wizard/crm_phonecall_wizard.py
+++ b/addons/crm/wizard/crm_phonecall_wizard.py
@@ -27,26 +27,124 @@ import ir
import pooler
from tools.translate import _
-class phonecall2opportunity(wizard.interface):
+class partner_create(wizard.interface):
- partner_form = """
+ case_form = """
"""
+
+ case_fields = {
+ 'close': {'type':'boolean', 'string':'Close Phonecall'}
+ }
+
+ partner_form = """
+ """
partner_fields = {
'action': {'type':'selection',
'selection':[('exist','Link to an existing partner'),('create','Create a new partner')],
- 'string':'Action', 'required':True, 'default': lambda *a:'create'},
+ 'string':'Action', 'required':True, 'default': lambda *a:'exist'},
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
}
+ def _selectPartner(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ case_obj = pool.get('crm.phonecall')
+ for case in case_obj.browse(cr, uid, data['ids']):
+ if case.partner_id:
+ raise wizard.except_wizard(_('Warning !'),
+ _('A partner is already defined on this phonecall.'))
+ return {}
+
+ def _create_partner(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ case_obj = pool.get('crm.phonecall')
+ partner_obj = pool.get('res.partner')
+ contact_obj = pool.get('res.partner.address')
+ partner_ids = []
+ partner_id = False
+ contact_id = False
+ for case in case_obj.browse(cr, uid, data['ids']):
+ if data['form']['action'] == 'create':
+ partner_id = partner_obj.create(cr, uid, {
+ 'name': case.partner_name or case.name,
+ 'user_id': case.user_id.id,
+ 'comment': case.description,
+ })
+ contact_id = contact_obj.create(cr, uid, {
+ 'partner_id': partner_id,
+ 'name': case.name,
+ 'phone': case.phone,
+ 'mobile': case.mobile,
+ 'email': case.email_from
+ })
+
+ else:
+ if data['form']['partner_id']:
+ partner = partner_obj.browse(cr,uid,data['form']['partner_id'])
+ partner_id = partner.id
+ contact_id = partner.address and partner.address[0].id
+
+ partner_ids.append(partner_id)
+ vals = {}
+ if partner_id:
+ vals.update({'partner_id': partner_id})
+ if contact_id:
+ vals.update({'partner_address_id': contact_id})
+ case_obj.write(cr, uid, [case.id], vals)
+ return partner_ids
+
+ def _make_partner(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ partner_ids = self._create_partner(cr, uid, data, context)
+ mod_obj = pool.get('ir.model.data')
+ result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
+ res = mod_obj.read(cr, uid, result, ['res_id'])
+ value = {
+ 'domain': "[]",
+ 'view_type': 'form',
+ 'view_mode': 'form,tree',
+ 'res_model': 'res.partner',
+ 'res_id': partner_ids and int(partner_ids[0]) or False,
+ 'view_id': False,
+ 'type': 'ir.actions.act_window',
+ 'search_view_id': res['res_id']
+ }
+ return value
+
+ states = {
+ 'init': {
+ 'actions': [_selectPartner],
+ 'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
+ 'state' : [('end', 'Cancel', 'gtk-cancel'),('create_partner', 'Create Partner', 'gtk-go-forward')]}
+ },
+ 'create_partner': {
+ 'actions': [],
+ 'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
+ 'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
+ },
+ 'create': {
+ 'actions': [],
+ 'result': {'type': 'action', 'action': _make_partner, 'state': 'end'}
+ }
+ }
+
+
+partner_create('crm.phonecall.partner_create')
+
+class phonecall2opportunity(partner_create):
+
case_form = """
"""
-
- case_fields = {
- 'close': {'type':'boolean', 'string':'Close Phonecall'}
- }
-
- def _selectPartner(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- case_obj = pool.get('crm.phonecall')
- for case in case_obj.browse(cr, uid, data['ids']):
- if case.partner_id:
- raise wizard.except_wizard(_('Warning !'),
- _('A partner is already defined on this phonecall.'))
- return {}
-
- def _makeOrder(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod_obj = pool.get('ir.model.data')
- result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
- res = mod_obj.read(cr, uid, result, ['res_id'])
- case_obj = pool.get('crm.phonecall')
- partner_obj = pool.get('res.partner')
- contact_obj = pool.get('res.partner.address')
- for case in case_obj.browse(cr, uid, data['ids']):
- partner_id = partner_obj.search(cr, uid, [('name', '=', case.name)])
- if partner_id:
- raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
- else:
- partner_id = partner_obj.create(cr, uid, {
- 'name': case.name,
- 'user_id': case.user_id.id,
- 'comment': case.description,
- })
- contact_id = contact_obj.create(cr, uid, {
- 'partner_id': partner_id,
- 'name': case.name,
- 'phone': case.partner_phone,
- 'mobile': case.partner_mobile,
- 'email': case.email_from
- })
-
-
- case_obj.write(cr, uid, data['ids'], {
- 'partner_id': partner_id,
- 'partner_address_id': contact_id
- })
- if data['form']['close']:
- case_obj.case_close(cr, uid, data['ids'])
-
- value = {
- 'domain': "[]",
- 'view_type': 'form',
- 'view_mode': 'form,tree',
- 'res_model': 'res.partner',
- 'res_id': int(partner_id),
- 'view_id': False,
- 'type': 'ir.actions.act_window',
- 'search_view_id': res['res_id']
- }
- return value
-
- states = {
- 'init': {
- 'actions': [_selectPartner],
- 'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
- 'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Partner', 'gtk-go-forward')]}
- },
- 'confirm': {
- 'actions': [],
- 'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
- }
- }
-
-partner_create('crm.phonecall.partner_create')
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: