← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-addons/trunk-import_salesforce-backlog2-jam into lp:~openerp-dev/openobject-addons/trunk-import_salesforce

 

Jigar Amin - OpenERP has proposed merging lp:~openerp-dev/openobject-addons/trunk-import_salesforce-backlog2-jam into lp:~openerp-dev/openobject-addons/trunk-import_salesforce.

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

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_salesforce-backlog2-jam/+merge/58069

Hello, 
    Following are the improvement in Sales-force Integration Project.
      +  Fixed Lead, Opportunity and Claim Stages.
      +  Added text field in wizard for Showing the Import Message, which will complete the whole transaction proper way.
      +  Added SoapfaultError for all Import, 
      +  Added User and Contact for the Meeting invitee
      +  Importing the Opportunity History
      +  buidbot warning fix and logger messages improved
      +  Fixing the lead data for the Opportunity which converted from lead
      +  import claim notes details, 
      +  import attachments and linking them to the resources if resource exists.
      +  Import Note for the opportunity
      + Login Validation and Raise On Faulty Login
Kindly Review this
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_salesforce-backlog2-jam/+merge/58069
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/trunk-import_salesforce.
=== modified file 'import_salesforce/__openerp__.py'
--- import_salesforce/__openerp__.py	2011-04-07 06:49:14 +0000
+++ import_salesforce/__openerp__.py	2011-04-18 05:27:52 +0000
@@ -20,10 +20,14 @@
 ##############################################################################
 
 {
-    'name': 'SaleForce Data Synchronization.',
+    'name': 'Imports SaleForce Data.',
     'version': '1.0',
     'category': 'Generic Modules',
-    'description': """This Module Import SaleForce 'Leads', 'Opportunity', and 'contacts' Data into OpenERP Module.""",
+    'description': """
+This Module Import SaleForce 'Leads', 'Opportunity', 'Contacts' , 'Cases', 'User', 
+'Events', 'Activity' and Other history Detail data into OpenERP Module.
+
+""",
     'author': 'OpenERP SA',
     'website': 'http://www.openerp.com',
     'depends': [ 'base','crm_claim'],

=== modified file 'import_salesforce/import_sf.py'
--- import_salesforce/import_sf.py	2011-04-08 13:29:35 +0000
+++ import_salesforce/import_sf.py	2011-04-18 05:27:52 +0000
@@ -22,16 +22,20 @@
 from datetime import datetime
 from osv import osv
 from osv import fields
-from tools.translate import _ 
+from tools.translate import _
+
 try:
     import beatbox
+    from beatbox import SoapFaultError
 except ImportError:
     raise osv.except_osv(_('BeaobtBox Import Error!'), _('Please install beatbox api for SaleForce - beatbox-20.0.zip.\nhttp://pypi.python.org/pypi/beatbox'))
+
 import logging
 
 DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
 ACT_TYPE = ''
 
+
 def dataMapping(dictsf, dictoe):
     '''
     Helper Method to Map Field & Values in list
@@ -43,10 +47,10 @@
         if key not in fields and dictsf.get(isinstance(val, list) and val[0] or val):
             fields.append(key)
             if isinstance(val, list):
-                data.append(' '.join(map(lambda x : dictsf[x], val)))
+                data.append(' '.join(map(lambda x: dictsf[x], val)))
             else:
-                data.append(dictsf.get(val,''))
-    return fields,data
+                data.append(dictsf.get(val, ''))
+    return fields, data
 
 
 def getSFLogin(client, usr, pwd):
@@ -57,11 +61,12 @@
     '''
     try:
         sfi = client.login(usr, pwd)
-        return client,sfi
+        return client, sfi
+    except SoapFaultError, sfe:
+        raise osv.except_osv(_('Error !'), _('%s.\n%s')%(sfe.faultCode, str(sfe.faultString)))
     except Exception, e:
-        log = logging.getLogger('import.salesforce')
-        log.warning(str(e))
-        return False
+        raise osv.except_osv(_('Error !'), _('%s')%(e.value))
+
 
 def prepareStatement(fieldMap, model):
     '''
@@ -73,184 +78,418 @@
             field.append(val)
     sql = "SELECT " + ", ".join(field) + " FROM " + model
     return sql
-    
+
+
+def importAttachment(sf_obj, cr, uid, sfc, context):
+    attachment_pool = sf_obj.pool.get('ir.attachment')
+    data_pool = sf_obj.pool.get('ir.model.data')
+    try:
+        sqlStmt = prepareStatement(MODEL_MAP.get('Attachment').get('field_map'), 'Attachment')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            fields = MODEL_MAP.get('Attachment').get('field_map')
+            model_data = data_pool.search(cr, uid, [('name', '=', rec.get('ParentId', False))])
+            rec.update({'ParentId': False})
+            if model_data:
+                res = data_pool.browse(cr, uid, model_data[0], context)
+                fields.update({'res_model': 'model'})
+                rec.update({'model': res.model})
+                rec.update({'ParentId': res.res_id})
+            fields.update({'datas_fname': 'datas_fname'})
+            rec.update({'datas_fname': rec.get('Name')})
+            field, data = dataMapping(rec, fields)
+            attachment_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            fields.pop('res_model')
+            fields.pop('datas_fname')
+
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
+    except Exception, e:
+        log = logging.getLogger('import.salesforce')
+        log.warning(str(e))
+        return False
+    return True
+
+
+def importNote(sf_obj, cr, uid, sfc, context):
+    message_pool = sf_obj.pool.get('mailgate.message')
+    data_pool = sf_obj.pool.get('ir.model.data')
+    try:
+        sqlStmt = prepareStatement(MODEL_MAP.get('Note').get('field_map'), 'Note')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            fields = MODEL_MAP.get('Note').get('field_map')
+            model_data = data_pool.search(cr, uid, [('name', '=', rec.get('ParentId', False))])
+            fields.update({'date': 'date'})
+            rec.update({'date': datetime.now().strftime(DATETIME_FORMAT)})
+            rec.update({'ParentId': False})
+            if model_data:
+                res = data_pool.browse(cr, uid, model_data[0], context)
+                fields.update({'model': 'model'})
+                rec.update({'model': res.model})
+                rec.update({'ParentId': res.res_id})
+            field, data = dataMapping(rec, fields)
+            message_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            if model_data:
+                fields.pop('model')
+            fields.pop('date')
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
+    except Exception, e:
+        log = logging.getLogger('import.salesforce')
+        log.warning(str(e))
+        return False
+    return True
+
+
 def titleMapping(sf_obj, cr, uid, salutation, domain, context):
     '''
     Helper Method to resolve title dependency
     '''
-    if salutation: 
+    if salutation:
         title_pool = sf_obj.pool.get('res.partner.title')
-        ids = title_pool.search(cr, uid, [('domain','=',domain),'|',('shortcut','=',salutation), ('name','=',salutation)])
+        ids = title_pool.search(cr, uid, [('domain', '=', domain), '|', ('shortcut', '=', salutation), ('name', '=', salutation)])
         if ids:
             return ids[0]
         else:
-            id = title_pool.create(cr, uid, {'name':salutation, 'shortcut':salutation, 'domain':domain}, context)
+            id = title_pool.create(cr, uid, {'name': salutation, 'shortcut': salutation, 'domain': domain}, context)
             return id
     return False
-    
+
+
 def priorityMapping(sf_obj, cr, uid, rating, context):
     '''
     Helper Method to Priority of Lead/Opportunity
     '''
     priMap = {
-        'Hot' : '2',
-        'Warm' : '3',
-        'Cold' : '4'
-    } 
+        'Hot': '2',
+        'Warm': '3',
+        'Cold': '4',
+    }
     return priMap.get(rating, '4')
 
-def statusMapping(sf_obj, cr, uid, status, ctype ,context):
-    '''
-    Helper Method to resolve Status dependency of Lead/Opportunity
+
+def leadStateMapping(sf_obj, cr, uid, state, context):
+    '''
+    Helper Method to resolve State dependency.
+    '''
+    stateMap = {
+        'Open - Not Contacted': 'draft',
+        'Working - Contacted': 'open',
+        'Closed - Converted': 'done',
+        'Closed - Not Converted': 'cancel',
+    }
+    return stateMap.get(state, False)
+
+
+def leadStatusMapping(sf_obj, cr, uid, status, context):
+    '''
+    Helper Method to resolve Status dependency.
     '''
     stageMap = {
-        'Open - Not Contacted':'New', 
-        'Working - Contacted' :'Negotiation',
-        'Closed - Converted' :'Won', 
-        'Closed - Not Converted':'Lost',
-    } 
+        'Open - Not Contacted': 'New',
+        'Working - Contacted': 'Negotiation',
+        'Closed - Converted': 'Won',
+        'Closed - Not Converted': 'Lost',
+    }
     stage_pool = sf_obj.pool.get('crm.case.stage')
-    ids = stage_pool.search(cr, uid, [('type','=' , ctype), ('name', '=', stageMap.get(status,''))])
+    ids = stage_pool.search(cr, uid, [('type', '=', 'lead'), ('name', '=', stageMap.get(status, ''))])
     if ids:
         return ids[0]
     return False
-   
+
+
 def getUserId(sf_obj, cr, uid, user, context):
     '''
     Helper Method to to get SalesForce Owner id for User
     '''
