[EDI] refactored code of edi class
bzr revid: aar@tinyerp.com-20110622091123-6zal2su3vy8nv1nm
This commit is contained in:
@@ -71,7 +71,6 @@
|
||||
'res/partner/wizard/partner_clear_ids_view.xml',
|
||||
'res/partner/wizard/partner_wizard_ean_check_view.xml',
|
||||
'res/partner/partner_data.xml',
|
||||
'test/test_edi_document.yml',
|
||||
'res/ir_property_view.xml',
|
||||
'security/base_security.xml',
|
||||
'publisher_warranty/publisher_warranty_view.xml',
|
||||
@@ -96,6 +95,7 @@
|
||||
'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules.
|
||||
'test/test_config_users.yml',
|
||||
'test/test_ir_values.yml',
|
||||
'test/test_edi_documents.yml',
|
||||
|
||||
],
|
||||
'installable': True,
|
||||
|
||||
@@ -20,12 +20,11 @@
|
||||
##############################################################################
|
||||
|
||||
from osv import osv,fields
|
||||
import simplejson
|
||||
import hashlib
|
||||
import json
|
||||
import time
|
||||
import base64
|
||||
import urllib2
|
||||
import unicodedata
|
||||
import openerp.release as release
|
||||
def safe_unique_id(model, database_id):
|
||||
"""Generate a unique string to represent a (model,database id) pair
|
||||
@@ -82,7 +81,7 @@ class ir_edi_document(osv.osv):
|
||||
perform a JSON serialization of a list of dicts prepared by generate_edi() and return a UTF-8 encoded string that could be passed to deserialize()
|
||||
:param edi_dicts: it's list of edi_dict
|
||||
"""
|
||||
serialized_list = simplejson.dumps(edi_documents)
|
||||
serialized_list = json.dumps(edi_documents)
|
||||
return serialized_list
|
||||
|
||||
def generate_edi(self, cr, uid, records, context=None):
|
||||
@@ -94,7 +93,7 @@ class ir_edi_document(osv.osv):
|
||||
edi_list = []
|
||||
for record in records:
|
||||
record_model_obj = self.pool.get(record._name)
|
||||
edi_list += record_model_obj.edi_export(cr, uid, [record],context=context)
|
||||
edi_list += record_model_obj.edi_export(cr, uid, [record], context=context)
|
||||
return self.serialize(edi_list)
|
||||
|
||||
def get_document(self, cr, uid, edi_token, context=None):
|
||||
@@ -103,13 +102,12 @@ class ir_edi_document(osv.osv):
|
||||
returns the string serialization that is in the database (column: document) for the given edi_token or raise.
|
||||
"""
|
||||
|
||||
records = self.search(cr, uid, [('name','=',edi_token)])
|
||||
records = self.name_search(cr, uid, edi_token)
|
||||
if records:
|
||||
for edi in self.browse(cr, uid, records, context=context):
|
||||
return edi.document
|
||||
edi = self.browse(cr, uid, records, context=context)
|
||||
return edi.document
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
def load_edi(self, cr, uid, edi_documents, context=None):
|
||||
"""
|
||||
@@ -132,7 +130,7 @@ class ir_edi_document(osv.osv):
|
||||
""" Deserialized the edi document string
|
||||
perform JSON deserialization from an edi document string, and returns a list of dicts
|
||||
"""
|
||||
edi_document = simplejson.loads(edi_document_string)
|
||||
edi_document = json.loads(edi_document_string)
|
||||
|
||||
return edi_document
|
||||
|
||||
@@ -173,15 +171,13 @@ class ir_edi_document(osv.osv):
|
||||
|
||||
if edi_url and not edi_document:
|
||||
edi_document = urllib2.urlopen(edi_url).read()
|
||||
#assert edi_document, _('EDI Document should be provided')
|
||||
assert edi_document, _('EDI Document should be provided')
|
||||
else:
|
||||
|
||||
edi_documents = self.deserialize(edi_document)
|
||||
return self.load_edi(cr, uid, edi_documents, context=context)
|
||||
|
||||
ir_edi_document()
|
||||
|
||||
|
||||
class edi(object):
|
||||
_name = 'edi'
|
||||
_description = 'edi document handler'
|
||||
@@ -191,7 +187,6 @@ class edi(object):
|
||||
``edi_import()`` and ``edi_export()`` methods to implement their
|
||||
specific behavior, based on the primitives provided by this superclass."""
|
||||
|
||||
|
||||
def edi_metadata(self, cr, uid, records, context=None):
|
||||
"""Return a list representing the boilerplate EDI structure for
|
||||
exporting the record in the given browse_rec_list, including
|
||||
@@ -221,11 +216,10 @@ class edi(object):
|
||||
'file_name': attachment.datas_fname,
|
||||
})
|
||||
version = []
|
||||
|
||||
for ver in release.major_version.split('.'):
|
||||
version.append(ver)
|
||||
|
||||
data_ids = model_data.search(cr, uid, [('res_id','=',record.id)])
|
||||
data_ids = model_data.search(cr, uid, [('res_id','=',record.id),('model','=',record._name)])
|
||||
|
||||
if len(data_ids):
|
||||
xml_obj = model_data.browse(cr,uid,data_ids[0])
|
||||
@@ -261,12 +255,9 @@ class edi(object):
|
||||
else:
|
||||
xml_id = record._name
|
||||
db_uuid = '%s:%s' %(db_uuid, xml_id)
|
||||
|
||||
|
||||
name = record.name
|
||||
return [db_uuid, name]
|
||||
|
||||
|
||||
def edi_o2m(self, cr, uid, records, context=None):
|
||||
"""Return a list representing a O2M EDI value for
|
||||
the browse_records from the given browse_record_list.
|
||||
@@ -289,7 +280,6 @@ class edi(object):
|
||||
|
||||
return dict_list
|
||||
|
||||
|
||||
def edi_m2m(self, cr, uid, records, context=None):
|
||||
"""Return a list representing a M2M EDI value for
|
||||
the browse_records from the given browse_record_list.
|
||||
@@ -310,8 +300,6 @@ class edi(object):
|
||||
|
||||
return dict_list
|
||||
|
||||
|
||||
|
||||
def edi_export(self, cr, uid, records, edi_struct=None, context=None):
|
||||
"""Returns a list of dicts representing an edi.document containing the
|
||||
browse_records with ``ids``, using the generic algorithm.
|
||||
@@ -336,19 +324,15 @@ class edi(object):
|
||||
if context is None:
|
||||
context = {}
|
||||
_fields = self.fields_get(cr, uid, context=context)
|
||||
|
||||
|
||||
fields_to_export = edi_struct and edi_struct.keys() or _fields.keys()
|
||||
edi_dict_list = []
|
||||
value = None
|
||||
for row in records:
|
||||
edi_dict = {}
|
||||
edi_dict.update(self.edi_metadata(cr, uid, [row], context=context)[0])
|
||||
|
||||
for field in fields_to_export:
|
||||
cols = _fields[field]
|
||||
if _fields[field].has_key('function') or _fields[field].has_key('related_columns'):
|
||||
|
||||
pass
|
||||
else:
|
||||
if cols['type'] == 'many2one':
|
||||
@@ -364,10 +348,8 @@ class edi(object):
|
||||
value = getattr(row, field)
|
||||
edi_dict[field] = value
|
||||
edi_dict_list.append(edi_dict)
|
||||
|
||||
return edi_dict_list
|
||||
|
||||
|
||||
def edi_import(self, cr, uid, edi_document, context=None):
|
||||
|
||||
"""Imports a list of dicts representing an edi.document, using the
|
||||
@@ -417,18 +399,6 @@ class edi(object):
|
||||
"""
|
||||
# generic implementation!
|
||||
|
||||
def convert(data):
|
||||
if isinstance(data, unicode):
|
||||
return str(data)
|
||||
elif isinstance(data, dict):
|
||||
return dict(map(convert, data.iteritems()))
|
||||
elif isinstance(data, (list, tuple, set, frozenset)):
|
||||
return type(data)(map(convert, data))
|
||||
else:
|
||||
return data
|
||||
#edi_document = convert(edi_document)
|
||||
|
||||
|
||||
fields = edi_document.keys()
|
||||
fields_to_import = []
|
||||
data_line = []
|
||||
@@ -437,23 +407,15 @@ class edi(object):
|
||||
current_module = 'edi_import'
|
||||
values = {}
|
||||
for field in edi_document.keys():
|
||||
if field.startswith('__') and field == '__id':
|
||||
db_uuid, xml_ids = tuple(edi_document[field].split(':'))
|
||||
|
||||
elif not field.startswith('__'):
|
||||
|
||||
|
||||
if not field.startswith('__'):
|
||||
fields_to_import.append(field)
|
||||
edi_field_value = edi_document[field]
|
||||
if _fields[field].has_key('function') or _fields[field].has_key('related_columns'):
|
||||
|
||||
pass
|
||||
else:
|
||||
if _fields[field]['type'] in ('many2one', 'many2many'):
|
||||
|
||||
if _fields[field]['type'] == 'many2one':
|
||||
edi_parent_documents = [edi_field_value]
|
||||
|
||||
else:
|
||||
edi_parent_documents = edi_field_value
|
||||
|
||||
@@ -469,7 +431,6 @@ class edi(object):
|
||||
if data_ids:
|
||||
for data in model_data.browse(cr, uid, [data_ids[0][0]], context=context):
|
||||
parent_lines.append(data.res_id)
|
||||
print "..............................................",data.res_id
|
||||
else:
|
||||
#Perform name_search(name) to look for a record that matches the
|
||||
#given m2o name. If only one record is found, create the missing
|
||||
@@ -506,8 +467,6 @@ class edi(object):
|
||||
for m2m_id in parent_lines:
|
||||
many2many_ids.append((4,m2m_id))
|
||||
values[field] = many2many_ids
|
||||
|
||||
|
||||
elif _fields[field]['type'] == 'one2many':
|
||||
#Look for a record that matches the db_id provided in the __id field. If
|
||||
#found, keep the corresponding database id, and connect it to the parent
|
||||
@@ -519,24 +478,15 @@ class edi(object):
|
||||
relations = []
|
||||
relation_object = self.pool.get(_fields[field]['relation'])
|
||||
for edi_relation_document in edi_field_value:
|
||||
'''print "pppppppppppppppppppppppppppppppppppppppppp"
|
||||
print edi_field_value
|
||||
print ":::::::::::::::::::::::::::::::::::::::::::::"
|
||||
print edi_relation_document
|
||||
print edi_parent_document
|
||||
print "ppppppppppppppppppppppppppppppppppp"
|
||||
if edi_relation_document['__id'].find(':') != -1:
|
||||
db_uuid, xml_id = tuple(edi_relation_document['__id'].split(':'))
|
||||
print xml_id
|
||||
data_ids = model_data.name_search(cr, uid, xml_id)
|
||||
print "dddddddddddddddddddddddddddddddddddddddddddddd",data_ids
|
||||
if data_ids:
|
||||
for data in model_data.browse(cr,uid,[data_ids[0][0]]):
|
||||
relations.append(data.res_id)
|
||||
else:'''
|
||||
r = relation_object.edi_import(cr, uid, edi_relation_document, context=context)
|
||||
relations.append(r)
|
||||
print "relation id ssssssssssssssssssss",relations
|
||||
else:
|
||||
r = relation_object.edi_import(cr, uid, edi_relation_document, context=context)
|
||||
relations.append(r)
|
||||
one2many_ids = []
|
||||
for o2m_id in relations:
|
||||
one2many_ids.append((4,o2m_id))
|
||||
@@ -544,8 +494,5 @@ class edi(object):
|
||||
else:
|
||||
values[field] = edi_field_value
|
||||
|
||||
for val in values.keys():
|
||||
print '::::::::::::::::::::::',val,'::::::::::;;;;;;;;;;;;;;;;;;;;;;'
|
||||
print values[val]
|
||||
return model_data._update(cr, uid, self._name, current_module, values, context=context)
|
||||
# vim: ts=4 sts=4 sw=4 si et
|
||||
@@ -4,13 +4,11 @@
|
||||
!python {model: ir.edi.document}: |
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
partner_ids = partner_obj.search(cr, uid, [])
|
||||
|
||||
if partner_ids:
|
||||
partners = partner_obj.browse(cr, uid, partner_ids)
|
||||
tokens = self.export_edi(cr, uid, partners)
|
||||
print '>>>>>>>>>>',tokens
|
||||
for token in tokens:
|
||||
document = self.get_document(cr, uid, token, context=context)
|
||||
a = self.import_edi(cr, uid, edi_document = document)
|
||||
print '////////////',a
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user