summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorYsa (Open ERP) <ysa@tinyerp.co.in>2010-04-14 17:42:17 +0530
committerYsa (Open ERP) <ysa@tinyerp.co.in>2010-04-14 17:42:17 +0530
commit4ebbb9fbda8337fdbf68626244042e64c4f9b9b5 (patch)
tree20793b857a297f13b611558e4307cc09f7f648aa /bin
parentad67123966e7aba085bdfa0a5788bc05e1ac7805 (diff)
[IMP] diagram :- improve parser code(parse node and arrow field).
bzr revid: ysa@tinyerp.co.in-20100414121217-1yh6uohkjkwl8r8e
Diffstat (limited to 'bin')
-rw-r--r--bin/osv/orm.py40
1 files changed, 30 insertions, 10 deletions
diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index c134900af21..d3fc4b89c5c 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -1134,21 +1134,31 @@ class orm_template(object):
fields = {}
childs = True
+ def encode(s):
+ if isinstance(s, unicode):
+ return s.encode('utf8')
+ return s
+
if node.tag in ('field', 'node', 'arrow'):
if node.get('object'):
attrs = {}
views = {}
+ xml = "<form>"
for f in node:
if f.tag in ('field'):
- node.remove(f)
- ctx = context.copy()
- ctx['base_model_name'] = self._name
- xarch, xfields = self.pool.get(node.get('object')).__view_look_dom_arch(cr, user, f, view_id, ctx)
- views[str(f.tag)] = {
- 'arch': xarch,
- 'fields': xfields
- }
- attrs = {'views': views}
+ xml += etree.tostring(f, encoding="utf-8")
+ xml += "</form>"
+ new_xml = etree.fromstring(encode(xml))
+ ctx = context.copy()
+ ctx['base_model_name'] = self._name
+ xarch, xfields = self.pool.get(node.get('object',False)).__view_look_dom_arch(cr, user, new_xml, view_id, ctx)
+ views[str(f.tag)] = {
+ 'arch': xarch,
+ 'fields': xfields
+ }
+ attrs = {'views': views}
+ view = False
+ fields = views.get('field',False) and views['field'].get('fields',False)
if node.get('name'):
attrs = {}
try:
@@ -1268,7 +1278,17 @@ class orm_template(object):
arch = etree.tostring(node, encoding="utf-8").replace('\t', '')
fields={}
- fields = self.fields_get(cr, user, fields_def.keys(), context)
+ if node.tag=='diagram':
+ if node.getchildren()[0].tag=='node':
+ node_fields=self.pool.get(node.getchildren()[0].get('object')).fields_get(cr, user, fields_def.keys(), context)
+ if node.getchildren()[1].tag=='arrow':
+ arrow_fields = self.pool.get(node.getchildren()[1].get('object')).fields_get(cr, user, fields_def.keys(), context)
+ for key,value in node_fields.items():
+ fields[key]=value
+ for key,value in arrow_fields.items():
+ fields[key]=value
+ else:
+ fields = self.fields_get(cr, user, fields_def.keys(), context)
for field in fields_def:
if field == 'id':
# sometime, the view may containt the (invisible) field 'id' needed for a domain (when 2 objects have cross references)