diff --git a/addons/import_sugarcrm/__openerp__.py b/addons/import_sugarcrm/__openerp__.py
index 36d58ddb46c..15871bb6101 100644
--- a/addons/import_sugarcrm/__openerp__.py
+++ b/addons/import_sugarcrm/__openerp__.py
@@ -27,7 +27,7 @@
"Contacts", "Employees", Meetings, Phonecalls, Emails, and Project, Project Tasks Data into OpenERP Module.""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
- 'depends': ['project_timesheet', 'project_issue'],
+ 'depends': ['project_timesheet', 'project_issue', 'document'],
'init_xml': [],
'update_xml': ["wizard/sugarcrm_login_view.xml",
"wizard/import_message_view.xml",
diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py
index fcaedaaa4c5..a4c82f4c6bb 100644
--- a/addons/import_sugarcrm/import_sugarcrm.py
+++ b/addons/import_sugarcrm/import_sugarcrm.py
@@ -401,30 +401,93 @@ def get_account(sugar_obj, cr, uid, val, context=None):
context = {}
partner_id = False
partner_address_id = False
+ partner_phone = False
+ partner_mobile = False
model_obj = sugar_obj.pool.get('ir.model.data')
address_obj = sugar_obj.pool.get('res.partner.address')
+ crm_obj = sugar_obj.pool.get('crm.lead')
+ project_obj = sugar_obj.pool.get('project.project')
+ issue_obj = sugar_obj.pool.get('project.issue')
if val.get('parent_type') == 'Accounts':
model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'res.partner')])
if model_ids:
model = model_obj.browse(cr, uid, model_ids)[0]
partner_id = model.res_id
address_ids = address_obj.search(cr, uid, [('partner_id', '=', partner_id)])
- partner_address_id = address_ids and address_ids[0]
+ if address_ids:
+ address_id = address_obj.browse(cr, uid, address_ids[0])
+ partner_address_id = address_id.id
+ partner_phone = address_id.phone
+ partner_mobile = address_id.mobile
if val.get('parent_type') == 'Contacts':
model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'res.partner.address')])
for model in model_obj.browse(cr, uid, model_ids):
partner_address_id = model.res_id
address_id = address_obj.browse(cr, uid, partner_address_id)
+ partner_phone = address_id.phone
+ partner_mobile = address_id.mobile
partner_id = address_id and address_id.partner_id or False
- return partner_id, partner_address_id
+
+ if val.get('parent_type') == 'Opportunities':
+ model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'crm.lead')])
+ for model in model_obj.browse(cr, uid, model_ids):
+ opportunity_id = model.res_id
+ opportunity_id = crm_obj.browse(cr, uid, opportunity_id)
+ partner_id = opportunity_id.partner_id.id
+ partner_address_id = opportunity_id.partner_address_id.id
+ partner_phone = opportunity_id.partner_address_id.phone
+ partner_mobile = opportunity_id.partner_address_id.mobile
+
+ if val.get('parent_type') == 'Project':
+ model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'project.project')])
+ for model in model_obj.browse(cr, uid, model_ids):
+ proj_ids = model.res_id
+ proj_id = project_obj.browse(cr, uid, proj_ids)
+ partner_id = proj_id.partner_id.id
+ partner_address_id = proj_id.partner_address_id.id
+ partner_phone = proj_id.partner_address_id.phone
+ partner_mobile = proj_id.partner_address_id.mobile
+
+ if val.get('parent_type') == 'Bugs':
+ model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'project.issue')])
+ for model in model_obj.browse(cr, uid, model_ids):
+ issue_ids = model.res_id
+ issue_id = issue_obj.browse(cr, uid, issue_ids)
+ partner_id = issue_id.partner_id.id
+ partner_address_id = issue_id.partner_address_id.id
+ partner_phone = issue_id.partner_address_id.phone
+ partner_mobile = issue_id.partner_address_id.mobile
+
+ return partner_id, partner_address_id, partner_phone,partner_mobile
+
+def import_documents(sugar_obj, cr, uid, context=None):
+ if not context:
+ context = {}
+ map_document = {'id' : 'id',
+ 'name': 'document_name',
+ 'active_date': 'create_date',
+ 'description': 'description',
+ 'datas': 'datas',
+ 'datas_fname': 'document_name',
+ }
+ attach_obj = sugar_obj.pool.get('ir.attachment')
+ PortType,sessionid = sugar.login(context.get('username',''), context.get('password',''), context.get('url',''))
+ sugar_data = sugar.search(PortType,sessionid, 'Documents')
+ for val in sugar_data:
+ File = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id'))
+ val['datas'] = File
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_document)
+ attach_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
+ return True
def import_tasks(sugar_obj, cr, uid, context=None):
if not context:
context = {}
map_task = {'id' : 'id',
'name': 'name',
- 'date': 'date_entered',
+ 'date': 'date_start',
+ 'date_deadline': 'date_due',
'user_id/id': 'assigned_user_id',
'categ_id/.id': 'categ_id/.id',
'partner_id/.id': 'partner_id/.id',
@@ -439,7 +502,7 @@ def import_tasks(sugar_obj, cr, uid, context=None):
partner_xml_id = find_mapped_id(sugar_obj, cr, uid, 'res.partner.address', val.get('contact_id'), context)
if not partner_xml_id:
raise osv.except_osv(_('Warning !'), _('Reference Contact %s cannot be created, due to Lower Record Limit in SugarCRM Configuration.') % val.get('contact_name'))
- partner_id, partner_address_id = get_account(sugar_obj, cr, uid, val, context)
+ partner_id, partner_address_id, partner_phone, partner_mobile = get_account(sugar_obj, cr, uid, val, context)
val['partner_id/.id'] = partner_id
val['partner_address_id/.id'] = partner_address_id
val['categ_id/.id'] = categ_id
@@ -489,7 +552,7 @@ def import_meetings(sugar_obj, cr, uid, context=None):
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Meetings')
for val in sugar_data:
- partner_id, partner_address_id = get_account(sugar_obj, cr, uid, val, context)
+ partner_id, partner_address_id, partner_phone, partner_mobile = get_account(sugar_obj, cr, uid, val, context)
val['partner_id/.id'] = partner_id
val['partner_address_id/.id'] = partner_address_id
val['state'] = get_meeting_state(sugar_obj, cr, uid, val.get('status'),context)
@@ -524,16 +587,26 @@ def import_calls(sugar_obj, cr, uid, context=None):
'partner_address_id/.id': 'partner_address_id/.id',
'categ_id/.id': 'categ_id/.id',
'state': 'state',
+ 'partner_phone': 'partner_phone',
+ 'partner_mobile': 'partner_mobile',
+ 'opportunity_id/id': 'opportunity_id/id',
}
phonecall_obj = sugar_obj.pool.get('crm.phonecall')
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Calls')
for val in sugar_data:
+ sugar_call_leads = sugar.relation_search(PortType, sessionid, 'Calls', module_id=val.get('id'), related_module='Leads', query=None, deleted=None)
+ if sugar_call_leads:
+ for call_opportunity in sugar_call_leads:
+ val['opportunity_id/id'] = call_opportunity
categ_id = get_category(sugar_obj, cr, uid, 'crm.phonecall', val.get('direction'))
val['categ_id/.id'] = categ_id
- partner_id, partner_address_id = get_account(sugar_obj, cr, uid, val, context)
+ partner_id, partner_address_id, partner_phone, partner_mobile = get_account(sugar_obj, cr, uid, val, context)
+
val['partner_id/.id'] = partner_id
val['partner_address_id/.id'] = partner_address_id
+ val['partner_phone'] = partner_phone
+ val['partner_mobile'] = partner_mobile
val['state'] = get_calls_state(sugar_obj, cr, uid, val.get('status'), context)
fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_calls)
phonecall_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
@@ -630,6 +703,18 @@ def get_job_id(sugar_obj, cr, uid, val, context=None):
else:
job_id = job_obj.create(cr, uid, {'name': val})
return job_id
+
+def get_campaign_id(sugar_obj, cr, uid, val, context=None):
+ if not context:
+ context={}
+ cam_id = False
+ cam_obj = sugar_obj.pool.get('crm.case.resource.type')
+ cam_ids = cam_obj.search(cr, uid, [('name', '=', val)])
+ if cam_ids:
+ cam_id = cam_ids[0]
+ else:
+ cam_id = cam_obj.create(cr, uid, {'name': val})
+ return cam_id
def get_attachment(sugar_obj, cr, uid, val, model, File, context=None):
if not context:
@@ -817,7 +902,7 @@ def import_leads(sugar_obj, cr, uid, context=None):
'id' : 'id',
'name': ['first_name', 'last_name'],
'contact_name': ['first_name', 'last_name'],
- 'description': ['description', 'refered_by', 'lead_source', 'lead_source_description', 'website'],
+ 'description': ['description', 'refered_by', 'lead_source', 'lead_source_description', 'website', 'status_description', 'lead_source_description', 'do_not_call'],
'partner_name': 'account_name',
'email_from': 'email1',
'phone': 'phone_work',
@@ -832,17 +917,24 @@ def import_leads(sugar_obj, cr, uid, context=None):
'stage_id.id' : 'stage_id.id',
'type' : 'type',
'state': 'state',
+ 'fax': 'phone_fax',
+ 'referred': 'refered_by',
+ 'optout': 'optout',
+ 'type_id/.id': 'type_id/.id'
}
lead_obj = sugar_obj.pool.get('crm.lead')
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Leads')
for val in sugar_data:
+ if val.get('do_not_call') == '0':
+ val['optout'] = '1'
if val.get('opportunity_id'):
continue
title_id = get_contact_title(sugar_obj, cr, uid, val.get('salutation'), 'contact', context)
val['title.id'] = title_id
val['type'] = 'lead'
+ val['type_id/.id'] = get_campaign_id(sugar_obj, cr, uid, val.get('lead_source'), context)
stage_id = get_lead_status(sugar_obj, cr, uid, val, context)
val['stage_id.id'] = stage_id
val['state'] = get_lead_state(sugar_obj, cr, uid, val,context)
@@ -927,6 +1019,10 @@ MAP_FIELDS = {'Opportunities': #Object Mapping name
{'dependencies' : [],
'process' : import_users,
},
+ 'Documents':
+ {'dependencies' : ['Users'],
+ 'process' : import_documents,
+ },
'Meetings':
{'dependencies' : ['Users', 'Tasks'],
'process' : import_meetings,
@@ -986,8 +1082,10 @@ class import_sugarcrm(osv.osv):
'email': fields.boolean('Emails', help="If Emails is checked, SugarCRM Emails data imported in OpenERP Emails form"),
'project': fields.boolean('Projects', help="If Projects is checked, SugarCRM Projects data imported in OpenERP Projects form"),
'project_task': fields.boolean('Project Tasks', help="If Project Tasks is checked, SugarCRM Project Tasks data imported in OpenERP Project Tasks form"),
+ 'task': fields.boolean('Tasks', help="If Tasks is checked, SugarCRM Tasks data imported in OpenERP Meetings form"),
'bug': fields.boolean('Bugs', help="If Bugs is checked, SugarCRM Bugs data imported in OpenERP Project Issues form"),
'attachment': fields.boolean('Attachments', help="If Attachments is checked, SugarCRM Notes data imported in OpenERP's Related module's History with attachment"),
+ 'document': fields.boolean('Documents', help="If Documents is checked, SugarCRM Documents data imported in OpenERP Document Form"),
'username': fields.char('User Name', size=64),
'password': fields.char('Password', size=24),
}
@@ -999,11 +1097,13 @@ class import_sugarcrm(osv.osv):
'account' : True,
'employee' : True,
'meeting' : True,
+ 'task' : True,
'call' : True,
'email' : True,
'project' : True,
'project_task': True,
'bug': True,
+ 'document': True
}
def get_key(self, cr, uid, ids, context=None):
@@ -1026,6 +1126,8 @@ class import_sugarcrm(osv.osv):
key_list.append('Employees')
if current.meeting:
key_list.append('Meetings')
+ if current.task:
+ key_list.append('Tasks')
if current.call:
key_list.append('Calls')
if current.email:
@@ -1037,7 +1139,9 @@ class import_sugarcrm(osv.osv):
if current.bug:
key_list.append('Bugs')
if current.attachment:
- key_list.append('Notes')
+ key_list.append('Notes')
+ if current.document:
+ key_list.append('Documents')
return key_list
def import_all(self, cr, uid, ids, context=None):
diff --git a/addons/import_sugarcrm/import_sugarcrm_view.xml b/addons/import_sugarcrm/import_sugarcrm_view.xml
index eb4af473b39..5eb060e2120 100644
--- a/addons/import_sugarcrm/import_sugarcrm_view.xml
+++ b/addons/import_sugarcrm/import_sugarcrm_view.xml
@@ -15,6 +15,7 @@
+
@@ -24,6 +25,7 @@
+