~confianz/openerp-salesforce/trunk

« back to all changes in this revision

Viewing changes to salesforce_integration/salesforce_osv.py

  • Committer: Anoop Menon
  • Date: 2013-11-27 19:47:44 UTC
  • Revision ID: anoopmenon@confianzit.com-20131127194744-84iy188bs9uval4o
Initial import of all project files

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from osv import osv
 
2
from osv import fields
 
3
from tools.translate import _
 
4
import time 
 
5
import pooler
 
6
 
 
7
def get_salesforce_account(self, cr, uid, context=None):
 
8
        
 
9
    """
 
10
    Get SalesForce account details
 
11
    @param cr: database cusrsor
 
12
    @param uid: id of the executing user     
 
13
    @return: browse record object
 
14
    """
 
15
        
 
16
    acc_obj = self.pool.get("salesforce.connection")
 
17
    acc_ids = acc_obj.search(cr, uid, [('confirmed','=',True)],context=context)# get confirmed SalesForce connection 
 
18
    if not acc_ids :
 
19
       raise osv.except_osv(_("Error "),_("There is no active salesforce connection defined.\n Please add a salesforce connection and try again"))
 
20
    return  acc_obj.browse(cr,uid,acc_ids,context=context)[0]#browse 
 
21
 
 
22
#Get SalesForce resource (Table) 
 
23
      
 
24
def get_salesforce_resource(self, cr, uid, sequence=0, context=None):
 
25
    """
 
26
    Serch if a coneection to a given module is available
 
27
    if yes return that resouce from salesforce.table
 
28
    if not raise exception
 
29
    @param cr: database cusrsor
 
30
    @param uid: id of the executing user   
 
31
    @param sequence: sequence of the data, default is 0  
 
32
    @return: dictionary
 
33
    
 
34
    """
 
35
    if not context:
 
36
        context={}
 
37
    resource_obj = self.pool.get('salesforce.tables')
 
38
    # search for  the given model and sequence in salesforce.table
 
39
    resource_ids= resource_obj.search(cr, uid, [('model','=',self._name),('sequence','=',sequence)],context=context)
 
40
    
 
41
    if not resource_ids :   # if no refernce found raise the error
 
42
        raise osv.except_osv(_("Error "),_("Saleforce connector is not available for this resource %s " %self._name))  
 
43
    
 
44
    # read that record and return    
 
45
    resource= resource_obj.read(cr, uid, resource_ids,[],context=context)[0]
 
46
    return resource
 
47
    
 
48
 
 
49
def get_salesforce_field_mapping(self, cr, uid, table_id, move="in", context=None):
 
50
 
 
51
    """
 
52
    Get all the fields from salesforce.fields in a given model and return back
 
53
    depending up on move "in" or "out this method will return the corresponding fields"
 
54
    @param cr: database cusrsor
 
55
    @param uid: id of the executing user  
 
56
    @param table_id: SalesForce table id --'salesforce.tables'
 
57
    @param move:    type of the method -- values 'in','out'
 
58
    @return: dictionary
 
59
    """
 
60
    
 
61
    if not context:
 
62
        context={}
 
63
    
 
64
    filter_string = [('table_id','=',table_id),('type','in',['in_out',move])]
 
65
    sf_field_pool = self.pool.get('salesforce.fields')
 
66
    field_ids = sf_field_pool.search(cr, uid, filter_string,context=context)
 
67
    
 
68
    if field_ids :  # if field is found read the values
 
69
        fields = sf_field_pool.read(cr, uid, field_ids, context=context)
 
70
    else:    # in no field found set the fileds as empty list
 
71
       fields = []
 
72
       
 
73
    result={}   
 
74
    # depending on move type prepare the dict key 
 
75
    key = move == 'in' and 'salesforce_name' or 'name'
 
76
    for field in fields :
 
77
        result[field[key]]= field     # for import dict key will be salesforce filed name and Internal filed name for export
 
78
    return result
 
79
    
 
80
# method to prapare a salesforce API (THis is not used )    
 
81
def prepare_salesforce_query(resource, fields, context=None):
 
82
    """
 
83
    Generat Query for SalesForce
 
84
    @param resource: SalesForce Table name
 
85
    @param fields: fields list
 
86
    @return: string
 
87
    """
 
88
        
 
89
    field_string ="" 
 
90
    for field in fields.keys():
 
91
       field_string += field+','
 
92
    field_string  += "Id"  
 
