diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 427381ac781..5bc9f38a6c7 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -268,7 +268,7 @@ class Website(openerp.addons.web.controllers.main.Home): {'website_published': not obj.website_published}, context=request.context) obj = _object.browse(request.cr, request.uid, _id) - return obj.website_published and "1" or "0" + return obj.website_published and True or False @website.route(['/website/kanban/'], type='http', auth="public") def kanban(self, **post): diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js index c652ed1c459..f28a94c1800 100644 --- a/addons/website/static/src/js/website.js +++ b/addons/website/static/src/js/website.js @@ -130,8 +130,8 @@ openerp.jsonRpc('/website/publish', 'call', {'id': +$data.data('id'), 'object': $data.data('object')}) .then(function (result) { - $btn.toggleClass("btn-default", !+result).toggleClass("btn-success", !!+result); - $data.toggleClass("css_unpublish", !+result).toggleClass("css_publish", !!+result); + $btn.toggleClass("btn-default", !result).toggleClass("btn-success", result); + $data.toggleClass("css_unpublish", !result).toggleClass("css_publish", result); $data.parents("[data-publish]").attr("data-publish", +result ? 'on' : 'off'); }); }); diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 0838da90dd6..28be647382f 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -93,16 +93,15 @@ class Ecommerce(http.Controller): } """ product_obj = request.registry.get('product.template') - data_obj = request.registry.get('ir.model.data') + style_obj = request.registry.get('website.product.style') # search for checking of access rules and keep order product_ids = [id for id in product_ids if id in product_obj.search(request.cr, request.uid, [("id", 'in', product_ids)], context=request.context)] size_ids = {} - data_domain = [('model', '=', 'website.product.style'), ('name', 'like', 'size%')] - data_ids = data_obj.search(request.cr, SUPERUSER_ID, data_domain, context=request.context) - for data in data_obj.read(request.cr, SUPERUSER_ID, data_ids, ['name', 'res_id'], context=request.context): - size_ids[data['res_id']] = [int(data['name'][-3]), int(data['name'][-1])] + style_ids = style_obj.search(request.cr, SUPERUSER_ID, [('html_class', 'like', 'size_%')], context=request.context) + for style in style_obj.browse(request.cr, SUPERUSER_ID, style_ids, context=request.context): + size_ids[style.id] = [int(style.html_class[-3]), int(style.html_class[-1])] product_list = [] bin_packing = {} @@ -272,6 +271,16 @@ class Ecommerce(http.Controller): category = category_obj.browse(request.cr, request.uid, int(post.get('category_id')), context=request.context) product = product_obj.browse(request.cr, request.uid, product_id, context=request.context) + + styles = [] + styles_used = [] + if not request.context['is_public_user']: + style_obj = request.registry.get('website.product.style') + style_ids = style_obj.search(request.cr, request.uid, [(1, '=', 1)], context=request.context) + styles = style_obj.browse(request.cr, request.uid, style_ids, context=request.context) + for style in product.website_style_ids: + styles_used.append(style.id) + values = { 'category_id': post.get('category_id') and int(post.get('category_id')) or None, 'category': category, @@ -279,6 +288,8 @@ class Ecommerce(http.Controller): 'get_categories': self.get_categories, 'category_list': category_list, 'product': product, + 'styles': styles, + 'styles_used': styles_used, } return request.website.render("website_sale.product", values) @@ -591,5 +602,33 @@ class Ecommerce(http.Controller): else: product_obj.set_sequence_bottom(request.cr, request.uid, [id], request.context) + @website.route(['/shop/change_styles/'], type='json', auth="public") + def change_styles(self, id, style_id): + product = request.registry.get('product.template').browse(request.cr, request.uid, id, request.context) + + remove = [] + active = False + for style in product.website_style_ids: + if style.id == style_id: + remove.append(style.id) + active = True + break + + style = request.registry.get('website.product.style').browse(request.cr, request.uid, style_id, request.context) + + if 'size_' in style.html_class and style.html_class.index('size_') == 0: + remove = [] + for pstyle in product.website_style_ids: + if 'size_' in pstyle.html_class and pstyle.html_class.index('size_') == 0: + remove.append(pstyle.id) + + if remove: + product.write({'website_style_ids': [(3, rid) for rid in remove]}) + + if not active: + product.write({'website_style_ids': [(4, style.id)]}) + + return not active + # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/website_sale/product.py b/addons/website_sale/product.py index 0603948bb36..a15bf49279b 100644 --- a/addons/website_sale/product.py +++ b/addons/website_sale/product.py @@ -41,7 +41,7 @@ class product_template(osv.Model): 'website_sequence': fields.integer('Sequence', help="Determine the display order in the Website E-commerce"), } _defaults = { - 'website_sequence': 0, + 'website_sequence': 1, } def set_sequence_top(self, cr, uid, ids, context=None): diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index f13b3a37d97..18147440173 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -64,9 +64,25 @@ $(document).ready(function () { return false; }); - $('.js_go_to_top, .js_go_to_bottom').on('click', function () { + $('.js_publish_management .js_go_to_top,.js_publish_management .js_go_to_bottom').on('click', function () { var $data = $(this).parents(".js_publish_management:first"); openerp.jsonRpc('/shop/change_sequence/', 'call', {'id': $data.data('id'), 'top': $(this).hasClass('js_go_to_top')}); }); + $('.js_publish_management ul[name="style"] a').on('click', function () { + var $a = $(this); + var $li = $a.parent(); + var $data = $(this).parents(".js_publish_management:first"); + + var data = $a.data(); + if (data.class.toLowerCase().indexOf('size_') === 0) { + $('.js_publish_management ul[name="style"] li:has(a[data-class^="size_"])').removeClass("active"); + } + $li.parent().removeClass("active"); + openerp.jsonRpc('/shop/change_styles/', 'call', {'id': $data.data('id'), 'style_id': data.value}) + .then(function (result) { + $li.toggleClass("active", result); + }); + }); + }); diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index 974e1e22ae9..d42efb443d4 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -243,6 +243,14 @@