-    return user.get('Id',False)
+    return user.get('Id', False)
+
 
 def getLocalId(sf_obj, cr, uid, state, country, context):
-    if state or country :
+    if state or country:
         state_pool = sf_obj.pool.get('res.country.state')
         country_pool = sf_obj.pool.get('res.country')
-        sid = state_pool.search(cr, uid, ['|',('name','=',state ),('code','=',state[0:2] )])
-        cid = country_pool.search(cr, uid, ['|',('name','=',country ),('code','=',country[0:2])])
+        sid = state_pool.search(cr, uid, ['|', ('name', '=', state), ('code', '=', state[0:2])])
+        cid = country_pool.search(cr, uid, ['|', ('name', '=', country), ('code', '=', country[0:2])])
         if sid:
             st_id = state_pool.browse(cr, uid, sid[0])
-            return sid[0],st_id.country_id.id
+            return sid[0], st_id.country_id.id
         elif not sid and cid:
-            sid = state_pool.create(cr, uid, {'name':state, 'code':state[0:2], 'country_id' : cid[0]})
-            return sid, cid[0]            
+            sid = state_pool.create(cr, uid, {'name': state, 'code': state[0:2], 'country_id': cid[0]})
+            return sid, cid[0]
     return False, False
-    
+
+
+def importLead(sf_obj, cr, uid, context):
+    lead_pool = sf_obj.pool.get('crm.lead')
+    try:
+        sfc = beatbox.PythonClient()
+        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        sqlStmt = prepareStatement(MODEL_MAP.get('Lead').get('field_map'), 'Lead')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            fields = MODEL_MAP.get('Lead').get('field_map')
+            rec.update({'Salutation': titleMapping(sf_obj, cr, uid, rec.get('Salutation', False), 'contact', context)})
+            rec.update({'Rating': priorityMapping(sf_obj, cr, uid, rec.get('Rating', False), context)})
+            fields.update({'state': 'state'})
+            rec.update({'state': leadStateMapping(sf_obj, cr, uid, rec.get('Status', False), context)})
+            rec.update({'Status': leadStatusMapping(sf_obj, cr, uid, rec.get('Status', False), context)})
+            state_id, conutry_id = getLocalId(sf_obj, cr, uid, rec.get('State', False), rec.get('Country', False), context)
+            rec.update({'State': state_id, 'Country': conutry_id})
+            rec.update({'CreatedBy.Id': getUserId(sf_obj, cr, uid, rec.get('CreatedBy', False), context)})
+            field, data = dataMapping(rec, fields)
+            field.append('type')
+            data.append('lead')
+            lead_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            fields.pop('state')
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
+    except Exception, e:
+        log = logging.getLogger('import.salesforce')
+        log.warning(str(e))
+        return False
+    return True
+
+
+def importUser(sf_obj, cr, uid, context):
+    user_pool = sf_obj.pool.get('res.users')
+    try:
+        sfc = beatbox.PythonClient()
+        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        sqlStmt = prepareStatement(MODEL_MAP.get('User').get('field_map'), 'User')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            field, data = dataMapping(rec, MODEL_MAP.get('User').get('field_map'))
+            user_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
+    except Exception, e:
+        log = logging.getLogger('import.salesforce')
+        log.warning(str(e))
+        return False
+    return True
+
+
+def oppoStateMapping(sf_obj, cr, uid, state, context):
+    '''
+    Helper Method to resolve State dependency.
+    '''
+    stateMap = {
+            'Prospecting': 'draft',
+            'Qualification': 'open',
+            'Needs Analysis': 'open',
+            'Value Proposition': 'open',
+            'Id. Decision Makers': 'open',
+            'Perception Analysis': 'open',
+            'Proposal/Price Quote': 'open',
+            'Negotiation/Review': 'open',
+            'Closed Won': 'done',
+            'Closed Lost': 'cancel',
+    }
+    return stateMap.get(state, False)
+
+
+def oppoStatusMapping(sf_obj, cr, uid, status, context):
+    '''
+    Helper Method to resolve Status dependency.
+    '''
+    stageMap = {
+            'Prospecting': 'New',
+            'Qualification': 'Qualification',
+            'Needs Analysis': 'Qualification',
+            'Value Proposition': 'Proposition',
+            'Id. Decision Makers': 'Proposition',
+            'Perception Analysis': 'Proposition',
+            'Proposal/Price Quote': 'Proposition',
+            'Negotiation/Review': 'Negotiation',
+            'Closed Won': 'Won',
+            'Closed Lost': 'Lost',
+    }
+    stage_pool = sf_obj.pool.get('crm.case.stage')
+    ids = stage_pool.search(cr, uid, [('type', '=', 'opportunity'), ('name', '=', stageMap.get(status, ''))])
+    if ids:
+        return ids[0]
+    return False
+
+
+def importOpportunityHistory(sf_obj, cr, uid, sfc, context):
+    message_pool = sf_obj.pool.get('mailgate.message')
+    data_pool = sf_obj.pool.get('ir.model.data')
+    try:
+        sqlStmt = prepareStatement(MODEL_MAP.get('OpportunityHistory').get('field_map'), 'OpportunityHistory')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            fields = MODEL_MAP.get('OpportunityHistory').get('field_map')
+            sfopp_id = rec.pop('OpportunityId')
+            opp_id = data_pool.search(cr, uid, [('model', '=', 'crm.lead'), ('name', '=', sfopp_id)])
+            if opp_id:
+                res = data_pool.browse(cr, uid, opp_id[0], context)
+                fields.update({'model': 'model'})
+                rec.update({'model': 'crm.lead'})
+
+                rec.update({'res_id': res.res_id})
+                rec.update({'name': "Changed Stage to: " + rec.get('StageName', '')})
+                rec.update({'CloseDate': rec.get('CloseDate').strftime(DATETIME_FORMAT)})
+                fields.update({'description': 'description'})
+                rec.update({'description': "Changed Stage to: " + rec.get('StageName', '')})
+                field, data = dataMapping(rec, fields)
+                message_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+                fields.pop('model')
+                fields.pop('description')
+            else:
+                continue
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
+    except Exception, e:
+        log = logging.getLogger('import.salesforce')
+        log.warning(str(e))
+        return False
+    return True
+
+
+def getOpportunityPartner(sf_obj, cr, uid, sfc, account_id, context):
+    if account_id:
+        account = sfc.query("SELECT Id, Name FROM Account WHERE Id = '%s'"%account_id)
+        partner_pool = sf_obj.pool.get('res.partner')
+        partner = partner_pool.search(cr, uid, [('name', '=', account[0].get('Name'))], context=context)
+        if partner:
+            return partner[0]
+    return False
+
+
+def importOpportunity(sf_obj, cr, uid, context):
+    lead_pool = sf_obj.pool.get('crm.lead')
+    try:
+        sfc = beatbox.PythonClient()
+        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        sqlStmt = prepareStatement(MODEL_MAP.get('Opportunity').get('field_map'), 'Opportunity')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            fields = MODEL_MAP.get('Opportunity').get('field_map')
+            rec.update({'type': 'opportunity'})
+            rec.update({'AccountId': getOpportunityPartner(sf_obj, cr, uid, sfc, rec.get('AccountId', False), context)})
+            lead = sfc.query("SELECT Id, Name, Status, Salutation, Title, Street, PostalCode, Country, State, Email, Fax, MobilePhone FROM Lead WHERE ConvertedOpportunityId = '%s'"%rec.get('Id'))
+            lead_fields= ['partner_name', 'title/.id', 'function', 'street',
+                        'city', 'email_from', 'mobile', 'zip',
+                        'state_id/.id', 'country_id/.id']
+            if lead:
+                lead = lead[0]
+                fields.update({'partner_name': 'LeadName',
+                                'title/.id': 'Salutation',
+                                'function': 'Title',
+                                'street': 'Street',
+                                'city': 'City',
+                                'state_id/.id': 'State',
+                                'country_id/.id': 'Country',
+                                'email_from': 'Email',
+                                'mobile': 'MobilePhone',
+                                'zip': 'PostalCode',
+                                })
+                state_id, conutry_id = getLocalId(sf_obj, cr, uid, lead.get('State', False), lead.get('Country', False), context)
+                rec.update({'LeadName': lead.get('Name', ''),
+                            'Salutation': titleMapping(sf_obj, cr, uid, lead.get('Salutation', False), 'contact', context),
+                            'Title': lead.get('Title', False),
+                            'Street': lead.get('Street', False),
+                            'City': lead.get('City', False),
+                            'State': state_id,
+                            'Country': conutry_id,
+                            'Email': lead.get('Email', False),
+                            'MobilePhone': lead.get('MobilePhone', False),
+                            'PostalCode': lead.get('PostalCode', False),
+                            })
+            fields.update({'state': 'state'})
+            rec.update({'state': oppoStateMapping(sf_obj, cr, uid, rec.get('StageName', False), context)})
+            rec.update({'StageName': oppoStatusMapping(sf_obj, cr, uid, rec.get('StageName', False), context)})
+            rec.update({'CreatedBy.Id': getUserId(sf_obj, cr, uid, rec.get('CreatedBy', False), context)})
+            field, data = dataMapping(rec, fields)
+            lead_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            if lead:
+                for fid in lead_fields:
+                    fields.pop(fid)
+            fields.pop('state')
+        MODEL_MAP['OpportunityHistory']['function'](sf_obj, cr, uid, sfc, context)
+        MODEL_MAP['Note']['function'](sf_obj, cr, uid, sfc, context)
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
+    except Exception, e:
+        log = logging.getLogger('import.salesforce')
+        log.warning(str(e))
+        return False
+    return True
+
+
 def importAddress(sf_obj, cr, uid, address, context):
     address_pool = sf_obj.pool.get('res.partner.address')
