← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp into lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm

 

Atul Patel(OpenERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp into lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm.

Requested reviews:
  Bhumika (OpenERP) (sbh-openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp/+merge/59324

Hello,

Backlog3.1 Correction:
-----------------------
1) Convert Sugarcrm UTC datetime to OpenERP Server Datetimezone

  http://pad.openerp.com/rd-v61-tfr-import-sugarcrm

   

         
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlog3.1_corrections-atp/+merge/59324
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm.
=== modified file 'import_sugarcrm/__openerp__.py'
--- import_sugarcrm/__openerp__.py	2011-04-14 10:39:21 +0000
+++ import_sugarcrm/__openerp__.py	2011-04-28 06:57:43 +0000
@@ -27,7 +27,7 @@
             "Contacts", "Employees", Meetings, Phonecalls, Emails, and Project, Project Tasks Data into OpenERP Module.""",
     'author': 'OpenERP SA',
     'website': 'http://www.openerp.com',
-    'depends': ['project_timesheet', 'project_issue'],
+    'depends': ['crm_claim', 'project_timesheet', 'project_issue', 'document'],
     'init_xml': [],
     'update_xml': ["wizard/sugarcrm_login_view.xml",
                    "wizard/import_message_view.xml",

=== modified file 'import_sugarcrm/import_sugarcrm.py'
--- import_sugarcrm/import_sugarcrm.py	2011-04-27 16:13:55 +0000
+++ import_sugarcrm/import_sugarcrm.py	2011-04-28 06:57:43 +0000
@@ -26,6 +26,22 @@
 import pprint
 pp = pprint.PrettyPrinter(indent=4)
 
+OPENERP_FIEDS_MAPS = {'Leads': 'crm.lead',
+                      'Opportunities': 'crm.lead',
+                      'Contacts': 'res.partner.address',
+                      'Accounts': 'res.partner',
+                      'Resources': 'resource.resource',
+                      'Users': 'res.users',
+                      'Meetings': 'crm.meeting',
+                      'Calls': 'crm.phonecall',
+                      'Claims': 'crm.claim',
+                      'Employee': 'hr.employee',
+                      'Project': 'project.project',
+                      'ProjectTask': 'project.task',
+                      'Bugs': 'project.issue',
+                      'Documents': 'ir.attachment',
+                      
+  }
 
 def find_mapped_id(obj, cr, uid, res_model, sugar_id, context):
     model_obj = obj.pool.get('ir.model.data')
@@ -130,6 +146,7 @@
     map_partner_address = {
              'id': 'id',              
              'name': ['first_name', 'last_name'],
+             'partner_id/id': 'account_id',
             'phone': 'phone_work',
             'mobile': 'phone_mobile',
             'fax': 'phone_fax',
@@ -138,23 +155,27 @@
             'zip': 'primary_address_postalcode',
             'city': 'primary_address_city',
             'country_id.id': 'country_id.id',
-            'state_id.id': 'state_id.id'
+            'state_id.id': 'state_id.id',
+            'email': 'email',
+            'type': 'type'
             }
     address_obj = sugar_obj.pool.get('res.partner.address')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Contacts')
     for val in sugar_data:
+        val['type'] = 'contact'
+        contact_emails = sugar.contact_emails_search(PortType, context.get('username', ''), context.get('password', ''), email_address=val.get('email1'))
+        val['email'] = (','.join(map(lambda x : x, contact_emails)))
         if val.get('primary_address_country'):
             country_id = get_all_countries(sugar_obj, cr, uid, val.get('primary_address_country'), context)
             state = get_all_states(sugar_obj,cr, uid, val.get('primary_address_state'), country_id, context)
             val['country_id.id'] =  country_id
             val['state_id.id'] =  state        
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address, context)
         address_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True
     
 
-
 def import_users(sugar_obj, cr, uid, context=None):
     map_user = {
         'id' : 'id', 
@@ -192,29 +213,18 @@
         department_id = get_users_department(sugar_obj, cr, uid, val.get('department'), context=context)
         val['context_department_id.id'] = department_id     
         val['context_lang'] = context.get('lang','en_US')
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user, context)
         #All data has to be imported separatly because they don't have the same field
         user_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True
 
-def get_lead_status(surgar_obj, cr, uid, sugar_val,context=None):
+def get_lead_status(sugar_obj, cr, uid, sugar_val,context=None):
     if not context:
         context = {}
-    stage_id = False
-    stage_dict = {'status': #field in the sugarcrm database
-        { #Mapping of sugarcrm stage : openerp opportunity stage
-            'New' : 'New',
-            'Assigned':'Qualification',
-            'In Progress': 'Proposition',
-            'Recycled': 'Negotiation',
-            'Dead': 'Lost'
-        },}
-    stage = stage_dict['status'].get(sugar_val['status'], '')
-    stage_pool = surgar_obj.pool.get('crm.case.stage')
-    stage_ids = stage_pool.search(cr, uid, [('type', '=', 'lead'), ('name', '=', stage)])
-    for stage in stage_pool.browse(cr, uid, stage_ids, context):
-        stage_id = stage.id
-    return stage_id
+    fields = ['name', 'type']
+    name = 'lead_' + sugar_val['status']
+    data = [sugar_val['status'], 'lead']
+    return import_object(sugar_obj, cr, uid, fields, data, 'crm.case.stage', 'crm_lead_stage', name, [('type', '=', 'lead'), ('name', 'ilike', sugar_val['status'])], context)
 
 def get_lead_state(surgar_obj, cr, uid, sugar_val,context=None):
     if not context:
@@ -231,8 +241,6 @@
     state = state_dict['status'].get(sugar_val['status'], '')
     return state
 
-
-
 def get_user_address(sugar_obj, cr, uid, val, context=None):
     address_obj = sugar_obj.pool.get('res.partner.address')
     map_user_address = {
@@ -249,7 +257,7 @@
         state_id = get_all_states(sugar_obj, cr, uid, val.get('address_state'), country_id, context)
         val['country_id'] =  country_id
         val['state_id'] =  state_id
-    fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user_address)
+    fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user_address, context)
     dict_val = dict(zip(fields,datas))
     if address_ids:
         address_obj.write(cr, uid, address_ids, dict_val)
@@ -279,7 +287,7 @@
             state = get_all_states(sugar_obj, cr, uid, val.get(type_address +'_address_state'), country_id, context)
             val['country_id'] =  country_id
             val['state_id'] =  state
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address, context)
         #Convert To list into Dictionary(Key, val). value pair.
         dict_val = dict(zip(fields,datas))
         new_address_id = address_obj.create(cr,uid, dict_val)
@@ -331,7 +339,7 @@
         add_id = get_address(sugar_obj, cr, uid, val, context)
         val['customer'] = '1'
         val['supplier'] = '0'
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner, context)
         partner_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
         for address in  address_obj.browse(cr,uid,add_id):
             data_id = partner_obj.search(cr,uid,[('name','like',address.name),('website','like',val.get('website'))])
@@ -340,16 +348,11 @@
     return True
 
 def get_category(sugar_obj, cr, uid, model, name, context=None):
-    categ_id = False
-    categ_obj = sugar_obj.pool.get('crm.case.categ')
-    categ_ids = categ_obj.search(cr, uid, [('object_id.model','=',model), ('name', 'like', name)] )
-    if categ_ids:
-        categ_id = categ_ids[0]
-    else:
-        model_ids = sugar_obj.pool.get('ir.model').search(cr, uid, [('model', '=', model)], context=context)
-        model = model_ids and model_ids[0] or False
-        categ_id = categ_obj.create(cr, uid, {'name': name, 'object_id': model})
-    return categ_id     
+    if not context:
+        context = {}
+    fields = ['name', 'object_id']
+    data = [name, model]
+    return import_object(sugar_obj, cr, uid, fields, data, 'crm.case.categ', 'crm_categ', name, [('object_id.model','=',model), ('name', 'ilike', name)], context)
 
 def get_alarm_id(sugar_obj, cr, uid, val, context=None):
     
@@ -443,33 +446,95 @@
         context = {}
     partner_id = False    
     partner_address_id = False
+    partner_phone = False
+    partner_mobile = False
     model_obj = sugar_obj.pool.get('ir.model.data')
     address_obj = sugar_obj.pool.get('res.partner.address')
+    crm_obj = sugar_obj.pool.get('crm.lead')
+    project_obj = sugar_obj.pool.get('project.project')
+    issue_obj = sugar_obj.pool.get('project.issue')
     if val.get('parent_type') == 'Accounts':
         model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'res.partner')])
         if model_ids:
             model = model_obj.browse(cr, uid, model_ids)[0]
             partner_id = model.res_id
             address_ids = address_obj.search(cr, uid, [('partner_id', '=', partner_id)])
-            partner_address_id = address_ids and address_ids[0]
+            if address_ids:
+                address_id = address_obj.browse(cr, uid, address_ids[0])
+                partner_address_id = address_id.id
+                partner_phone = address_id.phone
+                partner_mobile = address_id.mobile
             
     if val.get('parent_type') == 'Contacts':
         model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'res.partner.address')])
         for model in model_obj.browse(cr, uid, model_ids):
             partner_address_id = model.res_id
             address_id = address_obj.browse(cr, uid, partner_address_id)
+            partner_phone = address_id.phone
+            partner_mobile = address_id.mobile
             partner_id = address_id and address_id.partner_id or False
-    return partner_id, partner_address_id                             
+            
+    if val.get('parent_type') == 'Opportunities':
+        model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'crm.lead')])
+        for model in model_obj.browse(cr, uid, model_ids):
+            opportunity_id = model.res_id
+            opportunity_id = crm_obj.browse(cr, uid, opportunity_id)
+            partner_id = opportunity_id.partner_id.id
+            partner_address_id =  opportunity_id.partner_address_id.id
+            partner_phone = opportunity_id.partner_address_id.phone
+            partner_mobile = opportunity_id.partner_address_id.mobile
+            
+    if val.get('parent_type') == 'Project':
+        model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'project.project')])
+        for model in model_obj.browse(cr, uid, model_ids):
+            proj_ids = model.res_id
+            proj_id = project_obj.browse(cr, uid, proj_ids)
+            partner_id = proj_id.partner_id.id
+            partner_address_id =  proj_id.contact_id.id
+            partner_phone = proj_id.contact_id.phone
+            partner_mobile = proj_id.contact_id.mobile
+
+    if val.get('parent_type') == 'Bugs':
+        model_ids = model_obj.search(cr, uid, [('name', '=', val.get('parent_id')), ('model', '=', 'project.issue')])
+        for model in model_obj.browse(cr, uid, model_ids):
+            issue_ids = model.res_id
+            issue_id = issue_obj.browse(cr, uid, issue_ids)
+            partner_id = issue_id.partner_id.id
+            partner_address_id =  issue_id.partner_address_id.id
+            partner_phone = issue_id.partner_address_id.phone
+            partner_mobile = issue_id.partner_address_id.mobile                        
+                        
+    return partner_id, partner_address_id, partner_phone,partner_mobile                          
+
+def import_documents(sugar_obj, cr, uid, context=None):
+    if not context:
+        context = {}
+    map_document = {'id' : 'id', 
+             'name': 'document_name',
+           'description': 'description',
+           'datas': 'datas',
+           'datas_fname': 'datas_fname',
+            } 
+    attach_obj = sugar_obj.pool.get('ir.attachment')
+    PortType,sessionid = sugar.login(context.get('username',''), context.get('password',''), context.get('url',''))
+    sugar_data = sugar.search(PortType,sessionid, 'Documents')
+    for val in sugar_data:
+        file, filename = sugar.attachment_search(PortType, sessionid, 'DocumentRevisions', val.get('document_revision_id'))
+        val['datas'] = file
+        val['datas_fname'] = filename
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_document, context)
+        attach_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
+    return True
 
 def import_tasks(sugar_obj, cr, uid, context=None):
     if not context:
         context = {}
     map_task = {'id' : 'id',
                 'name': 'name',
-                'date': 'date_start',
-                'date_deadline' : 'date_due',
+                'date': ['__datetime__', 'date_start'],
+                'date_deadline' : ['__datetime__', 'date_due'],
                 'user_id/id': 'assigned_user_id',
-                'categ_id/.id': 'categ_id/.id',
+                'categ_id/id': 'categ_id/id',
                 'partner_id/.id': 'partner_id/.id',
                 'partner_address_id/.id': 'partner_address_id/.id',
                 'state': 'state'
@@ -482,12 +547,12 @@
         partner_xml_id = find_mapped_id(sugar_obj, cr, uid, 'res.partner.address', val.get('contact_id'), context)
         if not partner_xml_id:
             raise osv.except_osv(_('Warning !'), _('Reference Contact %s cannot be created, due to Lower Record Limit in SugarCRM Configuration.') % val.get('contact_name'))
-        partner_id, partner_address_id = get_account(sugar_obj, cr, uid, val, context)
+        partner_id, partner_address_id, partner_phone, partner_mobile = get_account(sugar_obj, cr, uid, val, context)
         val['partner_id/.id'] = partner_id
         val['partner_address_id/.id'] = partner_address_id
-        val['categ_id/.id'] = categ_id
-        val['state'] = get_task_state(sugar_obj, cr, uid, val.get('status'), context=None)
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_task)
+        val['categ_id/id'] = categ_id
+        val['state'] = get_task_state(sugar_obj, cr, uid, val.get('status'), context)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_task, context)
         meeting_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True    
     
@@ -519,7 +584,7 @@
         context = {}
     map_meeting = {'id' : 'id',
                     'name': 'name',
-                    'date': 'date_start',
+                    'date': ['__datetime__', 'date_start'],
                     'duration': ['duration_hours', 'duration_minutes'],
                     'location': 'location',
                     'alarm_id/.id': 'alarm_id/.id',
@@ -532,12 +597,12 @@
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Meetings')
     for val in sugar_data:
-        partner_id, partner_address_id = get_account(sugar_obj, cr, uid, val, context)
+        partner_id, partner_address_id, partner_phone, partner_mobile = get_account(sugar_obj, cr, uid, val, context)
         val['partner_id/.id'] = partner_id
         val['partner_address_id/.id'] = partner_address_id
         val['state'] = get_meeting_state(sugar_obj, cr, uid, val.get('status'),context)
         val['alarm_id/.id'] = get_alarm_id(sugar_obj, cr, uid, val.get('reminder_time'), context)
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_meeting)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_meeting, context)
         meeting_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
         get_attendee_id(sugar_obj, cr, uid, PortType, sessionid, 'Meetings', val.get('id'), context)
     return True    
@@ -560,25 +625,36 @@
         context = {}
     map_calls = {'id' : 'id',
                     'name': 'name',
-                    'date': 'date_start',
+                    'date': ['__datetime__', 'date_start'],
                     'duration': ['duration_hours', 'duration_minutes'],
                     'user_id/id': 'assigned_user_id',
                     'partner_id/.id': 'partner_id/.id',
                     'partner_address_id/.id': 'partner_address_id/.id',
-                    'categ_id/.id': 'categ_id/.id',
-                    'state': 'state',
+                    'categ_id/id': 'categ_id/id',
+                   'state': 'state',
+                   'partner_phone': 'partner_phone',
+                   'partner_mobile': 'partner_mobile',
+                   'opportunity_id/id': 'opportunity_id/id',
+
     }
     phonecall_obj = sugar_obj.pool.get('crm.phonecall')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Calls')
     for val in sugar_data:
+        sugar_call_leads = sugar.relation_search(PortType, sessionid, 'Calls', module_id=val.get('id'), related_module='Leads', query=None, deleted=None)
+        if sugar_call_leads:
+            for call_opportunity in sugar_call_leads: 
+                val['opportunity_id/id'] = call_opportunity 
         categ_id = get_category(sugar_obj, cr, uid, 'crm.phonecall', val.get('direction'))         
-        val['categ_id/.id'] = categ_id
-        partner_id, partner_address_id = get_account(sugar_obj, cr, uid, val, context)
+        val['categ_id/id'] = categ_id
+        partner_id, partner_address_id, partner_phone, partner_mobile = get_account(sugar_obj, cr, uid, val, context)
+        
         val['partner_id/.id'] = partner_id
         val['partner_address_id/.id'] = partner_address_id
+        val['partner_phone'] = partner_phone
+        val['partner_mobile'] = partner_mobile
         val['state'] =  get_calls_state(sugar_obj, cr, uid, val.get('status'), context)  
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_calls)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_calls, context)
         phonecall_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True
     
@@ -592,7 +668,7 @@
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Employees')
     for val in sugar_data:
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource, context)
         resource_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True    
 
@@ -608,7 +684,20 @@
             'Low': '4'
         },}
     priority = priority_dict['priority'].get(val, '')
-    return priority    
+    return priority  
+
+def get_claim_priority(sugar_obj, cr, uid, val,context=None):
+    if not context:
+        context = {}
+    priority = False
+    priority_dict = {'priority': #field in the sugarcrm database
+        { #Mapping of sugarcrm priority : openerp claims priority
+            'High': '2',
+            'Medium': '3',
+            'Low': '4'
+        },}
+    priority = priority_dict['priority'].get(val, '')
+    return priority   
 
 def get_bug_state(sugar_obj, cr, uid, val,context=None):
     if not context:
@@ -624,20 +713,74 @@
         },}
     state = state_dict['status'].get(val, '')
     return state
+
+def get_claim_state(sugar_obj, cr, uid, val,context=None):
+    if not context:
+        context = {}
+    state = False
+    state_dict = {'status': #field in the sugarcrm database
+        { #Mapping of sugarcrm status : openerp claim state
+            'New' : 'draft',
+            'Assigned':'open',
+            'Closed': 'done',
+            'Pending Input': 'pending',
+            'Rejected': 'cancel',
+            'Duplicate': 'draft',
+        },}
+    state = state_dict['status'].get(val, '')
+    return state
     
-def get_issue_related_project(sugar_obj,cr,uid, PortType, sessionid, val, context=None):
+
+def get_acc_contact_claim(sugar_obj, cr, uid, val, context=None):
     if not context:
-        context={}
-    project_id = False        
+        context = {}
+    partner_id = False    
+    partner_address_id = False
+    partner_phone = False
+    partner_email = False
     model_obj = sugar_obj.pool.get('ir.model.data')
-    project_obj = sugar_obj.pool.get('project.project')
-    sugar_bug_project = sugar.relation_search(PortType, sessionid, 'Bugs', module_id=val.get('id'), related_module='Project', query=None, deleted=None)
-    for project_id in sugar_bug_project:
-        model_ids = find_mapped_id(sugar_obj, cr, uid, 'project.project', project_id, context)
-        if model_ids:
-            model_id = model_obj.browse(cr, uid, model_ids)[0].res_id
-            project_id = project_obj.browse(cr, uid, model_id).id
-    return project_id     
+    address_obj = sugar_obj.pool.get('res.partner.address')
+    model_ids = model_obj.search(cr, uid, [('name', '=', val.get('account_id')), ('model', '=', 'res.partner')])
+    if model_ids:
+        model = model_obj.browse(cr, uid, model_ids)[0]
+        partner_id = model.res_id
+        address_ids = address_obj.search(cr, uid, [('partner_id', '=', partner_id)])
+        if address_ids:
+            address_id = address_obj.browse(cr, uid, address_ids[0])
+            partner_address_id = address_id.id
+            partner_phone = address_id.phone
+            partner_mobile = address_id.email
+    return partner_id, partner_address_id, partner_phone,partner_email
+
+def import_claims(sugar_obj, cr, uid, context=None):
+    if not context:
+        context = {}
+    map_claim = {'id' : 'id',
+                    'name': 'name',
+                    'date': ['__datetime__', 'date_entered'],
+                    'user_id/id': 'assigned_user_id',
+                    'priority':'priority',
+                    'partner_id/.id': 'partner_id/.id',
+                    'partner_address_id/.id': 'partner_address_id/.id',
+                    'partner_phone': 'partner_phone',
+                    'partner_mobile': 'partner_email',                    
+                    'description': 'description',
+                    'state': 'state',
+    }
+    claim_obj = sugar_obj.pool.get('crm.claim')
+    PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
+    sugar_data = sugar.search(PortType, sessionid, 'Cases')
+    for val in sugar_data:
+        partner_id, partner_address_id, partner_phone,partner_email = get_acc_contact_claim(sugar_obj, cr, uid, val, context)
+        val['partner_id/.id'] = partner_id
+        val['partner_address_id/.id'] = partner_address_id
+        val['partner_phone'] = partner_phone
+        val['email_from'] = partner_email
+        val['priority'] = get_claim_priority(sugar_obj, cr, uid, val.get('priority'),context)
+        val['state'] = get_claim_state(sugar_obj, cr, uid, val.get('status'),context)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_claim, context)
+        claim_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
+    return True    
 
 def import_bug(sugar_obj, cr, uid, context=None):
     if not context:
@@ -645,20 +788,26 @@
     map_resource = {'id' : 'id',
                     'name': 'name',
                     'project_id/.id':'project_id/.id',
-                    'categ_id.id': 'categ_id.id',
+                    'categ_id/id': 'categ_id/id',
                     'priority':'priority',
-                    'description': 'description',
+                    'description': ['__prettyprint__','description', 'bug_number', 'fixed_in_release_name', 'source', 'fixed_in_release', 'work_log', 'found_in_release', 'release_name', 'resolution'],
                     'state': 'state',
     }
     issue_obj = sugar_obj.pool.get('project.issue')
+    project_obj = sugar_obj.pool.get('project.project')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Bugs')
     for val in sugar_data:
-        val['project_id/.id'] = get_issue_related_project(sugar_obj,cr,uid, PortType, sessionid, val, context)
-        val['categ_id.id'] = get_category(sugar_obj, cr, uid, 'project.issue', val.get('type'))
+        project_ids = project_obj.search(cr, uid, [('name', 'like', 'sugarcrm_bugs')])
+        if project_ids:
+            project_id = project_ids[0]
+        else:
+             project_id = project_obj.create(cr, uid, {'name':'sugarcrm_bugs'})    
+        val['project_id/.id'] = project_id
+        val['categ_id/id'] = get_category(sugar_obj, cr, uid, 'project.issue', val.get('type'))
         val['priority'] = get_bug_priority(sugar_obj, cr, uid, val.get('priority'),context)
         val['state'] = get_bug_state(sugar_obj, cr, uid, val.get('status'),context)
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_resource, context)
         issue_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True    
 
@@ -673,18 +822,40 @@
     else:
         job_id = job_obj.create(cr, uid, {'name': val})
     return job_id
+
+def get_campaign_id(sugar_obj, cr, uid, val, context=None):
+    if not context:
+        context={}
+    cam_id = False    
+    cam_obj = sugar_obj.pool.get('crm.case.resource.type')        
+    cam_ids = cam_obj.search(cr, uid, [('name', '=', val)])
+    if cam_ids:
+        cam_id = cam_ids[0]
+    else:
+        cam_id = cam_obj.create(cr, uid, {'name': val})
+    return cam_id
     
-def get_attachment(sugar_obj, cr, uid, val, model, File, context=None):
+def get_attachment(sugar_obj, cr, uid, val, model, File, Filename, parent_type, context=None):
     if not context:
         context = {}
+    attach_ids = False    
     attachment_obj = sugar_obj.pool.get('ir.attachment')
+    partner_obj = sugar_obj.pool.get('res.partner')
     model_obj = sugar_obj.pool.get('ir.model.data')
     mailgate_obj = sugar_obj.pool.get('mailgate.message')
-    new_attachment_id = attachment_obj.create(cr, uid, {'name': val.get('name'), 'datas': File, 'res_id': val['res_id'],'res_model': val['model']})
-    message_model_ids = find_mapped_id(sugar_obj, cr, uid, model, val.get('id'), context)
-    message_xml_id = model_obj.browse(cr, uid, message_model_ids)
-    if message_xml_id:
-        mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)]})             
+    attach_ids = attachment_obj.search(cr, uid, [('res_id','=', val.get('res_id'), ('res_model', '=', val.get('model')))])
+    if not attach_ids and Filename:
+        if parent_type == 'Accounts':
+            new_attachment_id = attachment_obj.create(cr, uid, {'name': Filename, 'datas_fname': Filename, 'datas': File, 'res_id': val.get('res_id', False),'res_model': val.get('model',False), 'partner_id': val.get('partner_id/.id')})
+        else:    
+            new_attachment_id = attachment_obj.create(cr, uid, {'name': Filename, 'datas_fname': Filename, 'datas': File, 'res_id': val.get('res_id', False),'res_model': val.get('model',False)})
+        message_model_ids = find_mapped_id(sugar_obj, cr, uid, model, val.get('id'), context)
+        message_xml_id = model_obj.browse(cr, uid, message_model_ids)
+        if message_xml_id:
+          if parent_type == 'Accounts':
+                 mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)], 'partner_id': val.get('partner_id/.id')})
+          else:
+                 mailgate_obj.write(cr, uid, [message_xml_id[0].res_id], {'attachment_ids': [(4, new_attachment_id)]})                                              
     return True    
     
 def import_history(sugar_obj, cr, uid, context=None):
@@ -692,26 +863,30 @@
         context = {}
     map_attachment = {'id' : 'id',
                       'name':'name',
-                      'date':'date_entered',
+                      'date': ['__datetime__', 'date_entered'],
                       'user_id/id': 'assigned_user_id',
-                      'description': ['description', 'description_html'],
+                      'description': ['__prettyprint__','description', 'description_html'],
                       'res_id': 'res_id',
                       'model': 'model',
-                      'partner_id.id' : 'partner_id.id',
+                      'partner_id/.id' : 'partner_id/.id',
     }
     mailgate_obj = sugar_obj.pool.get('mailgate.message')
     model_obj =  sugar_obj.pool.get('ir.model.data')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Notes')
     for val in sugar_data:
-        File = sugar.attachment_search(PortType, sessionid, 'Notes', val.get('id'))
-        model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id'))])
-        for model in model_obj.browse(cr, uid, model_ids):
-            val['res_id'] = model.res_id
-            val['model'] = model.model
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_attachment)   
+        File, Filename = sugar.attachment_search(PortType, sessionid, 'Notes', val.get('id'))
+        model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id')),('model','=', OPENERP_FIEDS_MAPS[val.get('parent_type')])])
+        if model_ids:
+            model = model_obj.browse(cr, uid, model_ids)[0]
+            if model.model == 'res.partner':
+                val['partner_id/.id'] = model.res_id
+            else:    
+                val['res_id'] = model.res_id
+                val['model'] = model.model
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_attachment, context)   
         mailgate_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
-        get_attachment(sugar_obj, cr, uid, val, 'mailgate.message', File, context)
+        get_attachment(sugar_obj, cr, uid, val, 'mailgate.message', File, Filename, val.get('parent_type'), context)
     return True       
     
 def import_employees(sugar_obj, cr, uid, context=None):
@@ -740,7 +915,7 @@
         if resource_id:
             val['resource_id/.id'] = resource_id[0].res_id
         val['job_id/.id'] = get_job_id(sugar_obj, cr, uid, val.get('title'), context)
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_employee)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_employee, context)
         employee_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True
 
@@ -749,37 +924,36 @@
     data = [salutation, salutation, domain]
     return import_object(sugar_obj, cr, uid, fields, data, 'res.partner.title', 'contact_title', salutation, [('shortcut', '=', salutation)], context=context)
 
-
-    
-        
-    
-    
 def import_emails(sugar_obj, cr, uid, context=None):
     if not context:
         context= {}
     map_emails = {'id': 'id',
     'name':'name',
-    'date':'date_sent',
+    'date':['__datetime__', 'date_sent'],
     'email_from': 'from_addr_name',
     'email_to': 'reply_to_addr',
     'email_cc': 'cc_addrs_names',
     'email_bcc': 'bcc_addrs_names',
     'message_id': 'message_id',
     'user_id/id': 'assigned_user_id',
-    'description': ['description', 'description_html'],
+    'description': ['__prettyprint__', 'description', 'description_html'],
     'res_id': 'res_id',
     'model': 'model',
+    'partner_id/.id': 'partner_id/.id'
     }
     mailgate_obj = sugar_obj.pool.get('mailgate.message')
     model_obj = sugar_obj.pool.get('ir.model.data')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Emails')
     for val in sugar_data:
-        model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id'))])
+        model_ids = model_obj.search(cr, uid, [('name', 'like', val.get('parent_id')),('model','=', OPENERP_FIEDS_MAPS[val.get('parent_type')])])
         for model in model_obj.browse(cr, uid, model_ids):
-            val['res_id'] = model.res_id
-            val['model'] = model.model
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_emails)
+            if model.model == 'res.partner':
+                val['partner_id/.id'] = model.res_id
+            else:    
+                val['res_id'] = model.res_id
+                val['model'] = model.model
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_emails, context)
         mailgate_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True    
     
@@ -806,8 +980,8 @@
         context = {}
     map_project = {'id': 'id',
         'name': 'name',
-        'date_start': 'estimated_start_date',
-        'date': 'estimated_end_date',
+        'date_start': ['__datetime__', 'estimated_start_date'],
+        'date': ['__datetime__', 'estimated_end_date'],
         'user_id/id': 'assigned_user_id',
         'partner_id/.id': 'partner_id/.id',
         'contact_id/.id': 'contact_id/.id', 
@@ -821,7 +995,7 @@
         val['partner_id/.id'] = partner_id
         val['contact_id/.id'] = partner_invoice_id 
         val['state'] = get_project_state(sugar_obj, cr, uid, val.get('status'),context)
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project, context)
         project_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True 
 
@@ -831,8 +1005,8 @@
         context = {}
     map_project_task = {'id': 'id',
         'name': 'name',
-        'date_start': 'date_start',
-        'date_end': 'date_finish',
+        'date_start': ['__datetime__', 'date_start'],
+        'date_end': ['__datetime__', 'date_finish'],
         'progress': 'progress',
         'project_id/name': 'project_name',
         'planned_hours': 'planned_hours',
@@ -848,7 +1022,7 @@
     for val in sugar_data:
         val['state'] = get_project_task_state(sugar_obj, cr, uid, val.get('status'),context)
         val['priority'] = get_project_task_priority(sugar_obj, cr, uid, val.get('priority'),context)
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project_task)
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_project_task, context)
         task_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True 
     
@@ -859,7 +1033,7 @@
             'id' : 'id',
             'name': ['first_name', 'last_name'],
             'contact_name': ['first_name', 'last_name'],
-            'description': ['description', 'refered_by', 'lead_source', 'lead_source_description', 'website'],
+            'description': ['__prettyprint__', 'description', 'refered_by', 'lead_source', 'lead_source_description', 'website', 'email2', 'status_description', 'lead_source_description', 'do_not_call'],
             'partner_name': 'account_name',
             'email_from': 'email1',
             'phone': 'phone_work',
@@ -871,31 +1045,47 @@
             'zip': 'primary_address_postalcode',
             'city':'primary_address_city',
             'user_id/id' : 'assigned_user_id',
-            'stage_id.id' : 'stage_id.id',
+            'stage_id/id' : 'stage_id/id',
             'type' : 'type',
             'state': 'state',
+            'fax': 'phone_fax',
+            'referred': 'refered_by',
+            'optout': 'optout',
+            'type_id/.id': 'type_id/.id',
+            'country_id.id': 'country_id.id',
+            'state_id.id': 'state_id.id'
+            
             }
-        
     lead_obj = sugar_obj.pool.get('crm.lead')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Leads')
     for val in sugar_data:
+        if val.get('do_not_call') == '0':
+            val['optout'] = '1'
         if val.get('opportunity_id'):
             continue
-        title_id = get_contact_title(sugar_obj, cr, uid, val.get('salutation'), 'Contact', context)
-        val['title/id'] = title_id
+        if val.get('salutation'):
+            title_id = get_contact_title(sugar_obj, cr, uid, val.get('salutation'), 'Contact', context)
+            val['title/id'] = title_id
         val['type'] = 'lead'
+        val['type_id/.id'] = get_campaign_id(sugar_obj, cr, uid, val.get('lead_source'), context)
         stage_id = get_lead_status(sugar_obj, cr, uid, val, context)
-        val['stage_id.id'] = stage_id
+        val['stage_id/id'] = stage_id
         val['state'] = get_lead_state(sugar_obj, cr, uid, val,context)
-        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_lead)
+        if val.get('primary_address_country'):
+            country_id = get_all_countries(sugar_obj, cr, uid, val.get('primary_address_country'), context)
+            state = get_all_states(sugar_obj,cr, uid, val.get('primary_address_state'), country_id, context)
+            val['country_id.id'] =  country_id
+            val['state_id.id'] =  state            
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_lead, context)
         lead_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', noupdate=True, context=context)
     return True
 
 def get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_xml_id, context=None):
     if not context:
         context={}
-    partner_contact_name = False        
+    partner_contact_name = False 
+    partner_contact_email = False       
     model_obj = sugar_obj.pool.get('ir.model.data')
     partner_address_obj = sugar_obj.pool.get('res.partner.address')
     model_account_ids = model_obj.search(cr, uid, [('res_id', '=', partner_xml_id[0]), ('model', '=', 'res.partner'), ('module', '=', 'sugarcrm_import')])
@@ -911,9 +1101,10 @@
                 address_id = partner_address_obj.browse(cr, uid, model_id)
                 partner_address_obj.write(cr, uid, [address_id.id], {'partner_id': partner_xml_id[0]})
                 partner_contact_name = address_id.name
+                partner_contact_email = address_id.email
             else:
-                partner_contact_name = val.get('account_name')    
-    return partner_contact_name 
+                partner_contact_name = val.get('account_name')
+    return partner_contact_name, partner_contact_email
 
 def import_opportunities(sugar_obj, cr, uid, context=None):
     if not context:
@@ -925,11 +1116,12 @@
         'title_action': 'next_step',
         'partner_address_id/name': 'partner_address_id/name',
         'planned_revenue': 'amount',
-        'date_deadline':'date_closed',
+        'date_deadline': ['__datetime__', 'date_closed'],
         'user_id/id' : 'assigned_user_id',
         'stage_id/id' : 'stage_id/id',
         'type' : 'type',
-        'categ_id.id': 'categ_id.id'
+        'categ_id/id': 'categ_id/id',
+        'email_from': 'email_from'
     }
     lead_obj = sugar_obj.pool.get('crm.lead')
     partner_obj = sugar_obj.pool.get('res.partner')
@@ -939,9 +1131,10 @@
         partner_xml_id = partner_obj.search(cr, uid, [('name', 'like', val.get('account_name'))])
         if not partner_xml_id:
             raise osv.except_osv(_('Warning !'), _('Reference Partner %s cannot be created, due to Lower Record Limit in SugarCRM Configuration.') % val.get('account_name'))
-        partner_contact_name = get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_xml_id, context)
+        partner_contact_name, partner_contact_email = get_opportunity_contact(sugar_obj,cr,uid, PortType, sessionid, val, partner_xml_id, context)
         val['partner_address_id/name'] = partner_contact_name
-        val['categ_id.id'] = get_category(sugar_obj, cr, uid, 'crm.lead', val.get('opportunity_type'))                    
+        val['email_from'] = partner_contact_email
+        val['categ_id/id'] = get_category(sugar_obj, cr, uid, 'crm.lead', val.get('opportunity_type'))                    
         val['type'] = 'opportunity'
         val['stage_id/id'] = get_opportunity_status(sugar_obj, cr, uid, val, context)
         fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_opportunity)
@@ -965,17 +1158,21 @@
                      'process' : import_leads,
                     },
               'Contacts':
-                    {'dependencies' : [],  #Object to import before this table
+                    {'dependencies' : ['Users', 'Accounts'],  #Object to import before this table
                      'process' : import_partner_address,
                     },
               'Accounts':
-                    {'dependencies' : ['Users', 'Contacts'],  #Object to import before this table
+                    {'dependencies' : ['Users'],  #Object to import before this table
                      'process' : import_partners,
                     },
               'Users': 
                     {'dependencies' : [],
                      'process' : import_users,
                     },
+              'Documents': 
+                    {'dependencies' : ['Users'],
+                     'process' : import_documents,
+                    },
               'Meetings': 
                     {'dependencies' : ['Accounts', 'Contacts', 'Users'],
                      'process' : import_meetings,
@@ -1000,9 +1197,12 @@
                     {'dependencies' : ['Users', 'Projects', 'Project Tasks'],
                      'process' : import_bug,
                     },                         
-              
+              'Claims': 
+                    {'dependencies' : ['Users', 'Accounts', 'Contacts', 'Leads'],
+                     'process' : import_claims,
+                    },                         
               'Emails': 
-                    {'dependencies' : ['Users'],
+                    {'dependencies' : ['Users', 'Projects', 'Project Tasks', 'Accounts', 'Contacts', 'Leads', 'Opportunities', 'Meetings', 'Calls'],
                      'process' : import_emails,
                     },    
               
@@ -1033,26 +1233,32 @@
         'employee': fields.boolean('Employee', help="If Employees is checked, SugarCRM Employees data imported in OpenERP employees form"),
         'meeting': fields.boolean('Meetings', help="If Meetings is checked, SugarCRM Meetings data imported in OpenERP meetings form"),
         'call': fields.boolean('Calls', help="If Calls is checked, SugarCRM Calls data imported in OpenERP phonecalls form"),
+        'claim': fields.boolean('Claims', help="If Claims is checked, SugarCRM Claims data imported in OpenERP Claims form"),
         'email': fields.boolean('Emails', help="If Emails is checked, SugarCRM Emails data imported in OpenERP Emails form"),
         'project': fields.boolean('Projects', help="If Projects is checked, SugarCRM Projects data imported in OpenERP Projects form"),
         'project_task': fields.boolean('Project Tasks', help="If Project Tasks is checked, SugarCRM Project Tasks data imported in OpenERP Project Tasks form"),
+        'task': fields.boolean('Tasks', help="If Tasks is checked, SugarCRM Tasks data imported in OpenERP Meetings form"),
         'bug': fields.boolean('Bugs', help="If Bugs is checked, SugarCRM Bugs data imported in OpenERP Project Issues form"),
         'attachment': fields.boolean('Attachments', help="If Attachments is checked, SugarCRM Notes data imported in OpenERP's Related module's History with attachment"),
+         'document': fields.boolean('Documents', help="If Documents is checked, SugarCRM Documents data imported in OpenERP Document Form"),
         'username': fields.char('User Name', size=64),
         'password': fields.char('Password', size=24),
     }
-    _defaults = { #to be set to true, but easier for debugging
-       'opportunity': False,
-       'user' : False,
-       'contact' : False,
-       'account' : False,
-        'employee' : False,
-        'meeting' : False,
-        'call' : False,    
-        'email' : False, 
-        'project' : False,   
-        'project_task': False,     
-        'bug': False,
+    _defaults = {#to be set to true, but easier for debugging
+       'opportunity': True,
+       'user' : True,
+       'contact' : True,
+       'account' : True,
+        'employee' : True,
+        'meeting' : True,
+        'task' : True,
+        'call' : True,
+        'claim' : True,    
+        'email' : True, 
+        'project' : True,   
+        'project_task': True,     
+        'bug': True,
+        'document': True
     }
     
     def get_key(self, cr, uid, ids, context=None):
@@ -1073,8 +1279,12 @@
                 key_list.append('Employees')  
             if current.meeting:
                 key_list.append('Meetings')
+            if current.task:
+                key_list.append('Tasks')
             if current.call:
                 key_list.append('Calls')
+            if current.claim:
+                key_list.append('Claims')                
             if current.email:
                 key_list.append('Emails') 
             if current.project:
@@ -1084,7 +1294,9 @@
             if current.bug:
                 key_list.append('Bugs')
             if current.attachment:
-                key_list.append('Notes')                                    
+                key_list.append('Notes')     
+            if current.document:
+                key_list.append('Documents')                                                  
         return key_list
 
     def import_all(self, cr, uid, ids, context=None):

=== modified file 'import_sugarcrm/import_sugarcrm_view.xml'
--- import_sugarcrm/import_sugarcrm_view.xml	2011-04-21 13:03:16 +0000
+++ import_sugarcrm/import_sugarcrm_view.xml	2011-04-28 06:57:43 +0000
@@ -14,7 +14,9 @@
                          <group colspan="4" col="6">
                          	<field name="opportunity" />
                          	<field name= "meeting" />
+                         	<field name= "task" />
                          	<field name= "call" />
+                         	<field name= "claim" />
 	                         <field name= "account" />
 	                         <field name= "contact" />
 	                         <field name="user" />
@@ -23,7 +25,8 @@
 	                         <field name= "project" />
 	                         <field name= "project_task" />
 	                         <field name= "bug" string="Project Issue"/>
-	                         <field name= "attachment" />
+	                         <field name= "document" />
+	                         <field name= "attachment" string="History and Attachment" />
                          </group>
                          <field name="username" invisible="1"/>
                          <field name="password" invisible="1"/>
@@ -32,7 +35,7 @@
                     <group colspan="4" >
                         <label string="" colspan="2"/>
                         <button  icon="gtk-cancel" special="cancel" string="_Cancel"/>
-                        <button name="import_all" string="Import"
+                        <button name="import_all" string="_Import"
                                 type="object" icon="terp-camera_test"/>
                    </group>
                 </form>

=== modified file 'import_sugarcrm/sugar.py'
--- import_sugarcrm/sugar.py	2011-04-15 06:13:38 +0000
+++ import_sugarcrm/sugar.py	2011-04-28 06:57:43 +0000
@@ -70,8 +70,10 @@
   se_req._module_name = module_name
   se_resp = portType.get_note_attachment(se_req)
   file = False
+  filename = False
   file = se_resp._return._note_attachment.File
-  return file
+  filename = se_resp._return._note_attachment.Filename
+  return file, filename
 
 def user_get_attendee_list(portType, sessionid, module_name=None, module_id=None):
   se_req = get_attendee_listRequest()
@@ -91,6 +93,18 @@
       attendee_list.append(attendee_dict)
   return attendee_list         
 
+def contact_emails_search(portType, username, password, email_address=None):
+  se_req = contact_by_emailRequest()
+  se_req._user_name = username
+  se_req._password = password
+  se_req._email_address = email_address
+  se_resp = portType.contact_by_email(se_req)
+  ans_list = []
+  for list in se_resp._return:
+      if list.Email_address and list.Email_address not in ans_list:
+          ans_list.append(list.Email_address)
+  return ans_list
+
 def search(portType, sessionid, module_name=None):
   se_req = get_entry_listRequest()
   se_req._session = sessionid

=== modified file 'import_sugarcrm/sugarcrm_fields_mapping.py'
--- import_sugarcrm/sugarcrm_fields_mapping.py	2011-04-21 13:12:39 +0000
+++ import_sugarcrm/sugarcrm_fields_mapping.py	2011-04-28 06:57:43 +0000
@@ -18,8 +18,21 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
+import tools
+import pytz
+import time
+from datetime import datetime, timedelta, date
+from dateutil import parser
+import dateutil
 
-def sugarcrm_fields_mapp(dict_sugar, openerp_dict):
+def sugarcrm_fields_mapp(dict_sugar, openerp_dict, context=None):
+    if not context:
+        context = {}
+    if 'tz' in context and context['tz']:
+          time_zone = context['tz']
+    else:
+          time_zone = tools.get_server_timezone()
+    au_tz = pytz.timezone(time_zone)
     fields=[]
     data_lst = []
     for key,val in openerp_dict.items():
@@ -30,6 +43,16 @@
                 if len(val) >= 1 and val[0] == "__prettyprint__":
                     val = val[1:]
                     data_lst.append('\n\n'.join(map(lambda x : x + ": " + dict_sugar.get(x,''), val)))
+                elif val[0] == '__datetime__' and dict_sugar.get(val[1]):
+                    val = val[1]
+                    if dict_sugar.get(val) and len(dict_sugar.get(val))<=10:
+                        updated_dt = date.fromtimestamp(time.mktime(time.strptime(dict_sugar.get(val), '%Y-%m-%d')))
+                    else:
+                        convert_date = datetime.strptime(dict_sugar.get(val), '%Y-%m-%d %H:%M:%S')
+                        edate = convert_date.replace(tzinfo=dateutil.tz.gettz('UTC'))
+                        au_dt = au_tz.normalize(edate.astimezone(au_tz))
+                        updated_dt = datetime(*au_dt.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S')
+                    data_lst.append(updated_dt)
                 else:
                     if key == 'duration':
                         data_lst.append('.'.join(map(lambda x : dict_sugar.get(x,''), val)))


Follow ups