93
    query= "SELECT "+field_string+ " FROM "+resource
 
94
    return query 
 
95
       
 
96
def salesforce_import_mapping(self, cr, uid, response, fields, con, account=False, context=None): 
 
97
    """
 
98
        Map the fields to import ,
 
99
        ARGS : cr : database cursor
 
100
               uid : ID the user 
 
101
               response : API response dict from Salesforce
 
102
               fields : fields dict prepared by get_salesforce_field_mapping()
 
103
:              con : connection object to salesforce api 
 
104
        Return  : dict which is ready to be wriiten or created a record            
 
105
    """ 
 
106
    res = {}
 
107
    # iterate through the fileds 
 
108
    for key,value in fields.items():
 
109
    
 
110
        if  value['evaluation_type'] == 'direct' : #if the field is directy mapping type the assing the value from response
 
111
            res[value['name']]= response.get(key,False)
 
112
         
 
113
        elif  value['evaluation_type'] == 'function' :  # if its functional filed execute the function
 
114
            space = { 'self': self,
 
115
                      'cr': cr,
 
116
                      'uid': uid,
 
117
                      'key': key,
 
118
                      'response': response,
 
119
                      'con' : con,
 
120
                      'account' : account,
 
121
                      'context':context,         
 
122
                        }        # these are the variables which will be availble in functions
 
123
            try: 
 
124
                exec value['in_function'] in space   # execute the functions
 
125
            except Exception, e:   # If there is any execpion catch that 
 
126
                raise osv.except_osv(_("Error "),_(e))  
 
127
                
 
128
            result = space.get('result', False)   # the ooutput of the function should be in variable result
 
129
            
 
130
            if result: # If there is any result add that to res dict
 
131
                if isinstance(result, list): 
 
132
                    for each_tuple in result:
 
133
                        if isinstance(each_tuple, tuple) and len(each_tuple) == 2:
 
134
                            res[each_tuple[0]] = each_tuple[1]
 
135
        else :  # if the field is ot found assign it as false
 
136
            res[value['name']]= False
 
137
            
 
138
    return res  # return the dict 
 
139
    
 
140
def import_from_salesforce(self, cr, uid, internal_id, con, account=False, sequence=0, context=None):  
 
141
 
 
142
    if not context:
 
143
        context = {}
 
144
    salesforce_id =self.get_internal_reference(cr, uid, account.id, internal_id, sequence=sequence, context=context)
 
145
    
 
146
def import_from_salesforce(self, cr, uid,  con, ids, account=False, sequence=0, context=None): 
 
147
    if not isinstance(ids, (list,tuple)):
 
148
         ids = [ids]    
 
149
    for id in ids :
 
150
         self.import_all_from_salesforce(cr, uid,  con, account=account, ids=ids, sequence=sequence, context=context) 
 
151
    return True   
 
152
      
 
153
def import_all_from_salesforce(self, cr, uid,  con, account=False, ids=False, sequence=0, context=None):
 
154
    """
 
155
    Import all data from SalesForce
 
156
    @param cr: database cursor
 
157
    @param uid: id of the executing user  
 
158
    @param con: SalesForce  connection object
 
159
    @param account: SalesForce Account object
 
160
    @param ids: ids of the corresponding erp record
 
161
    @param sequence: SalesForce resouce sequence, default is 0
 
162
    @return: wizard
 
163
    """
 
164
    if not context:
 
165
        context = {}
 
166
    if  isinstance(ids, (list,tuple)):
 
167
         ids = ids[0]   
 
168
    if not account:
 
169
       account = self.get_salesforce_account(cr,uid,context=context) 
 
170
    context.update({'tz':account.timezone})    
 
171
    resource = self.get_salesforce_resource(cr, uid, sequence=sequence, context=context)  
 
172
    model=  resource['model']
 
173
    fields = self.get_salesforce_field_mapping(cr, uid, resource['id'], move="in", context=context)
 
174
    if not fields :
 
175
        raise osv.except_osv(_("Error "),_("No fileds mapped for the model %s " %self._name))  
 
176
 
 
177
    if ids :
 
178
        sf_id =self.get_selesforce_reference(cr, uid, account.id, ids, context=context)
 
179
        success,response = con.read_record(resource['salesforce_model'],str(sf_id))
 
180
    else :        
 
181
        success,response = con.read_allfields(resource['salesforce_model']) 
 
182
    if not success :
 
183
        raise osv.except_osv(_(response['errorCode']),_(response['message']))
 
