Merge lp:~openerp-dev/openobject-server/saas-1-partner_name_search-chs into lp:~openerp/openobject-server/saas-1

Proposed by Christophe Simonis (OpenERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-server/saas-1-partner_name_search-chs
Merge into: lp:~openerp/openobject-server/saas-1
Prerequisite: lp:~openerp-dev/openobject-server/7.0-search_null-chs
Diff against target: 59 lines (+9/-24)
1 file modified
openerp/addons/base/res/res_partner.py (+9/-24)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/saas-1-partner_name_search-chs
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+168883@code.launchpad.net
To post a comment you must log in.

Unmerged revisions

4874. By Christophe Simonis (OpenERP)

[FIX] res.partner: name_search: do not alter "args" argument

4873. By Christophe Simonis (OpenERP)

[FIX] res.partner: name_search: must join domain with "&" on case of negative search

4872. By Christophe Simonis (OpenERP)

[FIX] res.partner: name_create() must write explicitly "name" instead of _rec_name (which is readonly)

4871. By Christophe Simonis (OpenERP)

[FIX] res.partner: rewrite name_search to use display_name field instead of doing a (wrong) sql query

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/addons/base/res/res_partner.py'
2--- openerp/addons/base/res/res_partner.py 2013-05-28 10:27:33 +0000
3+++ openerp/addons/base/res/res_partner.py 2013-06-12 09:24:49 +0000
4@@ -167,6 +167,7 @@
5 class res_partner(osv.osv, format_address):
6 _description = 'Partner'
7 _name = "res.partner"
8+ _rec_name = 'display_name'
9
10 def _address_display(self, cr, uid, ids, name, args, context=None):
11 res = {}
12@@ -579,7 +580,7 @@
13 raise osv.except_osv(_('Warning'), _("Couldn't create contact without email address !"))
14 if not name and email:
15 name = email
16- rec_id = self.create(cr, uid, {self._rec_name: name or email, 'email': email or False}, context=context)
17+ rec_id = self.create(cr, uid, {'name': name or email, 'email': email or False}, context=context)
18 return self.name_get(cr, uid, [rec_id], context)[0]
19
20 def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
21@@ -591,31 +592,15 @@
22 return super(res_partner, self)._search(cr, user, args, offset=offset, limit=limit, order=order, context=context,
23 count=count, access_rights_uid=access_rights_uid)
24
25- def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
26+ def _name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=100, name_get_uid=None):
27 if not args:
28 args = []
29- if name and operator in ('=', 'ilike', '=ilike', 'like', '=like'):
30- # search on the name of the contacts and of its company
31- search_name = name
32- if operator in ('ilike', 'like'):
33- search_name = '%%%s%%' % name
34- if operator in ('=ilike', '=like'):
35- operator = operator[1:]
36- query_args = {'name': search_name}
37- limit_str = ''
38- if limit:
39- limit_str = ' limit %(limit)s'
40- query_args['limit'] = limit
41- cr.execute('''SELECT partner.id FROM res_partner partner
42- LEFT JOIN res_partner company ON partner.parent_id = company.id
43- WHERE partner.email ''' + operator +''' %(name)s
44- OR partner.name || ' (' || COALESCE(company.name,'') || ')'
45- ''' + operator + ' %(name)s ' + limit_str, query_args)
46- ids = map(lambda x: x[0], cr.fetchall())
47- ids = self.search(cr, uid, [('id', 'in', ids)] + args, limit=limit, context=context)
48- if ids:
49- return self.name_get(cr, uid, ids, context)
50- return super(res_partner,self).name_search(cr, uid, name, args, operator=operator, context=context, limit=limit)
51+ args = args[:]
52+ if not (name == '' and operator == 'ilike'): # will match all, do not slow down research with no-op filter
53+ joiner = '&' if operator in openerp.osv.expression.NEGATIVE_TERM_OPERATORS else '|'
54+ args += [joiner, (self._rec_name, operator, name), ('email', operator, name)]
55+ ids = self._search(cr, uid, args, limit=limit, context=context, access_rights_uid=name_get_uid or uid)
56+ return self.name_get(cr, name_get_uid or uid, ids, context)
57
58 def find_or_create(self, cr, uid, email, context=None):
59 """ Find a partner with the given ``email`` or use :py:method:`~.name_create`

Subscribers

People subscribed via source and target branches