ORM:
authorFabien Pinckaers <fp@tinyerp.com>
Mon, 30 Jul 2007 18:23:17 +0000 (18:23 +0000)
committerFabien Pinckaers <fp@tinyerp.com>
Mon, 30 Jul 2007 18:23:17 +0000 (18:23 +0000)
bugfix on child_of on many2many
Project: start date
Partners:
Click on a category to get partners (chilf_od)

bzr revid: fp@tinyerp.com-34022ebc4df94ad47bcb900f6bc73ceda15fda4d

bin/addons/base/res/partner/partner_view.xml
bin/osv/orm.py

index 38d5ba2..38347f4 100644 (file)
        </record>
 
        <record model="ir.actions.act_window" id="action_partner_form">
-               <field name="name">Partner</field>
+               <field name="name">Partners</field>
                <field name="type">ir.actions.act_window</field>
                <field name="res_model">res.partner</field>
                <field name="view_type">form</field>
                </field>
        </record>
        <record model="ir.actions.act_window" id="action_partner_category">
-               <field name="name">Partner Categories Architecture</field>
+               <field name="name">Partner categories</field>
                <field name="type">ir.actions.act_window</field>
                <field name="res_model">res.partner.category</field>
                <field name="view_type">tree</field>
        </record>
        <menuitem name="Partners/Configuration/Categories" action="action_partner_category" id="menu_partner_category"/>
 
+       <record model="ir.actions.act_window" id="action_partner_by_category">
+               <field name="res_model">res.partner</field>
+               <field name="view_type">form</field>
+               <field name="view_mode">tree,form</field>
+               <field name="domain">[('category_id','child_of', [active_id])]</field>
+       </record>
+       <record model="ir.values" id="ir_action_partner_by_category">
+               <field name="key2" eval="'tree_but_open'"/>
+               <field name="model" eval="'res.partner.category'"/>
+               <field name="name">Open partners</field>
+               <field name="value" eval="'ir.actions.act_window,%d'%action_partner_by_category"/>
+               <field name="object" eval="True"/>
+       </record>
+
+
+       <menuitem
+               name="Partners/Partners/Partners by categories" 
+               action="action_partner_category" 
+               id="menu_partner_category_main"/>
+
        <record model="ir.actions.act_window" id="action_partner_category_form">
-               <field name="name">Partner Categories</field>
+               <field name="name">Partner categories</field>
                <field name="type">ir.actions.act_window</field>
                <field name="res_model">res.partner.category</field>
                <field name="view_type">form</field>
index e8c7326..4584a10 100644 (file)
@@ -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])]