odoo.define('website_decimal_qty.website_sale', function (require) { 'use strict'; var publicWidget = require('web.public.widget'); var wSaleUtils = require('website_sale.utils'); const dom = require('web.dom'); require('website_sale.website_sale'); /** * This module extends the website_sale module to support decimal quantity input for adding products to the cart. * It overrides the onClickAddCartJSON function from sale.VariantMixin to add support for decimal quantity input, * and extends the WebsiteSale widget to handle updating cart quantities when a decimal quantity is entered. */ publicWidget.registry.WebsiteSale.include({ /**Override the function _changeCartQuantity to set decimal qty **/ _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); this._rpc({ route: "/shop/cart/update_json", params: { line_id: line_id, product_id: parseInt($input.data('product-id'), 10), set_qty: value }, }).then(function (data) { $input.data('update_change', false); var check_value = parseFloat($input.val()); if (isNaN(check_value)) { check_value = 1; } if (value !== check_value) { $input.trigger('change'); return; } if (!data.cart_quantity) { return window.location = '/shop/cart'; } wSaleUtils.updateCartNavBar(data); $input.val(data.quantity); $('.js_quantity[data-line-id='+line_id+']').val(data.quantity).text(data.quantity); if (data.warning) { var cart_alert = $('.oe_cart').parent().find('#data_warning'); if (cart_alert.length === 0) { $('.oe_cart').prepend('