184
          
 
185
    if not isinstance(response, (list,tuple)):
 
186
         response = [response] 
 
187
         
 
188
    total_count =0
 
189
    create_count= 0
 
190
    update_count = 0            
 
191
    for result in response :
 
192
        total_count += 1
 
193
        salesforce_id = result['Id']
 
194
        vals =  self.salesforce_import_mapping(cr,uid,result,fields,con,account,context=context)
 
195
        internal_id =self.get_internal_reference(cr, uid, account.id, salesforce_id, sequence=sequence, context=context)
 
196
        if internal_id :
 
197
            try:
 
198
                self.write(cr,uid,[internal_id],vals,context=context)
 
199
                self.set_salesforce_ref(cr, uid, account.id, internal_id, salesforce_id,sequence=sequence,context=context) 
 
200
                update_count += 1   
 
201
            except Exception as e:
 
202
                print e 
 
203
                self.pool.get('log.details').register_log(cr, uid, module='Saleforce', connector_name=account.name, model=resource['model_id'][1], res_id=internal_id, sync_type='import', message=_("Writing of import data Failed - %s"%e), state='error', context=context)
 
204
                cr.commit()     
 
205
        else : 
 
206
            try :
 
207
                internal_id = self.create(cr,uid,vals,context=context)
 
208
                self.set_salesforce_ref(cr, uid, account.id, internal_id, salesforce_id, sequence=sequence, context=context) 
 
209
                create_count += 1 
 
210
            except Exception as e:
 
211
                self.pool.get('log.details').register_log(cr, uid, module='Saleforce', connector_name=account.name, model=resource['model_id'][1], res_id=internal_id, sync_type='import', message=_("Creation of import data Failed - %s"%e), state='error', context=context)
 
212
                cr.commit()  
 
213
                     
 
214
    msg = 'Number of Records From SalesForce : '+ str(total_count) +'\nNumber of Records Created  : '+ str(create_count)+'\nNumber of Records Updated  : '+ str(update_count)+'\nNumber of Failed Imports  : '+ str(total_count-(update_count+create_count))+"\n\n Please find the log to see the error report of failed operations"
 
215
    title =  'Import ->'+ resource['model_id'][1]
 
216
    
 
217
    return self.pool.get('warning.message').show_message(cr,uid,_(title),_(msg))
 
218
    
 
219
    
 
220
def salesforce_get_updated_ids(self, cr, uid, account, ids=[], context={}):
 
221
    """
 
222
    Get Updated ids
 
223
    @param cr: database cursor
 
224
    @param uid: id of the executing user  
 
225
    @param account: SalesForce Account object
 
226
    @param ids: ids of the corresponding erp record   
 
227
    @return: list of ids
 
228
    """
 
229
    up_ids = []
 
230
    if ids:
 
231
        res_ids = ids
 
232
    else:   
 
233
        res_ids = self.search(cr, uid, [], context=context)
 
234
 
 
235
    ref_pool = self.pool.get('salesforce.reference')
 
236
    for res_id in res_ids :
 
237
 
 
238
        ref_id = ref_pool.search(cr, uid, [
 
239
                       ('model','=', self._name),
 
240
                       ('internal_id', '=', res_id),
 
241
                       ('account_id', '=', account.id),
 
242
            ])
 
243
        if not ref_id:
 
244
            up_ids.append(res_id)
 
245
            continue
 
246
         
 
247
        reference = ref_pool.read(cr, uid,ref_id,['updated_on'], context=context)[0]
 
248
        cur_id = self.search(cr, uid, [
 
249
                '|',
 
250
                ('write_date','>',reference['updated_on']),
 
251
                ('create_date','>',reference['updated_on']),
 
252
                ('id','=',res_id)
 
253
        ])
 
254
 
 
255
        if cur_id:
 
256
 
 
257
            up_ids.append(cur_id[0])
 
258
 
 
259
    return up_ids
 
260
    
 
261
 
 
262
def salesforce_export_mapping(self, cr, uid, record, fields, con,account=False, context=None): 
 
263
    """
 
264
    SalesForce Export Mapping 
 
265
    @param cr: database cursor
 
266
    @param uid: id of the executing user 
 
267
    @param record: Data Object
 
268
    @param con: SalesForce Connection Object
 
269
    @param account: SalesForce Account object  
 
270
    @return: dictionary
 
271
    """    
 
272
    res= {} 
 
