İçereği Atla
Menü
Bu soru işaretlendi
8 Cevaplar
6656 Görünümler

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? 

Avatar
Vazgeç
Üretici

any help?

En İyi Yanıt

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)

Avatar
Vazgeç
Üretici

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...

Üretici

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.

Üretici

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.

İlgili Gönderiler Cevaplar Görünümler Aktivite
1
May 22
3160
0
Nis 21
2975
2
Şub 20
4256
0
Mar 16
3476
1
Eyl 15
4951