-    aids  = []
+    aids = []
     for key, val in address.items():
-        asids = address_pool.search(cr, uid, [('name','=',val.get('name')), ('type','=',val.get('type'))])
+        asids = address_pool.search(cr, uid, [('name', '=', val.get('name')), ('type', '=', val.get('type'))])
         if asids:
             aids.extend(asids)
         else:
-            state, conutry = getLocalId(sf_obj, cr, uid, val.get('State', False), val.get('Country', False) , context)
-            val.update({'state_id' :state })
-            val.update({'country_id' :conutry })
+            state, conutry = getLocalId(sf_obj, cr, uid, val.get('State', False), val.get('Country', False), context)
+            val.update({'state_id': state})
+            val.update({'country_id': conutry})
             aids.append(address_pool.create(cr, uid, val, context))
     return aids
 
-def importLead(sf_obj, cr, uid, context):
-    lead_pool = sf_obj.pool.get('crm.lead')
-    try:
-        sfc = beatbox.PythonClient()
-        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
-        sqlStmt =  prepareStatement(MODEL_MAP.get('Lead').get('field_map'), 'Lead')
-        sfVals = sfc.query(sqlStmt)
-        for rec in sfVals:
-            rec.update({'Salutation' : titleMapping(sf_obj, cr, uid, rec.get('Salutation', False), 'contact' , context) })
-            rec.update({'Rating' : priorityMapping(sf_obj, cr, uid, rec.get('Rating', False), context)})
-            rec.update({'Status' : statusMapping(sf_obj, cr, uid, rec.get('Status', False), 'lead', context)})
-            state, conutry = getLocalId(sf_obj, cr, uid, rec.get('State', False), rec.get('Country', False) , context)
-            rec.update({'State':state, 'Country' : conutry })
-            rec.update({'CreatedBy.Id' : getUserId(sf_obj, cr, uid, rec.get('CreatedBy', False), context)})
-            field, data = dataMapping(rec, MODEL_MAP.get('Lead').get('field_map'))
-            field.append('type')
-            data.append('lead')
-            lead_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
-    except Exception, e:
-        log = logging.getLogger('import.salesforce')
-        log.warning(str(e))
-        return False
-    return True
-
-def importUser(sf_obj, cr, uid, context):
-    user_pool = sf_obj.pool.get('res.users')
-    try:
-        sfc = beatbox.PythonClient()
-        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
-        sqlStmt =  prepareStatement(MODEL_MAP.get('User').get('field_map'), 'User')
-        sfVals = sfc.query(sqlStmt)
-        for rec in sfVals:
-            field, data = dataMapping(rec, MODEL_MAP.get('User').get('field_map'))
-            user_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce',  noupdate=True, context=context)
-    except Exception, e:
-        log = logging.getLogger('import.salesforce')
-        log.warning(str(e))
-        return False
-    return True
-
-def importOpportunity(sf_obj, cr, uid, context):
-    lead_pool = sf_obj.pool.get('crm.lead')
-    try:
-        sfc = beatbox.PythonClient()
-        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
-        sqlStmt =  prepareStatement(MODEL_MAP.get('Opportunity').get('field_map'), 'Opportunity')
-        sfVals = sfc.query(sqlStmt)
-        for rec in sfVals:
-            rec.update({'type':'opportunity'})
-            rec.update({'CreatedBy.Id' : getUserId(sf_obj, cr, uid, rec.get('CreatedBy', False), context)})
-            field, data = dataMapping(rec, MODEL_MAP.get('Opportunity').get('field_map'))
-            lead_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
-    except Exception, e:
-        log = logging.getLogger('import.salesforce')
-        log.warning(str(e))
-        return False
-    return True
-    
+
 def importContact(sf_obj, cr, uid, context):
     partner_pool = sf_obj.pool.get('res.partner')
     try:
         addressDict = {
-            'contact' : {
-                'cstreet' : 'MailingStreet',
-                'ccity' :'MailingCity',
-                'cphone' : 'Phone',
-                'cmobile' : 'MobilePhone',
-                'czip' : 'MailingPostalCode',
-                'cstate_id/.id' : 'MailingState',
-                'ccountry_id/.id' : 'MailingCountry',
-                'cfax' : 'Fax',
-            },
-            'other' : {
-                'ostreet' : 'OtherStreet',
-                'ocity' : 'OtherCity', 
-                'ocountry_id' : 'OtherCountry', 
-                'ostate_id' : 'OtherState', 
-                'ozip' : 'OtherPostalCode', 
-                'ophone' : 'OtherPhone',                         
-            }, 
-            'invoice' : {
-                'bstreet' : 'BillingStreet',
-                'bcity' : 'BillingCity', 
-                'bcountry_id' : 'BillingCountry', 
-                'bstate_id' : 'BillingState', 
-                'bzip' : 'BillingPostalCode', 
-            },
-            'delivery' : {
-                'sstreet' : 'ShippingStreet',
-                'scity' : 'ShippingCity', 
-                'scountry_id' : 'ShippingCountry', 
-                'sstate_id' : 'ShippingState', 
-                'szip' : 'ShippingPostalCode', 
+            'contact': {
+                'cstreet': 'MailingStreet',
+                'ccity': 'MailingCity',
+                'cphone': 'Phone',
+                'cmobile': 'MobilePhone',
+                'czip': 'MailingPostalCode',
+                'cstate_id/.id': 'MailingState',
+                'ccountry_id/.id': 'MailingCountry',
+                'cfax': 'Fax',
+            },
+            'other': {
+                'ostreet': 'OtherStreet',
+                'ocity': 'OtherCity',
+                'ocountry_id': 'OtherCountry',
+                'ostate_id': 'OtherState',
+                'ozip': 'OtherPostalCode',
+                'ophone': 'OtherPhone',
+            },
+            'invoice': {
+                'bstreet': 'BillingStreet',
+                'bcity': 'BillingCity',
+                'bcountry_id': 'BillingCountry',
+                'bstate_id': 'BillingState',
+                'bzip': 'BillingPostalCode',
+            },
+            'delivery': {
+                'sstreet': 'ShippingStreet',
+                'scity': 'ShippingCity',
+                'scountry_id': 'ShippingCountry',
+                'sstate_id': 'ShippingState',
+                'szip': 'ShippingPostalCode',
             },
         }
-            
+
         sfc = beatbox.PythonClient()
         sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
-        sqlStmt =  prepareStatement(MODEL_MAP.get('Contact').get('field_map'), 'Contact')
+        sqlStmt = prepareStatement(MODEL_MAP.get('Contact').get('field_map'), 'Contact')
         sfVals = sfc.query(sqlStmt)
         for rec in sfVals:
-            add_dict  = {}
+            add_dict = {}
             for add in addressDict:
                 addr = {}
                 for key, vals in addressDict.get(add).items():
@@ -258,154 +497,247 @@
                         nkey = key[1:]
                         val = rec.pop(vals)
                         addr.update({nkey: val})
-                    if add in ['invoice','delivery' ]:
+                    if add in ['invoice', 'delivery']:
                         account = rec.get('Account')
                         nkey = key[1:]
                         val = account.pop(vals)
                         addr.update({nkey: val})
-                    addr.update({'type' : add})
-                    addr.update({'name' : rec.get('Name')})
-                add_dict.update({add : addr})
+                    addr.update({'type': add})
+                    addr.update({'email': rec.get('Email')})
+                    addr.update({'name': rec.get('Name')})
+                add_dict.update({add: addr})
             rec.pop('Account')
+            fields = MODEL_MAP.get('Contact').get('field_map')
+            rec.pop('Email')
             addIds = importAddress(sf_obj, cr, uid, add_dict, context)
-            rec.update({'Title' : titleMapping(sf_obj, cr, uid, rec.get('Title', False), 'partner' , context)})
-            field, data = dataMapping(rec, MODEL_MAP.get('Contact').get('field_map'))
-            partner_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce',  noupdate=True, context=context)
-            sid = partner_pool.search(cr, uid, [('name' , '=', rec.get('Name'))])
+            rec.update({'Title': titleMapping(sf_obj, cr, uid, rec.get('Title', False), 'partner', context)})
+            field, data = dataMapping(rec, fields)
+            partner_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            sid = partner_pool.search(cr, uid, [('name', '=', rec.get('Name'))])
             for i in sid:
-                partner_pool.write(cr, uid, i,{'address' : [(6,0,addIds)]}, context)
+                partner_pool.write(cr, uid, i, {'address': [(6, 0, addIds)]}, context)
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
     except Exception, e:
         log = logging.getLogger('import.salesforce')
         log.warning(str(e))
         return False
     return True
 
+
 def claimPriorityMapping(sf_obj, cr, uid, rating, context):
     '''
     Helper Method to Priority of Lead/Opportunity
     '''
     priMap = {
-        'High' : '2',
-        'Medium' : '3',
-        'Low' : '4'
-    } 
+        'High': '2',
+        'Medium': '3',
+        'Low': '4',
+    }
     return priMap.get(rating, '4')
 
 
