nfu/nfu_ecommerce/static/src/js/website_sale.js
2024-07-27 00:36:18 +02:00

83 lines
3.5 KiB
JavaScript

odoo.define("nfu_ecommerce.website_min_max_qty", function (require) {
"use strict";
var core = require("web.core");
var _t = core._t;
var wSaleUtils = require("website_sale.utils");
var publicWidget = require("web.public.widget");
require("website_sale.website_sale");
publicWidget.registry.WebsiteSale.include({
onClickAddCartJSON: function (ev) {
ev.preventDefault();
$(".css_quantity").popover("dispose");
var $link = $(ev.currentTarget);
var $input = $link.closest(".input-group").find("input");
var min = parseFloat($input.data("min") || 0);
var previousQty = parseFloat($input.val() || 0, 10);
var quantity = ($link.has(".fa-minus").length ? -1 : 1) + previousQty;
if (quantity < min) {
$input.closest(".css_quantity").popover({
content: _t(`Minimum Quantity is ${min}.`),
title: _t("Warning"),
placement: "left",
trigger: "focus",
html: true,
});
$input.closest(".css_quantity").popover("show");
setTimeout(function () {
$(".css_quantity").popover("dispose");
}, 3000);
}
this._super(ev);
},
/**
* Adds the max qty to the POST request when adding a product to the cart.
* @override
*/
_changeCartQuantity: function ($input, value, $dom_optional, line_id, productIDs) {
_.each($dom_optional, function (elem) {
$(elem).find(".js_quantity").text(value);
productIDs.push($(elem).find("span[data-product-id]").data("product-id"));
});
$input.data("update_change", true);
var max_qty = parseInt($input.closest("tr").find('input[name="max-qty"]').val(), 10);
var set_qty = parseInt($input.closest("tr").find('input[name!="max-qty"]').val(), 10);
if (max_qty < set_qty) {
max_qty = set_qty;
}
this._rpc({
route: "/shop/cart/update_json",
params: {
line_id: line_id,
product_id: parseInt($input.data("product-id"), 10),
set_qty: set_qty,
max_qty: max_qty,
},
}).then(function (data) {
$input.data("update_change", false);
var check_value = parseInt($input.val() || 0, 10);
if (isNaN(check_value)) {
check_value = 1;
}
if (value !== check_value) {
$input.trigger("change");
return;
}
sessionStorage.setItem("website_sale_cart_quantity", data.cart_quantity);
if (!data.cart_quantity) {
return (window.location = "/shop/cart");
}
$input.val(data.quantity);
$(".js_quantity[data-line-id=" + line_id + "]")
.val(data.quantity)
.text(data.quantity);
wSaleUtils.updateCartNavBar(data);
wSaleUtils.showWarning(data.warning);
// Propagating the change to the express checkout forms
core.bus.trigger("cart_amount_changed", data.amount, data.minor_amount);
});
},
});
});