diff --git a/addons/product/product.py b/addons/product/product.py index 1e4d73c58e1..45074b0e299 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -821,18 +821,24 @@ class product_template(osv.osv): if not name or any(term[0] == 'id' for term in (args or [])): return super(product_template, self).name_search( cr, user, name=name, args=args, operator=operator, context=context, limit=limit) - + template_ids = set() product_product = self.pool['product.product'] - results = product_product.name_search( - cr, user, name, args, operator=operator, context=context, limit=limit) + results = product_product.name_search(cr, user, name, args, operator=operator, context=context, limit=limit) product_ids = [p[0] for p in results] - template_ids = [p.product_tmpl_id.id - for p in product_product.browse( - cr, user, product_ids, context=context)] + for p in product_product.browse(cr, user, product_ids, context=context): + template_ids.add(p.product_tmpl_id.id) + while (results and len(template_ids) < limit): + domain = [('product_tmpl_id', 'not in', list(template_ids))] + results = product_product.name_search( + cr, user, name, args+domain, operator=operator, context=context, limit=limit) + product_ids = [p[0] for p in results] + for p in product_product.browse(cr, user, product_ids, context=context): + template_ids.add(p.product_tmpl_id.id) + # re-apply product.template order + name_get return super(product_template, self).name_search( - cr, user, '', args=[('id', 'in', template_ids)], + cr, user, '', args=[('id', 'in', list(template_ids))], operator='ilike', context=context, limit=limit) class product_product(osv.osv):