From 77436498241c29e2b606f4729e909532bbde6e40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20G=C3=B6ttsch?= Date: Fri, 14 Feb 2025 11:39:18 +0100 Subject: [PATCH] [WIP] nfu_ecommerce: add max_qty to Product Configurator --- nfu_ecommerce/__manifest__.py | 8 +++- .../src/js/sale_product_configurator.js | 37 +++++++++++++++ nfu_ecommerce/static/src/js/website_sale.js | 17 ++++--- nfu_ecommerce/views/templates.xml | 46 ++++++++++++++++++- 4 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 nfu_ecommerce/static/src/js/sale_product_configurator.js diff --git a/nfu_ecommerce/__manifest__.py b/nfu_ecommerce/__manifest__.py index 28cbf67..66fca5a 100644 --- a/nfu_ecommerce/__manifest__.py +++ b/nfu_ecommerce/__manifest__.py @@ -6,12 +6,18 @@ "category": "website", "version": "16.0.1.2.0", "depends": [ + "sale_product_configurator", "website_sale", "nfu_sale_order_batch_packaging", "website_decimal_quantity", "nfu_product_bnn_attributes", ], "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", } diff --git a/nfu_ecommerce/static/src/js/sale_product_configurator.js b/nfu_ecommerce/static/src/js/sale_product_configurator.js new file mode 100644 index 0000000..d93c63e --- /dev/null +++ b/nfu_ecommerce/static/src/js/sale_product_configurator.js @@ -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(); + } + }); + }, + }); +}); diff --git a/nfu_ecommerce/static/src/js/website_sale.js b/nfu_ecommerce/static/src/js/website_sale.js index bd67cf3..0dd23fc 100644 --- a/nfu_ecommerce/static/src/js/website_sale.js +++ b/nfu_ecommerce/static/src/js/website_sale.js @@ -4,6 +4,11 @@ odoo.define("nfu_ecommerce.website_max_qty", function (require) { var wSaleUtils = require("website_sale.utils"); var publicWidget = require("web.public.widget"); require("website_sale.website_sale"); + + /** + * ToDO att_submitForm methode overwrite + * see Cybros addon for example + */ publicWidget.registry.WebsiteSale.include({ /** * 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")); }); $input.data("update_change", true); - var max_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(), 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()); if (max_qty < set_qty) { max_qty = set_qty; } @@ -30,7 +35,7 @@ odoo.define("nfu_ecommerce.website_max_qty", function (require) { }, }).then(function (data) { $input.data("update_change", false); - var check_value = parseFloat($input.val() || 0, 10); + var check_value = parseFloat($input.val() || 0); if (isNaN(check_value)) { check_value = 1; } @@ -44,9 +49,9 @@ odoo.define("nfu_ecommerce.website_max_qty", function (require) { } $input.val(data.quantity); $(".js_quantity[data-line-id=" + line_id + "]") - .val(data.quantity) - .text(data.quantity); - + .val(data.quantity) + .text(data.quantity); + wSaleUtils.updateCartNavBar(data); wSaleUtils.showWarning(data.warning); // Propagating the change to the express checkout forms diff --git a/nfu_ecommerce/views/templates.xml b/nfu_ecommerce/views/templates.xml index 4cb7083..452643e 100644 --- a/nfu_ecommerce/views/templates.xml +++ b/nfu_ecommerce/views/templates.xml @@ -2,18 +2,20 @@ + + + +