From 6a8ce774264ed52f47cc1f3601bd85ba81412bd8 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 12 Feb 2014 09:03:31 +0100 Subject: [PATCH 01/19] [FIX] res.partner: prevent `show_email` context option from polluting display_name bzr revid: odo@openerp.com-20140212080331-diit15a9sz7do4cu --- openerp/addons/base/res/res_partner.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 9115ccae481..e9573088680 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -209,6 +209,7 @@ class res_partner(osv.osv, format_address): context = dict(context or {}) context.pop('show_address', None) context.pop('show_address_only', None) + context.pop('show_email', None) return dict(self.name_get(cr, uid, ids, context=context)) # indirections to avoid passing a copy of the overridable method when declaring the function field From ac03ba3095fe6154e8bf369ede63be3cfc6d8c9f Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Wed, 12 Feb 2014 11:28:05 +0100 Subject: [PATCH 02/19] [FIX] website: pager don't keep searches bzr revid: chm@openerp.com-20140212102805-5khiv3cgslci9che --- addons/website/views/website_templates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index d43d8c45443..383c27514c1 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -383,13 +383,13 @@ From ed785f07838fbda6a2eacc2e8e249da9dfcc7518 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Wed, 12 Feb 2014 12:55:16 +0100 Subject: [PATCH 03/19] [FIX] website_sale: pager and breadcrum keep search and filter. Filter keep search and category. Links for category bzr revid: chm@openerp.com-20140212115516-3izdv7cszgh2n3l4 --- addons/website/models/website.py | 2 +- addons/website/views/website_templates.xml | 6 +-- addons/website_sale/controllers/main.py | 48 ++++++++++++--------- addons/website_sale/views/website_sale.xml | 49 +++++++++++----------- 4 files changed, 57 insertions(+), 48 deletions(-) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index e43efa6f0a3..ea095c04fe3 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -248,7 +248,7 @@ class website(osv.osv): pmin = pmax - scope if pmax - scope > 0 else 1 def get_url(page): - _url = "%spage/%s/" % (url, page) + _url = "%spage/%s/" % (url, page) if page > 1 else url if url_args: _url = "%s?%s" % (_url, werkzeug.url_encode(url_args)) return _url diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 383c27514c1..846ff17fd1e 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -383,13 +383,13 @@ diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 5e02def1494..b3a93b63148 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -7,6 +7,7 @@ from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request from openerp.tools.translate import _ +from openerp.addons.website.models.website import slug PPG = 20 # Products Per Page PPR = 4 # Products Per Row @@ -143,8 +144,8 @@ class Ecommerce(http.Controller): return key_val return False - @http.route(['/shop/filters/'], type='http', auth="public", website=True, multilang=True) - def filters(self, **post): + @http.route(['/shop/filters/'], type='http', auth="public", methods=['POST'], website=True, multilang=True) + def filters(self, category=None, **post): index = [] filters = [] for key, val in post.items(): @@ -169,11 +170,16 @@ class Ecommerce(http.Controller): filters[index.index(cat_id)].append( cat[2] ) post.pop(key) - return request.redirect("/shop/?filters=%s%s%s" % ( - simplejson.dumps(filters), - post.get("search") and ("&search=%s" % post.get("search")) or "", - post.get("category") and ("&category=%s" % post.get("category")) or "" - )) + url = "/shop/" + if category: + category_obj = request.registry.get('product.public.category') + url = "%scategory/%s/" % (url, slug(category_obj.browse(request.cr, request.uid, int(category), context=request.context))) + if filters: + url = "%s?filters=%s" % (url, simplejson.dumps(filters)) + if post.get("search"): + url = "%s%ssearch=%s" % (url, filters and "&" or "?", post.get("search")) + + return request.redirect(url) def attributes_to_ids(self, attributes): obj = request.registry.get('product.attribute.line') @@ -209,15 +215,24 @@ class Ecommerce(http.Controller): ('name', 'ilike', search), ('description', 'ilike', search)] if category: - domain.append(('product_variant_ids.public_categ_id', 'child_of', category.id)) + domain.append(('product_variant_ids.public_categ_id', 'child_of', int(category))) + if isinstance(category, (int,str,unicode)): + category = request.registry.get('product.public.category').browse(cr, uid, int(category), context=context) if filters: filters = simplejson.loads(filters) if filters: ids = self.attributes_to_ids(filters) domain.append(('id', 'in', ids or [0])) + url = "/shop/" product_count = product_obj.search_count(cr, uid, domain, context=context) - pager = request.website.pager(url="/shop/", total=product_count, page=page, step=PPG, scope=7, url_args=post) + if search: + post["search"] = search + if filters: + post["filters"] = filters + if category: + url = "/shop/category/%s/" % slug(category) + pager = request.website.pager(url=url, total=product_count, page=page, step=PPG, scope=7, url_args=post) request.context['pricelist'] = self.get_pricelist() @@ -244,11 +259,12 @@ class Ecommerce(http.Controller): 'range': range, 'search': { 'search': search, - 'category': category and category.id, + 'category': category, 'filters': filters, }, 'pager': pager, 'styles': styles, + 'category': category, 'categories': categs, 'Ecommerce': self, # TODO fp: Should be removed 'style_in_product': lambda style, product: style.id in [s.id for s in product.website_style_ids], @@ -257,26 +273,20 @@ class Ecommerce(http.Controller): @http.route(['/shop/product//'], type='http', auth="public", website=True, multilang=True) def product(self, product, search='', category='', filters='', **kwargs): - category_obj = request.registry.get('product.public.category') - - category_ids = category_obj.search(request.cr, request.uid, [], context=request.context) - category_list = category_obj.name_get(request.cr, request.uid, category_ids, context=request.context) - category_list = sorted(category_list, key=lambda category: category[1]) - if category: + category_obj = request.registry.get('product.public.category') category = category_obj.browse(request.cr, request.uid, int(category), context=request.context) request.context['pricelist'] = self.get_pricelist() values = { 'Ecommerce': self, - 'category': category, - 'category_list': category_list, 'main_object': product, 'product': product, + 'category': category, 'search': { 'search': search, - 'category': category and str(category.id), + 'category': category, 'filters': filters, } } diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index bd51d35cc14..1c616a3d1f7 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -32,10 +32,10 @@