diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 3531853227c..f16ef43e179 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -181,19 +181,29 @@ class Ecommerce(http.Controller): return request.redirect(url) - def attributes_to_ids(self, attributes): - obj = request.registry.get('product.attribute.line') - domain = [] + def attributes_to_ids(self, cr, uid, attributes): + req = """ + SELECT product_tmpl_id as id, count(*) as nb_match + FROM product_attribute_line + WHERE 1!=1 + """ + nb = 0 for key_val in attributes: - domain.append(("attribute_id", "=", key_val[0])) + attribute_id = key_val[0] if isinstance(key_val[1], list): - domain.append(("value", ">=", key_val[1][0])) - domain.append(("value", "<=", key_val[1][1])) + req += " OR ( attribute_id = %s AND value >= %s AND value <= %s)" % \ + (attribute_id, key_val[1][0], key_val[1][1]) + nb += 1 else: - domain.append(("value_id", "in", key_val[1:])) - att_ids = obj.search(request.cr, request.uid, domain, context=request.context) - att = obj.read(request.cr, request.uid, att_ids, ["product_tmpl_id"], context=request.context) - return [r["product_tmpl_id"][0] for r in att] + for value_id in key_val[1:]: + req += " OR ( attribute_id = %s AND value_id = %s)" % \ + (attribute_id, value_id) + nb += 1 + + req += " GROUP BY product_tmpl_id" + cr.execute(req) + result = cr.fetchall() + return [id for id, nb_match in result if nb_match >= nb] @http.route(['/shop/pricelist'], type='http', auth="public", website=True, multilang=True) def shop_promo(self, promo=None, **post): @@ -221,7 +231,7 @@ class Ecommerce(http.Controller): if filters: filters = simplejson.loads(filters) if filters: - ids = self.attributes_to_ids(filters) + ids = self.attributes_to_ids(cr, uid, filters) domain.append(('id', 'in', ids or [0])) url = "/shop/" diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index 3c9bb6ea05c..2dc908ccd13 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -107,6 +107,10 @@ $(document).ready(function () { $min.val( ui.values[ 0 ] ); $max.val( ui.values[ 1 ] ); $form.submit(); + }, + slide: function( event, ui ) { + $min.val( ui.values[ 0 ] ); + $max.val( ui.values[ 1 ] ); } }); $min.val( $slider.slider( "values", 0 ) ); diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index 803dc695ff0..4f8a5404d74 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -608,9 +608,9 @@