Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
8 Odpowiedzi
6709 Widoki

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? 

Awatar
Odrzuć
Autor

any help?

Najlepsza odpowiedź

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)

Awatar
Odrzuć
Autor

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

Autor

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.

Autor

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.

Powiązane posty Odpowiedzi Widoki Czynność
1
maj 22
3279
0
kwi 21
3061
2
lut 20
4346
0
mar 16
3571
1
wrz 15
5037