+def claimStateMapping(sf_obj, cr, uid, state, context):
+    '''
+    Helper Method to resolve State dependency.
+    '''
+    stateMap = {
+        'New': 'draft',
+        'Working': 'open',
+        'Escalated ': 'done',
+        'Closed': 'cancel',
+    }
+    return stateMap.get(state, False)
+
+
+def importCaseComment(sf_obj, cr, uid, sfc, context):
+    message_pool = sf_obj.pool.get('mailgate.message')
+    data_pool = sf_obj.pool.get('ir.model.data')
+    try:
+        sqlStmt = prepareStatement(MODEL_MAP.get('CaseComment').get('field_map'), 'CaseComment')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            fields = MODEL_MAP.get('CaseComment').get('field_map')
+            claims = data_pool.search(cr, uid, [('model', '=', 'crm.claim'), ('name', '=', rec.get('ParentId'))])
+            if claims:
+                res = data_pool.browse(cr, uid, claims[0], context)
+                fields.update({'model': 'model',
+                               'description': 'description'})
+                rec.update({'model': 'crm.claim',
+                            'ParentId': res.res_id,
+                            'description': rec.get('CommentBody', '')})
+                field, data = dataMapping(rec, fields)
+                message_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+                fields.pop('model')
+                fields.pop('description')
+            else:
+                continue
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
+    except Exception, e:
+        log = logging.getLogger('import.salesforce')
+        log.warning(str(e))
+        return False
+    return True
+
+
 def importCase(sf_obj, cr, uid, context):
     claim_pool = sf_obj.pool.get('crm.claim')
     try:
         sfc = beatbox.PythonClient()
         sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
-        sqlStmt =  prepareStatement(MODEL_MAP.get('Case').get('field_map'), 'Case')
+        sqlStmt = prepareStatement(MODEL_MAP.get('Case').get('field_map'), 'Case')
         sfVals = sfc.query(sqlStmt)
         for rec in sfVals:
-            rec.update({'Priority' : claimPriorityMapping(sf_obj, cr, uid, rec.get('Priority', False), context)})
-            rec.update({'Owner.Id' : getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)})
-            rec.update({'Contact.Id' : getUserId(sf_obj, cr, uid, rec.get('Contact', False), context)})
+            rec.update({'Priority': claimPriorityMapping(sf_obj, cr, uid, rec.get('Priority', False), context)})
+            rec.update({'Status': claimStateMapping(sf_obj, cr, uid, rec.get('Status', False), context)})
+            rec.update({'Owner.Id': getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)})
+            rec.update({'Contact.Id': getUserId(sf_obj, cr, uid, rec.get('Contact', False), context)})
             field, data = dataMapping(rec, MODEL_MAP.get('Case').get('field_map'))
             claim_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+        importCaseComment(sf_obj, cr, uid, sfc, context)
+        importAttachment(sf_obj, cr, uid, sfc, context)
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
     except Exception, e:
         log = logging.getLogger('import.salesforce')
         log.warning(str(e))
         return False
     return True
 
+
 def getRecurrancy(sf_obj, cr, uid, rec, fields, context):
     rrule_type = {
-        'RecursEveryWeekday' : 'daily',
-        'RecursDaily' : 'daily',
-        'RecursWeekly' : 'weekly',
-        'RecursMonthlyNth' : 'monthly',
-        'RecursMonthly' : 'monthly',
-        'RecursYearlyNth' : 'yearly'
+        'RecursEveryWeekday': 'daily',
+        'RecursDaily': 'daily',
+        'RecursWeekly': 'weekly',
+        'RecursMonthlyNth': 'monthly',
+        'RecursMonthly': 'monthly',
+        'RecursYearlyNth': 'yearly',
     }
-    week_list = {   1:'MO',
-                    2:'TU',
-                    4:'WE',
-                    8:'TH',
-                    16:'FR',
-                    32:'SA',
-                    64:'SU'}
-                
-    byday = {'First' : '1', 
-            'Second' : '2',
-            'Third'  : '3',
-            'Fourth' : '4', 
-            'Last'   : '-1'}
+    week_list = {1: 'MO',
+                    2: 'TU',
+                    4: 'WE',
+                    8: 'TH',
+                    16: 'FR',
+                    32: 'SA',
+                    64: 'SU'}
+
+    byday = {'First': '1',
+            'Second': '2',
+            'Third': '3',
+            'Fourth': '4',
+            'Last': '-1', }
     if rec.get('RecurrenceType') == 'RecursMonthlyNth':
-        fields.update({'select1' : 'select1'})
-        rec.update({'select1' : 'day'})
-        rec.update( {'RecurrenceDayOfWeekMask' : week_list.get(rec.get('RecurrenceDayOfWeekMask'))})
-        rec.update({'RecurrenceInstance' : byday.get(rec.get('RecurrenceInstance'))})
-        rec.update({'RecurrenceDayOfMonth' : False})    
+        fields.update({'select1': 'select1'})
+        rec.update({'select1': 'day'})
+        rec.update({'RecurrenceDayOfWeekMask': week_list.get(rec.get('RecurrenceDayOfWeekMask'))})
+        rec.update({'RecurrenceInstance': byday.get(rec.get('RecurrenceInstance'))})
+        rec.update({'RecurrenceDayOfMonth': False})
+
     if rec.get('RecurrenceType') == 'RecursMonthly':
-        fields.update({'select1' : 'select1'})
-        rec.update({'select1' : 'date'})
-        rec.update({'RecurrenceDayOfMonth' : rec.get('RecurrenceDayOfMonth')})
-        rec.update( {'RecurrenceDayOfWeekMask' : False})
-        rec.update({'RecurrenceInstance' : False})
-    if rec.get('RecurrenceType') == 'RecursYearlyNth':  
-        rec.update( {'RecurrenceDayOfWeekMask' : False})
-        rec.update({'RecurrenceInstance' : False})
-    rec.update({'RecurrenceType' : rrule_type.get(rec.get('RecurrenceType'))})
+        fields.update({'select1': 'select1'})
+        rec.update({'select1': 'date'})
+        rec.update({'RecurrenceDayOfMonth': rec.get('RecurrenceDayOfMonth')})
+        rec.update({'RecurrenceDayOfWeekMask': False})
+        rec.update({'RecurrenceInstance': False})
+
+    if rec.get('RecurrenceType') == 'RecursYearlyNth':
+        rec.update({'RecurrenceDayOfWeekMask': False})
+        rec.update({'RecurrenceInstance': False})
+    rec.update({'RecurrenceType': rrule_type.get(rec.get('RecurrenceType'))})
     return rec, fields
 
+
 def getPartnerId(sf_obj, cr, uid, rec, context):
     if rec.get('WhoId', False):
-        obj_model = sf_obj.pool.get('ir.model.data')
-        model_data_ids = obj_model.search(cr,uid,[('model','=','res.partner'),('name','=',rec.get('WhoId'))])
+        model_pool = sf_obj.pool.get('ir.model.data')
+        model_data_ids = model_pool.search(cr, uid, [('model', '=', 'res.partner'), ('name', '=', rec.get('WhoId'))])
         if model_data_ids:
             return rec.get('WhoId')
     return False
 
+
+def getEventUser(sf_obj, cr, uid, rec, context):
+    model_pool = sf_obj.pool.get('ir.model.data')
+    user = email = address = False
+    model_partner_id = model_pool.search(cr, uid, [('name', '=', rec.get('AttendeeId', False))])
+    if model_partner_id:
+        res = model_pool.browse(cr, uid, model_partner_id[0])
+        record = sf_obj.pool.get(res.model).browse(cr, uid, res.res_id)
+        if res.model == 'res.users':
+            email, user, address = record.user_email, record.id, record.address_id
+        if res.model == 'crm.lead':
+            email, user, address = record.email_from, record.user_id.id, record.user_id.address_id
+        if res.model == 'res.partner':
+            for add in record.address:
+                if add.type == 'contact':
+                    email, address = add.email, add.id
+    return user, email, address
+
+
 def getAttendee(sf_obj, cr, uid, sfc, context):
     attendee_pool = sf_obj.pool.get('calendar.attendee')
-    obj_model = sf_obj.pool.get('ir.model.data')
+    model_pool = sf_obj.pool.get('ir.model.data')
     meeting_pool = sf_obj.pool.get('crm.meeting')
     fields = {
-            'id' : 'Id',
-            'state' : 'Status',
-            'partner_id/id' : 'AttendeeId',
-            'parent_ids/id' : 'EventId',
+            'id': 'Id',
+            'state': 'Status',
+            'partner_id/id': 'AttendeeId',
+            'parent_ids/id': 'EventId',
             }
     stats = {
-        'New' : 'needs-action',
-        'Declined' : 'decliene',
-        'Accepted' : 'accepted',
-        'Maybe' : 'tentative',
-        'Deleted' : 'delegated',
+        'New': 'needs-action',
+        'Declined': 'decliene',
+        'Accepted': 'accepted',
+        'Maybe': 'tentative',
+        'Deleted': 'delegated',
     }
+
     try:
