← Back to team overview

openerp-dev-web team mailing list archive

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

 

Jigar Amin - OpenERP has proposed merging lp:~openerp-dev/openobject-addons/trunk-import_salesforce-salesforce_left_import_form_punctual_branch-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-salesforce_left_import_form_punctual_branch-jam/+merge/60891

Changes
+ Latest Import wizard as per and document module import code
Kindly Review this
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_salesforce-salesforce_left_import_form_punctual_branch-jam/+merge/60891
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/trunk-import_salesforce.
=== modified file 'import_salesforce/__init__.py'
--- import_salesforce/__init__.py	2011-03-28 11:24:34 +0000
+++ import_salesforce/__init__.py	2011-05-13 10:30:00 +0000
@@ -19,5 +19,4 @@
 #
 ##############################################################################
 
-import import_sf
 import wizard

=== modified file 'import_salesforce/__openerp__.py'
--- import_salesforce/__openerp__.py	2011-04-11 06:40:28 +0000
+++ import_salesforce/__openerp__.py	2011-05-13 10:30:00 +0000
@@ -24,21 +24,22 @@
     'version': '1.0',
     'category': 'Generic Modules',
     'description': """
-This Module Import SaleForce 'Leads', 'Opportunity', 'Contacts' , 'Cases', 'User', 
+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'],
+    'depends': ['base', 'crm_claim', 'document'],
     'init_xml': [],
     'update_xml': [
-                'import_sf_view.xml',
-                'wizard/import_salesforce_view.xml', 
-                'wizard/sf_import_message_view.xml',   
+                'wizard/import_salesforce_view.xml',
+                'wizard/sf_import_message_view.xml',
             ],
     'demo_xml': [],
-    'test': [],
+    'test': [
+#                'test/test_import_user.yml',
+            ],
     'installable': True,
     'active': False,
 }

=== removed file 'import_salesforce/import_sf.py'
--- import_salesforce/import_sf.py	2011-04-19 06:45:07 +0000
+++ import_salesforce/import_sf.py	1970-01-01 00:00:00 +0000
@@ -1,1276 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU Affero General Public License as
-#    published by the Free Software Foundation, either version 3 of the
-#    License, or (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU Affero General Public License for more details.
-#
-#    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-from datetime import datetime
-from osv import osv
-from osv import fields
-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
-    and return two list of Field and Values
-    '''
-    fields=[]
-    data = []
-    for key, val in dictoe.items():
-        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)))
-            else:
-                data.append(dictsf.get(val, ''))
-    return fields, data
-
-
-def getSFLogin(client, usr, pwd):
-    '''
-    Helper Methos for logining to the SaleFroce
-    @use : UserName
-    @pwd : Password + SecurityToken
-    '''
-    try:
-        sfi = client.login(usr, pwd)
-        return client, sfi
-    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))
-
-
-def prepareStatement(fieldMap, model):
-    '''
-    Helper Method to create SOQL for salesforce.
-    '''
-    field = []
-    for val in fieldMap.values():
-        if val not in field:
-            field.append(val)
-    sql = "SELECT " + ", ".join(field) + " FROM " + model
-    return sql
-
-
-def importAttachment(sf_obj, cr, uid, context):
-    if context == None:
-        context = {}
-    attachment_pool = sf_obj.pool.get('ir.attachment')
-    data_pool = sf_obj.pool.get('ir.model.data')
-    try:
-        sfc = beatbox.PythonClient()
-        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
-        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)
-            if model_data:
-                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):
-    if context == None:
-        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 context == None:
-        context = {}
-
-    if salutation:
-        title_pool = sf_obj.pool.get('res.partner.title')
-        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)
-            return id
-    return False
-
-
-def priorityMapping(sf_obj, cr, uid, rating, context):
-    '''
-    Helper Method to Priority of Lead/Opportunity
-    '''
-    if context == None:
-        context = {}
-    priMap = {
-        'Hot': '2',
-        'Warm': '3',
-        'Cold': '4',
-    }
-    return priMap.get(rating, '4')
-
-
-def leadStateMapping(sf_obj, cr, uid, state, context):
-    '''
-    Helper Method to resolve State dependency.
-    '''
-    if context == None:
-        context = {}
-
-    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.
-    '''
-    if context == None:
-        context = {}
-
-    stageMap = {
-        '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', '=', '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
-    '''
-    if context == None:
-        context = {}
-
-    return user.get('Id', False)
-
-
-def getLocalId(sf_obj, cr, uid, state, country, context):
-    if context == None:
-        context = {}
-
-    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])])
-        if sid:
-            st_id = state_pool.browse(cr, uid, sid[0])
-            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]
-    return False, False
-
-
-def importLead(sf_obj, cr, uid, context):
-    if context == None:
-        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):
-    if context == None:
-        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.
-    '''
-    if context == None:
-        context = {}
-
-    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.
-    '''
-    if context == None:
-        context = {}
-
-    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):
-    if context == None:
-        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 context == None:
-        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):
-    if context == None:
-        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):
-    if context == None:
-        context = {}
-    
-    address_pool = sf_obj.pool.get('res.partner.address')
-    aids = []
-    for key, val in address.items():
-        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})
-            aids.append(address_pool.create(cr, uid, val, context))
-    return aids
-
-
-def importContact(sf_obj, cr, uid, context):
-    if context == None:
-        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',
-            },
-        }
-
-        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')
-        sfVals = sfc.query(sqlStmt)
-        for rec in sfVals:
-            add_dict = {}
-            for add in addressDict:
-                addr = {}
-                for key, vals in addressDict.get(add).items():
-                    if add in ['other', 'contact']:
-                        nkey = key[1:]
-                        val = rec.pop(vals)
-                        addr.update({nkey: val})
-                    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({'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, 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)
-    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
-    '''
-    if context == None:
-        context = {}
-    
-    priMap = {
-        '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.
-    '''
-    if context == None:
-        context = {}
-    
-    stateMap = {
-        'New': 'draft',
-        'Working': 'open',
-        'Escalated ': 'done',
-        'Closed': 'cancel',
-    }
-    return stateMap.get(state, False)
-
-
-def importCaseComment(sf_obj, cr, uid, sfc, context):
-    if context == None:
-        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):
-    if context == None:
-        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')
-        sfVals = sfc.query(sqlStmt)
-        for rec in sfVals:
-            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)
-
-    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):
-    if context == None:
-        context = {}
-
-    rrule_type = {
-        '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', }
-    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})
-
-    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'))})
-    return rec, fields
-
-
-def getPartnerId(sf_obj, cr, uid, rec, context):
-    if context == None:
-        context = {}
-
-    if rec.get('WhoId', False):
-        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):
-    if context == None:
-        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):
-    if context == None:
-        context = {}
-
-    attendee_pool = sf_obj.pool.get('calendar.attendee')
-    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',
-            }
-    stats = {
-        'New': 'needs-action',
-        'Declined': 'decliene',
-        'Accepted': 'accepted',
-        'Maybe': 'tentative',
-        'Deleted': 'delegated',
-    }
-
-    try:
-        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')
-            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)
-            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 = 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):
-    if context == None:
-        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')
-        sfVals = sfc.query(sqlStmt)
-        new_sfVals = []
-        for i in sfVals:
-            if not i.get("RecurrenceActivityId") or i.get('Id') == i.get("RecurrenceActivityId"):
-                new_sfVals.append(i)
-        for rec in new_sfVals:
-            fields= MODEL_MAP.get('Event').get('field_map')
-            rec.pop('RecurrenceActivityId')
-            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})
-            allday = '0'
-            if rec.get('IsAllDayEvent'):
-                allday = '1'
-            rec.update({'IsAllDayEvent': allday})
-            privacy = 'public'
-            if rec.get('IsPrivate'):
-                privacy = 'private'
-            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]})
-            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'):
-                fields.pop('end_type')
-            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))
-        return False
-    return True
-
-
-def createActivity(sf_obj, cr, uid, fields, rec, model, context):
-    if context == None:
-        context = {}
-
-    model_pool = sf_obj.pool.get(model)
-    try:
-        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')
-    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):
-    if context == None:
-        context = {}
-
-    cate_pool = sf_obj.pool.get('crm.case.categ')
-    modeldata_pool = sf_obj.pool.get('ir.model.data')
-    model_pool = sf_obj.pool.get('ir.model')
-    try:
-        sfc = beatbox.PythonClient()
-        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')
-        sfVals = sfc.query(sqlStmt)
-        modelDict = {
-            '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
-        if not cate_ids:
-            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'):
-                typ = rec.pop('Type')
-                if typ:
-                    model = modelDict.get(typ)
-                if typ == 'Call':
-                    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')})
-                    if rec.get('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})
-                    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})
-                else:
-                    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})
-
-            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)
-    except SoapFaultError, sfe:
-        if 'Type' in fields:
-            fields.pop('Type')
-        log = logging.getLogger('import.salesforce.SoapFaultError')
-        log.warning(str(sfe))
-        return False
-    except Exception, e:
-        if 'Type' in fields:
-            fields.pop('Type')
-        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',
-                 }
-    },
-    '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',
-                        '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',
-                }
-    },
-    'Contact': {
-        'dependencies': [],
-        'function': importContact,
-        'field_map': {
-                        'id': 'Id',
-                        'name': 'Name',
-                        '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',
-                    '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,
-}
-
-
-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."),
-        'users': fields.boolean('User', help="If Users is checked, SalesFroce Users data imported to OpenERP Users."),
-        'contact': fields.boolean('Partner/Contacts', help="If Partner/Contacts is checked, SalesFroce Contact data imported to OpenERP Partner and Partner Address."),
-        '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."),
-        'attachment': fields.boolean('Attachments', help="If Attachments is checked, SalesFroce attachments data  will imported to OpenERP Attachemnt, and if resource of the attachment is imported and it will linked to the repective documents."),
-        '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."),
-    }
-
-    _defaults = {
-        'attachment': True,
-        'lead': True,
-        'opportunity': True,
-        'users': True,
-        'contact': True,
-        'event': True,
-        'task': True,
-        '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:
-            context = {}
-        nodes = []
-        for current in self.browse(cr, uid, ids, context):
-            if current.lead:
-                nodes.append('Lead')
-            if current.opportunity:
-                nodes.append('Opportunity')
-            if current.users:
-                nodes.append('User')
-            if current.contact:
-                nodes.append('Contact')
-            if current.case:
-                nodes.append('Case')
-            if current.event:
-                nodes.append('Event')
-            if current.task:
-                nodes.append('Task')
-                global ACT_TYPE
-                ACT_TYPE = current.task_type
-            if current.attachment:
-                nodes.append('Attachment')
-        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)})
-        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
-        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:
-            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 = {}
-        flag = flag
-        for dependency in dep:
-            if not dependency in visited:
-                self.resolve_dependencies(cr, uid, model_map, model_map[dependency]['dependencies'], visited, flag, context=context)
-                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:

=== removed file 'import_salesforce/import_sf_view.xml'
--- import_salesforce/import_sf_view.xml	2011-04-19 04:54:08 +0000
+++ import_salesforce/import_sf_view.xml	1970-01-01 00:00:00 +0000
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<openerp>
-    <data>
-        <!--Form View for the model import sf-->
-        <record model="ir.ui.view" id="view_import_sf_form">
-            <field name="name">import.sf.form</field>
-            <field name="model">import.sf</field>
-            <field name="type">form</field>
-            <field name="arch" type="xml">
-                <form string="Import SalesForce">
-                    <separator string="Check Model to Import" colspan='4' />
-                    <group  colspan="4" width="400" height="150">
-                        <field name='users' />
-                        <field name='contact'/>
-                        <field name='lead' />
-                        <field name='opportunity'/>
-                        <field name='case'/>
-                        <field name='event'/>
-                        <field name='attachment'/>
-                        <field name='task'/>
-                        <newline/>
-                        <field name='task_type' attrs="{'invisible': [('task', '!=', True)], 'required':[('task', '=', True)]}" colspan="4"/>
-                    </group>
-                    <group colspan="4" width="400">
-                        <separator colspan='4' />
-                        <group colspan="2"/>
-                        <group colspan="2">
-                            <button icon="gtk-cancel" special="cancel" string="_Cancel"/>
-                            <button icon="gtk-execute" string="_Import" name="sf_do_import" type="object"/>
-                        </group>
-                    </group>
-                </form>
-            </field>
-        </record>
-    </data>
-</openerp>
-
-

=== added directory 'import_salesforce/security'
=== added file 'import_salesforce/security/ir.model.access.csv'
--- import_salesforce/security/ir.model.access.csv	1970-01-01 00:00:00 +0000
+++ import_salesforce/security/ir.model.access.csv	2011-05-13 10:30:00 +0000
@@ -0,0 +1,1 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"

=== added directory 'import_salesforce/test'
=== added file 'import_salesforce/test/test_import_user.yml'
--- import_salesforce/test/test_import_user.yml	1970-01-01 00:00:00 +0000
+++ import_salesforce/test/test_import_user.yml	2011-05-13 10:30:00 +0000
@@ -0,0 +1,26 @@
+-
+  Creating Wizard to Select Service record.
+-
+  !record {model: salesforce.services, id: salesforce_services_webservice}:
+    name: webservice
+
+-
+  Creating a Import Wizard with Username and Login Detail record
+-
+  !record {model: import.sf, id: import_sf_user}:
+    password: openerp123
+    token: VHcN14OFIERn6xzYWq0dIWS8k
+    username: testmail.openerp@xxxxxxxxx
+    users: true
+
+-
+  Start Importing User and Check Imported Successfully or not
+-
+  !python {model: import.sf}: |
+        result = self.sf_do_import(cr, uid, [ref("import_sf_user")], context={'choice':'webservice'} )
+        import logging
+        log = logging.getLogger('import.salesforce')
+        if not result.get('context',{}).get('imported', False):
+            raise AssertionError("Unexpected end of message. Please check connectivity and permissions, and report a bug if problems persist.")
+        else:
+            log.info("Users Imported Successfully from SalesForce.")

=== modified file 'import_salesforce/wizard/import_salesforce.py' (properties changed: +x to -x)
--- import_salesforce/wizard/import_salesforce.py	2011-04-19 07:22:17 +0000
+++ import_salesforce/wizard/import_salesforce.py	2011-05-13 10:30:00 +0000
@@ -19,62 +19,1583 @@
 #
 ##############################################################################
 
-import logging
+from datetime import datetime
+import time
 from osv import osv
 from osv import fields
 from tools.translate import _
+import tools
+
 
 try:
     import beatbox
+    from beatbox import SoapFaultError
 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'
+import logging
+
+DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
+ACT_TYPE = ''
+INSTANCE = 'salesforce'
+MODEL_LIST = [('lead', 'Lead'), ('opportunity', 'Opportunity'),
+              ('user', 'User'), ('contact', 'Partner/Contacts'),
+              ('case', 'Cases/Claim'), ('event', 'Event/Meetings'),
+              ('task', 'Activity/Task'), ('attachment', 'Attachment'),
+              ('folder', 'Folder/Directory'), ('document', 'Documents')]
+
+
+def dataMapping(dictsf, dictoe):
+    '''
+    Helper Method to Map Field & Values in list
+    and return two list of Field and Values
+    '''
+    fields=[]
+    data = []
+    for key, val in dictoe.items():
+        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)))
+            else:
+                data.append(dictsf.get(val, ''))
+    return fields, data
+
+
+def getSFLogin(client, usr, pwd):
+    '''
+    Helper Methos for logining to the SaleFroce
+    @use : UserName
+    @pwd : Password + SecurityToken
+    '''
+    try:
+        sfi = client.login(usr, pwd)
+        return client, sfi
+    except SoapFaultError, sfe:
+        raise osv.except_osv(_('Error !'), _('%s.\n%s')%(sfe.faultCode, str(sfe.faultString)))
+    except:
+        raise osv.except_osv(_('Error !'), _('Unexpected end of message. Please check connectivity and permissions, and report a bug if problems persist.'))
+
+
+def prepareStatement(fieldMap, model):
+    '''
+    Helper Method to create SOQL for salesforce.
+    '''
+    field = []
+    for val in fieldMap.values():
+        if val not in field:
+            field.append(val)
+    sql = "SELECT " + ", ".join(field) + " FROM " + model
+    return sql
+
+
+def importAttachment(sf_obj, cr, uid, context):
+    if context == None:
+        context = {}
+    attachment_pool = sf_obj.pool.get('ir.attachment')
+    data_pool = sf_obj.pool.get('ir.model.data')
+    try:
+        sfc = beatbox.PythonClient()
+        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        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', 'like', INSTANCE+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')})
+            rec.update({'Id': INSTANCE+"_attachment_"+rec.get('Id')})
+            field, data = dataMapping(rec, fields)
+            attachment_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            if model_data:
+                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):
+    if context == None:
+        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', 'like', INSTANCE+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})
+            rec.update({'Id': INSTANCE + '_' + rec.get('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 context == None:
+        context = {}
+
+    if salutation:
+        title_pool = sf_obj.pool.get('res.partner.title')
+        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)
+            return id
+    return False
+
+
+def priorityMapping(sf_obj, cr, uid, rating, context):
+    '''
+    Helper Method to Priority of Lead/Opportunity
+    '''
+    if context == None:
+        context = {}
+    priMap = {
+        'Hot': '2',
+        'Warm': '3',
+        'Cold': '4',
+    }
+    return priMap.get(rating, '4')
+
+
+def leadStateMapping(sf_obj, cr, uid, state, context):
+    '''
+    Helper Method to resolve State dependency.
+    '''
+    if context == None:
+        context = {}
+
+    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.
+    '''
+    if context == None:
+        context = {}
+
+    stageMap = {
+        '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', '=', '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
+    '''
+    if context == None:
+        context = {}
+
+    return user.get('Id', False)
+
+
+def getLocalId(sf_obj, cr, uid, state, country, context):
+    if context == None:
+        context = {}
+
+    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])])
+        if sid:
+            st_id = state_pool.browse(cr, uid, sid[0])
+            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]
+    return False, False
+
+
+def getChannelId(sf_obj, cr, uid, channel, context):
+    '''
+    Helper Method to to get Lead Channel Id
+    '''
+    if context == None:
+        context = {}
+    channel_id = False
+    if channel:
+        partner_canal_pool = sf_obj.pool.get('res.partner.canal')
+        chnls = {
+            'Web': 'website',
+            'Phone Inquiry': 'phone',
+        }
+        if chnls.get(channel, False):
+            sid = partner_canal_pool.search(cr, uid, [('name', '=', chnls.get(channel))])
+            channel_id = sid and sid[0] or False
+        else:
+            sid = partner_canal_pool.search(cr, uid, [('name', '=', channel)])
+            if sid:
+                channel_id = sid and sid[0] or False
+            else:
+                channel_id = partner_canal_pool.create(cr, uid, {'name': channel, 'active': True}, context)
+    return channel_id
+
+
+def importLead(sf_obj, cr, uid, context):
+    if context == None:
+        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})
+            user_id = getUserId(sf_obj, cr, uid, rec.get('CreatedBy', False), context)
+            if user_id:
+                rec.update({'CreatedBy.Id': INSTANCE +"_user_"+ user_id})
+            else:
+                rec.update({'CreatedBy.Id': False})
+            rec.update({'LeadSource': getChannelId(sf_obj, cr, uid, rec.get('LeadSource'), context)})
+
+            rec.update({'Id': INSTANCE+"_lead_"+rec.get('Id')})
+            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):
+    if context == None:
+        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:
+            rec.update({'Id': INSTANCE+"_user_"+rec.get('Id')})
+            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.
+    '''
+    if context == None:
+        context = {}
+
+    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.
+    '''
+    if context == None:
+        context = {}
+
+    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):
+    if context == None:
+        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', '=', INSTANCE+"_opportunity_"+ 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({'OpportunityId': 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', '')})
+                rec.update({'Id': INSTANCE+"_opportunityhistory_"+rec.get('Id')})
+                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 context == None:
+        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):
+    if context == None:
+        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)})
+            user_id = getUserId(sf_obj, cr, uid, rec.get('CreatedBy', False), context)
+            if user_id:
+                rec.update({'CreatedBy.Id': INSTANCE +"_user_"+ user_id})
+            else:
+                rec.update({'CreatedBy.Id': False})
+            rec.update({'LeadSource': getChannelId(sf_obj, cr, uid, rec.get('LeadSource'), context)})
+            rec.update({'Id': INSTANCE +"_opportunity_"+ rec.get('Id')})
+            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):
+    if context == None:
+        context = {}
+
+    address_pool = sf_obj.pool.get('res.partner.address')
+    aids = []
+    for key, val in address.items():
+        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})
+            aids.append(address_pool.create(cr, uid, val, context))
+    return aids
+
+
+def importContact(sf_obj, cr, uid, context):
+    if context == None:
+        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',
+            },
+        }
+
+        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')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            add_dict = {}
+            for add in addressDict:
+                addr = {}
+                for key, vals in addressDict.get(add).items():
+                    if add in ['other', 'contact']:
+                        nkey = key[1:]
+                        val = rec.pop(vals)
+                        addr.update({nkey: val})
+                    if add in ['invoice', 'delivery']:
+                        account = rec.get('Account')
+                        nkey = key[1:]
+                        if account:
+                            val = account.pop(vals)
+                            addr.update({nkey: val})
+                    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)})
+            rec.update({'Id': INSTANCE+"_contact_"+rec.get('Id')})
+            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)
+    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 M                    'partner_id/id': 'Contact.Id',
+                    'priority': 'Priority',
+                    'user_id/id': 'Owner.Id',ethod to Priority of Lead/Opportunity
+    '''
+    if context == None:
+        context = {}
+
+    priMap = {
+        '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.
+    '''
+    if context == None:
+        context = {}
+
+    stateMap = {
+        'New': 'draft',
+        'Working': 'open',
+        'Escalated ': 'done',
+        'Closed': 'cancel',
+    }
+    return stateMap.get(state, False)
+
+
+def importCaseComment(sf_obj, cr, uid, sfc, context):
+    if context == None:
+        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', '=', INSTANCE+"_case_"+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', '')})
+                rec.update({'Id': INSTANCE+"_casecomment_"+rec.get('Id')})
+                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):
+    if context == None:
+        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')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            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)})
+            user_id = getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)
+            if user_id:
+                rec.update({'Owner.Id': INSTANCE+"_user_"+user_id})
+            else:
+                rec.update({'Owner.Id': False})
+            contact_id = getUserId(sf_obj, cr, uid, rec.get('Contact', False), context)
+            if contact_id:
+                rec.update({'Contact.Id': INSTANCE+"_contact_"+contact_id})
+            else:
+                rec.update({'Contact.Id': False})
+            rec.update({'Id': INSTANCE+"_case_"+rec.get('Id')})
+            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)
+
+    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):
+    if context == None:
+        context = {}
+
+    rrule_type = {
+        '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', }
+    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})
+
+    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'))})
+    return rec, fields
+
+
+def getPartnerId(sf_obj, cr, uid, rec, context):
+    if context == None:
+        context = {}
+
+    if rec.get('WhoId', False):
+        model_pool = sf_obj.pool.get('ir.model.data')
+        model_data_ids = model_pool.search(cr, uid, [('model', '=', 'res.partner'), ('name', 'like', INSTANCE+"_contact_"+rec.get('WhoId'))])
+        if model_data_ids:
+            return INSTANCE+"_contact_"+rec.get('WhoId')
+    return False
+
+
+def getEventUser(sf_obj, cr, uid, rec, context):
+    if context == None:
+        context = {}
+
+    model_pool = sf_obj.pool.get('ir.model.data')
+    user = email = address = False
+    model_partner_id = model_pool.search(cr, uid, [('name', '=', INSTANCE+"_contact_"+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):
+    if context == None:
+        context = {}
+
+    attendee_pool = sf_obj.pool.get('calendar.attendee')
+    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',
+            }
+    stats = {
+        'New': 'needs-action',
+        'Declined': 'decliene',
+        'Accepted': 'accepted',
+        'Maybe': 'tentative',
+        'Deleted': 'delegated',
+    }
+
+    try:
+        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')
+            rec.pop('AttendeeId')
+            rec.update({'Status': stats.get(rec.get('Status'))})
+            rec.update({'Id': INSTANCE +"_eventattendee_"+ rec.get('Id')})
+            field, data = dataMapping(rec, fields)
+            attendee_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            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', '=', INSTANCE+"_event_"+parent_id)])
+            att_id = model_pool.search(cr, uid, [('model', '=', 'calendar.attendee'), ('name', '=', rec.get('Id'))])
+            if model_data_ids and att_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):
+    if context == None:
+        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')
+        sfVals = sfc.query(sqlStmt)
+        new_sfVals = []
+        for i in sfVals:
+            if not i.get("RecurrenceActivityId") or i.get('Id') == i.get("RecurrenceActivityId"):
+                new_sfVals.append(i)
+        for rec in new_sfVals:
+            fields= MODEL_MAP.get('event').get('field_map')
+            rec.pop('RecurrenceActivityId')
+            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})
+            allday = '0'
+            if rec.get('IsAllDayEvent'):
+                allday = '1'
+            rec.update({'IsAllDayEvent': allday})
+            privacy = 'public'
+            if rec.get('IsPrivate'):
+                privacy = 'private'
+            rec.update({'class': privacy})
+            if rec.get('ShowAs'):
+                rec.update({'class': rec.get('ShowAs').lower()})
+            user_id = getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)
+            if user_id:
+                rec.update({'Owner.Id': INSTANCE+"_user_"+user_id})
+            else:
+                rec.update({'Owner.Id': False})
+            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({'Id': INSTANCE +"_event_"+ rec.get('Id')})
+            field, data = dataMapping(rec, fields)
+            meeting_pool.import_data(cr, uid, field, [data], mode='update', current_module='import_salesforce', noupdate=True, context=context)
+            if 'end_type' in fields:
+                fields.pop('end_type')
+            if 'select1' in fields:
+                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))
+        return False
+    return True
+
+
+def createActivity(sf_obj, cr, uid, fields, rec, model, context):
+    if context == None:
+        context = {}
+
+    model_pool = sf_obj.pool.get(model)
+    try:
+        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)
+        if 'categ_id/.id' in fields:
+            fields.pop('categ_id/.id')
+        if 'partner_id/.id' in fields:
+            fields.pop('partner_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):
+    if context == None:
+        context = {}
+
+    cate_pool = sf_obj.pool.get('crm.case.categ')
+    modeldata_pool = sf_obj.pool.get('ir.model.data')
+    model_pool = sf_obj.pool.get('ir.model')
+    try:
+        sfc = beatbox.PythonClient()
+        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')
+        sfVals = sfc.query(sqlStmt)
+        modelDict = {
+            '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
+        if not cate_ids:
+            nid = cate_pool.create(cr, uid, {'name': 'Task', 'object_id': meetmodel_id[0]})
+        for rec in sfVals:
+            model = 'crm.meeting'
+            if 'Type'in rec:
+                typ = rec.pop('Type')
+                if typ:
+                    model = modelDict.get(typ)
+                if typ == 'Call':
+                    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')})
+                    if rec.get('WhatId'):
+                        fields.update({'opportunity_id/id': 'WhatId'})
+                if typ == 'Email':
+                    if rec.get('WhoId'):
+                        data_id = modeldata_pool.search(cr, uid, [('name', 'like', INSTANCE+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})
+                    elif rec.get('WhatId'):
+                        data_id = modeldata_pool.search(cr, uid, [('name', 'like', INSTANCE+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})
+                else:
+                    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})
+                if rec.get('WhoId', False):
+                    data_id = modeldata_pool.search(cr, uid, [('name', '=', INSTANCE+"_contact_"+rec.get('WhoId')), ('model', '=', 'res.partner')])
+                    if data_id:
+                        model_rec = modeldata_pool.browse(cr, uid, data_id[0])
+                        fields.update({'partner_id/.id': 'partner'})
+                        rec.update({'partner': model_rec.res_id})
+            if 'WhatId' in rec:
+                rec.pop('WhatId')
+            if 'WhoId' in rec:
+                rec.pop('WhoId')
+            if rec.get('ActivityDate'):
+                rec.update({'ActivityDate': rec.get('ActivityDate').strftime(DATETIME_FORMAT)})
+            user_id = getUserId(sf_obj, cr, uid, rec.get('Owner', False), context)
+            if user_id:
+                rec.update({'Owner.Id': INSTANCE+"_user_"+user_id})
+            else:
+                rec.update({'Owner.Id': False})
+            rec.update({'ActivityDate': datetime.now().strftime(DATETIME_FORMAT)})
+            createActivity(sf_obj, cr, uid, fields, rec, model, 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 importFolder(sf_obj, cr, uid, context):
+    if context == None:
+        context = {}
+    document_pool = sf_obj.pool.get('document.directory')
+    try:
+        sfc = beatbox.PythonClient()
+        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        fields = MODEL_MAP.get('folder').get('field_map')
+        sqlStmt = prepareStatement(fields, 'Folder')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            if rec.get('Type', False) == 'Document':
+                rec.update({'Type': 'directory'})
+                rec.update({'Id': INSTANCE +"_folder_"+ rec.get('Id')})
+                field, data = dataMapping(rec, fields)
+                document_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 importDocument(sf_obj, cr, uid, context):
+    if context == None:
+        context = {}
+    attachment_pool = sf_obj.pool.get('ir.attachment')
+    try:
+        sfc = beatbox.PythonClient()
+        sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        fields = MODEL_MAP.get('document').get('field_map')
+        sqlStmt = prepareStatement(fields, 'Document')
+        sfVals = sfc.query(sqlStmt)
+        for rec in sfVals:
+            fields.update({'datas': 'Body'})
+            if rec.get('Type', False) == 'URL':
+                rec.update({'Type': 'url'})
+            else:
+                rec.update({'Type': 'binary'})
+                data = sfc.query("SELECT Body FROM Document WHERE id='%s'"%(rec.get('Id')))
+                if data:
+                    data = data[0]
+                    rec.update({'Body': data.get('Body')})
+            rec.update({'Id': INSTANCE +"_document_"+ rec.get('Id'),
+                        'AuthorId': INSTANCE +"_user_"+ rec.get('AuthorId'),
+                        })
+            field, data = dataMapping(rec, fields)
+            attachment_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
+
+
+MODEL_MAP = {
+    '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',
+                        'channel_id/.id': 'LeadSource',
+                    }
+    },
+    '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',
+                        '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',
+                        'channel_id/.id': 'LeadSource',
+                }
+    },
+    'contact': {
+        'dependencies': [],
+        'function': importContact,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'Name',
+                        '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',
+                    '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',
+            }
+    },
+    'folder': {
+        'dependencies': ['user'],
+        'function': importFolder,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'Name',
+                        'type': 'Type',
+                    }
+    },
+    'document': {
+        'dependencies': ['folder', 'user'],
+        'function': importDocument,
+        'field_map': {
+                        'id': 'Id',
+                        'name': 'Name',
+                        'type': 'Type',
+                        'user_id/id': 'AuthorId',
+                        'datas_fname': 'Name',
+                        'description': 'Description',
+                        'url': 'Url',
+                    }
+    },
+}
+
+LOGIN_DATA = {
+    '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 = {
-            '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 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')
+        'file_path': fields.binary('Select CSV file', filters='*.csv,*.xls'),
+        'username': fields.char('Username/Email', size=255, help="Salesforce User name/login Name"),
+        'password': fields.char('Password', size=255, help="Password for above User"),
+        'token': fields.char('Security Token', size=255, help="Security Token generated by salesforce for user."),
+        'model_list': fields.selection(MODEL_LIST, 'Model'),
+        '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, SalesForce Leads data imported to OpenERP CRM Opportunity."),
+        'users': fields.boolean('User', help="If Users is checked, SalesFroce Users data imported to OpenERP Users."),
+        'contact': fields.boolean('Partner/Contacts', help="If Partner/Contacts is checked, SalesFroce Contact data imported to OpenERP Partner and Partner Address."),
+        '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."),
+        'folder': fields.boolean('Folder/Directory', help="If Folder/Directory checked, SalesFroce Folder data imported to OpenERP Directory."),
+        'document': fields.boolean('Document', help="If Documents checked, SalesFroce Folder data imported to OpenERP Document."),
+        'attachment': fields.boolean('Attachments', help="If Attachments is checked, SalesFroce attachments data  will imported to OpenERP Attachment, and if resource of the attachment is imported and it will linked to the respective documents."),
+        'task': fields.boolean('Acivity', help="If Activity is checked, SalesFroce Activity data  will imported to OpenERP Meetings and if you want to import data according to the type in Task to repective model than select 'With Type' from below slection and Give Field level security of the Type Field in SalesForce.\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 'Without Type' option else select 'With Type' option."),
+        'model': fields.char('Model', size=255, help="Name of model whose function will be called when this scheduler will run. e.g. 'res.partener'"),
+        'function': fields.char('Function', size=255, help="Name of the method to be called on the model when this scheduler is executed."),
+        'interval_number': fields.integer('Interval Number', help="Repeat every x interval."),
+        'interval_type': fields.selection([('minutes', 'Minutes'), ('hours', 'Hours'), ('work_days', 'Work Days'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], 'Interval Unit'),
+        'numbercall': fields.integer('Number of Calls', help='Number of time the function is called,\na negative number indicates no limit'),
+        'nextcall': fields.datetime('Next Execution Date', required=True, help="Next planned execution date for this scheduler"),
+        'email': fields.char('Email address to notify', size=128, help="On Successful import the Email is Send to the mention email address."),
+        'instance_name': fields.char('Instance Name', required=True, size=128, help="Instance name will be used to separate import from multiple salesforce login instance."),
+    }
+
+    _defaults = {
+        'model': 'import.sf',
+        'function': '_do_import',
+        'interval_number': lambda *x: 6,
+        'interval_type': 'months',
+        'numbercall': lambda *x: 2,
+        'nextcall': lambda *x: time.strftime("%Y-%m-%d %H:%M:%S"),
+        'instance_name': 'salesforce',
+    }
+
+    def _get_nodes(self, cr, uid, ids, context=None):
+        """Retun the List of the Select Model to be imported"""
+        if not context:
+            context = {}
+        nodes = []
+        for current in self.browse(cr, uid, ids, context):
+            if current.lead:
+                nodes.append('lead')
+            if current.opportunity:
+                nodes.append('opportunity')
+            if current.users:
+                nodes.append('user')
+            if current.contact:
+                nodes.append('contact')
+            if current.case:
+                nodes.append('case')
+            if current.event:
+                nodes.append('event')
+            if current.task:
+                nodes.append('task')
+                global ACT_TYPE
+                ACT_TYPE = current.task_type
+            if current.attachment:
+                nodes.append('attachment')
+            if current.folder:
+                nodes.append('folder')
+            if current.document:
+                nodes.append('document')
+        return nodes
+
+    def resolve_dependencies(self, cr, uid, model_map, dep, visited, flag, context=None):
+        '''
+        Method to Reolve the Dependencies of the Model to be imported.
+        @uid        : Current UserID
+        @model_map  : Fieald Mapping Dict
+        @dep        : Dependencies List
+        @visited    : Set of Visited Nodes
+        @flag       : To Track Successfull Import
+        '''
+        if context == None:
+            context = {}
+        flag = flag
+        for dependency in dep:
+            if not dependency in visited:
+                self.resolve_dependencies(cr, uid, model_map, model_map[dependency]['dependencies'], visited, flag, context=context)
+                flag = model_map[dependency]['function'](self, cr, uid, context)
+                visited.add(dependency)
+        return flag
+
+    def _do_import(self, cr, uid, *args):
+        ''''
+        Method to be called by IrCron Job to initiate importing the data process
+        @uid : Current Userid
+        @args : it can have three parts
+                args[0] : list to model name to be imported
+                args[1] : Activty Type Field Detail
+                args[2] : SalesForce Login Deatil Id for the Schedular
+        '''
+        context = {}
+        flag = False
+        login_pool = self.pool.get('salesforce.login.services')
+        log = logging.getLogger('import.salesforce')
+        if args[2]:
             try:
-                sfc = beatbox.PythonClient()
-                sfc.login(uname, passkey)
-                log.info(_("Successful login to SalesForce WebServices with user - %s")%(uname))
+                #Reloading new SF login configuration.
+                login = login_pool.browse(cr, uid, int(args[2]))
+                LOGIN_DATA.update({'username': login.name,
+                                   'passToken': login.password+login.token})
+                sf_model = args[0]
+                task_type = args[1]
+                if 'task' in sf_model:
+                    global ACT_TYPE
+                    ACT_TYPE = task_type and task_type[0] or 'wttype'
+                visited = set() #To avoid the Multiple call for resloving dependencies
+                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)
             except Exception, e:
                 log.warning(str(e))
-                raise osv.except_osv(_('Error !'), _('Invalid login detail'))
-
+
+        else:
+            log.warning("Invalid Login : Login information for the scheduler is missing.")
+        if flag:
+            log.info("Data Imported Successfully from SalesForce.")
+            if args[3]:
+                from_mail = tools.config.options['email_from'] or False
+                subject = "Data Imported Successfully from Salesforce,"
+                body = """Hello,\n\tFollowing Models has been imported Successfully " %s "\n on %s from salesforce with login %s.\n\nThank You for using OpenERP Import Salesforce module.\n---------\nOpenERP"""%(args[0], datetime.now().strftime(DATETIME_FORMAT), login.name)
+                tools.email_send(from_mail, [args[3]], subject, body)
+                log.info("Mail Send Successfully to %s ."%(args[0]))
+        else:
+            log.Warning("Unkown Error During Importing Data from SalesForce Check the server log for more.")
+        return flag
+
+    def sf_do_import(self, cr, uid, ids, context=None):
+        '''
+        Method to initiate data import from map dict
+        '''
+        if context == None:
+            context = {}
         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})
+
+        record = self.browse(cr, uid, ids, context=context)
+        choice = context.get('choice', False)
+        record = record[0]
+
+        LOGIN_DATA.update({'username': record.username,
+                           'passToken': record.password+record.token})
+
+        try:
+            sfc = beatbox.PythonClient()
+            sfc, sflogin = getSFLogin(sfc, LOGIN_DATA.get('username'), LOGIN_DATA.get('passToken'))
+        except SoapFaultError, sfe:
+            context.update({'message': '%s.\n%s'%(sfe.faultCode, str(sfe.faultString)), 'imported': False})
+        except:
+            context.update({'message': 'Unexpected end of message. Please check connectivity and permissions, and report a bug if problems persist.', 'imported': False})
+        sf_model = self._get_nodes(cr, uid, ids, context)
+        visited = set() #To avoid the Multiple call for resloving dependencies
+        flag = False
+        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'])
+        #Import Via SalesForce WebServices
+        global INSTANCE
+        INSTANCE = record.instance_name
+        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)
+        if flag:
+            message = "Data Imported Successfully from Salesforce."
+            to_mail = record.email
+            if to_mail:
+                from_mail = tools.config.options['email_from'] or False
+                subject = "Data Imported Successfully from Salesforce,"
+                body = """Hello,\n\tFollowing Models has been imported Successfully " %s "\n on %s from salesforce with login %s.\n\nThank You for using OpenERP Import Salesforce module.\n---------\nOpenERP"""%(', '.join(sf_model), datetime.now().strftime(DATETIME_FORMAT), record.username)
+                tools.email_send(from_mail, [to_mail], subject, body)
+                message += " Email Send Successfully to %s."%(to_mail)
+            else:
+                message += " No notification Email found so mail can not be send."
+            context.update({'message': message, 'imported': True})
+        else:
+            context.update({'message': 'Unexpected end of message. Please check connectivity and permissions, and report a bug if problems persist. For more check server log.', 'imported': False})
         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,
+                'view_type': 'form',
+                'view_mode': 'form',
+                'res_model': 'sf.import.message',
+                'views': [(resource_id, 'form')],
+                'type': 'ir.actions.act_window',
+                'target': 'new',
+                'context': context,
         }
 
-salesforce_login()
+    def createCronJob(self, cr, uid, ids, context=None):
+        if context == None:
+            context = {}
+        cron_pool = self.pool.get('ir.cron')
+        login_pool = self.pool.get('salesforce.login.services')
+        model_pool = self.pool.get('ir.model.data')
+        records = self.browse(cr, uid, ids, context=context)
+        for record in records:
+            LOGIN_DATA.update({'username': record.username,
+                           'passToken': record.password+record.token})
+
+        model_data_ids = model_pool.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'ir.cron.form')])
+        resource_id = model_pool.read(cr, uid, model_data_ids, fields=['res_id'])
+
+        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))
+        vals = {}
+        nodes = self._get_nodes(cr, uid, ids, context=None)
+        if not nodes:
+            raise osv.except_osv(_('Warning !'), _('No model is selected. select atleat one model.'))
+        task = []
+        if 'task' in nodes:
+            task=[record.task_type]
+        login_id = login_pool.create(cr, uid, {'name': record.username, 'password': record.password, 'token': record.token}, context=context)
+        if login_id:
+            args = (nodes, task, int(login_id), record.email)
+            vals.update({'name': 'Import Salesforce Datas',
+                         'interval_number': '6',
+                         'interval_type': 'months',
+                         'numbercall': '2',
+                         'doall': False,
+                         'active': False,
+                         'model': 'import.sf',
+                         'function': '_do_import',
+                         'args': args}),
+            cron_id = cron_pool.create(cr, uid, vals, context=context)
+        return {
+                'name': _('Scheduler'),
+                'view_type': 'form',
+                'view_mode': 'form',
+                'res_model': 'ir.cron',
+                'views': [(resource_id, 'form')],
+                'res_id' : cron_id,
+                'type': 'ir.actions.act_window',
+                'context': context,
+                'nodestroy': False,
+            }
+
+import_sf()
+
+
+class salesforce_login_services(osv.osv):
+    '''Object to Store the Login Information of the salesforce for Scheduler use.'''
+    _name = 'salesforce.login.services'
+    _description = 'SalesForce Login Service'
+    _columns = {
+        'token': fields.char('Security Token', size=255),
+        'name': fields.char('Username/Email', size=255),
+        'password': fields.char('Password', size=255),
+    }
+salesforce_login_services()
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'import_salesforce/wizard/import_salesforce_view.xml'
--- import_salesforce/wizard/import_salesforce_view.xml	2011-04-11 11:20:17 +0000
+++ import_salesforce/wizard/import_salesforce_view.xml	2011-05-13 10:30:00 +0000
@@ -2,48 +2,122 @@
 <openerp>
     <data>
         <!-- Menu for SalesForce Import Wizard-->
-        <menuitem id="menu_sf" name="Sales Force" parent="base.menu_base_partner" />
+        <menuitem id="menu_salesforce" 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>
-            <field name="model">salesforce.login</field>
+        <!--Form View for the model import sf for webservices-->
+        <record model="ir.ui.view" id="view_import_sf_webservice_form">
+            <field name="name">import.sf.webservice.form</field>
+            <field name="model">import.sf</field>
             <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="SalesForce Login">
-                    <separator string="Login Detail" colspan='4' />
-                    <group colspan="4" width="400">
-                        <field name='name' colspan='4'/>
-                        <field name='password' password='True' colspan='4'/>
-                        <field name='token' password='True' colspan='4'/>
-                    </group>
-                    <label string="       Enter Username, password and Security Token generated by SalesForce."/>
-                    <group colspan="4" width="400">
-                        <separator colspan='4' />
-                        <group colspan="2"/>
+                <form string="Import your data from Saleforce">
+                    <group colspan="8" col="4">
+                        <separator string="Login Information" colspan='4'/>
+                        <field name='username' colspan='4' required='True'/>
+                        <field name='password' password='True' colspan='4' required='True'/>
+                        <field name='token' password='True' colspan='4' required='True'/>
+                    </group>
+                    <group colspan="8" col="8">
+                    <separator string="Choose The Data You Want To Import" colspan='8'/>
+                    <newline/>    
+                            <group colspan="4" col="4">
+                                <separator string="Base" colspan="2"/>
+                                <newline/> 
+                                <group colspan="2" col="2">
+                                    <field name="users"/>
+                                    <field name="contact"/>
+                                </group>
+                            </group>                
+                            <group colspan="4" col="4">
+                                <separator string="CRM" colspan="2"/>
+                                <newline/>
+                                <group colspan="2" col="4">
+                                    <field name='lead' />
+                                    <field name='opportunity'/>
+                                    <field name='event'/>
+                                    <field name='case'/>
+                                </group>
+                            </group>
+                            <group colspan="4" col="4">
+                                <separator string="Document" colspan="2"/>
+                                <newline/>
+                                <group colspan="2" col="4">
+                                    <field name='folder'/>
+                                    <field name='document'/>
+                                    <field name='attachment'/>
+                                </group>
+                            </group>
+                            <group colspan="4" col="4">
+                                <separator string="Others" colspan="4"/>
+                                <field name='task' colspan="4"/>
+                                <field name='task_type' attrs="{'invisible': [('task', '!=', True)], 'required':[('task', '=', True)]}" colspan="4"/>  
+                            </group>
+                    </group>
+                    <group colspan="4" col="2">
+                         <separator string="Email Notification When Import Finished" colspan="2"/>
+                        <field name="email" colspan="2"/>
+                    </group>
+                    <group colspan="4" col="2">
+                        <separator string="Multi Instance Management" colspan="2"/>
+                        <field name="instance_name" colspan="2"/>
+                    </group>
+                         <separator string="" colspan="4"/>
+                    <group colspan="4" col="4">
                         <group colspan="2">
+                                <button string="Create _Recurrent Import" name="createCronJob" icon="gtk-new" type="object" />
+                                <label />        
+                        </group>
+                        
+                        <group colspan="2" col="2">
                             <button icon="gtk-cancel" special="cancel" string="_Cancel"/>
-                            <button icon="terp-camera_test" string="_Login" name="sf_do_login" type="object"/>
+                            <button icon="gtk-go-forward" string="_Import Once" name="sf_do_import" type="object"/>
                         </group>
                     </group>
+
                 </form>
             </field>
         </record>
 
         <!--SalsForce Login Form Action-->
-        <record model="ir.actions.act_window" id="action_view_salesforce_login">
-            <field name="name">SalesForce Login</field>
-            <field name="res_model">salesforce.login</field>
+        <record model="ir.actions.act_window" id="action_view_import_sf_webservice_form">
+            <field name="name">Import SalesForce</field>
+            <field name="res_model">import.sf</field>
             <field name="view_type">form</field>
             <field name="view_mode">tree,form</field>
-            <field name="view_id" ref="view_salesforce_login_form"/>
+            <field name="view_id" ref="view_import_sf_webservice_form"/>
             <field name="target">new</field>
         </record>
 
         <!--wizard under importsalesforce menu-->
-        <menuitem id="menu_sf_login" name="Import SalesForce" parent="menu_sf" action="action_view_salesforce_login" icon="STOCK_EXECUTE"/>
+        <menuitem id="menu_salesforce_service" name="Import Salesforce" parent="menu_salesforce" action="action_view_import_sf_webservice_form" icon="STOCK_EXECUTE"/>
+
+
+
+
+        <record model="ir.ui.view" id="view_salesforce_login_services_form">
+            <field name="name">salesforce.login.services.form</field>
+            <field name="model">salesforce.login.services</field>
+            <field name="type">form</field>
+            <field name="arch" type="xml">
+                <form string="SalesForce Login">
+                    <field name='name' colspan='4' required='True'/>
+                    <field name='password' colspan='4' required='True'/>
+                    <field name='token' colspan='4' required='True'/>
+                </form>
+            </field>
+        </record>
+        <record model="ir.ui.view" id="view_salesforce_login_services_tree">
+            <field name="name">salesforce.login.services.tree</field>
+            <field name="model">salesforce.login.services</field>
+            <field name="type">tree</field>
+            <field name="arch" type="xml">
+                <tree string="SalesForce Login">
+                    <field name='name'/>
+                    <field name='password'/>
+                    <field name='token'/>
+                </tree>
+            </field>
+        </record>
 
     </data>
 </openerp>
-
-

=== modified file 'import_salesforce/wizard/sf_import_message.py'
--- import_salesforce/wizard/sf_import_message.py	2011-04-19 05:22:28 +0000
+++ import_salesforce/wizard/sf_import_message.py	2011-05-13 10:30:00 +0000
@@ -25,8 +25,9 @@
 
 class sf_import_message(osv.osv):
     """Import Message"""
+    
     _name = "sf.import.message"
-    _description = __doc__
+    _description = "Import Message"
     _columns = {
         'name': fields.text('Message', readonly=True),
         }


Follow ups