diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index d3d88049fb2..21d70e1502a 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -601,6 +601,7 @@ class res_partner(osv.osv, format_address): where_query = self._where_calc(cr, uid, args, context=context) self._apply_ir_rules(cr, uid, where_query, 'read', context=context) from_clause, where_clause, where_clause_params = where_query.get_sql() + where_str = where_clause and (" WHERE %s AND " % where_clause) or ' WHERE ' # search on the name of the contacts and of its company search_name = name @@ -617,9 +618,9 @@ class res_partner(osv.osv, format_address): # a random selection of `limit` results. query = ('''SELECT res_partner.id FROM res_partner LEFT JOIN res_partner company - ON res_partner.parent_id = company.id - WHERE ''' + where_clause + - ''' AND res_partner.email ''' + operator + ''' %s OR + ON res_partner.parent_id = company.id''' + + where_str + + ''' res_partner.email ''' + operator + ''' %s OR CASE WHEN company.id IS NULL OR res_partner.is_company THEN res_partner.name @@ -638,6 +639,7 @@ class res_partner(osv.osv, format_address): where_clause_params.append(limit) cr.execute(query, where_clause_params) ids = map(lambda x: x[0], cr.fetchall()) + if ids: return self.name_get(cr, uid, ids, context) return super(res_partner,self).name_search(cr, uid, name, args, operator=operator, context=context, limit=limit) diff --git a/openerp/addons/base/tests/test_base.py b/openerp/addons/base/tests/test_base.py index 1ca66f57943..02ce3b09688 100644 --- a/openerp/addons/base/tests/test_base.py +++ b/openerp/addons/base/tests/test_base.py @@ -39,6 +39,14 @@ class test_base(common.TransactionCase): new_id2 = self.res_partner.find_or_create(cr, uid, self.samples[2][0]) self.assertTrue(new_id2 > new_id, 'find_or_create failed - should have created new one again') + def test_15_res_partner_name_search(self): + cr,uid = self.cr, self.uid + for text, name, mail in self.samples: + partner_id, dummy = self.res_partner.name_create(cr, uid, text) + partners = self.res_partner.name_search(cr, uid, 'Raoul') + self.assertEqual(len(partners), 3, 'Incorrect search number result for name_search') + partners = self.res_partner.name_search(cr, uid, 'Raoul', limit=1) + self.assertEqual(len(partners), 1, 'Incorrect search number result for name_search with a limit') def test_20_res_partner_address_sync(self): cr, uid = self.cr, self.uid