-        sqlStmt =  prepareStatement(fields, 'EventAttendee')
+        sqlStmt = prepareStatement(fields, 'EventAttendee')
         sfVals = sfc.query(sqlStmt)
         for rec in sfVals:
+            user, email, address = getEventUser(sf_obj, cr, uid, rec, context)
+            fields.update({'user_id/.id': 'user_id', 'email': 'email', 'partner_address_id/.id': 'address_id'})
+            rec.update({'user_id': user, 'email': email, 'address_id': address})
             parent_id = rec.pop('EventId')
-            partner_id = rec.pop('AttendeeId')
-            model_partner_id = obj_model.search(cr,uid,[('model','=','res.partner'),('name','=',partner_id)])
-            if model_partner_id:
-                rec.update({'AttendeeId': partner_id})
-            rec.update({'Status' : stats.get(rec.get('Status'))})
+            rec.pop('AttendeeId')
+            rec.update({'Status': stats.get(rec.get('Status'))})
             field, data = dataMapping(rec, fields)
             attendee_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
-            model_data_ids = obj_model.search(cr,uid,[('model','=','crm.meeting'),('name','=',parent_id)])
-            att_id = obj_model.search(cr,uid,[('model','=','calendar.attendee'),('name','=',rec.get('Id'))])
+            fields.pop('user_id/.id')
+            fields.pop('email')
+            fields.pop('partner_address_id/.id')
+            model_data_ids = model_pool.search(cr, uid, [('model', '=', 'crm.meeting'), ('name', '=', parent_id)])
+            att_id = model_pool.search(cr, uid, [('model', '=', 'calendar.attendee'), ('name', '=', rec.get('Id'))])
             if model_data_ids and att_id:
-                meeting = obj_model.browse(cr, uid, model_data_ids[0])
-                attendee = obj_model.browse(cr, uid, att_id[0])
-                meeting_pool.write(cr, uid, [meeting.res_id], {'attendee_ids': [(4,(attendee.res_id))]} )
+                meeting = model_pool.browse(cr, uid, model_data_ids[0])
+                attendee = model_pool.browse(cr, uid, att_id[0])
+                meeting_pool.write(cr, uid, [meeting.res_id], {'attendee_ids': [(4, (attendee.res_id))]})
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
     except Exception, e:
         log = logging.getLogger('import.salesforce')
         log.warning(str(e))
         return False
     return True
-    
+
+
 def importEvent(sf_obj, cr, uid, context):
     meeting_pool = sf_obj.pool.get('crm.meeting')
     try:
         sfc = beatbox.PythonClient()
         sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
-        sqlStmt =  prepareStatement(MODEL_MAP.get('Event').get('field_map'), 'Event')
+        sqlStmt = prepareStatement(MODEL_MAP.get('Event').get('field_map'), 'Event')
         sfVals = sfc.query(sqlStmt)
         new_sfVals = []
         for i in sfVals:
@@ -417,26 +749,26 @@
             recurrence = '0'
             if rec.get('IsRecurrence'):
                 recurrence = '1'
-                fields.update({'end_type' : 'end_type'})
-                rec , fields = getRecurrancy(sf_obj, cr, uid, rec, fields, context)
-                rec.update({'end_type' : 'end_date'})
-                rec.update({'RecurrenceEndDateOnly':  rec.get('RecurrenceEndDateOnly').strftime(DATETIME_FORMAT )})
-            rec.update({'IsRecurrence' : recurrence })      
+                fields.update({'end_type': 'end_type'})
+                rec, fields = getRecurrancy(sf_obj, cr, uid, rec, fields, context)
+                rec.update({'end_type': 'end_date'})
+                rec.update({'RecurrenceEndDateOnly': rec.get('RecurrenceEndDateOnly').strftime(DATETIME_FORMAT)})
+            rec.update({'IsRecurrence': recurrence})
             allday = '0'
             if rec.get('IsAllDayEvent'):
                 allday = '1'
-            rec.update({'IsAllDayEvent' : allday })
-            privacy = 'public' 
+            rec.update({'IsAllDayEvent': allday})
+            privacy = 'public'
             if rec.get('IsPrivate'):
                 privacy = 'private'
-            rec.update({'class' : privacy })
+            rec.update({'class': privacy})
             if rec.get('ShowAs'):
-                rec.update({'class' : rec.get('ShowAs').lower() })
-            rec.update({'Owner.Id' : getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)})
-            rec.update({'StartDateTime' : rec.get('StartDateTime').strftime(DATETIME_FORMAT )})
-            rec.update({'EndDateTime' : rec.get('EndDateTime').strftime(DATETIME_FORMAT )})
-            rec.update({'WhoId' : getPartnerId(sf_obj, cr, uid, rec, context)})
-            rec.update({'Subject' : rec.get('Subject')[0]})
+                rec.update({'class': rec.get('ShowAs').lower()})
+            rec.update({'Owner.Id': getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)})
+            rec.update({'StartDateTime': rec.get('StartDateTime').strftime(DATETIME_FORMAT)})
+            rec.update({'EndDateTime': rec.get('EndDateTime').strftime(DATETIME_FORMAT)})
+            rec.update({'WhoId': getPartnerId(sf_obj, cr, uid, rec, context)})
+            rec.update({'Subject': rec.get('Subject')[0]})
             field, data = dataMapping(rec, fields)
             meeting_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
             if fields.has_key('end_type'):
@@ -444,6 +776,10 @@
             if fields.has_key('select1'):
                 fields.pop('select1')
         getAttendee(sf_obj, cr, uid, sfc, context)
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
     except Exception, e:
         log = logging.getLogger('import.salesforce')
         log.warning(str(e))
@@ -451,19 +787,24 @@
     return True
 
 
-def createActivity(sf_obj, cr , uid, fields, rec, model, context):
+def createActivity(sf_obj, cr, uid, fields, rec, model, context):
     model_pool = sf_obj.pool.get(model)
     try:
-        rec.update({'Subject' : rec.get('Subject')[0]})
+        rec.update({'Subject': rec.get('Subject')[0]})
         field, data = dataMapping(rec, fields)
         model_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
-        fields.pop( 'categ_id/.id')
+        fields.pop('categ_id/.id')
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
     except Exception, e:
         log = logging.getLogger('import.salesforce')
         log.warning(str(e))
         return False
     return True
 
+
 def importActivity(sf_obj, cr, uid, context):
     cate_pool = sf_obj.pool.get('crm.case.categ')
     modeldata_pool = sf_obj.pool.get('ir.model.data')
@@ -473,20 +814,20 @@
         sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
         fields= MODEL_MAP.get('Task').get('field_map')
         if ACT_TYPE == 'wtype':
-            fields.update({'Type' : 'Type'})           
-        sqlStmt =  prepareStatement(fields, 'Task')
+            fields.update({'Type': 'Type'})
+        sqlStmt = prepareStatement(fields, 'Task')
         sfVals = sfc.query(sqlStmt)
         modelDict = {
-            'Email' : 'mailgate.message',
-            'Call' : 'crm.phonecall',
-            'Meeting' : 'crm.meeting',
-            'Other' : 'crm.meeting'
+            'Email': 'mailgate.message',
+            'Call': 'crm.phonecall',
+            'Meeting': 'crm.meeting',
+            'Other': 'crm.meeting',
         }
-        meetmodel_id = model_pool.search(cr, uid, [('model','=','crm.meeting')])
-        cate_ids = cate_pool.search(cr, uid, [('name','=','Task')])
-        nid  = cate_ids and cate_ids[0] or False
+        meetmodel_id = model_pool.search(cr, uid, [('model', '=', 'crm.meeting')])
+        cate_ids = cate_pool.search(cr, uid, [('name', '=', 'Task')])
+        nid = cate_ids and cate_ids[0] or False
         if not cate_ids:
-            nid = cate_pool.create(cr, uid, { 'name':'Task','object_id':meetmodel_id[0]})
+            nid = cate_pool.create(cr, uid, {'name': 'Task', 'object_id': meetmodel_id[0]})
         for rec in sfVals:
             model = 'crm.meeting'
             if rec.has_key('Type'):
@@ -494,207 +835,256 @@
                 if typ:
                     model = modelDict.get(typ)
                 if typ == 'Call':
-                    ids = cate_pool.search(cr, uid, [('name' , '=', 'Inbound')])
+                    ids = cate_pool.search(cr, uid, [('name', '=', 'Inbound')])
                     if ids:
-                        fields.update({'categ_id/.id' : 'category'})
-                        fields.update({'partner_id/id' : 'partner'})
-                        rec.update({'category' : ids[0]})
-                        rec.update({'partner' : rec.get('WhoId') })
+                        fields.update({'categ_id/.id': 'category'})
+                        fields.update({'partner_id/id': 'partner'})
+                        rec.update({'category': ids[0]})
+                        rec.update({'partner': rec.get('WhoId')})
                     if rec.get('WhatId'):
-                        fields.update({'opportunity_id/id' : 'WhatId'})
+                        fields.update({'opportunity_id/id': 'WhatId'})
                 if typ == 'Email':
                     if rec.get('WhoId'):
                         data_id = modeldata_pool.search(cr, uid, [('name', '=', rec.get('WhoId'))])
                         if data_id:
                             model_rec = modeldata_pool.browse(cr, uid, data_id[0])
