diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index 280b5020704..1ef6ba799a6 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -1205,6 +1205,26 @@ class orm_template(object):
return arch
+ def __get_default_search_view(self, cr, uid, context={}):
+
+ def encode(s):
+ if isinstance(s, unicode):
+ return s.encode('utf8')
+ return s
+
+ view = self.fields_view_get(cr, uid, False, 'form', context)
+
+ root = etree.fromstring(encode(view['arch']))
+ res = etree.XML("" % root.get("string", ""))
+ node = etree.Element("group")
+ res.append(node)
+
+ fields = root.xpath("//field[@select=1]")
+ for field in fields:
+ node.append(field)
+
+ return etree.tostring(res, encoding="utf-8").replace('\t', '')
+
#
# if view_id, view_type is not required
#
@@ -1323,19 +1343,10 @@ class orm_template(object):
inherit_id IS NULL
ORDER BY priority''', (self._name, view_type))
sql_res = cr.fetchone()
- if not sql_res and view_type == 'search':
- cr.execute('''SELECT
- arch,name,field_parent,id,type,inherit_id
- FROM
- ir_ui_view
- WHERE
- model=%s AND
- type=%s AND
- inherit_id IS NULL
- ORDER BY priority''', (self._name, 'form'))
- sql_res = cr.fetchone()
+
if not sql_res:
break
+
ok = sql_res[5]
view_id = ok or sql_res[3]
model = False
@@ -1361,6 +1372,7 @@ class orm_template(object):
result['name'] = sql_res[1]
result['field_parent'] = sql_res[2] or False
else:
+
# otherwise, build some kind of default view
if view_type == 'form':
res = self.fields_get(cr, user, context=context)
@@ -1372,6 +1384,7 @@ class orm_template(object):
if res[x]['type'] == 'text':
xml += ""
xml += ""
+
elif view_type == 'tree':
_rec_name = self._rec_name
if _rec_name not in self._columns:
@@ -1379,8 +1392,13 @@ class orm_template(object):
xml = '' \
'' \
% (self._description, self._rec_name)
+
elif view_type == 'calendar':
xml = self.__get_default_calendar_view()
+
+ elif view_type == 'search':
+ xml = self.__get_default_search_view(cr, user, context)
+
else:
xml = '' # what happens here, graph case?
# raise except_orm(_('Invalid Architecture!'),_("There is no view of type '%s' defined for the structure!") % view_type)