273
    for key,value in fields.items():
 
274
   
 
275
        if  value['evaluation_type'] == 'direct' and hasattr(record,key):
 
276
            res[value['salesforce_name']]= getattr(record,key) or None
 
277
               
 
278
        elif  value['evaluation_type'] == 'function' :  
 
279
            space = { 'self': self,
 
280
                      'cr': cr,
 
281
                      'uid': uid,
 
282
                      'key': key,
 
283
                      'record': record,
 
284
                      'con' : con,
 
285
                      'account':account,
 
286
                      'context':context,         
 
287
                        }   
 
288
            try:
 
289
                exec value['out_function'] in space
 
290
            except Exception, e:
 
291
                raise osv.except_osv(_("Error "),_(e))  
 
292
            result = space.get('result', False)  
 
293
            if result:
 
294
                if isinstance(result, list):
 
295
                    for each_tuple in result:
 
296
                        if isinstance(each_tuple, tuple) and len(each_tuple) == 2:
 
297
                            res[each_tuple[0]] = each_tuple[1]   
 
298
        else:
 
299
             res[value['salesforce_name']]= None
 
300
    return res
 
301
             
 
302
def export_to_salesforce(self, cr, uid,  con, account=False, ids=[], sequence=0, context=None):
 
303
    """
 
304
    Export to  SalesForce
 
305
    @param cr: database cursor
 
306
    @param uid: id of the executing user  
 
307
    @param con: SalesForce  connection object
 
308
    @param account: SalesForce Account object
 
309
    @param ids: ids of the corresponding erp record
 
310
    @param sequence: SalesForce resouce sequence, default is 0
 
311
    @return: wizard
 
312
    """
 
313
    if not context:
 
314
        context = {}
 
315
    if not account:
 
316
       account = self.get_salesforce_account(cr,uid,context=context)
 
317
    context.update({'tz':account.timezone})      
 
318
    resource = self.get_salesforce_resource(cr, uid, sequence=sequence, context=context)  
 
319
    model=  resource['model']
 
320
    fields = self.get_salesforce_field_mapping(cr, uid, resource['id'], move="out", context=context)
 
321
    if not fields :
 
322
        raise osv.except_osv(_("Error "),_("No fields mapped for the model %s " %self._name))    
 
323
    if not ids:    
 
324
        ids = self.salesforce_get_updated_ids(cr, uid, account, ids=ids, context = context )   
 
325
    if not ids:
 
326
        return False     
 
327
    total_count =0
 
328
    success_count= 0    
 
329
    for record in self.browse(cr, uid, ids, context = context) :
 
330
        total_count +=1
 
331
        vals =  self.salesforce_export_mapping(cr,uid,record,fields,con,account,context=context)
 
332
        salesforce_id = self.get_salesforce_reference(cr,uid, account.id, record.id, sequence=sequence, context=None) 
 
333
        print vals
 
334
        print salesforce_id
 
335
        if salesforce_id:
 
336
           success,response = con.update_record(resource['salesforce_model'], salesforce_id, vals)
 
337
        else:
 
338
           success,response= con.create_record(resource['salesforce_model'], vals)    
 
339
           salesforce_id =response
 
340
        if success :
 
341
            self.set_salesforce_ref(cr, uid, account.id, record.id, salesforce_id , sequence=sequence, context=context)
 
342
            success_count += 1
 
343
        else :
 
344
            self.pool.get('log.details').register_log(cr, uid, module='Saleforce', connector_name=account.name, model=resource['model_id'][1], res_id=record.id, sync_type='export', message=_("Export failed - %s-%s"%(response['errorCode'],response['message'])), state='error', context=context)
 
345
            pass  
 
346
            
 
347
    msg = 'Number of Records Tried to Export : '+ str(total_count) +'\nNumber of Successed  Export : '+ str(success_count)+"\n\n Please find the log to see the error report of failed operations"
 
348
    title =  'Export ->'+ resource['model_id'][1]
 
349
    return self.pool.get('warning.message').show_message(cr,uid,_(title),_(msg))
 
350
      
 
351
        
 
352
def delete_from_salesforce(self, cr, uid, con, account=False, ids=[], sequence=0, context=None) :  
 
353
    """
 
354
    Delete from SalesForce
 
355
    @param cr: database cursor
 
356
    @param uid: id of the executing user  
 
357
    @param con: SalesForce  connection object
 
358
    @param account: SalesForce Account object
 
359
    @param ids: ids of the corresponding erp record
 
360
    @param sequence: SalesForce resouce sequence, default is 0
 
361
    @return: wizard
 
362
    """
 
