I have 1200 Customers and many of them have a same name. I want to select customer by his internal reference in quotation or sale order. Any Help will be greatly appriciated?
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- 会計
- 在庫
- PoS
- Project
- MRP
この質問にフラグが付けられました
Sure you can do it...
Write a "name_search" method in the partner object...
In that you can define it to search the records based on whatever columns you want to search..
In my requirement: I have defined it such a way, that a customer can be searched using a mobile number or email or name or ref..
A sample code:
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
if not args:
args = []
ids = []
if name and operator in ('=', 'ilike', '=ilike', 'like', '=like'):
search_name = name
if operator in ('ilike', 'like'):
search_name = '%%%s%%' % name
if operator in ('=ilike', '=like'):
operator = operator[1:]
query_args = {'name': search_name}
limit_str = ''
if limit:
limit_str = ' limit %(limit)s'
query_args['limit'] = limit
search_name = query_args['name']
cr.execute("SELECT p.id FROM res_partner p WHERE (p.name ilike '" + (search_name or '') + "%') OR (p.ref ilike '" + (search_name or '') + "%') OR (p.mobile ilike '" + (search_name or '') + "%') OR (p.email ilike '" + (search_name or '') + "%') ")
ids = map(lambda x: x[0], cr.fetchall())
ids = self.search(cr, uid, [('id', 'in', ids)] + args, limit=limit, context=context)
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)
Thanks for your reply. Can you please show me some example?
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100): if not args: args = [] ids = [] if name and operator in ('=', 'ilike', '=ilike', 'like', '=like'): search_name = name if operator in ('ilike', 'like'): search_name = '%%%s%%' % name if operator in ('=ilike', '=like'): operator = operator[1:] query_args = {'name': search_name} limit_str = '' if limit: limit_str = ' limit %(limit)s' query_args['limit'] = limit search_name = query_args['name'] cr.execute("SELECT p.id FROM res_partner p WHERE (p.name ilike '" + (search_name or '') + "%') OR (p.ref ilike '" + (search_name or '') + "%') OR (p.mobile ilike '" + (search_name or '') + "%') OR (p.email ilike '" + (search_name or '') + "%') OR (p.phone ilike '" + (search_name or '') + "%') ") ids = map(lambda x: x[0], cr.fetchall()) ids = self.search(cr, uid, [('id', 'in', ids)] + args, limit=limit, context=context) 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)
In this comment section: I couldn't align it... hence edited the above answer, and the sample code...
Thanks for your brief explanation and code snipe. A littler more help bcz I am totally a newbie and not have much coding experience. This "Write a "name_search" method in the partner object..." sentence ask me to edit partner object. Where can I found partner object. In some module or in developer mode. Thanks in advance.
Can you please provide me some more help. You say that I should write a search method in partner object. My question is where I can locate this partner object in sales module. I also want to know that is this code snippet work in quotation, and purchase orders also. Or please give me some idea that how can i use this code to build a custom module for example a module with this name enhance_customer_search and install this module to gain this feature.
関連投稿 | 返信 | ビュー | 活動 | |
---|---|---|---|---|
|
1
5月 22
|
2997 | ||
|
0
4月 21
|
2852 | ||
|
2
2月 20
|
4038 | ||
|
0
3月 16
|
3370 | ||
|
1
9月 15
|
4798 |
any help?
Odoo name search method: https://www.youtube.com/watch?v=dd5SYkPSMSo