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])]