363
    if not context:
 
364
        context = {}
 
365
    if not account:   
 
366
       account = self.get_salesforce_account(cr,uid,context=context)
 
367
    resource = self.get_salesforce_resource(cr, uid, sequence=sequence, context=context) 
 
368
    if ids :
 
369
        ref_obj=self.pool.get('salesforce.reference')
 
370
        total_count =0
 
371
        success_count= 0
 
372
        if not isinstance(ids, (list,tuple)):
 
373
            ids = [ids] 
 
374
        for res_id in ids:
 
375
            total_count += 1
 
376
            salesforce_id = self.get_salesforce_reference(cr,uid, account.id, res_id,  sequence=sequence, context=None)   
 
377
            if salesforce_id:
 
378
                success,response = con.delete_record(resource['salesforce_model'], salesforce_id)
 
379
                print success,response
 
380
                if success:
 
381
                    success_count += 1
 
382
                    ref_id=ref_obj.search(cr,uid,[('model','=',self._name),('internal_id','=',res_id),('account_id', '=', account.id),('sequence','=',sequence)])    
 
383
                    ref_obj.unlink(cr, uid, ref_id, context=context)
 
384
                else:
 
385
                    self.pool.get('log.details').register_log(cr, uid, module='Saleforce', connector_name=account.name, model=resource['model_id'][1], res_id=res_id, sync_type='delete', message=_("Delete failed - %s-%s"%(response['errorCode'],response['message'])), state='error', context=context)
 
386
                    pass
 
387
            else:
 
388
                raise osv.except_osv(_("Error "),_("This record has already been deleted from SalesForce"))
 
389
 
 
390
        msg = 'Number of Records Tried to Delete : '+ str(total_count) +'\n Number of Successed  delete : '+ str(success_count)+"\n\n Please find the log to see the error report of failed deletion"
 
391
        title =  'Delete ->'+ resource['model_id'][1]
 
392
        return self.pool.get('warning.message').show_message(cr,uid,_(title),_(msg))     
 
393
    return True
 
394
                   
 
395
def set_salesforce_ref(self, cr, uid, account_id, internal_id, salesforce_id,sequence=0,context={}):
 
396
    """
 
397
    Set SalesForce reference
 
398
    @param cr: database cursor
 
399
    @param uid: id of the executing user      
 
400
    @param account_id: SalesForce Account object
 
401
    @param internal_id: erp id
 
402
    @param salesforce_id: salesforce id
 
403
    @param sequence: SalesForce resouce sequence, default is 0
 
404
    @return: True
 
405
    """
 
406
    #remove this comment
 
407
    """
 
408
        Set  the Salesforce ID for a resouce 
 
409
        ARGS:   account : salesforce aconnection account obj
 
410
                salesforce_id (int)  : salesforce id from API response
 
411
        result : res_id(int) or False        
 
412
     """
 
413
    ref_pool = self.pool.get('salesforce.reference')
 
414
    
 
415
    #search if its alreadt set
 
416
    ref_ids = ref_pool.search(cr, uid, [
 
417
                ('model','=', self._name),
 
418
                ('internal_id', '=', internal_id),
 
419
                ('account_id', '=', account_id),
 
420
                ('sequence', '=', sequence),
 
421
            ])
 
422
    updated_on = time.strftime('%Y-%m-%d %H:%M:%S')
 
423
    if ref_ids: # if alreadt set update the time
 
424
        
 
425
        ref_pool.write(cr, uid, ref_ids, {'salesforce_id':salesforce_id,'updated_on':updated_on,'sequence':sequence})
 
426
 
 
427
    else: # if new item create a reference
 
428
        
 
429
        ref_pool.create(cr, uid, {
 
430
                                  'model':self._name,
 
431
                                  'internal_id':internal_id,
 
432
                                  'account_id':account_id,
 
433
                                  'salesforce_id':salesforce_id,
 
434
                                  'updated_on':updated_on,
 
435
                                  'sequence':sequence,
 
436
                                  })
 
437
 
 
438
    return True
 
439
 
 
440
def get_internal_reference(self, cr, uid, account_id, salesforce_id, sequence=0, context=None):
 
441
 
 
442
    """
 
443
        Find the Internal ID of a given record from a salesforce ID
 
444
        ARGS:   account : salesforce aconnection account obj
 
445
                salesforce_id (int)  : salesforce id from API response
 
446
        result : res_id(int) or False        
 
447
     """
 
