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
=== modified file 'openerp/addons/base/res/res_partner.py'
--- openerp/addons/base/res/res_partner.py 2013-05-28 10:27:33 +0000
+++ openerp/addons/base/res/res_partner.py 2013-06-12 09:24:49 +0000
@@ -167,6 +167,7 @@
167class res_partner(osv.osv, format_address):167class res_partner(osv.osv, format_address):
168 _description = 'Partner'168 _description = 'Partner'
169 _name = "res.partner"169 _name = "res.partner"
170 _rec_name = 'display_name'
170171
171 def _address_display(self, cr, uid, ids, name, args, context=None):172 def _address_display(self, cr, uid, ids, name, args, context=None):
172 res = {}173 res = {}
@@ -579,7 +580,7 @@
579 raise osv.except_osv(_('Warning'), _("Couldn't create contact without email address !"))580 raise osv.except_osv(_('Warning'), _("Couldn't create contact without email address !"))
580 if not name and email:581 if not name and email:
581 name = email582 name = email
582 rec_id = self.create(cr, uid, {self._rec_name: name or email, 'email': email or False}, context=context)583 rec_id = self.create(cr, uid, {'name': name or email, 'email': email or False}, context=context)
583 return self.name_get(cr, uid, [rec_id], context)[0]584 return self.name_get(cr, uid, [rec_id], context)[0]
584585
585 def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):586 def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
@@ -591,31 +592,15 @@
591 return super(res_partner, self)._search(cr, user, args, offset=offset, limit=limit, order=order, context=context,592 return super(res_partner, self)._search(cr, user, args, offset=offset, limit=limit, order=order, context=context,
592 count=count, access_rights_uid=access_rights_uid)593 count=count, access_rights_uid=access_rights_uid)
593594
594 def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):595 def _name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=100, name_get_uid=None):
595 if not args:596 if not args:
596 args = []597 args = []
597 if name and operator in ('=', 'ilike', '=ilike', 'like', '=like'):598 args = args[:]
598 # search on the name of the contacts and of its company599 if not (name == '' and operator == 'ilike'): # will match all, do not slow down research with no-op filter
599 search_name = name600 joiner = '&' if operator in openerp.osv.expression.NEGATIVE_TERM_OPERATORS else '|'
600 if operator in ('ilike', 'like'):601 args += [joiner, (self._rec_name, operator, name), ('email', operator, name)]
601 search_name = '%%%s%%' % name602 ids = self._search(cr, uid, args, limit=limit, context=context, access_rights_uid=name_get_uid or uid)
602 if operator in ('=ilike', '=like'):603 return self.name_get(cr, name_get_uid or uid, ids, context)
603 operator = operator[1:]
604 query_args = {'name': search_name}
605 limit_str = ''
606 if limit:
607 limit_str = ' limit %(limit)s'
608 query_args['limit'] = limit
609 cr.execute('''SELECT partner.id FROM res_partner partner
610 LEFT JOIN res_partner company ON partner.parent_id = company.id
611 WHERE partner.email ''' + operator +''' %(name)s
612 OR partner.name || ' (' || COALESCE(company.name,'') || ')'
613 ''' + operator + ' %(name)s ' + limit_str, query_args)
614 ids = map(lambda x: x[0], cr.fetchall())
615 ids = self.search(cr, uid, [('id', 'in', ids)] + args, limit=limit, context=context)
616 if ids:
617 return self.name_get(cr, uid, ids, context)
618 return super(res_partner,self).name_search(cr, uid, name, args, operator=operator, context=context, limit=limit)
619604
620 def find_or_create(self, cr, uid, email, context=None):605 def find_or_create(self, cr, uid, email, context=None):
621 """ Find a partner with the given ``email`` or use :py:method:`~.name_create`606 """ Find a partner with the given ``email`` or use :py:method:`~.name_create`

Subscribers

People subscribed via source and target branches