[IMP] website_sale: add styles selector on product
bzr revid: chm@openerp.com-20130926130954-fxojimjdinepgpjq
This commit is contained in:
parent
f2a97662cd
commit
9f58a5c082
|
@ -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):
|
||||
|
|
|
@ -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');
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue