[IMP] website_sale: confirm/options dialog box have same layout of my cart
This commit is contained in:
parent
8a24171996
commit
57c59ddfac
|
@ -90,6 +90,7 @@ class QueryURL(object):
|
||||||
for k,v in kw.items():
|
for k,v in kw.items():
|
||||||
if v:
|
if v:
|
||||||
if isinstance(v, list) or isinstance(v, set):
|
if isinstance(v, list) or isinstance(v, set):
|
||||||
|
print k, v
|
||||||
l.append(werkzeug.url_encode([(k,i) for i in v]))
|
l.append(werkzeug.url_encode([(k,i) for i in v]))
|
||||||
else:
|
else:
|
||||||
l.append(werkzeug.url_encode([(k,v)]))
|
l.append(werkzeug.url_encode([(k,v)]))
|
||||||
|
@ -126,6 +127,8 @@ class website_sale(http.Controller):
|
||||||
domain += [('product_variant_ids.public_categ_ids', 'child_of', int(category))]
|
domain += [('product_variant_ids.public_categ_ids', 'child_of', int(category))]
|
||||||
|
|
||||||
attrib_values = [map(int,v.split(",")) for v in request.httprequest.args.getlist('attrib') if v]
|
attrib_values = [map(int,v.split(",")) for v in request.httprequest.args.getlist('attrib') if v]
|
||||||
|
attrib_set = set([v[1] for v in attrib_values])
|
||||||
|
|
||||||
if attrib_values:
|
if attrib_values:
|
||||||
attrib = None
|
attrib = None
|
||||||
ids = []
|
ids = []
|
||||||
|
@ -142,8 +145,8 @@ class website_sale(http.Controller):
|
||||||
if attrib:
|
if attrib:
|
||||||
domain += [('attribute_line_ids.value_ids', 'in', ids)]
|
domain += [('attribute_line_ids.value_ids', 'in', ids)]
|
||||||
|
|
||||||
attrib_set = set([v[1] for v in attrib_values])
|
attrib_query = set(["%s,%s" % (v[0],v[1]) for v in attrib_values])
|
||||||
keep = QueryURL('/shop', category=category and int(category), search=search, attrib=attrib_set)
|
keep = QueryURL('/shop', category=category and int(category), search=search, attrib=attrib_query)
|
||||||
|
|
||||||
if not context.get('pricelist'):
|
if not context.get('pricelist'):
|
||||||
context['pricelist'] = int(self.get_pricelist())
|
context['pricelist'] = int(self.get_pricelist())
|
||||||
|
@ -201,7 +204,8 @@ class website_sale(http.Controller):
|
||||||
attrib_values = [map(int,v.split(",")) for v in request.httprequest.args.getlist('attrib') if v]
|
attrib_values = [map(int,v.split(",")) for v in request.httprequest.args.getlist('attrib') if v]
|
||||||
attrib_set = set([v[1] for v in attrib_values])
|
attrib_set = set([v[1] for v in attrib_values])
|
||||||
|
|
||||||
keep = QueryURL('/shop', category=category and category.id, search=search, attrib=attrib_set)
|
attrib_query = set(["%s,%s" % (v[0],v[1]) for v in attrib_values])
|
||||||
|
keep = QueryURL('/shop', category=category and category.id, search=search, attrib=attrib_query)
|
||||||
|
|
||||||
category_ids = category_obj.search(cr, uid, [], context=context)
|
category_ids = category_obj.search(cr, uid, [], context=context)
|
||||||
category_list = category_obj.name_get(cr, uid, category_ids, context=context)
|
category_list = category_obj.name_get(cr, uid, category_ids, context=context)
|
||||||
|
@ -260,12 +264,25 @@ class website_sale(http.Controller):
|
||||||
return request.website.render("website_sale.cart", values)
|
return request.website.render("website_sale.cart", values)
|
||||||
|
|
||||||
@http.route(['/shop/cart/update'], type='http', auth="public", methods=['POST'], website=True)
|
@http.route(['/shop/cart/update'], type='http', auth="public", methods=['POST'], website=True)
|
||||||
def cart_update(self, product_id, add_qty=1, set_qty=0, **kw):
|
def cart_update(self, product_id, add_qty=1, set_qty=0, goto_shop=None, **kw):
|
||||||
cr, uid, context, pool = request.cr, request.uid, request.context, request.registry
|
cr, uid, context, pool = request.cr, request.uid, request.context, request.registry
|
||||||
order = request.website.sale_get_order(force_create=1)
|
order = request.website.sale_get_order(force_create=1)
|
||||||
if add_qty or set_qty:
|
if add_qty or set_qty:
|
||||||
order._cart_update(product_id=int(product_id), add_qty=int(add_qty), set_qty=int(set_qty))
|
order._cart_update(product_id=int(product_id), add_qty=int(add_qty), set_qty=int(set_qty))
|
||||||
return request.redirect("/shop/cart")
|
if goto_shop:
|
||||||
|
path = "/shop"
|
||||||
|
l = list()
|
||||||
|
for k,v in kw.items():
|
||||||
|
if v and k in ["category", "search", "attrib"]:
|
||||||
|
if isinstance(v, list) or isinstance(v, set):
|
||||||
|
l.append(werkzeug.url_encode([(k,i) for i in v]))
|
||||||
|
else:
|
||||||
|
l.append(werkzeug.url_encode([(k,v)]))
|
||||||
|
if l:
|
||||||
|
path += '?' + '&'.join(l)
|
||||||
|
return request.redirect(path)
|
||||||
|
else:
|
||||||
|
return request.redirect("/shop/cart")
|
||||||
|
|
||||||
@http.route(['/shop/cart/update_json'], type='json', auth="public", methods=['POST'], website=True)
|
@http.route(['/shop/cart/update_json'], type='json', auth="public", methods=['POST'], website=True)
|
||||||
def cart_update_json(self, product_id, line_id, add_qty=None, set_qty=None, display=True):
|
def cart_update_json(self, product_id, line_id, add_qty=None, set_qty=None, display=True):
|
||||||
|
|
|
@ -302,16 +302,13 @@
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.css_not_available .row > div:nth-child(3), .css_not_available .row > div:nth-child(4) {
|
.css_not_available.js_product > *:nth-child(3) > *, .css_not_available.js_product *:nth-child(4) > * {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.css_not_available .row > div:last-child {
|
.css_not_available.js_product .product_price {
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.css_not_available .product_price {
|
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.css_not_available .css_not_available_msg {
|
.css_not_available.js_product .css_not_available_msg {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -259,12 +259,9 @@
|
||||||
|
|
||||||
.css_not_available_msg
|
.css_not_available_msg
|
||||||
display: none
|
display: none
|
||||||
.css_not_available
|
.css_not_available.js_product
|
||||||
.row
|
> *:nth-child(3) > *, *:nth-child(4) > *
|
||||||
> div:nth-child(3), > div:nth-child(4)
|
display: none
|
||||||
display: none
|
|
||||||
> div:last-child
|
|
||||||
display: block
|
|
||||||
.product_price
|
.product_price
|
||||||
display: none
|
display: none
|
||||||
.css_not_available_msg
|
.css_not_available_msg
|
||||||
|
|
|
@ -123,24 +123,39 @@ $(document).ready(function () {
|
||||||
$('input.js_variant_change, select.js_variant_change', this).first().trigger('change');
|
$('input.js_variant_change, select.js_variant_change', this).first().trigger('change');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$("a.js_add, a.js_remove").click(function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
var $parent = $(this).parents('.js_product:first');
|
||||||
|
$parent.find("a.js_add, span.js_remove").toggleClass("hidden");
|
||||||
|
$parent.find("input.js_optional_same_quantity").val( $(this).hasClass("js_add") ? 1 : 0 );
|
||||||
|
});
|
||||||
|
|
||||||
$('#product_detail form[action^="/shop/cart/update"] .a-submit').off("click").click(function (event) {
|
$('#product_detail form[action^="/shop/cart/update"] .a-submit').off("click").click(function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var $link = $(this);
|
var $link = $(this);
|
||||||
var $form = $link.parents("form:first");
|
var $form = $link.parents("form:first");
|
||||||
|
var quantity = parseInt($('input[name="add_qty"]').val() || 1, 10);
|
||||||
var defs = [];
|
var defs = [];
|
||||||
$link.attr('disabled', 'disabled');
|
$link.attr('disabled', 'disabled');
|
||||||
$('.js_product', $form).each(function () {
|
$('.js_product', $form).each(function () {
|
||||||
var product_id = parseInt($('input.optional_product_id', this).val(),10);
|
var product_id = parseInt($('input.optional_product_id', this).val(),10);
|
||||||
var quantity = parseInt($('input.js_quantity', this).val(),10);
|
var qty = parseInt($('input.js_quantity', this).val(),10);
|
||||||
if (product_id && quantity) {
|
if($('input.js_optional_same_quantity', this).val() !== '0') {
|
||||||
|
qty = quantity;
|
||||||
|
}
|
||||||
|
if (product_id && qty) {
|
||||||
defs.push(openerp.jsonRpc("/shop/cart/update_json", 'call', {
|
defs.push(openerp.jsonRpc("/shop/cart/update_json", 'call', {
|
||||||
'line_id': null,
|
'line_id': null,
|
||||||
'product_id': product_id,
|
'product_id': product_id,
|
||||||
'add_qty': quantity,
|
'add_qty': qty,
|
||||||
'display': false}));
|
'display': false}));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$.when.apply($.when, defs).then(function () {
|
$.when.apply($.when, defs).then(function () {
|
||||||
|
if ($link.hasClass("js_goto_shop")) {
|
||||||
|
$form.prepend('<input type="hidden" name="goto_shop" value="1"/>');
|
||||||
|
}
|
||||||
$form.submit();
|
$form.submit();
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -373,28 +373,147 @@
|
||||||
</div><div class="col-sm-5 col-md-5 col-lg-4 col-lg-offset-1">
|
</div><div class="col-sm-5 col-md-5 col-lg-4 col-lg-offset-1">
|
||||||
<h1 itemprop="name" t-field="product.name">Product Name</h1>
|
<h1 itemprop="name" t-field="product.name">Product Name</h1>
|
||||||
<span itemprop="url" style="display:none;" t-esc="'/shop/product/%s' % slug(product)"/>
|
<span itemprop="url" style="display:none;" t-esc="'/shop/product/%s' % slug(product)"/>
|
||||||
<form action="/shop/cart/update" class="js_add_cart_json" method="POST">
|
|
||||||
<input type="hidden" t-if="len(product.product_variant_ids) == 1" name="product_id" t-att-value="product.product_variant_ids[0].id"/>
|
<form t-att-action="keep('/shop/cart/update')" class="js_add_cart_variants" method="POST">
|
||||||
<t t-if="len(product.product_variant_ids) > 1">
|
|
||||||
<label label-default="label-default" class="radio" t-foreach="product.product_variant_ids" t-as="variant_id">
|
<div class="js_product">
|
||||||
<input type="radio" name="product_id" t-att-value="variant_id.id"/>
|
<t t-placeholder="select">
|
||||||
<span t-esc="variant_id.name_get()[0][1]"/>
|
<input type="hidden" class="product_id" name="product_id" t-att-value="int(product.product_variant_ids[0]) if len(product.product_variant_ids) == 1 else '0'"/>
|
||||||
<span class="badge" t-if="variant_id.price_extra">
|
<t t-call="website_sale.variants">
|
||||||
<t t-esc="variant_id.price_extra > 0 and '+' or ''"/><span t-field="variant_id.price_extra" t-field-options='{ "widget": "monetary", "display_currency": "pricelist.currency_id" }'/>
|
<t t-set="ul_class" t-value="'nav-stacked'"/>
|
||||||
</span>
|
</t>
|
||||||
</label>
|
|
||||||
</t>
|
</t>
|
||||||
|
|
||||||
<t t-call="website_sale.product_price"/>
|
<t t-call="website_sale.product_price"/>
|
||||||
|
<p t-if="len(product.product_variant_ids) > 1" class="css_not_available_msg bg-danger" style="padding: 15px;">Product not available</p>
|
||||||
|
|
||||||
<t t-name="button">
|
<t t-placeholder="button">
|
||||||
<a t-if="not optional_product_ids" class="btn btn-primary btn-lg mt8 a-submit js_check_product">Add to Cart</a>
|
<a t-if="not optional_product_ids" class="btn btn-primary btn-lg mt8 a-submit js_check_product">Add to Cart</a>
|
||||||
<a t-if="optional_product_ids" class="btn btn-primary btn-lg mt8 js_check_product" href="#" data-toggle="modal" data-target="#modal_optional_products">Add to Cart</a>
|
<a t-if="optional_product_ids" class="btn btn-primary btn-lg mt8 js_check_product" href="#" data-toggle="modal" data-target="#modal_optional_products">Add to Cart</a>
|
||||||
|
|
||||||
<t t-if="optional_products">
|
|
||||||
<t t-call="website_sale.product_modal_optional_products"/>
|
|
||||||
</t>
|
|
||||||
</t>
|
</t>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div t-if="optional_product_ids" id="modal_optional_products" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
|
||||||
|
<h4 class="modal-title" id="myModalLabel">Product to add in your shopping cart</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<table class="table table-striped table-condensed">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2" width="100">Product</th>
|
||||||
|
<th width="100">Price</th>
|
||||||
|
<th width="120">Quantity</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<t t-set="option_inc" t-value="0"/>
|
||||||
|
<tr class="js_product" t-foreach="optional_product_ids" t-as="product">
|
||||||
|
<td width="100">
|
||||||
|
<input type="hidden" class="optional_product_id" t-attf-name="optional-product-#{option_inc}" t-att-value="int(product.product_variant_ids[0]) if len(product.product_variant_ids) == 1 else '0'"/>
|
||||||
|
<span t-field="product.image_small" t-field-options='{"widget": "image"}'/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="pull-left">
|
||||||
|
<strong class="media-heading" t-field="product.name"/>
|
||||||
|
<div class="text-muted" t-field="product.description_sale"/>
|
||||||
|
</div>
|
||||||
|
<div class="pull-right">
|
||||||
|
<t t-call="website_sale.variants"/>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<t t-if="product.lst_price != product.price">
|
||||||
|
<span class="text-danger" style="text-decoration: line-through;"
|
||||||
|
t-field="product.lst_price"
|
||||||
|
t-field-options='{
|
||||||
|
"widget": "monetary",
|
||||||
|
"display_currency": "website.pricelist_id.currency_id"
|
||||||
|
}'/><br/>
|
||||||
|
</t>
|
||||||
|
<span class="oe_price"
|
||||||
|
t-field="product.price"
|
||||||
|
t-field-options='{
|
||||||
|
"widget": "monetary",
|
||||||
|
"display_currency": "website.pricelist_id.currency_id"
|
||||||
|
}'/>
|
||||||
|
<p class="css_not_available_msg bg-danger" style="position:absolute; padding: 15px;">Product not available</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="hidden" class="js_optional_same_quantity" value="0"/>
|
||||||
|
<input type="hidden" class="js_quantity" t-attf-name="optional-quantity-#{option_inc}" value="0"/>
|
||||||
|
<a href="#" class="js_add"><strong>Add to Cart</strong></a>
|
||||||
|
<span class="js_remove hidden">
|
||||||
|
Will be add to your cart<br/>
|
||||||
|
<a href="#" class="js_remove"><small>Cancel</small></a>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<!--
|
||||||
|
<div class="js_product" t-foreach="optional_product_ids" t-as="product">
|
||||||
|
<strong class="media-heading" t-field="product.name"/>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-2">
|
||||||
|
<span t-field="product.image_small" t-field-options='{"widget": "image"}'/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<input type="hidden" class="optional_product_id" t-attf-name="optional-product-#{option_inc}" t-att-value="int(product.product_variant_ids[0]) if len(product.product_variant_ids) == 1 else '0'"/>
|
||||||
|
<t t-call="website_sale.variants"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-2">
|
||||||
|
<strong>Price</strong><br/>
|
||||||
|
<t t-if="product.lst_price != product.price">
|
||||||
|
<span class="text-danger" style="text-decoration: line-through;"
|
||||||
|
t-field="product.lst_price"
|
||||||
|
t-field-options='{
|
||||||
|
"widget": "monetary",
|
||||||
|
"display_currency": "website.pricelist_id.currency_id"
|
||||||
|
}'/><br/>
|
||||||
|
</t>
|
||||||
|
<span class="oe_price"
|
||||||
|
t-field="product.price"
|
||||||
|
t-field-options='{
|
||||||
|
"widget": "monetary",
|
||||||
|
"display_currency": "website.pricelist_id.currency_id"
|
||||||
|
}'/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-2">
|
||||||
|
<strong>Number</strong><br/>
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon">
|
||||||
|
<a t-attf-href="#" class="mb8 js_add_cart_json">
|
||||||
|
<i class="fa fa-minus"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<input type="text" class="js_quantity form-control" t-attf-name="optional-quantity-#{option_inc}" value="0"/>
|
||||||
|
<span class="input-group-addon">
|
||||||
|
<a t-attf-href="#" class="mb8 float_left js_add_cart_json">
|
||||||
|
<i class="fa fa-plus"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<p class="css_not_available_msg bg-danger" style="padding: 15px;">Product not available</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<a class="btn btn-default a-submit js_goto_shop"><i class="fa fa-chevron-left"></i> Continue shopping</a>
|
||||||
|
<a class="btn btn-primary pull-right a-submit"><i class="fa fa-shopping-cart fa-fw"></i> Proceed to checkout</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<hr t-if="product.description_sale"/>
|
<hr t-if="product.description_sale"/>
|
||||||
|
@ -414,124 +533,55 @@
|
||||||
</t>
|
</t>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template id="product_preview" inherit_id="website_sale.product" optional="enabled" name="Product Preview">
|
<template id="product_confirmation" inherit_id="website_sale.product" optional="enabled" name="Confirm: Add To Cart">
|
||||||
<xpath expr="//t[@t-name='button']" position="replace">
|
<xpath expr="//div[@id='modal_optional_products']" position="attributes">
|
||||||
<a t-if="optional_products" class="btn btn-primary btn-lg mt8 js_check_product" href="#" data-toggle="modal" data-target="#modal_optional_products">Add to Cart</a>
|
<attribute name="t-if">True</attribute>
|
||||||
|
|
||||||
<t t-call="website_sale.product_modal_optional_products"/>
|
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
<xpath expr="//t[@t-placeholder='button']" position="replace">
|
||||||
|
<a class="btn btn-primary btn-lg mt8 js_check_product" href="#" data-toggle="modal" data-target="#modal_optional_products">Add to Cart</a>
|
||||||
<template id="product_modal_optional_products">
|
</xpath>
|
||||||
<div id="modal_optional_products" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
<xpath expr="//t[@t-set='option_inc'][@t-value='0']" position="before">
|
||||||
<div class="modal-dialog modal-lg">
|
<tr>
|
||||||
<div class="modal-content">
|
<td width="100">
|
||||||
<div class="modal-header">
|
<span t-field="product.image_medium" t-field-options='{"widget": "image" }'/>
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
|
</td>
|
||||||
<h4 class="modal-title" id="myModalLabel">Product to add to your shopping cart</h4>
|
<td>
|
||||||
|
<strong t-field="product.name"/>
|
||||||
|
<div class="text-muted" t-field="product.description_sale"/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<t t-if="product.lst_price != product.price">
|
||||||
|
<span class="text-danger" style="text-decoration: line-through;"
|
||||||
|
t-field="product.lst_price"
|
||||||
|
t-field-options='{
|
||||||
|
"widget": "monetary",
|
||||||
|
"display_currency": "website.pricelist_id.currency_id"
|
||||||
|
}'/><br/>
|
||||||
|
</t>
|
||||||
|
<span class="oe_price"
|
||||||
|
t-field="product.price"
|
||||||
|
t-field-options='{
|
||||||
|
"widget": "monetary",
|
||||||
|
"display_currency": "website.pricelist_id.currency_id"
|
||||||
|
}'/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon">
|
||||||
|
<a t-attf-href="#" class="mb8 js_add_cart_json">
|
||||||
|
<i class="fa fa-minus"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<input type="text" class="js_quantity form-control" name="add_qty" value="1"/>
|
||||||
|
<span class="input-group-addon">
|
||||||
|
<a t-attf-href="#" class="mb8 float_left js_add_cart_json">
|
||||||
|
<i class="fa fa-plus"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
</td>
|
||||||
<div class="row">
|
</tr>
|
||||||
<div class="col-xs-2">
|
</xpath>
|
||||||
<strong t-field="product.name"/>
|
|
||||||
<span t-field="product.image_medium" t-field-options='{"widget": "image", "class": "img-rounded shadow" }'/>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-2">
|
|
||||||
<strong>Price</strong><br/>
|
|
||||||
<t t-if="product.lst_price != product.price">
|
|
||||||
<span class="text-danger" style="text-decoration: line-through;"
|
|
||||||
t-field="product.lst_price"
|
|
||||||
t-field-options='{
|
|
||||||
"widget": "monetary",
|
|
||||||
"display_currency": "website.pricelist_id.currency_id"
|
|
||||||
}'/><br/>
|
|
||||||
</t>
|
|
||||||
<span class="oe_price"
|
|
||||||
t-field="product.price"
|
|
||||||
t-field-options='{
|
|
||||||
"widget": "monetary",
|
|
||||||
"display_currency": "website.pricelist_id.currency_id"
|
|
||||||
}'/>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-2">
|
|
||||||
<strong>Number</strong><br/>
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-addon">
|
|
||||||
<a t-attf-href="#" class="mb8 js_add_cart_json">
|
|
||||||
<i class="fa fa-minus"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
<input type="text" class="js_quantity form-control" name="add_qty" value="1"/>
|
|
||||||
<span class="input-group-addon">
|
|
||||||
<a t-attf-href="#" class="mb8 float_left js_add_cart_json">
|
|
||||||
<i class="fa fa-plus"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr/>
|
|
||||||
|
|
||||||
<t t-set="option_inc" t-value="0"/>
|
|
||||||
<div class="js_product" t-foreach="optional_product_ids" t-as="product">
|
|
||||||
<strong class="media-heading" t-field="product.name"/>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-2">
|
|
||||||
<span t-field="product.image_small" t-field-options='{"widget": "image", "class": "img-rounded shadow" }'/>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<input type="hidden" class="optional_product_id" t-attf-name="optional-product-#{option_inc}" t-att-value="int(product.product_variant_ids[0]) if len(product.product_variant_ids) == 1 else '0'"/>
|
|
||||||
<t t-call="website_sale.variants"/>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-2">
|
|
||||||
<strong>Price</strong><br/>
|
|
||||||
<t t-if="product.lst_price != product.price">
|
|
||||||
<span class="text-danger" style="text-decoration: line-through;"
|
|
||||||
t-field="product.lst_price"
|
|
||||||
t-field-options='{
|
|
||||||
"widget": "monetary",
|
|
||||||
"display_currency": "website.pricelist_id.currency_id"
|
|
||||||
}'/><br/>
|
|
||||||
</t>
|
|
||||||
<span class="oe_price"
|
|
||||||
t-field="product.price"
|
|
||||||
t-field-options='{
|
|
||||||
"widget": "monetary",
|
|
||||||
"display_currency": "website.pricelist_id.currency_id"
|
|
||||||
}'/>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-2">
|
|
||||||
<strong>Number</strong><br/>
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-addon">
|
|
||||||
<a t-attf-href="#" class="mb8 js_add_cart_json">
|
|
||||||
<i class="fa fa-minus"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
<input type="text" class="js_quantity form-control" t-attf-name="optional-quantity-#{option_inc}" value="0"/>
|
|
||||||
<span class="input-group-addon">
|
|
||||||
<a t-attf-href="#" class="mb8 float_left js_add_cart_json">
|
|
||||||
<i class="fa fa-plus"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-4">
|
|
||||||
<p class="css_not_available_msg bg-danger" style="padding: 15px;">Product not available</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<a class="btn btn-primary a-submit">Continue</a>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template id="product_price">
|
<template id="product_price">
|
||||||
|
@ -557,31 +607,23 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template id="product_variants" inherit_id="website_sale.product" optional="enabled" name="Product Variants">
|
<template id="product_variants" inherit_id="website_sale.product" optional="disabled" name="List View of Variants">
|
||||||
<xpath expr="//form[@action='/shop/cart/update']" position="replace">
|
<xpath expr="//t[@t-placeholder='select']" position="replace">
|
||||||
<form action="/shop/cart/update" class="js_add_cart_variants" method="POST">
|
<input type="hidden" t-if="len(product.product_variant_ids) == 1" name="product_id" t-att-value="product.product_variant_ids[0].id"/>
|
||||||
|
<t t-if="len(product.product_variant_ids) > 1">
|
||||||
<t t-call="website_sale.product_modal_optional_products"/>
|
<label label-default="label-default" class="radio" t-foreach="product.product_variant_ids" t-as="variant_id">
|
||||||
|
<input type="radio" name="product_id" t-att-value="variant_id.id"/>
|
||||||
<div class="js_product">
|
<span t-esc="variant_id.name_get()[0][1]"/>
|
||||||
<input type="hidden" class="product_id" name="product_id" t-att-value="int(product.product_variant_ids[0]) if len(product.product_variant_ids) == 1 else '0'"/>
|
<span class="badge" t-if="variant_id.price_extra">
|
||||||
<t t-call="website_sale.variants">
|
<t t-esc="variant_id.price_extra > 0 and '+' or ''"/><span t-field="variant_id.price_extra" t-field-options='{ "widget": "monetary", "display_currency": "pricelist.currency_id" }'/>
|
||||||
<t t-set="ul_class" t-value="'nav-stacked'"/>
|
</span>
|
||||||
</t>
|
</label>
|
||||||
|
</t>
|
||||||
<t t-call="website_sale.product_price"/>
|
|
||||||
|
|
||||||
<p class="css_not_available_msg bg-danger" style="padding: 15px;">Product not available</p>
|
|
||||||
|
|
||||||
<a t-if="not optional_product_ids" class="btn btn-primary btn-lg mt8 a-submit js_check_product">Add to Cart</a>
|
|
||||||
<a t-if="optional_product_ids" class="btn btn-primary btn-lg mt8 js_check_product" href="#" data-toggle="modal" data-target="#modal_optional_products">Add to Cart</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template id="variants">
|
<template id="variants">
|
||||||
<ul t-attf-class="nav nav-pills js_add_cart_variants #{ul_class}" t-att-data-attribute_value_ids="[[p.id, map(int, p.attribute_value_ids), p.price] for p in product.product_variant_ids]">
|
<ul t-attf-class="list-unstyled js_add_cart_variants #{ul_class}" t-att-data-attribute_value_ids="[[p.id, map(int, p.attribute_value_ids), p.price] for p in product.product_variant_ids]">
|
||||||
<t t-foreach="product.attribute_line_ids" t-as="variant_id">
|
<t t-foreach="product.attribute_line_ids" t-as="variant_id">
|
||||||
<li t-if="len(variant_id.value_ids) > 1">
|
<li t-if="len(variant_id.value_ids) > 1">
|
||||||
|
|
||||||
|
@ -862,7 +904,7 @@
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan="2">Suggested products</th>
|
<th colspan="4">Suggested products</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
Loading…
Reference in New Issue