openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #06075
lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp into lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm
Atul Patel(OpenERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp into lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm.
Requested reviews:
Bhumika (OpenERP) (sbh-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp/+merge/59324
Hello,
Backlog3.1 Correction:
-----------------------
1) Convert Sugarcrm UTC datetime to OpenERP Server Datetimezone
http://pad.openerp.com/rd-v61-tfr-import-sugarcrm
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp/+merge/59324
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm.
=== modified file 'import_sugarcrm/__openerp__.py'
--- import_sugarcrm/__openerp__.py 2011-04-14 10:39:21 +0000
+++ import_sugarcrm/__openerp__.py 2011-04-28 06:57:43 +0000
@@ -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': ['crm_claim', 'project_timesheet', 'project_issue', 'document'],
'init_xml': [],
'update_xml': ["wizard/sugarcrm_login_view.xml",
"wizard/import_message_view.xml",
=== modified file 'import_sugarcrm/import_sugarcrm.py'
--- import_sugarcrm/import_sugarcrm.py 2011-04-27 16:13:55 +0000
+++ import_sugarcrm/import_sugarcrm.py 2011-04-28 06:57:43 +0000
@@ -26,6 +26,22 @@
import pprint
pp = pprint.PrettyPrinter(indent=4)
+OPENERP_FIEDS_MAPS = {'Leads': 'crm.lead',
+ 'Opportunities': 'crm.lead',
+ 'Contacts': 'res.partner.address',
+ 'Accounts': 'res.partner',
+ 'Resources': 'resource.resource',
+ 'Users': 'res.users',
+ 'Meetings': 'crm.meeting',
+ 'Calls': 'crm.phonecall',
+ 'Claims': 'crm.claim',
+ 'Employee': 'hr.employee',
+ 'Project': 'project.project',
+ 'ProjectTask': 'project.task',
+ 'Bugs': 'project.issue',
+ 'Documents': 'ir.attachment',
+
+ }
def find_mapped_id(obj, cr, uid, res_model, sugar_id, context):
model_obj = obj.pool.get('ir.model.data')
@@ -130,6 +146,7 @@
map_partner_address = {
'id': 'id',
'name': ['first_name', 'last_name'],
+ 'partner_id/id': 'account_id',
'phone': 'phone_work',
'mobile': 'phone_mobile',
'fax': 'phone_fax',
@@ -138,23 +155,27 @@
'zip': 'primary_address_postalcode',
'city': 'primary_address_city',
'country_id.id': 'country_id.id',
- 'state_id.id': 'state_id.id'
+ 'state_id.id': 'state_id.id',
+ 'email': 'email',
+ 'type': 'type'
}
address_obj = sugar_obj.pool.get('res.partner.address')
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Contacts')
for val in sugar_data:
+ val['type'] = 'contact'
+ contact_emails = sugar.contact_emails_search(PortType, context.get('username', ''), context.get('password', ''), email_address=val.get('email1'))
+ val['email'] = (','.join(map(lambda x : x, contact_emails)))
if val.get('primary_address_country'):
country_id = get_all_countries(sugar_obj, cr, uid, val.get('primary_address_country'), context)
state = get_all_states(sugar_obj,cr, uid, val.get('primary_address_state'), country_id, context)
val['country_id.id'] = country_id
val['state_id.id'] = state
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address, context)
address_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
-
def import_users(sugar_obj, cr, uid, context=None):
map_user = {
'id' : 'id',
@@ -192,29 +213,18 @@
department_id = get_users_department(sugar_obj, cr, uid, val.get('department'), context=context)
val['context_department_id.id'] = department_id
val['context_lang'] = context.get('lang','en_US')
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user, context)
#All data has to be imported separatly because they don't have the same field
user_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
-def get_lead_status(surgar_obj, cr, uid, sugar_val,context=None):
+def get_lead_status(sugar_obj, cr, uid, sugar_val,context=None):
if not context:
context = {}
- stage_id = False
- stage_dict = {'status': #field in the sugarcrm database
- { #Mapping of sugarcrm stage : openerp opportunity stage
- 'New' : 'New',
- 'Assigned':'Qualification',
- 'In Progress': 'Proposition',
- 'Recycled': 'Negotiation',
- 'Dead': 'Lost'
- },}
- stage = stage_dict['status'].get(sugar_val['status'], '')
- stage_pool = surgar_obj.pool.get('crm.case.stage')
- stage_ids = stage_pool.search(cr, uid, [('type', '=', 'lead'), ('name', '=', stage)])
- for stage in stage_pool.browse(cr, uid, stage_ids, context):
- stage_id = stage.id
- return stage_id
+ fields = ['name', 'type']
+ name = 'lead_' + sugar_val['status']
+ data = [sugar_val['status'], 'lead']
+ return import_object(sugar_obj, cr, uid, fields, data, 'crm.case.stage', 'crm_lead_stage', name, [('type', '=', 'lead'), ('name', 'ilike', sugar_val['status'])], context)
def get_lead_state(surgar_obj, cr, uid, sugar_val,context=None):
if not context:
@@ -231,8 +241,6 @@
state = state_dict['status'].get(sugar_val['status'], '')
return state
-
-
def get_user_address(sugar_obj, cr, uid, val, context=None):
address_obj = sugar_obj.pool.get('res.partner.address')
map_user_address = {
@@ -249,7 +257,7 @@
state_id = get_all_states(sugar_obj, cr, uid, val.get('address_state'), country_id, context)
val['country_id'] = country_id
val['state_id'] = state_id
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user_address)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user_address, context)
dict_val = dict(zip(fields,datas))
if address_ids:
address_obj.write(cr, uid, address_ids, dict_val)
@@ -279,7 +287,7 @@
state = get_all_states(sugar_obj, cr, uid, val.get(type_address +'_address_state'), country_id, context)
val['country_id'] = country_id
val['state_id'] = state
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address, context)
#Convert To list into Dictionary(Key, val). value pair.
dict_val = dict(zip(fields,datas))
new_address_id = address_obj.create(cr,uid, dict_val)
@@ -331,7 +339,7 @@
add_id = get_address(sugar_obj, cr, uid, val, context)
val['customer'] = '1'
val['supplier'] = '0'
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner, context)
partner_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
for address in address_obj.browse(cr,uid,add_id):
data_id = partner_obj.search(cr,uid,[('name','like',address.name),('website','like',val.get('website'))])
@@ -340,16 +348,11 @@
return True
def get_category(sugar_obj, cr, uid, model, name, context=None):
- categ_id = False
- categ_obj = sugar_obj.pool.get('crm.case.categ')
- categ_ids = categ_obj.search(cr, uid, [('object_id.model','=',model), ('name', 'like', name)] )
- if categ_ids:
- categ_id = categ_ids[0]
- else:
- model_ids = sugar_obj.pool.get('ir.model').search(cr, uid, [('model', '=', model)], context=context)
- model = model_ids and model_ids[0] or False
- categ_id = categ_obj.create(cr, uid, {'name': name, 'object_id': model})
- return categ_id
+ if not context:
+ context = {}
+ fields = ['name', 'object_id']
+ data = [name, model]
+ return import_object(sugar_obj, cr, uid, fields, data, 'crm.case.categ', 'crm_categ', name, [('object_id.model','=',model), ('name', 'ilike', name)], context)
def get_alarm_id(sugar_obj, cr, uid, val, context=None):
@@ -443,33 +446,95 @@
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.contact_id.id
+ partner_phone = proj_id.contact_id.phone
+ partner_mobile = proj_id.contact_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',
+ 'description': 'description',
+ 'datas': 'datas',
+ 'datas_fname': 'datas_fname',
+ }
+ 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, filename = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id'))
+ val['datas'] = file
+ val['datas_fname'] = filename
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_document, context)
+ 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_start',
- 'date_deadline' : 'date_due',
+ 'date': ['__datetime__', 'date_start'],
+ 'date_deadline' : ['__datetime__', 'date_due'],
'user_id/id': 'assigned_user_id',
- 'categ_id/.id': 'categ_id/.id',
+ 'categ_id/id': 'categ_id/id',
'partner_id/.id': 'partner_id/.id',
'partner_address_id/.id': 'partner_address_id/.id',
'state': 'state'
@@ -482,12 +547,12 @@
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
- val['state'] = get_task_state(sugar_obj, cr, uid, val.get('status'), context=None)
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_task)
+ val['categ_id/id'] = categ_id
+ val['state'] = get_task_state(sugar_obj, cr, uid, val.get('status'), context)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_task, context)
meeting_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -519,7 +584,7 @@
context = {}
map_meeting = {'id' : 'id',
'name': 'name',
- 'date': 'date_start',
+ 'date': ['__datetime__', 'date_start'],
'duration': ['duration_hours', 'duration_minutes'],
'location': 'location',
'alarm_id/.id': 'alarm_id/.id',
@@ -532,12 +597,12 @@
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)
val['alarm_id/.id'] = get_alarm_id(sugar_obj, cr, uid, val.get('reminder_time'), context)
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_meeting)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_meeting, context)
meeting_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
get_attendee_id(sugar_obj, cr, uid, PortType, sessionid, 'Meetings', val.get('id'), context)
return True
@@ -560,25 +625,36 @@
context = {}
map_calls = {'id' : 'id',
'name': 'name',
- 'date': 'date_start',
+ 'date': ['__datetime__', 'date_start'],
'duration': ['duration_hours', 'duration_minutes'],
'user_id/id': 'assigned_user_id',
'partner_id/.id': 'partner_id/.id',
'partner_address_id/.id': 'partner_address_id/.id',
- 'categ_id/.id': 'categ_id/.id',
- 'state': 'state',
+ '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)
+ val['categ_id/id'] = categ_id
+ 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)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_calls, context)
phonecall_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -592,7 +668,7 @@
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Employees')
for val in sugar_data:
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource, context)
resource_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -608,7 +684,20 @@
'Low': '4'
},}
priority = priority_dict['priority'].get(val, '')
- return priority
+ return priority
+
+def get_claim_priority(sugar_obj, cr, uid, val,context=None):
+ if not context:
+ context = {}
+ priority = False
+ priority_dict = {'priority': #field in the sugarcrm database
+ { #Mapping of sugarcrm priority : openerp claims priority
+ 'High': '2',
+ 'Medium': '3',
+ 'Low': '4'
+ },}
+ priority = priority_dict['priority'].get(val, '')
+ return priority
def get_bug_state(sugar_obj, cr, uid, val,context=None):
if not context:
@@ -624,20 +713,74 @@
},}
state = state_dict['status'].get(val, '')
return state
+
+def get_claim_state(sugar_obj, cr, uid, val,context=None):
+ if not context:
+ context = {}
+ state = False
+ state_dict = {'status': #field in the sugarcrm database
+ { #Mapping of sugarcrm status : openerp claim state
+ 'New' : 'draft',
+ 'Assigned':'open',
+ 'Closed': 'done',
+ 'Pending Input': 'pending',
+ 'Rejected': 'cancel',
+ 'Duplicate': 'draft',
+ },}
+ state = state_dict['status'].get(val, '')
+ return state
-def get_issue_related_project(sugar_obj,cr,uid, PortType, sessionid, val, context=None):
+
+def get_acc_contact_claim(sugar_obj, cr, uid, val, context=None):
if not context:
- context={}
- project_id = False
+ context = {}
+ partner_id = False
+ partner_address_id = False
+ partner_phone = False
+ partner_email = False
model_obj = sugar_obj.pool.get('ir.model.data')
- project_obj = sugar_obj.pool.get('project.project')
- sugar_bug_project = sugar.relation_search(PortType, sessionid, 'Bugs', module_id=val.get('id'), related_module='Project', query=None, deleted=None)
- for project_id in sugar_bug_project:
- model_ids = find_mapped_id(sugar_obj, cr, uid, 'project.project', project_id, context)
- if model_ids:
- model_id = model_obj.browse(cr, uid, model_ids)[0].res_id
- project_id = project_obj.browse(cr, uid, model_id).id
- return project_id
+ address_obj = sugar_obj.pool.get('res.partner.address')
+ model_ids = model_obj.search(cr, uid, [('name', '=', val.get('account_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)])
+ 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.email
+ return partner_id, partner_address_id, partner_phone,partner_email
+
+def import_claims(sugar_obj, cr, uid, context=None):
+ if not context:
+ context = {}
+ map_claim = {'id' : 'id',
+ 'name': 'name',
+ 'date': ['__datetime__', 'date_entered'],
+ 'user_id/id': 'assigned_user_id',
+ 'priority':'priority',
+ 'partner_id/.id': 'partner_id/.id',
+ 'partner_address_id/.id': 'partner_address_id/.id',
+ 'partner_phone': 'partner_phone',
+ 'partner_mobile': 'partner_email',
+ 'description': 'description',
+ 'state': 'state',
+ }
+ claim_obj = sugar_obj.pool.get('crm.claim')
+ PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
+ sugar_data = sugar.search(PortType, sessionid, 'Cases')
+ for val in sugar_data:
+ partner_id, partner_address_id, partner_phone,partner_email = get_acc_contact_claim(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['email_from'] = partner_email
+ val['priority'] = get_claim_priority(sugar_obj, cr, uid, val.get('priority'),context)
+ val['state'] = get_claim_state(sugar_obj, cr, uid, val.get('status'),context)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_claim, context)
+ claim_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
+ return True
def import_bug(sugar_obj, cr, uid, context=None):
if not context:
@@ -645,20 +788,26 @@
map_resource = {'id' : 'id',
'name': 'name',
'project_id/.id':'project_id/.id',
- 'categ_id.id': 'categ_id.id',
+ 'categ_id/id': 'categ_id/id',
'priority':'priority',
- 'description': 'description',
+ 'description': ['__prettyprint__','description', 'bug_number', 'fixed_in_release_name', 'source', 'fixed_in_release', 'work_log', 'found_in_release', 'release_name', 'resolution'],
'state': 'state',
}
issue_obj = sugar_obj.pool.get('project.issue')
+ project_obj = sugar_obj.pool.get('project.project')
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Bugs')
for val in sugar_data:
- val['project_id/.id'] = get_issue_related_project(sugar_obj,cr,uid, PortType, sessionid, val, context)
- val['categ_id.id'] = get_category(sugar_obj, cr, uid, 'project.issue', val.get('type'))
+ project_ids = project_obj.search(cr, uid, [('name', 'like', 'sugarcrm_bugs')])
+ if project_ids:
+ project_id = project_ids[0]
+ else:
+ project_id = project_obj.create(cr, uid, {'name':'sugarcrm_bugs'})
+ val['project_id/.id'] = project_id
+ val['categ_id/id'] = get_category(sugar_obj, cr, uid, 'project.issue', val.get('type'))
val['priority'] = get_bug_priority(sugar_obj, cr, uid, val.get('priority'),context)
val['state'] = get_bug_state(sugar_obj, cr, uid, val.get('status'),context)
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource, context)
issue_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -673,18 +822,40 @@
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):
+def get_attachment(sugar_obj, cr, uid, val, model, File, Filename, parent_type, context=None):
if not context:
context = {}
+ attach_ids = False
attachment_obj = sugar_obj.pool.get('ir.attachment')
+ partner_obj = sugar_obj.pool.get('res.partner')
model_obj = sugar_obj.pool.get('ir.model.data')
mailgate_obj = sugar_obj.pool.get('mailgate.message')
- new_attachment_id = attachment_obj.create(cr, uid, {'name': val.get('name'), 'datas': File, 'res_id': val['res_id'],'res_model': val['model']})
- message_model_ids = find_mapped_id(sugar_obj, cr, uid, model, val.get('id'), context)
- message_xml_id = model_obj.browse(cr, uid, message_model_ids)
- if message_xml_id:
- mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)]})
+ attach_ids = attachment_obj.search(cr, uid, [('res_id','=', val.get('res_id'), ('res_model', '=', val.get('model')))])
+ if not attach_ids and Filename:
+ if parent_type == 'Accounts':
+ new_attachment_id = attachment_obj.create(cr, uid, {'name': Filename, 'datas_fname': Filename, 'datas': File, 'res_id': val.get('res_id', False),'res_model': val.get('model',False), 'partner_id': val.get('partner_id/.id')})
+ else:
+ new_attachment_id = attachment_obj.create(cr, uid, {'name': Filename, 'datas_fname': Filename, 'datas': File, 'res_id': val.get('res_id', False),'res_model': val.get('model',False)})
+ message_model_ids = find_mapped_id(sugar_obj, cr, uid, model, val.get('id'), context)
+ message_xml_id = model_obj.browse(cr, uid, message_model_ids)
+ if message_xml_id:
+ if parent_type == 'Accounts':
+ mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)], 'partner_id': val.get('partner_id/.id')})
+ else:
+ mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)]})
return True
def import_history(sugar_obj, cr, uid, context=None):
@@ -692,26 +863,30 @@
context = {}
map_attachment = {'id' : 'id',
'name':'name',
- 'date':'date_entered',
+ 'date': ['__datetime__', 'date_entered'],
'user_id/id': 'assigned_user_id',
- 'description': ['description', 'description_html'],
+ 'description': ['__prettyprint__','description', 'description_html'],
'res_id': 'res_id',
'model': 'model',
- 'partner_id.id' : 'partner_id.id',
+ 'partner_id/.id' : 'partner_id/.id',
}
mailgate_obj = sugar_obj.pool.get('mailgate.message')
model_obj = sugar_obj.pool.get('ir.model.data')
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Notes')
for val in sugar_data:
- File = sugar.attachment_search(PortType, sessionid, 'Notes', val.get('id'))
- model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id'))])
- for model in model_obj.browse(cr, uid, model_ids):
- val['res_id'] = model.res_id
- val['model'] = model.model
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_attachment)
+ File, Filename = sugar.attachment_search(PortType, sessionid, 'Notes', val.get('id'))
+ model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id')),('model','=', OPENERP_FIEDS_MAPS[val.get('parent_type')])])
+ if model_ids:
+ model = model_obj.browse(cr, uid, model_ids)[0]
+ if model.model == 'res.partner':
+ val['partner_id/.id'] = model.res_id
+ else:
+ val['res_id'] = model.res_id
+ val['model'] = model.model
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_attachment, context)
mailgate_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
- get_attachment(sugar_obj, cr, uid, val, 'mailgate.message', File, context)
+ get_attachment(sugar_obj, cr, uid, val, 'mailgate.message', File, Filename, val.get('parent_type'), context)
return True
def import_employees(sugar_obj, cr, uid, context=None):
@@ -740,7 +915,7 @@
if resource_id:
val['resource_id/.id'] = resource_id[0].res_id
val['job_id/.id'] = get_job_id(sugar_obj, cr, uid, val.get('title'), context)
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_employee)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_employee, context)
employee_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -749,37 +924,36 @@
data = [salutation, salutation, domain]
return import_object(sugar_obj, cr, uid, fields, data, 'res.partner.title', 'contact_title', salutation, [('shortcut', '=', salutation)], context=context)
-
-
-
-
-
def import_emails(sugar_obj, cr, uid, context=None):
if not context:
context= {}
map_emails = {'id': 'id',
'name':'name',
- 'date':'date_sent',
+ 'date':['__datetime__', 'date_sent'],
'email_from': 'from_addr_name',
'email_to': 'reply_to_addr',
'email_cc': 'cc_addrs_names',
'email_bcc': 'bcc_addrs_names',
'message_id': 'message_id',
'user_id/id': 'assigned_user_id',
- 'description': ['description', 'description_html'],
+ 'description': ['__prettyprint__', 'description', 'description_html'],
'res_id': 'res_id',
'model': 'model',
+ 'partner_id/.id': 'partner_id/.id'
}
mailgate_obj = sugar_obj.pool.get('mailgate.message')
model_obj = sugar_obj.pool.get('ir.model.data')
PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
sugar_data = sugar.search(PortType, sessionid, 'Emails')
for val in sugar_data:
- model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id'))])
+ model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id')),('model','=', OPENERP_FIEDS_MAPS[val.get('parent_type')])])
for model in model_obj.browse(cr, uid, model_ids):
- val['res_id'] = model.res_id
- val['model'] = model.model
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_emails)
+ if model.model == 'res.partner':
+ val['partner_id/.id'] = model.res_id
+ else:
+ val['res_id'] = model.res_id
+ val['model'] = model.model
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_emails, context)
mailgate_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -806,8 +980,8 @@
context = {}
map_project = {'id': 'id',
'name': 'name',
- 'date_start': 'estimated_start_date',
- 'date': 'estimated_end_date',
+ 'date_start': ['__datetime__', 'estimated_start_date'],
+ 'date': ['__datetime__', 'estimated_end_date'],
'user_id/id': 'assigned_user_id',
'partner_id/.id': 'partner_id/.id',
'contact_id/.id': 'contact_id/.id',
@@ -821,7 +995,7 @@
val['partner_id/.id'] = partner_id
val['contact_id/.id'] = partner_invoice_id
val['state'] = get_project_state(sugar_obj, cr, uid, val.get('status'),context)
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project, context)
project_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -831,8 +1005,8 @@
context = {}
map_project_task = {'id': 'id',
'name': 'name',
- 'date_start': 'date_start',
- 'date_end': 'date_finish',
+ 'date_start': ['__datetime__', 'date_start'],
+ 'date_end': ['__datetime__', 'date_finish'],
'progress': 'progress',
'project_id/name': 'project_name',
'planned_hours': 'planned_hours',
@@ -848,7 +1022,7 @@
for val in sugar_data:
val['state'] = get_project_task_state(sugar_obj, cr, uid, val.get('status'),context)
val['priority'] = get_project_task_priority(sugar_obj, cr, uid, val.get('priority'),context)
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project_task)
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project_task, context)
task_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
@@ -859,7 +1033,7 @@
'id' : 'id',
'name': ['first_name', 'last_name'],
'contact_name': ['first_name', 'last_name'],
- 'description': ['description', 'refered_by', 'lead_source', 'lead_source_description', 'website'],
+ 'description': ['__prettyprint__', 'description', 'refered_by', 'lead_source', 'lead_source_description', 'website', 'email2', 'status_description', 'lead_source_description', 'do_not_call'],
'partner_name': 'account_name',
'email_from': 'email1',
'phone': 'phone_work',
@@ -871,31 +1045,47 @@
'zip': 'primary_address_postalcode',
'city':'primary_address_city',
'user_id/id' : 'assigned_user_id',
- 'stage_id.id' : 'stage_id.id',
+ 'stage_id/id' : 'stage_id/id',
'type' : 'type',
'state': 'state',
+ 'fax': 'phone_fax',
+ 'referred': 'refered_by',
+ 'optout': 'optout',
+ 'type_id/.id': 'type_id/.id',
+ 'country_id.id': 'country_id.id',
+ 'state_id.id': 'state_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
+ if val.get('salutation'):
+ 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['stage_id/id'] = stage_id
val['state'] = get_lead_state(sugar_obj, cr, uid, val,context)
- fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_lead)
+ if val.get('primary_address_country'):
+ country_id = get_all_countries(sugar_obj, cr, uid, val.get('primary_address_country'), context)
+ state = get_all_states(sugar_obj,cr, uid, val.get('primary_address_state'), country_id, context)
+ val['country_id.id'] = country_id
+ val['state_id.id'] = state
+ fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_lead, context)
lead_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
return True
def get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_xml_id, context=None):
if not context:
context={}
- partner_contact_name = False
+ partner_contact_name = False
+ partner_contact_email = False
model_obj = sugar_obj.pool.get('ir.model.data')
partner_address_obj = sugar_obj.pool.get('res.partner.address')
model_account_ids = model_obj.search(cr, uid, [('res_id', '=', partner_xml_id[0]), ('model', '=', 'res.partner'), ('module', '=', 'sugarcrm_import')])
@@ -911,9 +1101,10 @@
address_id = partner_address_obj.browse(cr, uid, model_id)
partner_address_obj.write(cr, uid, [address_id.id], {'partner_id': partner_xml_id[0]})
partner_contact_name = address_id.name
+ partner_contact_email = address_id.email
else:
- partner_contact_name = val.get('account_name')
- return partner_contact_name
+ partner_contact_name = val.get('account_name')
+ return partner_contact_name, partner_contact_email
def import_opportunities(sugar_obj, cr, uid, context=None):
if not context:
@@ -925,11 +1116,12 @@
'title_action': 'next_step',
'partner_address_id/name': 'partner_address_id/name',
'planned_revenue': 'amount',
- 'date_deadline':'date_closed',
+ 'date_deadline': ['__datetime__', 'date_closed'],
'user_id/id' : 'assigned_user_id',
'stage_id/id' : 'stage_id/id',
'type' : 'type',
- 'categ_id.id': 'categ_id.id'
+ 'categ_id/id': 'categ_id/id',
+ 'email_from': 'email_from'
}
lead_obj = sugar_obj.pool.get('crm.lead')
partner_obj = sugar_obj.pool.get('res.partner')
@@ -939,9 +1131,10 @@
partner_xml_id = partner_obj.search(cr, uid, [('name', 'like', val.get('account_name'))])
if not partner_xml_id:
raise osv.except_osv(_('Warning !'), _('Reference Partner %s cannot be created, due to Lower Record Limit in SugarCRM Configuration.') % val.get('account_name'))
- partner_contact_name = get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_xml_id, context)
+ partner_contact_name, partner_contact_email = get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_xml_id, context)
val['partner_address_id/name'] = partner_contact_name
- val['categ_id.id'] = get_category(sugar_obj, cr, uid, 'crm.lead', val.get('opportunity_type'))
+ val['email_from'] = partner_contact_email
+ val['categ_id/id'] = get_category(sugar_obj, cr, uid, 'crm.lead', val.get('opportunity_type'))
val['type'] = 'opportunity'
val['stage_id/id'] = get_opportunity_status(sugar_obj, cr, uid, val, context)
fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_opportunity)
@@ -965,17 +1158,21 @@
'process' : import_leads,
},
'Contacts':
- {'dependencies' : [], #Object to import before this table
+ {'dependencies' : ['Users', 'Accounts'], #Object to import before this table
'process' : import_partner_address,
},
'Accounts':
- {'dependencies' : ['Users', 'Contacts'], #Object to import before this table
+ {'dependencies' : ['Users'], #Object to import before this table
'process' : import_partners,
},
'Users':
{'dependencies' : [],
'process' : import_users,
},
+ 'Documents':
+ {'dependencies' : ['Users'],
+ 'process' : import_documents,
+ },
'Meetings':
{'dependencies' : ['Accounts', 'Contacts', 'Users'],
'process' : import_meetings,
@@ -1000,9 +1197,12 @@
{'dependencies' : ['Users', 'Projects', 'Project Tasks'],
'process' : import_bug,
},
-
+ 'Claims':
+ {'dependencies' : ['Users', 'Accounts', 'Contacts', 'Leads'],
+ 'process' : import_claims,
+ },
'Emails':
- {'dependencies' : ['Users'],
+ {'dependencies' : ['Users', 'Projects', 'Project Tasks', 'Accounts', 'Contacts', 'Leads', 'Opportunities', 'Meetings', 'Calls'],
'process' : import_emails,
},
@@ -1033,26 +1233,32 @@
'employee': fields.boolean('Employee', help="If Employees is checked, SugarCRM Employees data imported in OpenERP employees form"),
'meeting': fields.boolean('Meetings', help="If Meetings is checked, SugarCRM Meetings data imported in OpenERP meetings form"),
'call': fields.boolean('Calls', help="If Calls is checked, SugarCRM Calls data imported in OpenERP phonecalls form"),
+ 'claim': fields.boolean('Claims', help="If Claims is checked, SugarCRM Claims data imported in OpenERP Claims form"),
'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),
}
- _defaults = { #to be set to true, but easier for debugging
- 'opportunity': False,
- 'user' : False,
- 'contact' : False,
- 'account' : False,
- 'employee' : False,
- 'meeting' : False,
- 'call' : False,
- 'email' : False,
- 'project' : False,
- 'project_task': False,
- 'bug': False,
+ _defaults = {#to be set to true, but easier for debugging
+ 'opportunity': True,
+ 'user' : True,
+ 'contact' : True,
+ 'account' : True,
+ 'employee' : True,
+ 'meeting' : True,
+ 'task' : True,
+ 'call' : True,
+ 'claim' : True,
+ 'email' : True,
+ 'project' : True,
+ 'project_task': True,
+ 'bug': True,
+ 'document': True
}
def get_key(self, cr, uid, ids, context=None):
@@ -1073,8 +1279,12 @@
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.claim:
+ key_list.append('Claims')
if current.email:
key_list.append('Emails')
if current.project:
@@ -1084,7 +1294,9 @@
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):
=== modified file 'import_sugarcrm/import_sugarcrm_view.xml'
--- import_sugarcrm/import_sugarcrm_view.xml 2011-04-21 13:03:16 +0000
+++ import_sugarcrm/import_sugarcrm_view.xml 2011-04-28 06:57:43 +0000
@@ -14,7 +14,9 @@
<group colspan="4" col="6">
<field name="opportunity" />
<field name= "meeting" />
+ <field name= "task" />
<field name= "call" />
+ <field name= "claim" />
<field name= "account" />
<field name= "contact" />
<field name="user" />
@@ -23,7 +25,8 @@
<field name= "project" />
<field name= "project_task" />
<field name= "bug" string="Project Issue"/>
- <field name= "attachment" />
+ <field name= "document" />
+ <field name= "attachment" string="History and Attachment" />
</group>
<field name="username" invisible="1"/>
<field name="password" invisible="1"/>
@@ -32,7 +35,7 @@
<group colspan="4" >
<label string="" colspan="2"/>
<button icon="gtk-cancel" special="cancel" string="_Cancel"/>
- <button name="import_all" string="Import"
+ <button name="import_all" string="_Import"
type="object" icon="terp-camera_test"/>
</group>
</form>
=== modified file 'import_sugarcrm/sugar.py'
--- import_sugarcrm/sugar.py 2011-04-15 06:13:38 +0000
+++ import_sugarcrm/sugar.py 2011-04-28 06:57:43 +0000
@@ -70,8 +70,10 @@
se_req._module_name = module_name
se_resp = portType.get_note_attachment(se_req)
file = False
+ filename = False
file = se_resp._return._note_attachment.File
- return file
+ filename = se_resp._return._note_attachment.Filename
+ return file, filename
def user_get_attendee_list(portType, sessionid, module_name=None, module_id=None):
se_req = get_attendee_listRequest()
@@ -91,6 +93,18 @@
attendee_list.append(attendee_dict)
return attendee_list
+def contact_emails_search(portType, username, password, email_address=None):
+ se_req = contact_by_emailRequest()
+ se_req._user_name = username
+ se_req._password = password
+ se_req._email_address = email_address
+ se_resp = portType.contact_by_email(se_req)
+ ans_list = []
+ for list in se_resp._return:
+ if list.Email_address and list.Email_address not in ans_list:
+ ans_list.append(list.Email_address)
+ return ans_list
+
def search(portType, sessionid, module_name=None):
se_req = get_entry_listRequest()
se_req._session = sessionid
=== modified file 'import_sugarcrm/sugarcrm_fields_mapping.py'
--- import_sugarcrm/sugarcrm_fields_mapping.py 2011-04-21 13:12:39 +0000
+++ import_sugarcrm/sugarcrm_fields_mapping.py 2011-04-28 06:57:43 +0000
@@ -18,8 +18,21 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
+import tools
+import pytz
+import time
+from datetime import datetime, timedelta, date
+from dateutil import parser
+import dateutil
-def sugarcrm_fields_mapp(dict_sugar, openerp_dict):
+def sugarcrm_fields_mapp(dict_sugar, openerp_dict, context=None):
+ if not context:
+ context = {}
+ if 'tz' in context and context['tz']:
+ time_zone = context['tz']
+ else:
+ time_zone = tools.get_server_timezone()
+ au_tz = pytz.timezone(time_zone)
fields=[]
data_lst = []
for key,val in openerp_dict.items():
@@ -30,6 +43,16 @@
if len(val) >= 1 and val[0] == "__prettyprint__":
val = val[1:]
data_lst.append('\n\n'.join(map(lambda x : x + ": " + dict_sugar.get(x,''), val)))
+ elif val[0] == '__datetime__' and dict_sugar.get(val[1]):
+ val = val[1]
+ if dict_sugar.get(val) and len(dict_sugar.get(val))<=10:
+ updated_dt = date.fromtimestamp(time.mktime(time.strptime(dict_sugar.get(val), '%Y-%m-%d')))
+ else:
+ convert_date = datetime.strptime(dict_sugar.get(val), '%Y-%m-%d %H:%M:%S')
+ edate = convert_date.replace(tzinfo=dateutil.tz.gettz('UTC'))
+ au_dt = au_tz.normalize(edate.astimezone(au_tz))
+ updated_dt = datetime(*au_dt.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S')
+ data_lst.append(updated_dt)
else:
if key == 'duration':
data_lst.append('.'.join(map(lambda x : dict_sugar.get(x,''), val)))
Follow ups