-                            fields.update({'model' : 'model'})
-                            fields.update({'res_id' : 'res_id'})
-                            rec.update({'model' : model_rec.model})
-                            rec.update({'res_id' : model_rec.res_id})
+                            fields.update({'model': 'model'})
+                            fields.update({'res_id': 'res_id'})
+                            rec.update({'model': model_rec.model})
+                            rec.update({'res_id': model_rec.res_id})
                     elif rec.get('WhatId'):
                         data_id = modeldata_pool.search(cr, uid, [('name', '=', rec.get('WhatId'))])
                         if data_id:
                             model_rec = modeldata_pool.browse(cr, uid, data_id[0])
-                            fields.update({'model' : 'model'})
-                            fields.update({'res_id' : 'res_id'})
-                            rec.update({'model' : model_rec.model})
-                            rec.update({'res_id' : model_rec.res_id})
+                            fields.update({'model': 'model'})
+                            fields.update({'res_id': 'res_id'})
+                            rec.update({'model': model_rec.model})
+                            rec.update({'res_id': model_rec.res_id})
                 else:
-                    fields.update({'categ_id/.id' : 'category'})
-                    rec.update({'category' : nid})
+                    fields.update({'categ_id/.id': 'category'})
+                    rec.update({'category': nid})
                 rec.pop('WhatId')
                 rec.pop('WhoId')
-            else:              
-                fields.update({'categ_id/.id' : 'category_id'})
-                rec.update({'category_id' : nid})  
-                    
+            else:
+                fields.update({'categ_id/.id': 'category_id'})
+                rec.update({'category_id': nid})
+
             rec.pop('WhatId')
             rec.pop('WhoId')
             if rec.get('ActivityDate'):
-                rec.update({'ActivityDate' : rec.get('ActivityDate').strftime(DATETIME_FORMAT )})
-            rec.update({'Owner.Id' : getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)})
-            rec.update({'ActivityDate' : datetime.now().strftime(DATETIME_FORMAT)})
-            createActivity(sf_obj, cr , uid, fields, rec, model, context)
+                rec.update({'ActivityDate': rec.get('ActivityDate').strftime(DATETIME_FORMAT)})
+            rec.update({'Owner.Id': getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)})
+            rec.update({'ActivityDate': datetime.now().strftime(DATETIME_FORMAT)})
+            createActivity(sf_obj, cr, uid, fields, rec, model, context)
         if ACT_TYPE == 'wtype':
-            fields.pop({'Type' : 'Type'}) 
+            fields.pop({'Type': 'Type'})
+    except SoapFaultError, sfe:
+        log = logging.getLogger('import.salesforce.SoapFaultError')
+        log.warning(str(sfe))
+        return False
     except Exception, e:
         log = logging.getLogger('import.salesforce')
         log.warning(str(e))
         return False
     return True
-    
+
 MODEL_MAP = {
-    'User' : {
-        'dependencies' : [],
-        'function' : importUser,
-        'field_map' :{
-                        'id' : 'Id',
-                        'name': 'Name',
-                        'login' : 'Username',
-                        'user_email' : 'Email',
-                        'context_tz' : 'TimeZoneSidKey',
-                        'context_lang' : 'LanguageLocaleKey',
-                 }        
-    },
-    'Opportunity' : {
-        'dependencies' : [ 'User' ],
-        'function' : importOpportunity,
-        'field_map' : {
-                        'id' : 'Id',
-                        'name' : 'Name',
-                        'user_id/id' : 'CreatedBy.Id',
-                        'planned_revenue' : 'Amount',
-                        'probability' : 'Probability',
-                        'title_action' : 'NextStep',
-                        'type' : 'type',
-                    }
-    },
-    'Lead' : {
-        'dependencies' : [ 'User' ],
-        'function' : importLead,
-        'field_map' : {
-                        'id' : 'Id',
+    'User': {
+        'dependencies': [],
+        'function': importUser,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'Name',
+                        'login': 'Username',
+                        'user_email': 'Email',
+                        'context_tz': 'TimeZoneSidKey',
+                        'context_lang': 'LanguageLocaleKey',
+                 }
+    },
+    'Attachment': {
+        'dependencies': ['User'],
+        'function': importAttachment,
+        'field_map': {
+                    'id': 'Id',
+                    'name': 'Name',
+                    'datas': 'Body',
+                    'description': 'Description',
+                    'res_id/.id': 'ParentId',
+            }
+    },
+    'Note': {
+        'dependencies': [],
+        'function': importNote,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'Title',
+                        'res_id/.id': 'ParentId',
+                        'description': 'Body',
+                    }
+    },
+    'Opportunity': {
+        'dependencies': ['Contact', 'User'],
+        'function': importOpportunity,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'Name',
+                        'user_id/id': 'CreatedBy.Id',
+                        'planned_revenue': 'Amount',
+                        'probability': 'Probability',
+                        'title_action': 'NextStep',
+                        'type': 'type',
+                        'stage_id/.id': 'StageName',
+                        'partner_id/.id': 'AccountId',
+                    }
+    },
+    'OpportunityHistory': {
+        'dependencies': [],
+        'function': importOpportunityHistory,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'StageName',
+                        'date': 'CloseDate',
+                        'res_id/.id': 'OpportunityId',
+                    }
+    },
+    'Lead': {
+        'dependencies': ['User'],
+        'function': importLead,
+        'field_map': {
+                        'id': 'Id',
                         'name': 'Company',
-                        'priority' : 'Rating',
-                        'user_id/id' : 'CreatedBy.Id',
-                        'stage_id/.id' : 'Status',
+                        'priority': 'Rating',
+                        'user_id/id': 'CreatedBy.Id',
+                        'stage_id/.id': 'Status',
                         'partner_name': 'Company',
                         'contact_name': 'Name',
-                        'title/.id' : 'Salutation',
-                        'function' : 'Title',
-                        'street' : 'Street',
-                        'city' :'City',
-                        'email_from' : 'Email',
-                        'phone' : 'Phone',
-                        'mobile' : 'MobilePhone',
-                        'zip' : 'PostalCode',
-                        'description' : 'Description',
-                        'state_id/.id' : 'State',
-                        'country_id/.id' : 'Country'
+                        'title/.id': 'Salutation',
+                        'function': 'Title',
+                        'street': 'Street',
+                        'city': 'City',
+                        'email_from': 'Email',
+                        'phone': 'Phone',
+                        'mobile': 'MobilePhone',
+                        'zip': 'PostalCode',
+                        'description': 'Description',
+                        'state_id/.id': 'State',
+                        'country_id/.id': 'Country',
                 }
     },
