[IMP] website_sale: add styles selector on product

bzr revid: chm@openerp.com-20130926130954-fxojimjdinepgpjq
This commit is contained in:
Christophe Matthieu 2013-09-26 15:09:54 +02:00
parent f2a97662cd
commit 9f58a5c082
7 changed files with 84 additions and 21 deletions

View File

@ -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):

View File

@ -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');
});
});

View File

@ -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:

View File

@ -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):

View File

@ -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);
});
});
});

View File

@ -243,6 +243,14 @@
<li><a href="#" class="js_go_to_bottom">Push on bottom</a></li>
</ul>
</li>
<li class='dropdown-submenu'>
<a tabindex="-1" href="#">Styles</a>
<ul class="dropdown-menu" name="style">
<t t-foreach="styles" t-as="style">
<li t-att-class="style.id in styles_used and 'active' or ''"><a href="#" t-att-data-value="style.id" t-att-data-class="style.html_class"><t t-esc="style.name"/></a></li>
</t>
</ul>
</li>
</t>
</div><div class="col-sm-3 col-sm-offset-1">
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right">

View File

@ -19,47 +19,47 @@
<record id="website_sale.size2x1" model="website.product.style">
<field name="name">Size 2x1</field>
<field name="html_class">Size_2x1</field>
<field name="html_class">size_2x1</field>
</record>
<record id="website_sale.size3x1" model="website.product.style">
<field name="name">Size 3x1</field>
<field name="html_class">Size 3x1</field>
<field name="html_class">size_3x1</field>
</record>
<record id="website_sale.size1x2" model="website.product.style">
<field name="name">Size 1x2</field>
<field name="html_class">Size_1x2</field>
<field name="html_class">size_1x2</field>
</record>
<record id="website_sale.size1x3" model="website.product.style">
<field name="name">Size 1x3</field>
<field name="html_class">Size_1x3</field>
<field name="html_class">size_1x3</field>
</record>
<record id="website_sale.size2x2" model="website.product.style">
<field name="name">Size 2x2</field>
<field name="html_class">Size_2x2</field>
<field name="html_class">size_2x2</field>
</record>
<record id="website_sale.size2x3" model="website.product.style">
<field name="name">Size 2x3</field>
<field name="html_class">Size_2x3</field>
<field name="html_class">size_2x3</field>
</record>
<record id="website_sale.size3x2" model="website.product.style">
<field name="name">Size 3x2</field>
<field name="html_class">Size_3x2</field>
<field name="html_class">size_3x2</field>
</record>
<record id="website_sale.size3x3" model="website.product.style">
<field name="name">Size 3x3</field>
<field name="html_class">Size_3x3</field>
<field name="html_class">size_3x3</field>
</record>
<record id="website_sale.size4x1" model="website.product.style">
<field name="name">Size 4x1</field>
<field name="html_class">Size_4x1</field>
<field name="html_class">size_4x1</field>
</record>
<record id="website_sale.size4x2" model="website.product.style">
<field name="name">Size 4x2</field>
<field name="html_class">Size_4x2</field>
<field name="html_class">size_4x2</field>
</record>
<record id="website_sale.size4x3" model="website.product.style">
<field name="name">Size 4x3</field>
<field name="html_class">Size_4x3</field>
<field name="html_class">size_4x3</field>
</record>
</data>