448
 
 
449
    ref_pool = self.pool.get('salesforce.reference')
 
450
    
 
451
    # search for a reference id for given condition
 
452
    ref_ids = ref_pool.search(cr, uid, [
 
453
                 ('model','=', self._name),
 
454
                ('salesforce_id', '=', salesforce_id),
 
455
                ('account_id', '=', account_id),
 
456
                ('sequence', '=', sequence), 
 
457
            ])
 
458
   
 
459
    if ref_ids: # if reference is available return the internal id
 
460
        ref_data = ref_pool.read(cr, uid, ref_ids, ['internal_id'],context=context)[0]
 
461
        return  ref_data['internal_id']    
 
462
        
 
463
    return False # Return False if no reference is available       
 
464
    
 
465
 
 
466
def get_salesforce_reference(self, cr, uid, account_id, internal_id, sequence=0, context=None):
 
467
    """
 
468
        Find the salesforce ID of a given internalID
 
469
        ARGS:   account : salesforce aconnection account obj
 
470
                internal_id (int)  : internal id  for record
 
471
        result : res_id(int) or False        
 
472
     """
 
473
    
 
474
    ref_pool = self.pool.get('salesforce.reference')
 
475
    
 
476
    # search for a reference id for given condition
 
477
    ref_ids = ref_pool.search(cr, uid, [
 
478
                 ('model','=', self._name),
 
479
                ('internal_id', '=', internal_id),
 
480
                ('account_id', '=', account_id),
 
481
                ('sequence', '=', sequence),
 
482
            ])
 
483
            
 
484
    if ref_ids: # if reference is available return the salesforce id
 
485
        ref_data = ref_pool.read(cr, uid, ref_ids, ['salesforce_id'],context=context)[0]
 
486
        return  ref_data['salesforce_id']    
 
487
        
 
488
    return False # Return False if no reference is available           
 
489
 
 
490
def unlinkasd(self, cr, uid, ids, context={}):
 
491
    """
 
492
        Delete from ERP and SalesForce
 
493
        @param cr: database cusrsor
 
494
        @param uid: id of the executing user
 
495
        @param ids: erp ids of the records to be deleted
 
496
        @return: True or Flase
 
497
    """ 
 
498
    deleted_ref_ids = []                                                               
 
499
    deleted = super(osv.osv, self).unlink(cr, uid, ids, context=context)
 
500
    resource_obj = self.pool.get('salesforce.tables')
 
501
    if resource_obj and resource_obj._columns.get('model'):
 
502
       resource_ids= resource_obj.search(cr, uid, [('model','=',self._name)],context=context) 
 
503
       sf_objs = self.pool.get('salesforce.connection').search(cr, uid, [('confirmed','=',True)], context=context)    
 
504
       if deleted and resource_ids  :                                                            
 
505
            for sf_obj in sf_objs :
 
506
                #delete from salesforce
 
507
                for id in ids:
 
508
                    sf_id = self.get_prestashop_ref(cr, uid, shop,id, context)
 
509
                    if sf_id : 
 
510
                       deleted_ref_ids.append(sf_id)
 
511
#                self.delete_from_salesforce(cr, uid, sf_objs, deleted_ref_ids,convert_to_presta_id=False,context=context)                                                                   
 
512
    return deleted  
 
513
osv.osv.get_salesforce_resource = get_salesforce_resource
 
514
osv.osv.get_salesforce_field_mapping = get_salesforce_field_mapping
 
515
osv.osv.salesforce_import_mapping = salesforce_import_mapping
 
516
osv.osv.import_all_from_salesforce = import_all_from_salesforce
 
517
osv.osv.import_from_salesforce = import_from_salesforce
 
518
 
 
519
osv.osv.export_to_salesforce = export_to_salesforce
 
520
osv.osv.salesforce_export_mapping = salesforce_export_mapping
 
521
osv.osv.salesforce_get_updated_ids = salesforce_get_updated_ids
 
522
 
 
523
osv.osv.set_salesforce_ref = set_salesforce_ref
 
524
osv.osv.get_internal_reference = get_internal_reference
 
525
osv.osv.get_salesforce_reference = get_salesforce_reference
 
526
osv.osv.get_salesforce_account= get_salesforce_account
 
527
osv.osv.delete_from_salesforce = delete_from_salesforce