From a377a193e84ec4b2457f5cf06a4730b3b207cf18 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Thu, 21 Apr 2011 19:10:23 +0530 Subject: [PATCH 01/24] [FIX]: Make Backlog3.1 correction: 1)Import Document Module.2) Link Meeting with account partner, opportunity partner, contact partner.3) Add some field in lead. bzr revid: atp@tinyerp.com-20110421134023-p82gn0hhd0cxim7o --- addons/import_sugarcrm/__openerp__.py | 2 +- addons/import_sugarcrm/import_sugarcrm.py | 120 ++++++++++++++++-- .../import_sugarcrm/import_sugarcrm_view.xml | 2 + 3 files changed, 115 insertions(+), 9 deletions(-) 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 @@ + From aaece353c795d519a2a899733aaa4d001c26e32e Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Mon, 25 Apr 2011 11:18:20 +0530 Subject: [PATCH 02/24] [ADD]: Add case and Import Cases data into Openerp claims bzr revid: atp@tinyerp.com-20110425054820-v7lbg5sz7hdov0b5 --- addons/import_sugarcrm/import_sugarcrm.py | 97 ++++++++++++++++++- .../import_sugarcrm/import_sugarcrm_view.xml | 1 + 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index 8bc4b3d3659..38c6a259cfb 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -641,7 +641,20 @@ def get_bug_priority(sugar_obj, cr, uid, val,context=None): '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: @@ -657,6 +670,22 @@ def get_bug_state(sugar_obj, cr, uid, val,context=None): },} 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): if not context: @@ -672,6 +701,57 @@ def get_issue_related_project(sugar_obj,cr,uid, PortType, sessionid, val, contex project_id = project_obj.browse(cr, uid, model_id).id return project_id +def get_acc_contact_claim(sugar_obj, cr, uid, val, context=None): + if not context: + context = {} + partner_id = False + partner_address_id = False + partner_phone = False + partner_email = False + model_obj = sugar_obj.pool.get('ir.model.data') + 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': '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) + 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: context = {} @@ -1038,7 +1118,11 @@ MAP_FIELDS = {'Opportunities': #Object Mapping name 'Calls': {'dependencies' : ['Users', 'Accounts', 'Contacts', 'Leads'], 'process' : import_calls, - }, + }, + 'Claims': + {'dependencies' : ['Users', 'Accounts', 'Contacts', 'Leads'], + 'process' : import_claims, + }, 'Employees': {'dependencies' : ['Resources'], 'process' : import_employees, @@ -1082,6 +1166,7 @@ class import_sugarcrm(osv.osv): '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"), @@ -1092,8 +1177,7 @@ class import_sugarcrm(osv.osv): 'username': fields.char('User Name', size=64), 'password': fields.char('Password', size=24), } - _defaults = { - 'lead': True, + _defaults = {#to be set to true, but easier for debugging 'opportunity': True, 'user' : True, 'contact' : True, @@ -1101,7 +1185,8 @@ class import_sugarcrm(osv.osv): 'employee' : True, 'meeting' : True, 'task' : True, - 'call' : True, + 'call' : True, + 'claim' : True, 'email' : True, 'project' : True, 'project_task': True, @@ -1131,6 +1216,8 @@ class import_sugarcrm(osv.osv): 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: diff --git a/addons/import_sugarcrm/import_sugarcrm_view.xml b/addons/import_sugarcrm/import_sugarcrm_view.xml index dea3f022d62..72261a80d79 100644 --- a/addons/import_sugarcrm/import_sugarcrm_view.xml +++ b/addons/import_sugarcrm/import_sugarcrm_view.xml @@ -16,6 +16,7 @@ + From bf509eaf71be0bc56ea4d75e94d60eba9705f357 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Tue, 26 Apr 2011 10:33:45 +0530 Subject: [PATCH 03/24] [IMP]: Add project_id to project_issue, add email address in contacts.remove duplication after two times attachment. bzr revid: atp@tinyerp.com-20110426050345-a8vlke3ug5m5gjri --- addons/import_sugarcrm/__openerp__.py | 2 +- addons/import_sugarcrm/import_sugarcrm.py | 85 ++++++++++++++--------- 2 files changed, 53 insertions(+), 34 deletions(-) diff --git a/addons/import_sugarcrm/__openerp__.py b/addons/import_sugarcrm/__openerp__.py index 15871bb6101..74c99ecc8b8 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', 'document'], + 'depends': ['crm_claim', '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 38c6a259cfb..611859d6f3a 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -26,6 +26,22 @@ from tools.translate import _ 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') @@ -72,6 +88,7 @@ def import_partner_address(sugar_obj, cr, uid, context=None): map_partner_address = { 'id': 'id', 'name': ['first_name', 'last_name'], + 'partner_id/id': 'account_id', 'phone': 'phone_work', 'mobile': 'phone_mobile', 'fax': 'phone_fax', @@ -80,12 +97,15 @@ def import_partner_address(sugar_obj, cr, uid, context=None): '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': 'email1', + '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' 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) @@ -447,9 +467,9 @@ def get_account(sugar_obj, cr, uid, val, context=None): 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 + 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')]) @@ -471,7 +491,7 @@ def import_documents(sugar_obj, cr, uid, context=None): 'active_date': 'create_date', 'description': 'description', 'datas': 'datas', - 'datas_fname': 'document_name', + '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','')) @@ -479,6 +499,7 @@ def import_documents(sugar_obj, cr, uid, context=None): for val in sugar_data: File = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id')) val['datas'] = File + val['datas_fname'] = val.get('document_name') 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 @@ -687,19 +708,6 @@ def get_claim_state(sugar_obj, cr, uid, val,context=None): state = state_dict['status'].get(val, '') return state -def get_issue_related_project(sugar_obj,cr,uid, PortType, sessionid, val, context=None): - if not context: - context={} - project_id = 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 def get_acc_contact_claim(sugar_obj, cr, uid, val, context=None): if not context: @@ -760,14 +768,20 @@ def import_bug(sugar_obj, cr, uid, context=None): 'project_id/.id':'project_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) + 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) @@ -805,7 +819,7 @@ def get_attachment(sugar_obj, cr, uid, val, model, File, context=None): attachment_obj = sugar_obj.pool.get('ir.attachment') 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']}) + new_attachment_id = attachment_obj.create(cr, uid, {'name': val.get('name'), 'datas_fname': val.get('name'), '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: @@ -819,10 +833,10 @@ def import_history(sugar_obj, cr, uid, context=None): 'name':'name', 'date':'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') @@ -830,8 +844,9 @@ def import_history(sugar_obj, cr, uid, context=None): 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): + 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] val['res_id'] = model.res_id val['model'] = model.model fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_attachment) @@ -893,7 +908,7 @@ def import_emails(sugar_obj, cr, uid, context=None): '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', } @@ -986,7 +1001,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', 'status_description', 'lead_source_description', 'do_not_call'], + 'description': ['__prettyprint__', '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', @@ -1029,7 +1044,8 @@ def import_leads(sugar_obj, cr, uid, context=None): 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')]) @@ -1045,9 +1061,10 @@ def get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_ 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 + return partner_contact_name, partner_contact_email def import_opportunities(sugar_obj, cr, uid, context=None): if not context: @@ -1063,7 +1080,8 @@ def import_opportunities(sugar_obj, cr, uid, context=None): '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') @@ -1073,8 +1091,9 @@ def import_opportunities(sugar_obj, cr, uid, context=None): 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['email_from'] = partner_contact_email val['categ_id.id'] = get_category(sugar_obj, cr, uid, 'crm.lead', val.get('opportunity_type')) val['type'] = 'opportunity' stage_id = get_opportunity_status(sugar_obj, cr, uid, val, context) @@ -1092,11 +1111,11 @@ MAP_FIELDS = {'Opportunities': #Object Mapping name 'process' : import_leads, }, 'Contacts': - {'dependencies' : ['Users'], #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': From eef2053d7d796a730b66c29d18c617a5a16b234d Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Tue, 26 Apr 2011 12:13:27 +0530 Subject: [PATCH 04/24] [IMP]: Convert Sugarcrm timezone to Openerp Timezone for all date bzr revid: atp@tinyerp.com-20110426064327-6035m5als1bi7jsv --- addons/import_sugarcrm/import_sugarcrm.py | 66 +++++++++---------- .../sugarcrm_fields_mapping.py | 22 ++++++- 2 files changed, 54 insertions(+), 34 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index 611859d6f3a..6f9f7da1981 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -111,7 +111,7 @@ def import_partner_address(sugar_obj, cr, uid, context=None): 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 @@ -154,7 +154,7 @@ def import_users(sugar_obj, cr, uid, context=None): 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 @@ -229,7 +229,7 @@ def get_user_address(sugar_obj, cr, uid, val, context=None): 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) @@ -259,7 +259,7 @@ def get_address_type(sugar_obj, cr, uid, val, map_partner_address, type, context 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) @@ -311,7 +311,7 @@ def import_partners(sugar_obj, cr, uid, context=None): 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'))]) @@ -488,7 +488,7 @@ def import_documents(sugar_obj, cr, uid, context=None): context = {} map_document = {'id' : 'id', 'name': 'document_name', - 'active_date': 'create_date', + 'active_date': ['__datetime__', 'create_date'], 'description': 'description', 'datas': 'datas', 'datas_fname': 'datas_fname', @@ -500,7 +500,7 @@ def import_documents(sugar_obj, cr, uid, context=None): File = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id')) val['datas'] = File val['datas_fname'] = val.get('document_name') - fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_document) + 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 @@ -509,8 +509,8 @@ def import_tasks(sugar_obj, cr, uid, context=None): 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', 'partner_id/.id': 'partner_id/.id', @@ -529,8 +529,8 @@ def import_tasks(sugar_obj, cr, uid, context=None): 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['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 @@ -562,7 +562,7 @@ def import_meetings(sugar_obj, cr, uid, context=None): 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', @@ -580,7 +580,7 @@ def import_meetings(sugar_obj, cr, uid, context=None): 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 @@ -603,7 +603,7 @@ def import_calls(sugar_obj, cr, uid, context=None): 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', @@ -632,7 +632,7 @@ def import_calls(sugar_obj, cr, uid, context=None): 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 @@ -646,7 +646,7 @@ def import_resources(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, '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 @@ -735,7 +735,7 @@ def import_claims(sugar_obj, cr, uid, context=None): context = {} map_claim = {'id' : 'id', 'name': 'name', - 'date': 'date_entered', + 'date': ['__datetime__', 'date_entered'], 'user_id/id': 'assigned_user_id', 'priority':'priority', 'partner_id/.id': 'partner_id/.id', @@ -756,7 +756,7 @@ def import_claims(sugar_obj, cr, uid, context=None): 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) + 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 @@ -785,7 +785,7 @@ def import_bug(sugar_obj, cr, uid, context=None): 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 @@ -831,7 +831,7 @@ def import_history(sugar_obj, cr, uid, context=None): context = {} map_attachment = {'id' : 'id', 'name':'name', - 'date':'date_entered', + 'date': ['__datetime__', 'date_entered'], 'user_id/id': 'assigned_user_id', 'description': ['__prettyprint__','description', 'description_html'], 'res_id': 'res_id', @@ -849,7 +849,7 @@ def import_history(sugar_obj, cr, uid, context=None): model = model_obj.browse(cr, uid, model_ids)[0] val['res_id'] = model.res_id val['model'] = model.model - fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_attachment) + 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) return True @@ -880,7 +880,7 @@ def import_employees(sugar_obj, cr, uid, context=None): 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 @@ -901,7 +901,7 @@ def import_emails(sugar_obj, cr, uid, context=None): 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', @@ -921,7 +921,7 @@ def import_emails(sugar_obj, cr, uid, context=None): 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) + 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 @@ -948,8 +948,8 @@ def import_projects(sugar_obj, cr, uid, context=None): 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', @@ -963,7 +963,7 @@ def import_projects(sugar_obj, cr, uid, context=None): 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 @@ -973,8 +973,8 @@ def import_project_tasks(sugar_obj, cr, uid, context=None): 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', @@ -990,7 +990,7 @@ def import_project_tasks(sugar_obj, cr, uid, context=None): 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 @@ -1037,7 +1037,7 @@ def import_leads(sugar_obj, cr, uid, context=None): 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) - fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_lead) + 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 @@ -1076,7 +1076,7 @@ def import_opportunities(sugar_obj, cr, uid, context=None): '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', @@ -1098,7 +1098,7 @@ def import_opportunities(sugar_obj, cr, uid, context=None): val['type'] = 'opportunity' stage_id = get_opportunity_status(sugar_obj, cr, uid, val, context) val['stage_id.id'] = stage_id - fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_opportunity) + fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_opportunity, context) lead_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context) return True diff --git a/addons/import_sugarcrm/sugarcrm_fields_mapping.py b/addons/import_sugarcrm/sugarcrm_fields_mapping.py index 05c7f0b6ad7..c6b33516ad6 100644 --- a/addons/import_sugarcrm/sugarcrm_fields_mapping.py +++ b/addons/import_sugarcrm/sugarcrm_fields_mapping.py @@ -18,18 +18,38 @@ # along with this program. If not, see . # ############################################################################## +import tools +import pytz +from datetime import datetime +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(): if key not in fields and dict_sugar: fields.append(key) if isinstance(val, list) and val: + #Allow to print a bit more pretty way long list of data in the same field 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__': + val = val[1] + 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))) From 7924dcd5bff1f0f8571c08015abd344656ebec95 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Tue, 26 Apr 2011 12:48:57 +0530 Subject: [PATCH 05/24] [FIX]: Correct xml_id problem and timezone problem for date bzr revid: atp@tinyerp.com-20110426071857-yt37x7vernms37wi --- addons/import_sugarcrm/import_sugarcrm.py | 9 +++++++++ addons/import_sugarcrm/sugarcrm_fields_mapping.py | 15 +++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index 6f9f7da1981..06099890a3a 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -750,6 +750,7 @@ def import_claims(sugar_obj, cr, uid, context=None): 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['id'] = 'Cases_' + val.get('id') val['partner_id/.id'] = partner_id val['partner_address_id/.id'] = partner_address_id val['partner_phone'] = partner_phone @@ -781,6 +782,7 @@ def import_bug(sugar_obj, cr, uid, context=None): project_id = project_ids[0] else: project_id = project_obj.create(cr, uid, {'name':'sugarcrm_bugs'}) + val['id'] = 'Bugs_' + val.get('id') 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) @@ -843,6 +845,7 @@ def import_history(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, 'Notes') for val in sugar_data: + val['id'] = 'Notes_' + val.get('id') File = 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: @@ -873,6 +876,7 @@ def import_employees(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, 'Employees') for val in sugar_data: + val['id'] = 'Employees_' + val.get('id') address_id = get_user_address(sugar_obj, cr, uid, val, context) val['address_home_id/.id'] = address_id model_ids = find_mapped_id(sugar_obj, cr, uid, 'resource.resource', val.get('user_hash')+ '_resource_resource', context) @@ -917,6 +921,7 @@ def import_emails(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, 'Emails') for val in sugar_data: + val['id'] = 'Emails_' + 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 @@ -959,6 +964,7 @@ def import_projects(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, 'Project') for val in sugar_data: + val['id'] = 'Project_' + val.get('id') partner_id, partner_invoice_id = get_project_account(sugar_obj,cr,uid, PortType, sessionid, val, context) val['partner_id/.id'] = partner_id val['contact_id/.id'] = partner_invoice_id @@ -988,6 +994,7 @@ def import_project_tasks(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, 'ProjectTask') for val in sugar_data: + val['id'] = 'ProjectTask_' + val.get('id') 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, context) @@ -1026,6 +1033,7 @@ def import_leads(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, 'Leads') for val in sugar_data: + val['id'] = 'Leads_' + val.get('id') if val.get('do_not_call') == '0': val['optout'] = '1' if val.get('opportunity_id'): @@ -1088,6 +1096,7 @@ def import_opportunities(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, 'Opportunities') for val in sugar_data: + val['id'] = 'Opportunities_' + val.get('id') 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')) diff --git a/addons/import_sugarcrm/sugarcrm_fields_mapping.py b/addons/import_sugarcrm/sugarcrm_fields_mapping.py index c6b33516ad6..b8b6f39bed4 100644 --- a/addons/import_sugarcrm/sugarcrm_fields_mapping.py +++ b/addons/import_sugarcrm/sugarcrm_fields_mapping.py @@ -20,7 +20,8 @@ ############################################################################## import tools import pytz -from datetime import datetime +import time +from datetime import datetime, timedelta, date from dateutil import parser import dateutil @@ -38,17 +39,19 @@ def sugarcrm_fields_mapp(dict_sugar, openerp_dict, context=None): if key not in fields and dict_sugar: fields.append(key) if isinstance(val, list) and val: - #Allow to print a bit more pretty way long list of data in the same field 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__': val = val[1] - 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') + if 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': From b9a5420542f8fe2ec5a8f17107e7dc2f5f31242f Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Tue, 26 Apr 2011 18:40:33 +0530 Subject: [PATCH 06/24] [ADD]: Add Multiple email address to contacts, leads, accounts.Fix Null date value problem for timezone convertion. bzr revid: atp@tinyerp.com-20110426131033-g9x7u2zquvbiyhz8 --- addons/import_sugarcrm/import_sugarcrm.py | 28 ++++++++++++------- .../import_sugarcrm/import_sugarcrm_view.xml | 2 +- addons/import_sugarcrm/sugar.py | 16 ++++++++++- .../sugarcrm_fields_mapping.py | 4 +-- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index 06099890a3a..ef6c3fd81cb 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -98,7 +98,7 @@ def import_partner_address(sugar_obj, cr, uid, context=None): 'city': 'primary_address_city', 'country_id.id': 'country_id.id', 'state_id.id': 'state_id.id', - 'email': 'email1', + 'email': 'email', 'type': 'type' } address_obj = sugar_obj.pool.get('res.partner.address') @@ -106,6 +106,8 @@ def import_partner_address(sugar_obj, cr, uid, context=None): 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) @@ -488,7 +490,6 @@ def import_documents(sugar_obj, cr, uid, context=None): context = {} map_document = {'id' : 'id', 'name': 'document_name', - 'active_date': ['__datetime__', 'create_date'], 'description': 'description', 'datas': 'datas', 'datas_fname': 'datas_fname', @@ -497,9 +498,9 @@ def import_documents(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, 'Documents') for val in sugar_data: - File = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id')) - val['datas'] = File - val['datas_fname'] = val.get('document_name') + 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 @@ -825,7 +826,10 @@ def get_attachment(sugar_obj, cr, uid, val, model, File, context=None): 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)]}) + if val.get('model') == 'res.partner': + mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)], 'partner_id': val.get('res_id', False)}) + 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): @@ -846,7 +850,7 @@ def import_history(sugar_obj, cr, uid, context=None): sugar_data = sugar.search(PortType, sessionid, 'Notes') for val in sugar_data: val['id'] = 'Notes_' + val.get('id') - File = sugar.attachment_search(PortType, sessionid, 'Notes', val.get('id')) + 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] @@ -915,6 +919,7 @@ def import_emails(sugar_obj, cr, uid, context=None): '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') @@ -924,8 +929,11 @@ def import_emails(sugar_obj, cr, uid, context=None): val['id'] = 'Emails_' + 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): + if model.model == 'res.partner': + val['partner_id/.id'] = model.res_id 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 @@ -1008,7 +1016,7 @@ def import_leads(sugar_obj, cr, uid, context=None): 'id' : 'id', 'name': ['first_name', 'last_name'], 'contact_name': ['first_name', 'last_name'], - 'description': ['__prettyprint__', 'description', 'refered_by', 'lead_source', 'lead_source_description', 'website', 'status_description', 'lead_source_description', 'do_not_call'], + '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', @@ -1033,7 +1041,7 @@ def import_leads(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, 'Leads') for val in sugar_data: - val['id'] = 'Leads_' + val.get('id') + val['id'] = 'Leads_' + val.get('id') if val.get('do_not_call') == '0': val['optout'] = '1' if val.get('opportunity_id'): @@ -1134,7 +1142,7 @@ MAP_FIELDS = {'Opportunities': #Object Mapping name 'Documents': {'dependencies' : ['Users'], 'process' : import_documents, - }, + }, 'Meetings': {'dependencies' : ['Users', 'Tasks'], 'process' : import_meetings, diff --git a/addons/import_sugarcrm/import_sugarcrm_view.xml b/addons/import_sugarcrm/import_sugarcrm_view.xml index 72261a80d79..1f41093a9ec 100644 --- a/addons/import_sugarcrm/import_sugarcrm_view.xml +++ b/addons/import_sugarcrm/import_sugarcrm_view.xml @@ -26,7 +26,7 @@ - + diff --git a/addons/import_sugarcrm/sugar.py b/addons/import_sugarcrm/sugar.py index d50287dad91..6987071f443 100644 --- a/addons/import_sugarcrm/sugar.py +++ b/addons/import_sugarcrm/sugar.py @@ -70,8 +70,10 @@ def attachment_search(portType, sessionid, module_name, module_id=None): 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 @@ def user_get_attendee_list(portType, sessionid, module_name=None, module_id=None 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 diff --git a/addons/import_sugarcrm/sugarcrm_fields_mapping.py b/addons/import_sugarcrm/sugarcrm_fields_mapping.py index b8b6f39bed4..3dd46b78fe6 100644 --- a/addons/import_sugarcrm/sugarcrm_fields_mapping.py +++ b/addons/import_sugarcrm/sugarcrm_fields_mapping.py @@ -43,9 +43,9 @@ def sugarcrm_fields_mapp(dict_sugar, openerp_dict, context=None): 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__': + elif val[0] == '__datetime__' and dict_sugar.get(val[1]): val = val[1] - if len(dict_sugar.get(val))<=10: + 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') From ac38a57946998a7429db036a580f9805e1354880 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Wed, 27 Apr 2011 10:10:35 +0530 Subject: [PATCH 07/24] [ADD]: Add id prefic with sugarcrm module nameto xml id. bzr revid: atp@tinyerp.com-20110427044035-fmqygi01jckrwjw9 --- addons/import_sugarcrm/import_sugarcrm.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index ef6c3fd81cb..68157e8ef6a 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -149,6 +149,7 @@ def import_users(sugar_obj, cr, uid, context=None): sugar_data = sugar.search(PortType,sessionid, 'Users') for val in sugar_data: user_ids = user_obj.search(cr, uid, [('login', '=', val.get('user_name'))]) + val['id'] = 'sugarcrm_'+'user_'+ val.get('id') if user_ids: val['.id'] = str(user_ids[0]) else: @@ -310,6 +311,7 @@ def import_partners(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, 'Accounts') for val in sugar_data: + val['id'] = 'sugarcrm_'+'account_'+ val.get('id') add_id = get_address(sugar_obj, cr, uid, val, context) val['customer'] = '1' val['supplier'] = '0' @@ -498,6 +500,7 @@ def import_documents(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, 'Documents') for val in sugar_data: + val['id'] = 'sugarcrm_'+'document_'+ val.get('id') file, filename = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id')) val['datas'] = file val['datas_fname'] = filename @@ -523,6 +526,7 @@ def import_tasks(sugar_obj, cr, uid, context=None): categ_id = get_category(sugar_obj, cr, uid, 'crm.meeting', 'Tasks') sugar_data = sugar.search(PortType, sessionid, 'Tasks') for val in sugar_data: + val['id'] = 'sugarcrm_'+'task_'+ val.get('id') 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')) @@ -576,6 +580,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: + val['id'] = 'sugarcrm_'+'meeting_'+ val.get('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 @@ -620,6 +625,7 @@ def import_calls(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, 'Calls') for val in sugar_data: + val['id'] = 'sugarcrm_'+'call_'+ val.get('id') 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: @@ -647,6 +653,7 @@ def import_resources(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, 'Employees') for val in sugar_data: + val['id'] = 'sugarcrm_'+'resource_'+ val.get('id') 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 @@ -750,6 +757,7 @@ def import_claims(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, 'Cases') for val in sugar_data: + val['id'] = 'sugarcrm_'+'case_'+ val.get('id') partner_id, partner_address_id, partner_phone,partner_email = get_acc_contact_claim(sugar_obj, cr, uid, val, context) val['id'] = 'Cases_' + val.get('id') val['partner_id/.id'] = partner_id @@ -778,6 +786,7 @@ def import_bug(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, 'Bugs') for val in sugar_data: + val['id'] = 'sugarcrm_'+'bug_'+ val.get('id') project_ids = project_obj.search(cr, uid, [('name', 'like', 'sugarcrm_bugs')]) if project_ids: project_id = project_ids[0] @@ -849,7 +858,7 @@ def import_history(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, 'Notes') for val in sugar_data: - val['id'] = 'Notes_' + val.get('id') + val['id'] = 'sugarcrm_'+'note_'+ val.get('id') 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: @@ -880,7 +889,7 @@ def import_employees(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, 'Employees') for val in sugar_data: - val['id'] = 'Employees_' + val.get('id') + val['id'] = 'sugarcrm_'+'employee_'+ val.get('id') address_id = get_user_address(sugar_obj, cr, uid, val, context) val['address_home_id/.id'] = address_id model_ids = find_mapped_id(sugar_obj, cr, uid, 'resource.resource', val.get('user_hash')+ '_resource_resource', context) @@ -926,7 +935,7 @@ def import_emails(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, 'Emails') for val in sugar_data: - val['id'] = 'Emails_' + val.get('id') + val['id'] = 'sugarcrm_'+'email_'+ 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): if model.model == 'res.partner': @@ -972,7 +981,7 @@ def import_projects(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, 'Project') for val in sugar_data: - val['id'] = 'Project_' + val.get('id') + val['id'] = 'sugarcrm_'+'project_'+ val.get('id') partner_id, partner_invoice_id = get_project_account(sugar_obj,cr,uid, PortType, sessionid, val, context) val['partner_id/.id'] = partner_id val['contact_id/.id'] = partner_invoice_id @@ -1002,7 +1011,7 @@ def import_project_tasks(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, 'ProjectTask') for val in sugar_data: - val['id'] = 'ProjectTask_' + val.get('id') + val['id'] = 'sugarcrm_'+'projecttask_'+ val.get('id') 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, context) @@ -1041,7 +1050,7 @@ def import_leads(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, 'Leads') for val in sugar_data: - val['id'] = 'Leads_' + val.get('id') + val['id'] = 'sugarcrm_'+'lead_'+ val.get('id') if val.get('do_not_call') == '0': val['optout'] = '1' if val.get('opportunity_id'): @@ -1104,7 +1113,7 @@ def import_opportunities(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, 'Opportunities') for val in sugar_data: - val['id'] = 'Opportunities_' + val.get('id') + val['id'] = 'sugarcrm_'+'opportunity_'+ val.get('id') 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')) From 00862bd47166f8f3bde13e21960dbc3ac413ae4a Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Wed, 27 Apr 2011 12:49:43 +0530 Subject: [PATCH 08/24] [IMP]: Remove xml_id prefix. bzr revid: atp@tinyerp.com-20110427071943-buembh6d443kb93s --- addons/import_sugarcrm/import_sugarcrm.py | 55 +++++++++-------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index 68157e8ef6a..518410c2700 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -149,7 +149,6 @@ def import_users(sugar_obj, cr, uid, context=None): sugar_data = sugar.search(PortType,sessionid, 'Users') for val in sugar_data: user_ids = user_obj.search(cr, uid, [('login', '=', val.get('user_name'))]) - val['id'] = 'sugarcrm_'+'user_'+ val.get('id') if user_ids: val['.id'] = str(user_ids[0]) else: @@ -311,7 +310,6 @@ def import_partners(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, 'Accounts') for val in sugar_data: - val['id'] = 'sugarcrm_'+'account_'+ val.get('id') add_id = get_address(sugar_obj, cr, uid, val, context) val['customer'] = '1' val['supplier'] = '0' @@ -500,7 +498,6 @@ def import_documents(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, 'Documents') for val in sugar_data: - val['id'] = 'sugarcrm_'+'document_'+ val.get('id') file, filename = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id')) val['datas'] = file val['datas_fname'] = filename @@ -526,7 +523,6 @@ def import_tasks(sugar_obj, cr, uid, context=None): categ_id = get_category(sugar_obj, cr, uid, 'crm.meeting', 'Tasks') sugar_data = sugar.search(PortType, sessionid, 'Tasks') for val in sugar_data: - val['id'] = 'sugarcrm_'+'task_'+ val.get('id') 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')) @@ -580,7 +576,6 @@ 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: - val['id'] = 'sugarcrm_'+'meeting_'+ val.get('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 @@ -625,7 +620,6 @@ def import_calls(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, 'Calls') for val in sugar_data: - val['id'] = 'sugarcrm_'+'call_'+ val.get('id') 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: @@ -653,7 +647,6 @@ def import_resources(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, 'Employees') for val in sugar_data: - val['id'] = 'sugarcrm_'+'resource_'+ val.get('id') 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 @@ -757,9 +750,7 @@ def import_claims(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, 'Cases') for val in sugar_data: - val['id'] = 'sugarcrm_'+'case_'+ val.get('id') partner_id, partner_address_id, partner_phone,partner_email = get_acc_contact_claim(sugar_obj, cr, uid, val, context) - val['id'] = 'Cases_' + val.get('id') val['partner_id/.id'] = partner_id val['partner_address_id/.id'] = partner_address_id val['partner_phone'] = partner_phone @@ -786,13 +777,11 @@ def import_bug(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, 'Bugs') for val in sugar_data: - val['id'] = 'sugarcrm_'+'bug_'+ val.get('id') 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['id'] = 'Bugs_' + val.get('id') 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) @@ -825,20 +814,20 @@ def get_campaign_id(sugar_obj, cr, uid, val, context=None): 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, context=None): if not context: context = {} + attach_ids = False attachment_obj = sugar_obj.pool.get('ir.attachment') 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_fname': val.get('name'), '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 val.get('model') == 'res.partner': - mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)], 'partner_id': val.get('res_id', False)}) - else: - 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: + 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: + 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): @@ -858,16 +847,18 @@ def import_history(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, 'Notes') for val in sugar_data: - val['id'] = 'sugarcrm_'+'note_'+ val.get('id') 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] - val['res_id'] = model.res_id - val['model'] = model.model + 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, context) return True def import_employees(sugar_obj, cr, uid, context=None): @@ -889,7 +880,6 @@ def import_employees(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, 'Employees') for val in sugar_data: - val['id'] = 'sugarcrm_'+'employee_'+ val.get('id') address_id = get_user_address(sugar_obj, cr, uid, val, context) val['address_home_id/.id'] = address_id model_ids = find_mapped_id(sugar_obj, cr, uid, 'resource.resource', val.get('user_hash')+ '_resource_resource', context) @@ -935,14 +925,13 @@ def import_emails(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, 'Emails') for val in sugar_data: - val['id'] = 'sugarcrm_'+'email_'+ val.get('id') - 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): if model.model == 'res.partner': val['partner_id/.id'] = model.res_id - val['res_id'] = model.res_id - val['model'] = model.model - + 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 @@ -981,7 +970,6 @@ def import_projects(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, 'Project') for val in sugar_data: - val['id'] = 'sugarcrm_'+'project_'+ val.get('id') partner_id, partner_invoice_id = get_project_account(sugar_obj,cr,uid, PortType, sessionid, val, context) val['partner_id/.id'] = partner_id val['contact_id/.id'] = partner_invoice_id @@ -1011,7 +999,6 @@ def import_project_tasks(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, 'ProjectTask') for val in sugar_data: - val['id'] = 'sugarcrm_'+'projecttask_'+ val.get('id') 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, context) @@ -1050,7 +1037,6 @@ def import_leads(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, 'Leads') for val in sugar_data: - val['id'] = 'sugarcrm_'+'lead_'+ val.get('id') if val.get('do_not_call') == '0': val['optout'] = '1' if val.get('opportunity_id'): @@ -1113,7 +1099,6 @@ def import_opportunities(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, 'Opportunities') for val in sugar_data: - val['id'] = 'sugarcrm_'+'opportunity_'+ val.get('id') 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')) @@ -1173,7 +1158,7 @@ MAP_FIELDS = {'Opportunities': #Object Mapping name 'process' : import_employees, }, 'Emails': - {'dependencies' : ['Users'], + {'dependencies' : ['Users', 'Projects', 'Project Tasks', 'Accounts', 'Contacts', 'Leads', 'Opportunities', 'Meetings', 'Calls'], 'process' : import_emails, }, 'Projects': From f92bebd9ba80a3fa64236204d8a7747415765064 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Wed, 27 Apr 2011 14:03:23 +0530 Subject: [PATCH 09/24] [FIX]: IF not filename give attachment name bzr revid: atp@tinyerp.com-20110427083323-p919ntqwo6sllxm5 --- addons/import_sugarcrm/import_sugarcrm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index 518410c2700..5e59d0620a7 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -500,7 +500,7 @@ def import_documents(sugar_obj, cr, uid, context=None): 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 + val['datas_fname'] = filename or val.get('document_name') 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 @@ -823,7 +823,7 @@ def get_attachment(sugar_obj, cr, uid, val, model, File, Filename, context=None) mailgate_obj = sugar_obj.pool.get('mailgate.message') attach_ids = attachment_obj.search(cr, uid, [('res_id','=', val.get('res_id'), ('res_model', '=', val.get('model')))]) if not attach_ids: - 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)}) + new_attachment_id = attachment_obj.create(cr, uid, {'name': Filename or val.get('name'), '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: From ac0eca6bd74a98ee91c15a3e61d8209c584b546d Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Wed, 27 Apr 2011 14:52:37 +0530 Subject: [PATCH 10/24] [Add]: add country_id field in leads bzr revid: atp@tinyerp.com-20110427092237-3h70yy42nvjgn5w3 --- addons/import_sugarcrm/import_sugarcrm.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index 5e59d0620a7..b79a9fbaad2 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -1030,7 +1030,10 @@ def import_leads(sugar_obj, cr, uid, context=None): 'fax': 'phone_fax', 'referred': 'refered_by', 'optout': 'optout', - 'type_id/.id': 'type_id/.id' + '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') @@ -1048,6 +1051,11 @@ def import_leads(sugar_obj, cr, uid, context=None): 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) + 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 @@ -1074,7 +1082,7 @@ def get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_ partner_contact_name = address_id.name partner_contact_email = address_id.email else: - partner_contact_name = val.get('account_name') + partner_contact_name = val.get('account_name') return partner_contact_name, partner_contact_email def import_opportunities(sugar_obj, cr, uid, context=None): From 78363e12afd622be0f5a81f9c83d4a44e095a32f Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Wed, 27 Apr 2011 17:05:43 +0530 Subject: [PATCH 11/24] [IMP]: Link Partner with Attachment bzr revid: atp@tinyerp.com-20110427113543-yndkb6ncle1zfbdn --- addons/import_sugarcrm/import_sugarcrm.py | 17 ++++++++++++----- addons/import_sugarcrm/import_sugarcrm_view.xml | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index b79a9fbaad2..57db29eb572 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -814,20 +814,27 @@ def get_campaign_id(sugar_obj, cr, uid, val, context=None): cam_id = cam_obj.create(cr, uid, {'name': val}) return cam_id -def get_attachment(sugar_obj, cr, uid, val, model, File, Filename, 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') attach_ids = attachment_obj.search(cr, uid, [('res_id','=', val.get('res_id'), ('res_model', '=', val.get('model')))]) if not attach_ids: - new_attachment_id = attachment_obj.create(cr, uid, {'name': Filename or val.get('name'), 'datas_fname': Filename, 'datas': File, 'res_id': val.get('res_id', False),'res_model': val.get('model',False)}) + if parent_type == 'Accounts': + new_attachment_id = attachment_obj.create(cr, uid, {'name': Filename or val.get('name'), '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 or val.get('name'), '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: - mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_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): @@ -858,7 +865,7 @@ def import_history(sugar_obj, cr, uid, context=None): 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, Filename, 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): @@ -1182,7 +1189,7 @@ MAP_FIELDS = {'Opportunities': #Object Mapping name 'process' : import_bug, }, 'Notes': - {'dependencies' : ['Users', 'Projects', 'Project Tasks', 'Accounts', 'Contacts', 'Leads', 'Opportunities', 'Meetings', 'Calls'], + {'dependencies' : [], 'process' : import_history, }, 'Resources': diff --git a/addons/import_sugarcrm/import_sugarcrm_view.xml b/addons/import_sugarcrm/import_sugarcrm_view.xml index 1f41093a9ec..d5022353363 100644 --- a/addons/import_sugarcrm/import_sugarcrm_view.xml +++ b/addons/import_sugarcrm/import_sugarcrm_view.xml @@ -35,7 +35,7 @@