[WIP] nfu_ecommerce: add max_qty to Product Configurator
This commit is contained in:
parent
1544065c45
commit
7743649824
4 changed files with 99 additions and 9 deletions
|
|
@ -6,12 +6,18 @@
|
||||||
"category": "website",
|
"category": "website",
|
||||||
"version": "16.0.1.2.0",
|
"version": "16.0.1.2.0",
|
||||||
"depends": [
|
"depends": [
|
||||||
|
"sale_product_configurator",
|
||||||
"website_sale",
|
"website_sale",
|
||||||
"nfu_sale_order_batch_packaging",
|
"nfu_sale_order_batch_packaging",
|
||||||
"website_decimal_quantity",
|
"website_decimal_quantity",
|
||||||
"nfu_product_bnn_attributes",
|
"nfu_product_bnn_attributes",
|
||||||
],
|
],
|
||||||
"data": ["views/product_template_views.xml", "views/templates.xml"],
|
"data": ["views/product_template_views.xml", "views/templates.xml"],
|
||||||
"assets": {"web.assets_frontend": ["nfu_ecommerce/static/src/js/website_sale.js"]},
|
"assets": {
|
||||||
|
"web.assets_frontend": [
|
||||||
|
"nfu_ecommerce/static/src/js/website_sale.js",
|
||||||
|
"nfu_ecommerce/static/src/js/sale_product_configurator.js",
|
||||||
|
]
|
||||||
|
},
|
||||||
"license": "LGPL-3",
|
"license": "LGPL-3",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
37
nfu_ecommerce/static/src/js/sale_product_configurator.js
Normal file
37
nfu_ecommerce/static/src/js/sale_product_configurator.js
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
odoo.define("nfu_ecommerce.sale_product_configurator", function (require) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var ProductConfiguratorMixin = require("sale_product_configurator.ProductConfiguratorMixin");
|
||||||
|
var publicWidget = require("web.public.widget");
|
||||||
|
|
||||||
|
publicWidget.registry.ProductConfigurator = publicWidget.Widget.extend(ProductConfiguratorMixin, {
|
||||||
|
selector: ".oe_website_sale",
|
||||||
|
events: _.extend({}, publicWidget.Widget.prototype.events, {
|
||||||
|
'change input[name="add_max_qty"]': "_onChangeAddMaxQty",
|
||||||
|
}),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @param {Event} ev
|
||||||
|
*/
|
||||||
|
_onChangeAddMaxQty: function (ev) {
|
||||||
|
var $input = $(ev.currentTarget);
|
||||||
|
var lineId = $input.data("line-id");
|
||||||
|
var productId = $input.data("product-id");
|
||||||
|
var addMaxQty = $input.val();
|
||||||
|
|
||||||
|
this._rpc({
|
||||||
|
route: "/shop/cart/update",
|
||||||
|
params: {
|
||||||
|
line_id: lineId,
|
||||||
|
product_id: productId,
|
||||||
|
add_max_qty: addMaxQty,
|
||||||
|
},
|
||||||
|
}).then(function (result) {
|
||||||
|
if (result) {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -4,6 +4,11 @@ odoo.define("nfu_ecommerce.website_max_qty", function (require) {
|
||||||
var wSaleUtils = require("website_sale.utils");
|
var wSaleUtils = require("website_sale.utils");
|
||||||
var publicWidget = require("web.public.widget");
|
var publicWidget = require("web.public.widget");
|
||||||
require("website_sale.website_sale");
|
require("website_sale.website_sale");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ToDO att_submitForm methode overwrite
|
||||||
|
* see Cybros addon for example
|
||||||
|
*/
|
||||||
publicWidget.registry.WebsiteSale.include({
|
publicWidget.registry.WebsiteSale.include({
|
||||||
/**
|
/**
|
||||||
* Adds the max qty to the POST request when adding a product to the cart.
|
* Adds the max qty to the POST request when adding a product to the cart.
|
||||||
|
|
@ -15,8 +20,8 @@ odoo.define("nfu_ecommerce.website_max_qty", function (require) {
|
||||||
productIDs.push($(elem).find("span[data-product-id]").data("product-id"));
|
productIDs.push($(elem).find("span[data-product-id]").data("product-id"));
|
||||||
});
|
});
|
||||||
$input.data("update_change", true);
|
$input.data("update_change", true);
|
||||||
var max_qty = parseFloat($input.closest("tr").find('input[name="max-qty"]').val(), 10);
|
var max_qty = parseFloat($input.closest("tr").find('input[name="max-qty"]').val());
|
||||||
var set_qty = parseFloat($input.closest("tr").find('input[name!="max-qty"]').val(), 10);
|
var set_qty = parseFloat($input.closest("tr").find('input[name!="max-qty"]').val());
|
||||||
if (max_qty < set_qty) {
|
if (max_qty < set_qty) {
|
||||||
max_qty = set_qty;
|
max_qty = set_qty;
|
||||||
}
|
}
|
||||||
|
|
@ -30,7 +35,7 @@ odoo.define("nfu_ecommerce.website_max_qty", function (require) {
|
||||||
},
|
},
|
||||||
}).then(function (data) {
|
}).then(function (data) {
|
||||||
$input.data("update_change", false);
|
$input.data("update_change", false);
|
||||||
var check_value = parseFloat($input.val() || 0, 10);
|
var check_value = parseFloat($input.val() || 0);
|
||||||
if (isNaN(check_value)) {
|
if (isNaN(check_value)) {
|
||||||
check_value = 1;
|
check_value = 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,20 @@
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<template id="products_open_packaging" inherit_id="website_sale.products">
|
<template id="products_open_packaging" inherit_id="website_sale.products">
|
||||||
<xpath expr="//aside[@id='products_grid_before']/div[1]/div[1]" position="before">
|
<xpath expr="//div[hasclass('products_attributes_filters')]" position="after">
|
||||||
|
<div class="mt-3">
|
||||||
<a t-att-href="keep('/shop',open_packagings = False if open_packagings else True)">
|
<a t-att-href="keep('/shop',open_packagings = False if open_packagings else True)">
|
||||||
<h6 t-attf-class="o_packaging_collapse_title mb-3 {{_titleClasses}}"><b>
|
<h6 t-attf-class="o_packaging_collapse_title mb-3 {{_titleClasses}}"><b>
|
||||||
<span t-if="open_packagings">All Products</span>
|
<span t-if="open_packagings">All Products</span>
|
||||||
<span t-else="">Open Packagings</span>
|
<span t-else="">Open Packagings</span>
|
||||||
</b></h6>
|
</b></h6>
|
||||||
</a>
|
</a>
|
||||||
|
</div>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template id="o_wsale_offcanvas" name="Open Packagings" inherit_id="website_sale.o_wsale_offcanvas">
|
<template id="o_wsale_offcanvas" name="Open Packagings" inherit_id="website_sale.o_wsale_offcanvas">
|
||||||
<xpath expr="//div[@id='o_wsale_offcanvas_content']/div[1]" position="before">
|
<xpath expr="//t[@t-call='website_sale.filter_products_price']" position="before">
|
||||||
<div class="position-relative o_wsale_offcanvas_title px-4 border-top">
|
<div class="position-relative o_wsale_offcanvas_title px-4 border-top">
|
||||||
<a t-att-href="keep('/shop',open_packagings = False if open_packagings else True)">
|
<a t-att-href="keep('/shop',open_packagings = False if open_packagings else True)">
|
||||||
<h6 t-attf-class="o_packaging_collapse_title mb-3 pt-3 {{_titleClasses}}"><b>
|
<h6 t-attf-class="o_packaging_collapse_title mb-3 pt-3 {{_titleClasses}}"><b>
|
||||||
|
|
@ -79,6 +81,35 @@
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template id="product_max_quantity_config">
|
||||||
|
<div class="css_quantity input-group">
|
||||||
|
<button
|
||||||
|
t-attf-href="#"
|
||||||
|
class="btn btn-primary float_left js_add_cart_json d-none d-md-inline-block"
|
||||||
|
aria-label="Remove one"
|
||||||
|
title="Remove one"
|
||||||
|
>
|
||||||
|
<i class="fa fa-minus"/>
|
||||||
|
</button>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
class="js_quantity form-control quantity text-center"
|
||||||
|
style="max-width: 4rem"
|
||||||
|
data-min="1"
|
||||||
|
name="add_max_qty"
|
||||||
|
t-att-value="add_max_qty or 1"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
t-attf-href="#"
|
||||||
|
class="btn btn-primary float_left js_add_cart_json d-none d-md-inline-block"
|
||||||
|
aria-label="Add one"
|
||||||
|
title="Add one"
|
||||||
|
>
|
||||||
|
<i class="fa fa-plus"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template id="cart_lines_packaging" inherit_id="website_sale.cart_lines" name="Shopping Cart Lines">
|
<template id="cart_lines_packaging" inherit_id="website_sale.cart_lines" name="Shopping Cart Lines">
|
||||||
<xpath expr="//td[hasclass('td-product_name')]" position="inside">
|
<xpath expr="//td[hasclass('td-product_name')]" position="inside">
|
||||||
<div t-if="line.product_packaging_id and (line.product_packaging_id.qty != 1)">
|
<div t-if="line.product_packaging_id and (line.product_packaging_id.qty != 1)">
|
||||||
|
|
@ -168,6 +199,17 @@
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template id="configure_optional_products" inherit_id="sale_product_configurator.configure_optional_products">
|
||||||
|
<xpath expr="//th[hasclass('td-qty')]" position="after">
|
||||||
|
<th class="text-center td-max-qty"><span class='label'>Max Quantity</span></th>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//td[hasclass('td-qty')]" position="after">
|
||||||
|
<td class="text-center td-max-qty">
|
||||||
|
<t t-call='nfu_ecommerce.product_max_quantity_config'/>
|
||||||
|
</td>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template id="cart_summary_packaging" inherit_id="website_sale.cart_summary" name="Cart right column">
|
<template id="cart_summary_packaging" inherit_id="website_sale.cart_summary" name="Cart right column">
|
||||||
<xpath expr="//td[hasclass('td-product_name')]" position="inside">
|
<xpath expr="//td[hasclass('td-product_name')]" position="inside">
|
||||||
<div t-if="line.product_packaging_id and (line.product_packaging_id.qty != 1)">
|
<div t-if="line.product_packaging_id and (line.product_packaging_id.qty != 1)">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue