diff --git a/bin/addons/base/res/partner/partner_view.xml b/bin/addons/base/res/partner/partner_view.xml
index 38d5ba24170..38347f408cc 100644
--- a/bin/addons/base/res/partner/partner_view.xml
+++ b/bin/addons/base/res/partner/partner_view.xml
@@ -321,7 +321,7 @@
- Partner
+ Partners
ir.actions.act_window
res.partner
form
@@ -491,7 +491,7 @@
- Partner Categories Architecture
+ Partner categories
ir.actions.act_window
res.partner.category
tree
@@ -500,8 +500,28 @@
+
+ res.partner
+ form
+ tree,form
+ [('category_id','child_of', [active_id])]
+
+
+
+
+ Open partners
+
+
+
+
+
+
+
- Partner Categories
+ Partner categories
ir.actions.act_window
res.partner.category
form
diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index e8c7326038d..4584a1007dd 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -1495,12 +1495,20 @@ class orm(object):
ids2 = [x[0] for x in self.pool.get(field._obj).name_search(cr, user, args[i][2], [], 'like')]
else:
ids2 = args[i][2]
- def _rec_get(ids):
+ def _rec_get(ids, table, parent):
+ if not ids:
+ return []
+ if 'active' in table._columns:
+ ids2 = table.search(cr, user, [(parent,'in',ids),('active','in', [True, False])])
+ else:
+ ids2 = table.search(cr, user, [(parent, 'in', ids)])
+ return ids + _rec_get(ids2, table, parent)
+ def _rec_convert(ids):
if not len(ids): return []
cr.execute('select '+field._id1+' from '+field._rel+' where '+field._id2+' in ('+','.join(map(str,ids))+')')
ids = [x[0] for x in cr.fetchall()]
- return ids + _rec_get(ids)
- args[i] = ('id','in',ids2+_rec_get(ids2))
+ return ids
+ args[i] = ('id','in',_rec_convert(ids2+_rec_get(ids2, self.pool.get(field._obj), table._parent_name)))
else:
if isinstance(args[i][2], basestring):
res_ids = [x[0] for x in self.pool.get(field._obj).name_search(cr, user, args[i][2], [], args[i][1])]