-    'Contact' : {
-        'dependencies' : [],
-        'function' : importContact,
-        'field_map' : {
-                        'id' : 'Id',
+    'Contact': {
+        'dependencies': [],
+        'function': importContact,
+        'field_map': {
+                        'id': 'Id',
                         'name': 'Name',
-                        'title/.id' : 'Title',
-                        'cstreet' : 'MailingStreet',
-                        'ccity' :'MailingCity',
-                        'cphone' : 'Phone',
-                        'cmobile' : 'MobilePhone',
-                        'czip' : 'MailingPostalCode',
-                        'cstate_id' : 'MailingState',
-                        'ccountry_id' : 'MailingCountry',
-                        'cfax' : 'Fax',
-                        'ostreet' : 'OtherStreet',
-                        'ocity' : 'OtherCity', 
-                        'ocountry_id' : 'OtherCountry', 
-                        'ostate_id' : 'OtherState', 
-                        'ozip' : 'OtherPostalCode', 
-                        'ophone' : 'OtherPhone',                         
-                        'bstreet' : 'Account.BillingStreet',
-                        'bcity' : 'Account.BillingCity', 
-                        'bcountry_id' : 'Account.BillingCountry', 
-                        'bstate_id' : 'Account.BillingState', 
-                        'bzip' : 'Account.BillingPostalCode', 
-                        'sstreet' : 'Account.ShippingStreet',
-                        'scity' : 'Account.ShippingCity', 
-                        'scountry_id' : 'Account.ShippingCountry', 
-                        'sstate_id' : 'Account.ShippingState', 
-                        'szip' : 'Account.ShippingPostalCode', 
+                        'title/.id': 'Title',
+                        'email': 'Email',
+                        'cstreet': 'MailingStreet',
+                        'ccity': 'MailingCity',
+                        'cphone': 'Phone',
+                        'cmobile': 'MobilePhone',
+                        'czip': 'MailingPostalCode',
+                        'cstate_id': 'MailingState',
+                        'ccountry_id': 'MailingCountry',
+                        'cfax': 'Fax',
+                        'ostreet': 'OtherStreet',
+                        'ocity': 'OtherCity',
+                        'ocountry_id': 'OtherCountry',
+                        'ostate_id': 'OtherState',
+                        'ozip': 'OtherPostalCode',
+                        'ophone': 'OtherPhone',
+                        'bstreet': 'Account.BillingStreet',
+                        'bcity': 'Account.BillingCity',
+                        'bcountry_id': 'Account.BillingCountry',
+                        'bstate_id': 'Account.BillingState',
+                        'bzip': 'Account.BillingPostalCode',
+                        'sstreet': 'Account.ShippingStreet',
+                        'scity': 'Account.ShippingCity',
+                        'scountry_id': 'Account.ShippingCountry',
+                        'sstate_id': 'Account.ShippingState',
+                        'szip': 'Account.ShippingPostalCode',
                 }
-    },     
-    'Case' : {
-        'dependencies' : [ 'User' , 'Contact'],
-        'function' : importCase,
-        'field_map' : {
-                    'id' : 'Id',
-                    'name' : 'Subject',
-	                'partner_id/id' : 'Contact.Id',
-	                'priority' : 'Priority',
-                    'user_id/id' : 'Owner.Id',       
-                    'description' : 'Description',
-                    'email_from' : 'SuppliedEmail',
-                    'partner_phone' : 'SuppliedPhone',
-                    'user_fault' : 'SuppliedName',
-        }
-    },
-    'Event' : {
-        'dependencies' : ['Contact','User'],
-        'function' : importEvent,
-        'field_map' : {
-                    'id' : 'Id',
-                    'name' : 'Subject',
-                    'user_id/id' : 'Owner.Id',
-                    'allday' : 'IsAllDayEvent',
-                    'date' : 'StartDateTime',
-                    'date_deadline' : 'EndDateTime',
-                    'location' : 'Location',
-                    'duration' : 'DurationInMinutes', 
-                    'description' : 'Description',
-                    'show_as' :'ShowAs',
-                    'class' : 'IsPrivate',
-                    'recurrency' : 'IsRecurrence',
-                    'rrule_type' : 'RecurrenceType',
-                    'interval' : 'RecurrenceInterval',
-                    'end_date' : 'RecurrenceEndDateOnly',
-                    'week_list' : 'RecurrenceDayOfWeekMask',
-                    'day' : 'RecurrenceDayOfMonth',
-                    'byday' : 'RecurrenceInstance',
-                    'repeat_id' : 'RecurrenceActivityId',
-                    'partner_id/id' : 'WhoId',
-        }
-    },
-    'Task' : {
-        'dependencies' : [ 'Lead', 'Contact','Opportunity'],
-        'function' : importActivity,
-        'field_map' : {
-                    'id' : 'Id',
-                    'name' : 'Subject',
-                    'user_id/id' : 'Owner.Id',
-                    'date' : 'ActivityDate',
-                    'duration' : 'CallDurationInSeconds',
-                    'description' : 'Description',
-                    'WhatId' : 'WhatId',
-                    'WhoId' : 'WhoId',
-        }
-    },
-}   
+    },
+    'Case': {
+        'dependencies': ['User', 'Contact'],
+        'function': importCase,
+        'field_map': {
+                    'id': 'Id',
+                    'name': 'Subject',
+                    'partner_id/id': 'Contact.Id',
+                    'priority': 'Priority',
+                    'user_id/id': 'Owner.Id',
+                    'description': 'Description',
+                    'email_from': 'SuppliedEmail',
+                    'partner_phone': 'SuppliedPhone',
+                    'user_fault': 'SuppliedName',
+                    'state': 'Status',
+            }
+    },
+    'CaseComment': {
+        'dependencies': [],
+        'function': importCaseComment,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'CommentBody',
+                        'res_id': 'ParentId',
+                    }
+    },
+    'Event': {
+        'dependencies': ['User', 'Contact'],
+        'function': importEvent,
+        'field_map': {
+                    'id': 'Id',
+                    'name': 'Subject',
+                    'user_id/id': 'Owner.Id',
+                    'allday': 'IsAllDayEvent',
+                    'date': 'StartDateTime',
+                    'date_deadline': 'EndDateTime',
+                    'location': 'Location',
+                    'duration': 'DurationInMinutes',
+                    'description': 'Description',
+                    'show_as': 'ShowAs',
+                    'class': 'IsPrivate',
+                    'recurrency': 'IsRecurrence',
+                    'rrule_type': 'RecurrenceType',
+                    'interval': 'RecurrenceInterval',
+                    'end_date': 'RecurrenceEndDateOnly',
+                    'week_list': 'RecurrenceDayOfWeekMask',
+                    'day': 'RecurrenceDayOfMonth',
+                    'byday': 'RecurrenceInstance',
+                    'repeat_id': 'RecurrenceActivityId',
+                    'partner_id/id': 'WhoId',
+            }
+    },
+    'Task': {
+        'dependencies': ['Lead', 'Contact', 'Opportunity'],
+        'function': importActivity,
+        'field_map': {
+                    'id': 'Id',
+                    'name': 'Subject',
+                    'user_id/id': 'Owner.Id',
+                    'date': 'ActivityDate',
+                    'duration': 'CallDurationInSeconds',
+                    'description': 'Description',
+                    'WhatId': 'WhatId',
+                    'WhoId': 'WhoId',
+            }
+    },
+}
 
 LOGIN_DATA = {
-    'username' : None,
-    'passToken' : None
+    'username': None,
+    'passToken': None,
 }
 
+
 class import_sf(osv.osv):
     '''
         Model to Select SalesForce Model to be imported
     '''
     _name = 'import.sf'
     _description = 'Import SalesForce Data'
-    
+
     _columns = {
         'lead': fields.boolean('Leads', help="If Leads is checked, SalesFroce Leads data imported to OpenERP CRM Leads"),
         'opportunity': fields.boolean('Opportunities', help="If Opportunity is checked, SalesFroce Leads data imported to OpenERP CRM Opportunity."),
@@ -703,9 +1093,9 @@
         'case': fields.boolean('Cases/Claim', help="If Cases/Claim is checked, SalesFroce Cases data imported to OpenERP CRM Claim."),
         'event': fields.boolean('Event/Meetings', help="If Event/Meetings is checked, SalesFroce Cases data imported to OpenERP Meetings."),
         'task': fields.boolean('Acivity', help="If Activity is checked, SalesFroce Activity data  will imported to OpenERP Meetings and if you want ot import data in separate than selectd 'With Type' from below slection else  select 'Without Type'.\nSalesForce Activity is comprised of Email, Call, Meeting."),
-        'task_type':fields.selection([('wttype','Without Type'),('wtype','With Type')],'Activity Type', invisible=True , help="In SalesForce Acivity > Task,  the Field Lavel Security of the field 'Type' is set for all user levels than select the 'With Type' option else select 'With Type' option."),
-    } 
-    
+        'task_type': fields.selection([('wttype', 'Without Type'), ('wtype', 'With Type')], 'Activity Type', invisible=True, help="In SalesForce Acivity > Task,  the Field Lavel Security of the field 'Type' is set for all user levels than select the 'With Type' option else select 'With Type' option."),
+    }
+
     _defaults = {
        'lead': True,
        'opportunity': True,
@@ -713,10 +1103,10 @@
        'contact': True,
        'event': True,
        'task': True,
-       'case':True,
-       'task_type' : 'wttype',
+       'case': True,
+       'task_type': 'wttype',
     }
-     
+
     def _get_nodes(self, cr, uid, ids, context=None):
         """Retun the List of the Select Model to be imported"""
         if not context:
@@ -740,37 +1130,47 @@
                 global ACT_TYPE
                 ACT_TYPE = current.task_type
         return nodes
-        
+
     def sf_do_import(self, cr, uid, ids, context=None):
         '''
         Method to initiate data import from map dict
         '''
         if context == None:
             context = {}
-        LOGIN_DATA.update({'username' : context.get('username',None),
-                           'passToken' : context.get('passToken',None)})
+        LOGIN_DATA.update({'username': context.get('username', None),
+                           'passToken': context.get('passToken', None)})
+        try:
+            sfc = beatbox.PythonClient()
+            sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        except SoapFaultError, sfe:
+            raise osv.except_osv(_('Error !'), _('%s.\n%s')%(sfe.faultCode, str(sfe.faultString)))
+        except Exception, e:
+            raise osv.except_osv(_('Error !'), _('%s')%(e.value))
         sf_model = self._get_nodes(cr, uid, ids, context)
         visited = set() #To avoid the Multiple call for resloving dependencies
-        flag = False 
+        flag = False
         for model in sf_model:
             if not model in visited:
                 flag = self.resolve_dependencies(cr, uid, MODEL_MAP, MODEL_MAP[model]['dependencies'], visited, flag, context=context)
                 flag = MODEL_MAP[model]['function'](self, cr, uid, context)
                 visited.add(model)
+        model_pool = self.pool.get('ir.model.data')
+        model_data_ids = model_pool.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'sf.import.message.form')])
+        resource_id = model_pool.read(cr, uid, model_data_ids, fields=['res_id'])
         if flag:
-            obj_model = self.pool.get('ir.model.data')
-            model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','sf.import.message.form')])
-            resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'])
-            return {
-                    'view_type': 'form',
-                    'view_mode': 'form',
-                    'res_model': 'sf.import.message',
-                    'views': [(resource_id,'form')],
-                    'type': 'ir.actions.act_window',
-                    'target': 'new',
-                }
-        raise osv.except_osv(_('Error !'), _('Error during importing data from salesforce.\nFor more check server log.'))
-        return {'type': 'ir.actions.act_window_close'}
+            context.update({'message': "Data Imported Successfully from Salesforce."})
+        else:
+            context.update({'message': 'Error !\nError during importing data from salesforce. For more check server log.'})
+        return {
+                'view_type': 'form',
+                'view_mode': 'form',
+                'res_model': 'sf.import.message',
+                'views': [(resource_id, 'form')],
+                'type': 'ir.actions.act_window',
+                'target': 'new',
+                'context': context,
+            }
+
     def resolve_dependencies(self, cr, uid, model_map, dep, visited, flag, context=None):
         if context == None:
             context = {}
