diff --git a/addons/base_synchro/wizard/base_synchro.py b/addons/base_synchro/wizard/base_synchro.py index d3c1de40d6d..8ba00417b95 100644 --- a/addons/base_synchro/wizard/base_synchro.py +++ b/addons/base_synchro/wizard/base_synchro.py @@ -32,13 +32,13 @@ class RPCProxyOne(object): def __init__(self, server, ressource): self.server = server local_url = 'http://%s:%d/xmlrpc/common'%(server.server_url,server.server_port) - rpc = xmlrpclib.ServerProxy(local_url) + rpc = xmlrpclib.ServerProxy(local_url, allow_none=True) self.uid = rpc.login(server.server_db, server.login, server.password) local_url = 'http://%s:%d/xmlrpc/object'%(server.server_url,server.server_port) - self.rpc = xmlrpclib.ServerProxy(local_url) + self.rpc = xmlrpclib.ServerProxy(local_url, allow_none=True) self.ressource = ressource def __getattr__(self, name): - return lambda cr, uid, *args, **kwargs: self.rpc.execute(self.server.server_db, self.uid, self.server.password, self.ressource, name, *args, **kwargs) + return lambda cr, uid, *args, **kwargs: self.rpc.execute(self.server.server_db, self.uid, self.server.password, self.ressource, name, *args) class RPCProxy(object): def __init__(self, server): @@ -79,6 +79,7 @@ class base_synchro(osv.osv_memory): eval(object.domain), {'action':'d'} ) + if object.action in ('u','b'): ids += pool2.get('base.synchro.obj').get_ids(cr, uid, object.model_id.model, @@ -102,7 +103,7 @@ class base_synchro(osv.osv_memory): if object.model_id.model=='crm.case.history': fields = ['email','description','log_id'] value = pool_src.get(object.model_id.model).read(cr, uid, [id], fields)[0] - value = self.data_transform(cr, uid, pool_src, pool_dest, object.model_id.model, value, action) + value = self.data_transform(cr, uid, pool_src, pool_dest, object.model_id.model, value, action, context=context) id2 = self.get_id(cr, uid, object.id, id, action, context) # # Transform value @@ -110,7 +111,6 @@ class base_synchro(osv.osv_memory): #tid=pool_dest.get(object.model_id.model).name_search(cr, uid, value['name'],[],'=',) if not (iii%50): print 'Record', iii - # Filter fields to not sync for field in object.avoid_ids: if field.name in value: @@ -125,15 +125,17 @@ class base_synchro(osv.osv_memory): self.report_write+=1 else: print value - idnew = pool_dest.get(object.model_id.model).create(cr, uid, value) - synid = self.pool.get('base.synchro.obj.line').create(cr, uid, { - 'obj_id': object.id, - 'local_id': (action=='u') and id or idnew, - 'remote_id': (action=='d') and id or idnew - }) - self.report_total+=1 - self.report_create+=1 - self.meta = {} + new_value = pool_dest.get(object.model_id.model).search(cr, uid, [('name','=',value['name'])]) + if not new_value: + idnew = pool_dest.get(object.model_id.model).create(cr, uid, value) + synid = self.pool.get('base.synchro.obj.line').create(cr, uid, { + 'obj_id': object.id, + 'local_id': (action=='u') and id or idnew, + 'remote_id': (action=='d') and id or idnew + }) + self.report_total+=1 + self.report_create+=1 + self.meta = {} return True def get_id(self, cr, uid, object_id, id, action, context=None): @@ -219,13 +221,13 @@ class base_synchro(osv.osv_memory): server = pool.get('base.synchro.server').browse(cr, uid, ids, context=context)[0] for object in server.obj_ids: dt = time.strftime('%Y-%m-%d %H:%M:%S') - self.synchronize(cr, uid, server, object, context) + self.synchronize(cr, uid, server, object, context=context) if object.action=='b': time.sleep(1) dt = time.strftime('%Y-%m-%d %H:%M:%S') self.pool.get('base.synchro.obj').write(cr, uid, [object.id], {'synchronize_date': dt}) end_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss') - if 'user_id' in syn_obj.user_id: + if syn_obj.user_id: request = pooler.get_pool(cr.dbname).get('res.request') if not self.report: self.report.append('No exception.') @@ -244,18 +246,20 @@ Exceptions: request.create(cr, uid, { 'name' : "Synchronization report", 'act_from' : uid, - 'act_to' : syn_obj.user_id, + 'act_to' : syn_obj.user_id.id, 'body': summary, }) return True def upload_download_multi_thread(self, cr, uid, data, context=None): - threaded_synchronization = threading.Thread(target=self.upload_download, args=(cr, uid, data, context)) + cr1 = pooler.get_db(cr.dbname).cursor() + threaded_synchronization = threading.Thread(target=self.upload_download, args=(cr1, uid, data, context)) threaded_synchronization.run() data_obj = self.pool.get('ir.model.data') id2 = data_obj._get_id(cr, uid, 'base_synchro', 'view_base_synchro_finish') if id2: id2 = data_obj.browse(cr, uid, id2, context=context).res_id + cr.commit() return { 'view_type': 'form', 'view_mode': 'form', diff --git a/addons/base_synchro/wizard/base_synchro_view.xml b/addons/base_synchro/wizard/base_synchro_view.xml index c0c140f3791..231fc7b055f 100644 --- a/addons/base_synchro/wizard/base_synchro_view.xml +++ b/addons/base_synchro/wizard/base_synchro_view.xml @@ -25,6 +25,7 @@ base.synchro form form + new