@@ -781,6 +1181,6 @@
                 flag = model_map[dependency]['function'](self, cr, uid, context)
                 visited.add(dependency)
         return flag
-                
+
 import_sf()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:getRecurrancy(sf_obj, cr, uid, rec, context):
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'import_salesforce/wizard/import_salesforce.py'
--- import_salesforce/wizard/import_salesforce.py	2011-04-11 05:29:01 +0000
+++ import_salesforce/wizard/import_salesforce.py	2011-04-18 05:27:52 +0000
@@ -22,77 +22,75 @@
 import logging
 from osv import osv
 from osv import fields
-from tools.translate import _ 
+from tools.translate import _
 
 try:
-	import beatbox
+    import beatbox
 except ImportError:
     raise osv.except_osv(_('BeatBox Import Error!'), _('Please install beatbox api for SaleForce - beatbox-20.0.zip.\nhttp://pypi.python.org/pypi/beatbox'))
 
 
-	
 class salesforce_login(osv.osv):
-	'''
-		SalesForce Login Form
-		@name : Userlogin Name
-		@password : User Password for login name
-		@token : Security Token Provided bthe salesforce
-	'''
-	_name = 'salesforce.login'
-	_description = 'SalesForce Login'
-	_columns = {
-		'name' : fields.char('Username', size=255, required=True, help='Enter SalesForce login ussername.'), 
-		'password' : fields.char('Password', size=255, required=True, help='Enter valid password for the supplied username.'),
-		'token' : fields.char('Scurity Token', size=255, required=True, help='Enter Security Token generated by salesforce for the above user.'),
-	}
-
-#	def default_get(self, cr, uid, fields, context=None):
-#		if context == None:
-#			context = {}
-#		res = super(salesforce_login, self).default_get(cr, uid, fields, context=context)
-#		sf_pool = self.pool.get('salesforce.login')
-#		record = sf_pool.search(cr, uid, [])
-#		if record:
-#			record = record[-1]
-#			rec = sf_pool.browse(cr, uid, record, context)
-#			if not res.get('name'):
-#				res.update({'name':rec.name})
-#			if not res.get('password'):
-#				res.update({'password':rec.password})
-#			if not res.get('token'):
-#				res.update({'token':rec.token})				
-#		return res
-		
-	def sf_do_login(self, cr, uid, ids, context=None):
-		'''
-			Method Will validated the login of user. 
-		'''
-		record = self.browse(cr, uid, ids, context=context)
-		for rec in record:
-			uname = rec.name
-			passkey = rec.password + rec.token
-			log = logging.getLogger('salesforce.login')
-			try:
-				sfc = beatbox.PythonClient() 
-				sfc.login(uname, passkey)
-				log.info(_("SuccessAttributeError: WindowConfigurator instance has no attribute 'containers'ful login to SalesForce Services with user - %s")%(uname))
-			except Exception, e:
-				log.warning(str(e))
-				raise osv.except_osv(_('Error !'),_('Invalid login detail'))
-	
-		model_pool = self.pool.get('ir.model.data')
-		view_ids = model_pool.search(cr,uid,[('model','=','ir.ui.view'),('name','=','salesforce.login.form')])
-		view_res_id = model_pool.read(cr, uid, view_ids, fields=['res_id'])
-		context.update({'username' : uname, 'passToken' : passkey})
-		return {
-			'name' : 'Import SalesForce',
-			'view_type': 'form',
-			'view_mode': 'form',
-			'res_model': 'import.sf',
-			'views': [(view_res_id,'form')],
-			'type': 'ir.actions.act_window',
-			'target': 'new',
-			'context': context
-		}
-		
+    '''
+        SalesForce Login Form
+        @name : Userlogin Name
+        @password : User Password for login name
+        @token : Security Token Provided bthe salesforce
+    '''
+    _name = 'salesforce.login'
+    _description = 'SalesForce Login'
+    _columns = {
+            'name': fields.char('Username', size=255, required=True, help='Enter SalesForce login ussername.'),
+            'password': fields.char('Password', size=255, required=True, help='Enter valid password for the supplied username.'),
+            'token': fields.char('Scurity Token', size=255, required=True, help='Enter Security Token generated by salesforce for the above user.'),
+            }
+
+#    def default_get(self, cr, uid, fields, context=None):
+#        if context == None:
+#            context = {}
+#        res = super(salesforce_login, self).default_get(cr, uid, fields, context=context)
+#        sf_pool = self.pool.get('salesforce.login')
+#        record = sf_pool.search(cr, uid, [])
+#        if record:
+#            record = record[-1]
+#            rec = sf_pool.browse(cr, uid, record, context)
+#            if not res.get('name'):
+#                res.update({'name' : rec.name})
+#            if not res.get('password'):
+#                res.update({'password' : rec.password})
+#            if not res.get('token'):
+#                res.update({'token' : rec.token})
+#        return res
+    def sf_do_login(self, cr, uid, ids, context=None):
+        '''
+            Method Will validated the login of user.
+        '''
+        record = self.browse(cr, uid, ids, context=context)
+        for rec in record:
+            uname = rec.name
+            passkey = rec.password + rec.token
+            log = logging.getLogger('salesforce.login')
+            try:
+                sfc = beatbox.PythonClient()
+                sfc.login(uname, passkey)
+                log.info(_("Successful login to SalesForce WebServices with user - %s")%(uname))
+            except Exception, e:
+                log.warning(str(e))
+                raise osv.except_osv(_('Error !'), _('Invalid login detail'))
+
+        model_pool = self.pool.get('ir.model.data')
+        view_ids = model_pool.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'salesforce.login.form')])
+        view_res_id = model_pool.read(cr, uid, view_ids, fields=['res_id'])
+        context.update({'username': uname, 'passToken': passkey})
+        return {
+            'name': 'Import SalesForce',
+            'view_type': 'form',
+            'view_mode': 'form',
+            'res_model': 'import.sf',
+            'views': [(view_res_id, 'form')],
+            'type': 'ir.actions.act_window',
+            'target': 'new',
+            'context': context,
+        }
+
 salesforce_login()

=== modified file 'import_salesforce/wizard/import_salesforce_view.xml'
--- import_salesforce/wizard/import_salesforce_view.xml	2011-04-06 07:24:44 +0000
+++ import_salesforce/wizard/import_salesforce_view.xml	2011-04-18 05:27:52 +0000
@@ -3,7 +3,7 @@
     <data>
         <!-- Menu for SalesForce Import Wizard-->
         <menuitem id="menu_sf" name="Sales Force" parent="base.menu_base_partner" />
-        
+
         <!--form view for the SalesForce Login -->
         <record model="ir.ui.view" id="view_salesforce_login_form">
             <field name="name">salesforce.login.form</field>
@@ -26,7 +26,7 @@
                             <button icon="terp-camera_test" string="_Login" name="sf_do_login" type="object"/>
                         </group>
                     </group>
-                </form> 
+                </form>
             </field>
         </record>
 

=== modified file 'import_salesforce/wizard/sf_import_message.py'
--- import_salesforce/wizard/sf_import_message.py	2011-04-07 08:32:20 +0000
+++ import_salesforce/wizard/sf_import_message.py	2011-04-18 05:27:52 +0000
@@ -18,12 +18,26 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
+
 from osv import osv
+from osv import fields
+
 
 class sf_import_message(osv.osv):
-     """Import Message"""
-
-     _name = "sf.import.message"
-     _description = __doc__
-     
+    """
+        Import Message
+    """
+    _name = "sf.import.message"
+    _description = __doc__
+    _columns = {
+        'name': fields.text('Message', readonly=True),
+        }
+
+    def default_get(self, cr, uid, fields, context=None):
+        if context == None:
+            context = {}
+        res = super(sf_import_message, self).default_get(cr, uid, fields, context=context)
+        res.update({'name' : context.get('message')})
+        return res
+
 sf_import_message()

=== modified file 'import_salesforce/wizard/sf_import_message_view.xml'
--- import_salesforce/wizard/sf_import_message_view.xml	2011-04-07 06:50:59 +0000
+++ import_salesforce/wizard/sf_import_message_view.xml	2011-04-18 05:27:52 +0000
@@ -8,12 +8,18 @@
             <field name="type">form</field>
             <field name="arch" type="xml">
                 <form string="Import SalesFroce">
-                   <label string="Data Imported Successfully" colspan="4"/>  
-                   <separator string="" colspan="4" />
-                   <label string="" colspan="2"/>
-                   <button  icon="gtk-ok" special="cancel" string="_Ok"/>
+                    <group width="250" colspan="4">
+                        <field name='name' nolabel='1'/>
+                    </group>
+                    <separator string="" colspan="4"/>
+                    <group colspan="4">
+                        <group colspan="2"/>
+                        <group colspan="2">
+                            <button  icon="gtk-ok" special="cancel" string="_Ok"/>
+                        </group>        
+                    </group>
                 </form>
             </field>
         </record>
     </data>
-</openerp>        
+</openerp>


Follow ups