import { useCallback, useEffect, useRef, useState } from 'react'; import { shallowEqual, useDispatch, useSelector } from 'react-redux'; import { DefaultModal } from '../../../../../Components/Modal/DefaultModal'; import FormHeader from '../../../../PageComponents/FormHeader.jsx'; import { Form } from 'antd'; import { GlobalOrderCardDetails, changeOrderCardDetails, changeHoldOrderDtl, changePreviousOrderLength, GlobalOrderType, GlobalReorderProductDetails, PreferenceData, getConfigType, } from '../../../../../Features/BookingScreen/BookingData/BookingData'; import { ArrowRightOutlined } from '@ant-design/icons'; import { Messages } from '../../../../../Components/Notifications/Messages'; import '../../../../../Styles/BookingScreen/Components/BSBillingTables/BSBillingEditQuantity/BSBillingEditQuantity.scss'; import { settingDataSelector } from '../../../../../Features/PreferenceMaster/PreferenceMaster.js'; import { RadioGrpButton } from '../../../../../Components/Forms/RadioGroup.jsx'; import Buttons from '../../../../../Components/Forms/Buttons.jsx'; import { InputField } from '../../../../../Components/Forms/InputField.jsx'; import { useApplyOfferto_CardDetail } from '../../UtillComponents/BSNavBarOffer/BSNavBarOffer_CustomHooks.jsx'; import { getTemplateData, StoredSessionData, } from '../../../../../Features/ThemeChange/ThemeChange.js'; import { validateSafeInput } from '../../../../../Services/Others.js'; import { GlobalEmpAccessDetail } from '../../../../../Features/AppPage/CenterPage.js'; import Packing from './BSPacking.jsx'; // import { ApplicationPreferences } from '../../../../../Features/BrachLogin/BranchLogin.js'; import { ChangeFullFreeProductList, changeFullOfferAppliedProducts, ChangeOfferAppliedProducts, changeOfferAppliedProductsForLoyalty, GlobalFreeProdList, GlobalOfferAppliedProducts, RemoveOfferAppliedProduct, } from '../../../../../Features/Offer/Offernew/BookingOffernew.js'; import { validateOffers } from '../../BSItemCards/ValidateOffer.jsx'; import { v4 as uuidv4 } from 'uuid'; import WeightCalculatePrice from './WeightCalculatePrice.jsx'; const BSBillingEditQuantity = (props) => { const dispatch = useDispatch(); const formRef = useRef(null); const quantityInputRef = useRef(null); const priceChangeInputRef = useRef(null); const reductionInputRef = useRef(null); const { setIndex = () => {} } = props; const [disableSubmitButton, setDisableSubmitButton] = useState(false); const SessionData = useSelector(StoredSessionData); // const AppId = SessionData?.AppId; // const CompId = SessionData?.CompId; // const BranchId = SessionData?.BranchId; const UserType = SessionData?.UserType; const applyOffer = useApplyOfferto_CardDetail(); const preferenceDatas = useSelector(PreferenceData); const EmpAccessDetail = useSelector(GlobalEmpAccessDetail); const OverAllproductBasedOfferDatas = useSelector( (state) => state?.BookingOFferNew?.OverAllProductBasedProducts, shallowEqual ); const preferenceOffer = preferenceDatas?.[0]?.['SettingDtlDetails']?.find( (item) => item.SettingIdName === 'Offer' )?.SettingValue === 'Y'; const preferenceshortcutkey = preferenceDatas?.[0]?.[ 'SettingDtlDetails' ]?.some( (item) => item.SettingIdName.toLowerCase() === 'shortcutkeys' && item.SettingValue === 'Y' ); console.log(preferenceshortcutkey, 'preferenceshortcutkey'); const [PriceChangeaccess, setPriceChangeaccess] = useState(true); const [ConfigDataList, setConfigDataList] = useState([]); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [EditOpen, setEditOpen] = useState(props?.BSBillingEditQuantity); const [ItemData, setItemData] = useState(props?.Productdata); const [Quantity, setQuantity] = useState( props?.Productdata?.ScaleType !== 'weight' ? parseInt(props.Productdata.OrderQty) : props.Productdata.OrderQty ); const ReorderProductData = useSelector(GlobalReorderProductDetails); const templateData = useSelector(getTemplateData); const OfferCheckedInSetup = templateData?.BookingNavbar?.[1].some( (item) => item?.OptionName == 'Offer' ) || templateData?.BookingCombo1?.[1]?.some( (item) => item?.OptionName == 'Offer' ); const [ClearQuantity, setClearQuantity] = useState(false); const CartOrderDetails = useSelector(GlobalOrderCardDetails); const SettingDataSelector = useSelector(PreferenceData); const OrderType = useSelector(GlobalOrderType); const [BillOrderPre, setBillOrderPre] = useState(null); const [RadioBtnSelection, setRadioBtnSelection] = useState( props?.shortKeyMethod == 'price' ? 'Price' : ItemData?.ScaleType !== 'weight' ? 'Quantity' : PriceChangeaccess ? 'Price' : 'Parcel' ); const [PercentageSelection, setPercentageSelection] = useState('Fixed'); const [RadioDetails, setRadioDetails] = useState(false); const [editedPrice, setEditedPrice] = useState(0); const allowDecimal = preferenceDatas?.[0]?.SettingDtlDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'decimal' && setting?.SettingValue === 'Y' ); const [PackageDtl, setPackageDtl] = useState([]); // const appPreferences = useSelector(ApplicationPreferences); // const bookingTypePreference = appPreferences?.find((preference) => preference?.PreferredCatName === 'Booking Type')?.PreferenceCatDetails // const dinePreference = bookingTypePreference?.find((type) => type?.PreferredSubCatName?.toLowerCase() === "dine in" && type?.PreferredStatus === 'Y') // const takeAwayPreference = bookingTypePreference?.find((type) => type?.PreferredSubCatName?.toLowerCase() === "take away" && type?.PreferredStatus === 'Y') const OfferAppliedProducts = useSelector( GlobalOfferAppliedProducts, shallowEqual ); const FreeProdList = useSelector(GlobalFreeProdList); console.log(CartOrderDetails, 'CartOrderDetails'); const TakAwayId = ConfigDataList?.find( (a) => a?.ConfigName === 'TakeAway' )?.ConfigId; const DineinId = ConfigDataList?.find( (a) => a?.ConfigName === 'Dine In' )?.ConfigId; const hasOffer = preferenceOffer && OfferCheckedInSetup; useEffect(() => { if (ConfigDataList?.length === 0) { getBookingTypeId(); } }, []); useEffect( () => { setEditOpen(props.BSBillingEditQuantity); setItemData(props.Productdata); setQuantity( props?.Productdata?.ScaleType !== 'weight' ? parseInt(props.Productdata.OrderQty) : props.Productdata.OrderQty ); }, [props.BSBillingEditQuantity], [props.Productdata] ); useEffect(() => { if (preferenceshortcutkey) { if (props.BSBillingEditQuantity && RadioBtnSelection === 'Quantity') { setTimeout(() => { quantityInputRef.current?.focus(); }, 100); } if (props.BSBillingEditQuantity && RadioBtnSelection === 'Price') { setTimeout(() => { if (RadioDetails) { const inputElement = reductionInputRef.current?.querySelector('input'); inputElement?.focus(); } else { const inputElement = priceChangeInputRef.current?.querySelector('input'); inputElement?.focus(); } }, 100); } } }, [ RadioBtnSelection, props.BSBillingEditQuantity, RadioDetails, preferenceshortcutkey, ]); useEffect(() => { const handleKeyDown = (event) => { if (preferenceshortcutkey && event.shiftKey && event.key === 'E') { event.preventDefault(); if (PriceChangeaccess && props.Productdata?.Offer <= 0) { onRadioBtnChange('Price'); } } }; if (EditOpen) { document.addEventListener('keydown', handleKeyDown); } return () => { document.removeEventListener('keydown', handleKeyDown); }; }, [ EditOpen, preferenceshortcutkey, PriceChangeaccess, props.Productdata?.Offer, ]); useEffect(() => { const BillOrder = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (item) => item.SettingIdName === 'BillItemsOrder' ); setBillOrderPre(BillOrder?.SettingValue); }, []); useEffect(() => { if (UserType == 'Employee') { const Pricechange = EmpAccessDetail?.filter( (item) => item.ConfigName === 'Sales Discount' ); setPriceChangeaccess(Pricechange?.[0]?.AddAccess != 'Y' ? false : true); } }, [EmpAccessDetail]); useEffect(() => { if (PackageDtl.length > 0) { AddProductQuantity(); } }, [PackageDtl]); const getBookingTypeId = async () => { let tempconfigdata = await dispatch( getConfigType({ TypeName: 'Booking Type' }) ).unwrap(); if (tempconfigdata?.data?.statusCode == 1) { setConfigDataList(tempconfigdata?.data?.data); } }; function safeRound(amountStr) { if (amountStr == null) return allowDecimal ? '0.00' : '0'; const cleaned = String(amountStr).replace(/[^0-9.-]+/g, ''); const num = Number(cleaned); if (isNaN(num)) return allowDecimal ? '0.00' : '0'; return allowDecimal ? num.toFixed(2) : Math.round(num).toString(); } const AddQuantity = (value) => { if (ClearQuantity === false) { setQuantity(value); setClearQuantity(true); } else { setQuantity(Quantity.toString() + value.toString()); if (Quantity?.length > 10) { setMessageType('error'); setMessageData('Quantity is to long'); setQuantity(''); } } }; const Removevalue = () => { let tempremovedata = Quantity.toString().substring(0, Quantity?.length - 1); setQuantity(tempremovedata); }; const openRadioDetails = () => { setDisableSubmitButton(false); setRadioDetails(!RadioDetails); setEditedPrice(0); }; // const AddQuantityonly = () => { // setMessageType('success'); // setMessageData('Quantity Added'); // }; const createUpdatedCartItem = (cartItem, quantity, newPrice) => { const qty = parseInt(quantity); const rate = parseFloat(newPrice); const offerType = cartItem?.OfferType; const offerPrice = cartItem?.OfferPrice || 0; const taxPercent = cartItem?.TaxPercentage || 0; const baseAmount = qty * rate; const offerValue = offerType === 'F' ? qty * offerPrice : (baseAmount * offerPrice) / 100; const totalAmt = cartItem?.OfferPrice > 0 ? baseAmount - offerValue : baseAmount; const taxAmt = (baseAmount * taxPercent) / (100 + taxPercent); const withoutTax = baseAmount - taxAmt; return { ...cartItem, OrderQty: qty, OrderRate: rate, TotalAmt: totalAmt, OfferValue: offerValue, TaxAmt: taxAmt.toFixed(2), WithoutTaxRate: withoutTax.toFixed(2), PackageDtl: PackageDtl, }; }; const calculateOverAllQty = (item, filterItems) => { if (!item) return 0; const totalUsedQty = filterItems?.reduce((acc, card) => { if (card?.StockAvailable !== 'Y') return acc; const isSinglePcItem = item?.SinglePc === 'Y'; const isSinglePcCard = card?.SinglePc === 'Y'; let qty = 0; if (isSinglePcItem) { qty = isSinglePcCard ? card.OrderQty : card.OrderQty * card.NoOfPcs; } else { if (isSinglePcCard) { const remainder = card?.OverAllPcs % card?.NoOfPcs; qty = remainder >= card?.OrderQty ? 0 : Math.ceil(card?.OrderQty / card?.NoOfPcs); } else { qty = card.OrderQty; } } return acc + qty; }, 0) || 0; const availableQty = item?.SinglePc === 'Y' ? item?.OverAllPcs : item?.BalanceQty; return availableQty - totalUsedQty; }; const MergecardItem = (cartItem, BillOrderPre, OtherorderDataforNormal) => { const updatedCart = {}; let updatedItemKey = null; // Add existing items to the map OtherorderDataforNormal?.forEach((item) => { const key = `${item?.ProdId}-${item?.InwardDtlId}-${item?.BookingTypeName}-${item?.OrderRate}`; if (!updatedCart[key]) { updatedCart[key] = { ...item }; } }); // Merge or add new item const key = `${cartItem?.ProdId}-${cartItem?.InwardDtlId}-${cartItem?.BookingTypeName}-${cartItem?.OrderRate}`; if (updatedCart[key]) { updatedCart[key].OrderQty += cartItem?.OrderQty; } else { updatedCart[key] = { ...cartItem }; } updatedItemKey = key; // Recalculate total amounts Object.values(updatedCart).forEach((item) => { const orderQty = item.OrderQty; const orderRate = item.OrderRate; const taxPercentage = item?.TaxPercentage || 0; item.TotalAmt = orderQty * orderRate; item.TaxAmt = ( (orderQty * orderRate * taxPercentage) / (100 + taxPercentage) ).toFixed(2); item.WithoutTaxRate = orderQty * orderRate - parseFloat(item.TaxAmt); }); let updatedArray = Object.values(updatedCart); // Ensure updated item appears first if (BillOrderPre === 'Y' && updatedItemKey) { const updatedItem = updatedCart[updatedItemKey]; updatedArray = [ updatedItem, ...updatedArray?.filter((item) => item !== updatedItem), ]; } return updatedArray; }; const AddProductQuantity = async () => { let newPrice = editedPrice > 0 ? editedPrice : props.Productdata.OrderRate; await dispatch(changeHoldOrderDtl(false)); await dispatch(changePreviousOrderLength(CartOrderDetails?.length)); if ( (parseInt(Quantity) === 0 || Quantity === '') && props?.Productdata?.ScaleType !== 'weight' ) { setMessageType('error'); setMessageData('Please enter valid quantity'); setQuantity(''); } else { let localId = props.Index; const editedQty = props?.Productdata?.ScaleType !== 'weight' ? parseInt(Quantity) : props.Productdata.OrderQty; let editedProductIndex = CartOrderDetails?.findIndex( (e) => e?.localId == localId ); const editedProduct = CartOrderDetails[editedProductIndex]; const productBookingType = editedProduct?.BookingTypeName; const isItemInCart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && !cartItem?.SalesId ); // changing for one piece stock checking const isItemInCartfilter = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate !== editedProduct?.OrderRate && !cartItem?.SalesId ); const isItemInCartHold = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName === editedProduct?.BookingTypeName ); // check if the item is already in the cart const isItemInCartHoldfilter = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && !( (cartItem?.OrderRate === editedProduct?.OrderRate) // && cartItem?.BookingTypeName === editedProduct?.BookingTypeName ) ); if ( (isItemInCart && productBookingType !== 'Dine In' && OrderType != 'Hold') || (isItemInCart && productBookingType === 'Dine In' && OrderType != 'Hold') ) { // let onePcsQtyOther = 0; // if (editedProduct?.SinglePc === 'Y') { // // check if there is same rate product in other booking type // const sameRateProductInOtherBookingType = CartOrderDetails?.find( // (cartItem) => // cartItem?.ProdId === editedProduct?.ProdId && // cartItem?.InwardDtlId === editedProduct?.InwardDtlId && // cartItem?.OrderRate === editedProduct?.OrderRate && // cartItem?.BookingTypeName !== editedProduct?.BookingTypeName && // !cartItem?.SalesId // ) // if (sameRateProductInOtherBookingType?.StockAvailable === 'Y') { // onePcsQtyOther = sameRateProductInOtherBookingType?.OrderQty; // } // } const overAllQuantity = calculateOverAllQty( isItemInCart, isItemInCartfilter ); let totalUsedQty = 0; const sameProductInOtherBookingType = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName !== editedProduct?.BookingTypeName && !cartItem?.SalesId ); if (editedProduct?.Offer > 0) { // check same product available in paid product const sameProductAsPaidInSameBookingType = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && !cartItem?.SalesId && !cartItem?.OfferMode && cartItem?.Offer === 0 ); if (sameProductAsPaidInSameBookingType?.length > 0) { const stockAvailable = sameProductAsPaidInSameBookingType?.some( (item) => item?.StockAvailable === 'Y' ); if (stockAvailable) { totalUsedQty = sameProductAsPaidInSameBookingType?.reduce( (acc, item) => { if (item?.StockAvailable === 'Y') { return acc + parseInt(item?.OrderQty); } return acc; }, 0 ); } } } else if (!editedProduct?.Offer) { const sameProductAsFree = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && !cartItem?.SalesId && cartItem?.Offer > 0 && cartItem?.OfferMode ); if (sameProductAsFree?.length > 0) { const stockAvailable = sameProductAsFree?.some( (item) => item?.StockAvailable === 'Y' ); if (stockAvailable) { totalUsedQty = sameProductAsFree?.reduce((acc, item) => { if (item?.StockAvailable === 'Y') { return acc + parseInt(item?.OrderQty); } return acc; }, 0); } } } if (sameProductInOtherBookingType?.length > 0) { const stockAvailable = sameProductInOtherBookingType?.some( (item) => item?.StockAvailable === 'Y' ); if (stockAvailable) { totalUsedQty += sameProductInOtherBookingType?.reduce( (acc, item) => { if (item?.StockAvailable === 'Y') { return acc + parseInt(item?.OrderQty); } return acc; }, 0 ); } } if ( overAllQuantity < editedQty + (totalUsedQty || 0) && isItemInCart?.StockAvailable === 'Y' ) { setMessageType('error'); setMessageData('Stock Not Available'); return; } } else if (isItemInCartHold && OrderType === 'Hold') { const holddataproduct = ReorderProductData?.filter( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId ); let totalSelectedProductQty = holddataproduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? editedProduct?.SinglePc === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : card.SinglePc !== 'Y' ? card.OrderQty : card.OverAllPcs % card.NoOfPcs >= card.OrderQty ? 0 : card.OrderQty % card.NoOfPcs === 0 ? Math.floor(card.OrderQty / card.NoOfPcs) : Math.floor(card.OrderQty / card.NoOfPcs) + 1 : 0 ) ); }, 0 ); let totalUsedQty = 0; const sameProductInOtherBookingType = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName !== editedProduct?.BookingTypeName ); if (editedProduct?.Offer > 0) { // check same product available in paid product const sameProductAsPaid = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && !cartItem?.OfferMode && cartItem?.Offer === 0 ); if (sameProductAsPaid?.StockAvailable === 'Y') { totalUsedQty = sameProductAsPaid?.OrderQty; } } else if (!editedProduct?.Offer) { const sameProductAsFree = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && cartItem?.Offer > 0 && cartItem?.OfferMode ); if (sameProductAsFree?.StockAvailable === 'Y') { totalUsedQty = sameProductAsFree?.OrderQty; } } if (sameProductInOtherBookingType?.length > 0) { const stockAvailable = sameProductInOtherBookingType?.some( (item) => item?.StockAvailable === 'Y' ); if (stockAvailable) { totalUsedQty += sameProductInOtherBookingType?.reduce( (acc, item) => { if (item?.StockAvailable === 'Y') { return acc + parseInt(item?.OrderQty); } return acc; }, 0 ); } } let overAllQuantityHold = calculateOverAllQty(isItemInCartHold, isItemInCartHoldfilter) + totalSelectedProductQty; if ( isItemInCartHold?.StockAvailable === 'Y' && overAllQuantityHold < editedQty + (totalUsedQty || 0) ) { setMessageType('error'); setMessageData('Stock Not Available'); return; } } await handleEditQuantity(editedProduct, editedProductIndex, newPrice); props.handleEditQuantityCancel(); setClearQuantity(false); } setIndex(null); }; const handleEditQuantity = async ( editedProduct, editedProductIndex, newPrice, overrideQty = null ) => { const editedQty = overrideQty !== null ? overrideQty : props?.Productdata?.ScaleType !== 'weight' ? parseInt(Quantity) : props.Productdata.OrderQty; const addFirst = BillOrderPre === 'Y'; const isExistsInFreeProdList = FreeProdList?.find( (product) => product?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) && editedProduct?.OfferMessage?.[0]?.OfferId === product?.OfferId && editedProduct?.OfferMode === product?.OfferMode ); console.log(FreeProdList, 'FreeProdList'); if ( isExistsInFreeProdList && editedProduct?.Offer > 0 && hasOffer && editedProduct?.SinglePc !== 'Y' ) { const freeProductInOtherBooking = CartOrderDetails?.find((cartItem) => { return ( cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OfferMessage?.[0]?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && cartItem?.OfferMode === editedProduct?.OfferMode && cartItem?.BookingTypeName !== editedProduct?.BookingTypeName ); }); const finalOrderQty = (freeProductInOtherBooking?.OrderQty || 0) + editedQty; if (isExistsInFreeProdList?.RemainingQty === 0) { // need to split the free product and paid product if (finalOrderQty > isExistsInFreeProdList?.OverAllFreeQty) { const paidQty = finalOrderQty - isExistsInFreeProdList?.OverAllFreeQty; const isAlreadyExistsInCart = CartOrderDetails?.findIndex( (cartItem) => { return ( cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && !cartItem?.OfferMode && cartItem?.Offer === 0 && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && cartItem?.OrderRate === editedProduct?.OrderRate ); } ); let updatedCart = [...CartOrderDetails]; if (isAlreadyExistsInCart !== -1) { // update the existing paid product in cart const existingItem = updatedCart[isAlreadyExistsInCart]; const updatedItem = { ...existingItem, OrderQty: existingItem?.OrderQty + paidQty, ...calculateTaxAmounts({ qty: existingItem?.OrderQty + paidQty, rate: existingItem?.OrderRate, taxPercentage: existingItem?.TaxPercentage, }), }; updatedCart?.splice(isAlreadyExistsInCart, 1); updatedCart = addFirst ? [updatedItem, ...updatedCart] : [...updatedCart, updatedItem]; } else { // add new paid product in cart const paidProduct = { localId: uuidv4(), ...editedProduct, OrderQty: paidQty, Offer: 0, OfferMode: null, OfferMessage: null, OfferType: null, ...calculateTaxAmounts({ qty: paidQty, rate: editedProduct.OrderRate, taxPercentage: editedProduct.TaxPercentage, }), }; updatedCart = addFirst ? [paidProduct, ...updatedCart] : [...updatedCart, paidProduct]; } dispatch(changeOrderCardDetails(updatedCart)); } else { // Check if there is any same product but No offer applied in OrderCardDtls in same BookingType // In Same BookingType Have Enough Free Qty Just only Update Qty in Same Booking Type OtherWise need to update in Other Booking Type Qty also if exists in Other Booking Type const isAlreadyExistsInCart = CartOrderDetails?.find((cartItem) => { return ( cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && !cartItem?.OfferMode && cartItem?.Offer === 0 ); }); const freeQtyNeeded = isExistsInFreeProdList?.OverAllFreeQty - finalOrderQty; const paidQtySame = isAlreadyExistsInCart?.OrderQty || 0; if (paidQtySame >= freeQtyNeeded) { const remainingPaidQty = (paidQtySame || 0) - freeQtyNeeded; if (remainingPaidQty === 0) { // Just need to update the Free Qty and Remove the Paid Product from Cart const updatedCart = CartOrderDetails?.filter( (cartItem) => cartItem !== isAlreadyExistsInCart ); dispatch( changeOrderCardDetails( updatedCart?.map((cartItem) => { if (cartItem === editedProduct) { return { ...cartItem, PackageDtl: PackageDtl, }; } return cartItem; }) ) ); } else { // need to update the Paid Qty to Remaining Qty const updatedCart = CartOrderDetails?.map((cartItem) => { if (cartItem === isAlreadyExistsInCart) { return { ...cartItem, OrderQty: remainingPaidQty, ...calculateTaxAmounts({ qty: remainingPaidQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), }; } return cartItem; }); dispatch(changeOrderCardDetails(updatedCart)); } } else { // check if the same product exists in other booking type as paid product // need to calculate how much qty going to be updated in other booking type and same booking type const diffBookingTypeProduct = CartOrderDetails?.find( (cartItem) => { return ( cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName !== editedProduct?.BookingTypeName && !cartItem?.OfferMode && cartItem?.Offer === 0 ); } ); const diffBookingTypeFreeProduct = CartOrderDetails?.find( (cartItem) => { return ( cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.OrderRate === editedProduct?.OrderRate && cartItem?.BookingTypeName !== editedProduct?.BookingTypeName && cartItem?.OfferMode === editedProduct?.OfferMode && cartItem?.Offer > 0 ); } ); const paidQtyOther = diffBookingTypeProduct?.OrderQty || 0; const sameBookTypeUpdateQty = freeQtyNeeded - paidQtySame; const otherBookTypePaidUpdateQty = paidQtyOther - sameBookTypeUpdateQty; const totalPaidQty = paidQtySame + paidQtyOther; if (paidQtySame || paidQtyOther) { let updatedCart = [...CartOrderDetails]; // Remove paid product in same booking type if needed if (paidQtySame) { updatedCart = updatedCart.filter( (cartItem) => cartItem !== isAlreadyExistsInCart ); updatedCart = updatedCart.map((cartItem) => { if (cartItem === editedProduct) { return { ...cartItem, OrderQty: editedQty + paidQtySame, ...calculateTaxAmounts({ qty: editedQty + paidQtySame, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), ...(cartItem?.Offer > 0 && { Offer: (editedQty + paidQtySame) * cartItem.OrderRate, }), }; } return cartItem; }); } // Remove/update paid product in other booking type if needed if (paidQtyOther) { if (otherBookTypePaidUpdateQty <= 0) { // Remove paid product from other booking type updatedCart = updatedCart.filter( (cartItem) => cartItem !== diffBookingTypeProduct ); updatedCart = updatedCart.map((cartItem) => { if (cartItem === diffBookingTypeFreeProduct) { return { ...cartItem, OrderQty: paidQtyOther + cartItem?.OrderQty, ...calculateTaxAmounts({ qty: paidQtyOther + cartItem?.OrderQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), Offer: (paidQtyOther + cartItem?.OrderQty) * cartItem?.OrderRate, }; } else if (cartItem === editedProduct) { return { ...cartItem, OrderQty: editedQty, ...calculateTaxAmounts({ qty: editedQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), Offer: editedQty * cartItem?.OrderRate, }; } return cartItem; }); } else if (otherBookTypePaidUpdateQty > 0) { updatedCart = updatedCart.map((cartItem) => { if (cartItem === diffBookingTypeFreeProduct) { return { ...cartItem, OrderQty: cartItem?.OrderQty + sameBookTypeUpdateQty, ...calculateTaxAmounts({ qty: cartItem?.OrderQty + sameBookTypeUpdateQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), Offer: (cartItem?.OrderQty + sameBookTypeUpdateQty) * cartItem?.OrderRate, }; } else if (cartItem === editedProduct) { return { ...cartItem, OrderQty: editedQty, ...calculateTaxAmounts({ qty: editedQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), Offer: editedQty * cartItem?.OrderRate, }; } else if (cartItem === diffBookingTypeProduct) { return { ...cartItem, OrderQty: otherBookTypePaidUpdateQty, ...calculateTaxAmounts({ qty: otherBookTypePaidUpdateQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), }; } return cartItem; }); } } // Only one dispatch after all updates dispatch(changeOrderCardDetails(updatedCart)); if (totalPaidQty < freeQtyNeeded) { const additionalFreeQtyNeeded = freeQtyNeeded - totalPaidQty; const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.FreeProdId === editedProduct?.ProdId && product?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) && product?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && product?.OfferMode === editedProduct?.OfferMode ) { const freeQty = product?.OverAllFreeQty - additionalFreeQtyNeeded; return { ...product, FreeQty: freeQty, RemainingQty: additionalFreeQtyNeeded, discount: freeQty * editedProduct?.OrderRate, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && offerProduct?.OfferMode === editedProduct?.OfferMode; if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; const freeQty = matchingFreeProduct?.FreeQty - additionalFreeQtyNeeded; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: freeQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: freeQty, ActualOfferAmount: freeQty * editedProduct?.OrderRate, OfferAmount: freeQty * editedProduct?.OrderRate, OfferValue: freeQty * editedProduct?.OrderRate, FreeProductsList: updatedFreeProductsList, UsedCount: freeQty * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch( changeFullOfferAppliedProducts(updatedOfferAppliedProducts) ); } } else { // no paid product exists in other booking type and same booking type // Just need to update the Free Qty in FreeProductList // Need to update the Qty in Edited Product // Need to update the FreeQty in OfferAppliedProducts await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice, true ); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.FreeProdId === editedProduct?.ProdId && product?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) && product?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && product?.OfferMode === editedProduct?.OfferMode ) { return { ...product, FreeQty: finalOrderQty, RemainingQty: product?.OverAllFreeQty - finalOrderQty, discount: finalOrderQty * editedProduct?.OrderRate, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && offerProduct?.OfferMode === editedProduct?.OfferMode; if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: finalOrderQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: finalOrderQty, ActualOfferAmount: finalOrderQty * editedProduct?.OrderRate, OfferAmount: finalOrderQty * editedProduct?.OrderRate, OfferValue: finalOrderQty * editedProduct?.OrderRate, FreeProductsList: updatedFreeProductsList, UsedCount: finalOrderQty * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch( changeFullOfferAppliedProducts(updatedOfferAppliedProducts) ); } } } } else if (isExistsInFreeProdList?.RemainingQty > 0) { // perform normal edit qty operation // console.log(editedProduct?.OrderQty, "editedProduct") // await handleNormalEditQuantity(editedProduct, editedProductIndex); if (finalOrderQty > isExistsInFreeProdList?.OverAllFreeQty) { // split paid and free product const paidProdQty = finalOrderQty - isExistsInFreeProdList?.OverAllFreeQty; const freeProdQty = editedQty - paidProdQty; const isAlreadyExistsInCart = CartOrderDetails?.findIndex( (cartItem) => { return ( cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && !cartItem?.OfferMode && cartItem?.Offer === 0 && cartItem?.BookingTypeName === editedProduct?.BookingTypeName && cartItem?.OrderRate === editedProduct?.OrderRate ); } ); let updatedCart = [...CartOrderDetails]; if (isAlreadyExistsInCart !== -1) { // update the existing paid product in cart updatedCart[isAlreadyExistsInCart] = { ...updatedCart[isAlreadyExistsInCart], OrderQty: updatedCart[isAlreadyExistsInCart]?.OrderQty + paidProdQty, ...calculateTaxAmounts({ qty: updatedCart[isAlreadyExistsInCart]?.OrderQty + paidProdQty, rate: updatedCart[isAlreadyExistsInCart]?.OrderRate, taxPercentage: updatedCart[isAlreadyExistsInCart]?.TaxPercentage, }), }; } else { // add new paid product in cart const paidProduct = { localId: uuidv4(), ...editedProduct, OrderQty: paidProdQty, Offer: 0, OfferMode: null, OfferMessage: null, OfferType: null, ...calculateTaxAmounts({ qty: paidProdQty, rate: editedProduct?.OrderRate, taxPercentage: editedProduct?.TaxPercentage, }), }; updatedCart = [...updatedCart, paidProduct]; } dispatch( changeOrderCardDetails( updatedCart?.map((prod) => { if (prod === editedProduct) { return { ...prod, OrderQty: freeProdQty, ...calculateTaxAmounts({ qty: freeProdQty, rate: prod.OrderRate, taxPercentage: prod.TaxPercentage, }), ...(prod?.Offer > 0 && { Offer: freeProdQty * prod.OrderRate, }), }; } return prod; }) ) ); } else if (finalOrderQty === isExistsInFreeProdList?.OverAllFreeQty) { // Just need to update the Qty in Edited Product and FreeProductList and OfferAppliedProducts await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice, true ); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.FreeProdId === editedProduct?.ProdId && product?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) && product?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && product?.OfferMode === editedProduct?.OfferMode ) { return { ...product, FreeQty: finalOrderQty, RemainingQty: 0, discount: finalOrderQty * editedProduct?.OrderRate, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && offerProduct?.OfferMode === editedProduct?.OfferMode; if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: finalOrderQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: finalOrderQty, ActualOfferAmount: finalOrderQty * editedProduct?.OrderRate, OfferAmount: finalOrderQty * editedProduct?.OrderRate, OfferValue: finalOrderQty * editedProduct?.OrderRate, FreeProductsList: updatedFreeProductsList, UsedCount: finalOrderQty * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch(changeFullOfferAppliedProducts(updatedOfferAppliedProducts)); } else if (finalOrderQty < isExistsInFreeProdList?.OverAllFreeQty) { // Just need to update the Qty in Edited Product and FreeProductList and OfferAppliedProducts await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice, true ); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.FreeProdId === editedProduct?.ProdId && product?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) && product?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && product?.OfferMode === editedProduct?.OfferMode ) { return { ...product, FreeQty: finalOrderQty, RemainingQty: product?.OverAllFreeQty - finalOrderQty, discount: finalOrderQty * editedProduct?.OrderRate, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === editedProduct?.OfferMessage?.[0]?.OfferId && offerProduct?.OfferMode === editedProduct?.OfferMode; if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === editedProduct?.InwardDtlId ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: finalOrderQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: finalOrderQty, ActualOfferAmount: finalOrderQty * editedProduct?.OrderRate, OfferAmount: finalOrderQty * editedProduct?.OrderRate, OfferValue: finalOrderQty * editedProduct?.OrderRate, FreeProductsList: updatedFreeProductsList, UsedCount: finalOrderQty * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch(changeFullOfferAppliedProducts(updatedOfferAppliedProducts)); } } } else { // check is there any free product applicable for the edited product const isFreeProductApplicable = FreeProdList?.find((product) => { return ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId ); }); const sameProductInOtherBooking = CartOrderDetails?.find((cartItem) => { return ( cartItem?.ProdId === editedProduct?.ProdId && cartItem?.InwardDtlId === editedProduct?.InwardDtlId && cartItem?.BookingTypeName !== editedProduct?.BookingTypeName ); }); const finalOrderQty = (sameProductInOtherBooking?.OrderQty || 0) + editedQty; if (isFreeProductApplicable && hasOffer) { const applicableFreeProducts = isFreeProductApplicable?.ProdVariantDetails; const freeProductVariants = applicableFreeProducts?.map((variant) => { return { ...variant, FreeProdId: isFreeProductApplicable?.FreeProdId, OfferId: isFreeProductApplicable?.OfferId, OfferMode: isFreeProductApplicable?.OfferMode, }; }); if (isFreeProductApplicable?.OverAllFreeQty > finalOrderQty) { if (isFreeProductApplicable?.FreeQty === 0) { await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice ); // update free product list (Set OverAllFreeQty = OrderQty and Remaining = OrderQty) const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId ) { return { ...product, FreeQty: 0, OverAllFreeQty: finalOrderQty, RemainingQty: finalOrderQty, discount: finalOrderQty * editedProduct?.OrderRate, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); } else if (isFreeProductApplicable?.FreeQty <= finalOrderQty) { // check if there is any applicable free product in cart await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice ); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId ) { return { ...product, OverAllFreeQty: finalOrderQty, RemainingQty: finalOrderQty - product?.FreeQty, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); } else if (isFreeProductApplicable?.FreeQty > finalOrderQty) { // need to split free product and paid product let remainingPaidQty = isFreeProductApplicable?.FreeQty - finalOrderQty; const applicableFreeInCart = CartOrderDetails?.filter( (cartItem) => { return ( freeProductVariants?.some( (variant) => variant.FreeProdId === cartItem.ProdId && variant?.StockDetails?.some( (stock) => stock.FreeInwardDtlId === cartItem.InwardDtlId ) ) && cartItem?.Offer && isFreeProductApplicable?.OfferId === cartItem?.OfferMessage?.[0]?.OfferId ); } ); const applicableFreeInCartAsPaid = CartOrderDetails?.filter( (cartItem) => { return ( freeProductVariants?.some( (variant) => variant.FreeProdId === cartItem.ProdId && variant?.StockDetails?.some( (stock) => stock.FreeInwardDtlId === cartItem.InwardDtlId ) ) && !cartItem?.Offer ); } ); const sameBookingTypeProduct = applicableFreeInCart?.find( (cartItem) => { return ( cartItem?.BookingTypeName === editedProduct?.BookingTypeName ); } ); const otherBookingTypeProduct = applicableFreeInCart?.find( (cartItem) => { return ( cartItem?.BookingTypeName !== editedProduct?.BookingTypeName ); } ); const sameBookingTypeProductAsPaid = applicableFreeInCartAsPaid?.find((cartItem) => { return ( cartItem?.BookingTypeName === editedProduct?.BookingTypeName ); }); const otherBookingTypeProductAsPaid = applicableFreeInCartAsPaid?.find((cartItem) => { return ( cartItem?.BookingTypeName !== editedProduct?.BookingTypeName ); }); let updatedCart = [...CartOrderDetails]; if (sameBookingTypeProduct) { if (sameBookingTypeProductAsPaid) { if (sameBookingTypeProduct?.OrderQty <= remainingPaidQty) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== sameBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProductAsPaid) { const newItem = { ...cartItem, OrderQty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: 0, }; delete newItem.OfferMode; delete newItem.OfferMessage; delete newItem.OfferType; return newItem; } return cartItem; }); } else if ( sameBookingTypeProduct?.OrderQty > remainingPaidQty ) { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProduct) { return { ...cartItem, OrderQty: cartItem.OrderQty - remainingPaidQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty - remainingPaidQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem?.OrderQty - remainingPaidQty) * cartItem?.OrderRate, }; } else if (cartItem === sameBookingTypeProductAsPaid) { return { ...cartItem, OrderQty: cartItem?.OrderQty + remainingPaidQty, ...calculateTaxAmounts({ qty: cartItem?.OrderQty + remainingPaidQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), }; } return cartItem; }); } } else { if (sameBookingTypeProduct?.OrderQty <= remainingPaidQty) { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProduct) { const newPaidProd = { ...cartItem, Offer: 0, }; delete newPaidProd.OfferMode; delete newPaidProd.OfferMessage; delete newPaidProd.OfferType; return newPaidProd; } return cartItem; }); } else if ( sameBookingTypeProduct?.OrderQty > remainingPaidQty ) { const newPaidProduct = { ...sameBookingTypeProduct, OrderQty: remainingPaidQty, Offer: 0, }; delete newPaidProduct.OfferMode; delete newPaidProduct.OfferMessage; delete newPaidProduct.OfferType; updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProduct) { return { ...cartItem, OrderQty: cartItem.OrderQty - remainingPaidQty, ...calculateTaxAmounts({ qty: cartItem?.OrderQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), Offer: (cartItem?.OrderQty - remainingPaidQty) * cartItem?.OrderRate, }; } return cartItem; }); updatedCart = [...updatedCart, newPaidProduct]; } } remainingPaidQty = remainingPaidQty - sameBookingTypeProduct?.OrderQty; } if (otherBookingTypeProduct && remainingPaidQty > 0) { if (otherBookingTypeProductAsPaid) { if (otherBookingTypeProduct?.OrderQty <= remainingPaidQty) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== otherBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if (cartItem === otherBookingTypeProductAsPaid) { const newItem = { ...cartItem, OrderQty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: 0, }; delete newItem.OfferMode; delete newItem.OfferMessage; delete newItem.OfferType; return newItem; } return cartItem; }); } else if ( otherBookingTypeProduct?.OrderQty > remainingPaidQty ) { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === otherBookingTypeProduct) { return { ...cartItem, OrderQty: cartItem.OrderQty - remainingPaidQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty - remainingPaidQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem?.OrderQty - remainingPaidQty) * cartItem?.OrderRate, }; } else if (cartItem === otherBookingTypeProductAsPaid) { return { ...cartItem, OrderQty: cartItem?.OrderQty + remainingPaidQty, ...calculateTaxAmounts({ qty: cartItem?.OrderQty + remainingPaidQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), }; } return cartItem; }); } } else { if (otherBookingTypeProduct?.OrderQty <= remainingPaidQty) { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === otherBookingTypeProduct) { const newPaidProd = { ...cartItem, Offer: 0, }; delete newPaidProd.OfferMode; delete newPaidProd.OfferMessage; delete newPaidProd.OfferType; return newPaidProd; } return cartItem; }); } else if ( otherBookingTypeProduct?.OrderQty > remainingPaidQty ) { const newPaidProduct = { ...otherBookingTypeProduct, OrderQty: otherBookingTypeProduct?.OrderQty - remainingPaidQty, Offer: 0, }; delete newPaidProduct.OfferMode; delete newPaidProduct.OfferMessage; delete newPaidProduct.OfferType; updatedCart = updatedCart?.map((cartItem) => { if (cartItem === otherBookingTypeProduct) { return { ...cartItem, OrderQty: cartItem.OrderQty - remainingPaidQty, ...calculateTaxAmounts({ qty: cartItem?.OrderQty, rate: cartItem?.OrderRate, taxPercentage: cartItem?.TaxPercentage, }), Offer: (cartItem?.OrderQty - remainingPaidQty) * cartItem?.OrderRate, }; } return cartItem; }); updatedCart = [...updatedCart, newPaidProduct]; } } } updatedCart = updatedCart?.map((cartItem) => { if (cartItem === editedProduct) { return { ...cartItem, OrderQty: editedQty, ...calculateTaxAmounts({ qty: editedQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), }; } return cartItem; }); dispatch(changeOrderCardDetails(updatedCart)); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId && product?.OfferId === (sameBookingTypeProduct?.OfferMessage?.[0]?.OfferId || otherBookingTypeProduct?.OfferMessage?.[0]?.OfferId) && product?.OfferMode === (sameBookingTypeProduct?.OfferMode || otherBookingTypeProduct?.OfferMode) ) { return { ...product, FreeQty: finalOrderQty, OverAllFreeQty: finalOrderQty, RemainingQty: 0, discount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === (sameBookingTypeProduct?.OfferMessage?.[0]?.OfferId || otherBookingTypeProduct?.OfferMessage?.[0]?.OfferId) && offerProduct?.OfferMode === (sameBookingTypeProduct?.OfferMode || otherBookingTypeProduct?.OfferMode); if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: finalOrderQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: finalOrderQty, ActualOfferAmount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferAmount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferValue: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), FreeProductsList: updatedFreeProductsList, UsedCount: finalOrderQty * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch( changeFullOfferAppliedProducts(updatedOfferAppliedProducts) ); } } else { if (isFreeProductApplicable?.FreeQty === 0) { await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice ); // update free product list (Set OverAllFreeQty = OrderQty and Remaining = OrderQty) const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId ) { return { ...product, FreeQty: 0, OverAllFreeQty: finalOrderQty, RemainingQty: finalOrderQty, discount: finalOrderQty * editedProduct?.OrderRate, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); } else if (isFreeProductApplicable?.FreeQty === finalOrderQty) { dispatch( changeOrderCardDetails( updatedCart?.map((cartItem) => { if (cartItem === editedProduct) { return { ...cartItem, PackageDtl: PackageDtl, }; } return cartItem; }) ) ); return; } else if (isFreeProductApplicable?.FreeQty < finalOrderQty) { // check if there is any applicable free product in cart console.log(freeProductVariants, 'freeProductVariants'); const applicableFreeInCart = CartOrderDetails?.filter( (cartItem) => { return ( freeProductVariants?.some( (variant) => variant.FreeProdId === cartItem.ProdId && variant?.StockDetails?.some( (stock) => stock.FreeInwardDtlId === cartItem.InwardDtlId ) ) && !cartItem?.Offer ); } ); const applicableOfferAppliedFreeInCart = CartOrderDetails?.filter( (cartItem) => { return ( freeProductVariants?.some( (variant) => variant.FreeProdId === cartItem.ProdId && variant?.StockDetails?.some( (stock) => stock.FreeInwardDtlId === cartItem.InwardDtlId ) ) && cartItem?.Offer > 0 && isFreeProductApplicable?.OfferMode === cartItem?.OfferMode && isFreeProductApplicable?.OfferId === cartItem?.OfferMessage?.[0]?.OfferId ); } ); if (applicableFreeInCart?.length > 0) { console.log(applicableFreeInCart, 'applicableFreeInCart'); const sameBookingTypeProduct = applicableFreeInCart?.find( (cartItem) => { return ( cartItem?.BookingTypeName === editedProduct?.BookingTypeName ); } ); const otherBookingTypeProduct = applicableFreeInCart?.find( (cartItem) => { return ( cartItem?.BookingTypeName !== editedProduct?.BookingTypeName ); } ); const sameBookingTypeFreeProduct = applicableOfferAppliedFreeInCart?.find((cartItem) => { return ( cartItem?.BookingTypeName === editedProduct?.BookingTypeName ); }); const otherBookingTypeFreeProduct = applicableOfferAppliedFreeInCart?.find((cartItem) => { return ( cartItem?.BookingTypeName !== editedProduct?.BookingTypeName ); }); // find how many qty need to be updated as free product const totalFreeQtyInCart = applicableFreeInCart?.reduce( (acc, item) => acc + item.OrderQty, 0 ); const freeQtyNeeded = finalOrderQty - isFreeProductApplicable?.OverAllFreeQty; if (totalFreeQtyInCart === freeQtyNeeded) { let updatedCart = [...CartOrderDetails]; if (sameBookingTypeProduct) { if (sameBookingTypeFreeProduct) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== sameBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeFreeProduct) { return { ...cartItem, OrderQty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + sameBookingTypeProduct?.OrderQty) * cartItem.OrderRate, }; } return cartItem; }); } else { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProduct) { return { ...cartItem, Offer: sameBookingTypeProduct?.OrderQty * cartItem.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], }; } return cartItem; }); } } if (otherBookingTypeProduct) { if (otherBookingTypeFreeProduct) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== otherBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === otherBookingTypeProduct.ProdId && cartItem.InwardDtlId === otherBookingTypeProduct.InwardDtlId && cartItem.BookingTypeName === otherBookingTypeProduct.BookingTypeName && cartItem.OrderRate === otherBookingTypeProduct.OrderRate && cartItem.OfferMode && cartItem.Offer > 0 ) { return { ...cartItem, OrderQty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + otherBookingTypeProduct?.OrderQty) * cartItem.OrderRate, }; } return cartItem; }); } else { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === otherBookingTypeProduct) { return { ...cartItem, Offer: otherBookingTypeProduct?.OrderQty * cartItem.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], }; } return cartItem; }); } } updatedCart = updatedCart?.map((cartItem) => { if (cartItem === editedProduct) { return { ...cartItem, OrderQty: editedQty, ...calculateTaxAmounts({ qty: editedQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), ...(cartItem?.Offer > 0 && { Offer: editedQty * cartItem.OrderRate, }), }; } return cartItem; }); dispatch(changeOrderCardDetails(updatedCart)); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId && product?.OfferId === (sameBookingTypeFreeProduct?.OfferMessage?.[0]?.OfferId || otherBookingTypeFreeProduct?.OfferMessage?.[0] ?.OfferId) && product?.OfferMode === (sameBookingTypeFreeProduct?.OfferMode || otherBookingTypeFreeProduct?.OfferMode) ) { return { ...product, FreeQty: finalOrderQty, OverAllFreeQty: finalOrderQty, RemainingQty: 0, discount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeFreeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === (sameBookingTypeFreeProduct?.OfferMessage?.[0] ?.OfferId || otherBookingTypeFreeProduct?.OfferMessage?.[0] ?.OfferId) && offerProduct?.OfferMode === (sameBookingTypeFreeProduct?.OfferMode || otherBookingTypeFreeProduct?.OfferMode); if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: finalOrderQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: finalOrderQty, ActualOfferAmount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferAmount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferValue: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), FreeProductsList: updatedFreeProductsList, UsedCount: finalOrderQty * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch( changeFullOfferAppliedProducts(updatedOfferAppliedProducts) ); } else if (totalFreeQtyInCart > freeQtyNeeded) { let updatedCart = [...CartOrderDetails]; if (sameBookingTypeProduct) { // if available same booking type product qty is more than or equal to freeQtyNeeded. // if more than then we need to update both free and paid product= if (sameBookingTypeProduct?.OrderQty === freeQtyNeeded) { if (sameBookingTypeFreeProduct) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== sameBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === sameBookingTypeProduct.ProdId && cartItem.InwardDtlId === sameBookingTypeProduct.InwardDtlId && cartItem.BookingTypeName === sameBookingTypeProduct.BookingTypeName && cartItem.OrderRate === sameBookingTypeProduct.OrderRate && cartItem.OfferMode && cartItem.Offer > 0 ) { return { ...cartItem, OrderQty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + sameBookingTypeProduct?.OrderQty) * cartItem.OrderRate, }; } return cartItem; }); } else { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProduct) { return { ...cartItem, Offer: sameBookingTypeProduct?.OrderQty * cartItem.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], }; } return cartItem; }); } } else if (sameBookingTypeProduct?.OrderQty > freeQtyNeeded) { if (sameBookingTypeFreeProduct) { updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === sameBookingTypeProduct.ProdId && cartItem.InwardDtlId === sameBookingTypeProduct.InwardDtlId && cartItem.BookingTypeName === sameBookingTypeProduct.BookingTypeName && cartItem.OrderRate === sameBookingTypeProduct.OrderRate && cartItem.OfferMode && cartItem.Offer > 0 ) { return { ...cartItem, OrderQty: cartItem.OrderQty + freeQtyNeeded, ...calculateTaxAmounts({ qty: cartItem.OrderQty + freeQtyNeeded, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + freeQtyNeeded) * cartItem.OrderRate, }; } else if (cartItem === sameBookingTypeProduct) { return { ...cartItem, OrderQty: cartItem.OrderQty - freeQtyNeeded, ...calculateTaxAmounts({ qty: cartItem.OrderQty - freeQtyNeeded, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), }; } return cartItem; }); } else { const remainingPaidQty = sameBookingTypeProduct?.OrderQty - freeQtyNeeded; updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProduct) { return { ...cartItem, OrderQty: remainingPaidQty, ...calculateTaxAmounts({ qty: remainingPaidQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), }; } return cartItem; }); const freeProduct = { ...sameBookingTypeProduct, OrderQty: freeQtyNeeded, ...calculateTaxAmounts({ qty: freeQtyNeeded, rate: sameBookingTypeProduct.OrderRate, taxPercentage: sameBookingTypeProduct.TaxPercentage, }), Offer: freeQtyNeeded * sameBookingTypeProduct.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], localId: uuidv4(), }; updatedCart = [...updatedCart, freeProduct]; } } } if ( otherBookingTypeProduct && freeQtyNeeded > (sameBookingTypeProduct?.OrderQty || 0) ) { const remainingFreeQtyNeeded = freeQtyNeeded - (sameBookingTypeProduct?.OrderQty || 0); if ( remainingFreeQtyNeeded === otherBookingTypeProduct?.OrderQty ) { if (otherBookingTypeFreeProduct) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== otherBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === otherBookingTypeProduct.ProdId && cartItem?.InwardDtlId === otherBookingTypeProduct.InwardDtlId && cartItem?.BookingTypeName === otherBookingTypeProduct.BookingTypeName && cartItem?.OrderRate === otherBookingTypeProduct.OrderRate && cartItem?.OfferMode && cartItem?.Offer > 0 ) { return { ...cartItem, OrderQty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + otherBookingTypeProduct?.OrderQty) * cartItem.OrderRate, }; } return cartItem; }); } else { updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === otherBookingTypeProduct.ProdId && cartItem.InwardDtlId === otherBookingTypeProduct.InwardDtlId && cartItem.BookingTypeName === otherBookingTypeProduct.BookingTypeName && cartItem.OrderRate === otherBookingTypeProduct.OrderRate && cartItem.OfferMode && cartItem.Offer > 0 ) { return { ...cartItem, Offer: cartItem.OrderQty * cartItem.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], }; } return cartItem; }); } } else if ( otherBookingTypeProduct?.OrderQty > remainingFreeQtyNeeded ) { if (otherBookingTypeFreeProduct) { updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === otherBookingTypeProduct.ProdId && cartItem.InwardDtlId === otherBookingTypeProduct.InwardDtlId && cartItem.BookingTypeName === otherBookingTypeProduct.BookingTypeName && cartItem.OrderRate === otherBookingTypeProduct.OrderRate && cartItem.OfferMode && cartItem.Offer > 0 ) { return { ...cartItem, OrderQty: cartItem.OrderQty + remainingFreeQtyNeeded, ...calculateTaxAmounts({ qty: cartItem.OrderQty + remainingFreeQtyNeeded, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + remainingFreeQtyNeeded) * cartItem.OrderRate, }; } else if (cartItem === otherBookingTypeProduct) { return { ...cartItem, OrderQty: cartItem.OrderQty - remainingFreeQtyNeeded, ...calculateTaxAmounts({ qty: cartItem.OrderQty - remainingFreeQtyNeeded, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), }; } return cartItem; }); } else { const remainingPaidQty = otherBookingTypeProduct?.OrderQty - remainingFreeQtyNeeded; const newFreeProduct = { ...otherBookingTypeProduct, OrderQty: remainingFreeQtyNeeded, ...calculateTaxAmounts({ qty: remainingFreeQtyNeeded, rate: otherBookingTypeProduct.OrderRate, taxPercentage: otherBookingTypeProduct.TaxPercentage, }), Offer: remainingFreeQtyNeeded * otherBookingTypeProduct.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], localId: uuidv4(), }; updatedCart = updatedCart?.map((cartItem) => { if (cartItem === otherBookingTypeProduct) { return { ...cartItem, OrderQty: remainingPaidQty, ...calculateTaxAmounts({ qty: remainingPaidQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), }; } return cartItem; }); updatedCart = [...updatedCart, newFreeProduct]; } } } updatedCart = updatedCart?.map((cartItem) => { if (cartItem === editedProduct) { return { ...cartItem, OrderQty: editedQty, ...calculateTaxAmounts({ qty: editedQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), ...(cartItem?.Offer > 0 && { Offer: editedQty * cartItem.OrderRate, }), }; } return cartItem; }); dispatch(changeOrderCardDetails(updatedCart)); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId && product?.OfferId === (sameBookingTypeFreeProduct?.OfferMessage?.[0]?.OfferId || otherBookingTypeFreeProduct?.OfferMessage?.[0] ?.OfferId) && product?.OfferMode === (sameBookingTypeFreeProduct?.OfferMode || otherBookingTypeFreeProduct?.OfferMode) ) { return { ...product, FreeQty: finalOrderQty, OverAllFreeQty: finalOrderQty, RemainingQty: 0, discount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === (sameBookingTypeProduct?.OfferMessage?.[0]?.OfferId || otherBookingTypeProduct?.OfferMessage?.[0] ?.OfferId) && offerProduct?.OfferMode === (sameBookingTypeProduct?.OfferMode || otherBookingTypeProduct?.OfferMode); if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: finalOrderQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: finalOrderQty, ActualOfferAmount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferAmount: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferValue: finalOrderQty * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), FreeProductsList: updatedFreeProductsList, UsedCount: finalOrderQty * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch( changeFullOfferAppliedProducts(updatedOfferAppliedProducts) ); } else if (totalFreeQtyInCart < freeQtyNeeded) { let updatedCart = [...CartOrderDetails]; if (sameBookingTypeProduct) { if (sameBookingTypeFreeProduct) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== sameBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === sameBookingTypeProduct.ProdId && cartItem.InwardDtlId === sameBookingTypeProduct.InwardDtlId && cartItem.BookingTypeName === sameBookingTypeProduct.BookingTypeName && cartItem.OrderRate === sameBookingTypeProduct.OrderRate && cartItem.OfferMode && cartItem.Offer > 0 ) { return { ...cartItem, OrderQty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + sameBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + sameBookingTypeProduct?.OrderQty) * cartItem.OrderRate, }; } return cartItem; }); } else { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === sameBookingTypeProduct) { return { ...cartItem, Offer: (cartItem.OrderQty + sameBookingTypeProduct?.OrderQty) * cartItem.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], }; } return cartItem; }); } } if (otherBookingTypeProduct) { if (otherBookingTypeFreeProduct) { updatedCart = updatedCart?.filter( (cartItem) => cartItem !== otherBookingTypeProduct ); updatedCart = updatedCart?.map((cartItem) => { if ( cartItem.ProdId === otherBookingTypeProduct.ProdId && cartItem.InwardDtlId === otherBookingTypeProduct.InwardDtlId && cartItem.BookingTypeName === otherBookingTypeProduct.BookingTypeName && cartItem.OrderRate === otherBookingTypeProduct.OrderRate && cartItem.OfferMode && cartItem.Offer > 0 ) { return { ...cartItem, OrderQty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, ...calculateTaxAmounts({ qty: cartItem.OrderQty + otherBookingTypeProduct?.OrderQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), Offer: (cartItem.OrderQty + otherBookingTypeProduct?.OrderQty) * cartItem.OrderRate, }; } return cartItem; }); } else { updatedCart = updatedCart?.map((cartItem) => { if (cartItem === otherBookingTypeProduct) { return { ...cartItem, Offer: otherBookingTypeProduct?.OrderQty * cartItem.OrderRate, OfferMode: isFreeProductApplicable?.OfferMode, OfferType: isFreeProductApplicable?.OfferType, OfferMessage: [ { OfferId: isFreeProductApplicable?.OfferId, OfferName: isFreeProductApplicable?.OfferName, OfferDescription: isFreeProductApplicable?.OfferDescription, }, ], }; } return cartItem; }); } } updatedCart = updatedCart?.map((cartItem) => { if (cartItem === editedProduct) { return { ...cartItem, OrderQty: editedQty, ...calculateTaxAmounts({ qty: editedQty, rate: cartItem.OrderRate, taxPercentage: cartItem.TaxPercentage, }), ...(cartItem?.Offer > 0 && { Offer: editedQty * cartItem.OrderRate, }), }; } return cartItem; }); dispatch(changeOrderCardDetails(updatedCart)); const remainingQty = freeQtyNeeded - totalFreeQtyInCart; const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId && product?.OfferId === (sameBookingTypeFreeProduct?.OfferMessage?.[0]?.OfferId || otherBookingTypeFreeProduct?.OfferMessage?.[0] ?.OfferId) && product?.OfferMode === (sameBookingTypeFreeProduct?.OfferMode || otherBookingTypeFreeProduct?.OfferMode) ) { return { ...product, FreeQty: finalOrderQty - remainingQty, OverAllFreeQty: finalOrderQty, RemainingQty: remainingQty, discount: (finalOrderQty - remainingQty) * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); const updatedOfferAppliedProducts = OfferAppliedProducts?.map( (offerProduct) => { // Check if this offer product contains the edited product in its free products list const hasMatchingFreeProduct = offerProduct?.FreeProductsList?.some((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); // Also check main offer conditions const isMatchingOffer = offerProduct?.OfferId === (sameBookingTypeProduct?.OfferMessage?.[0]?.OfferId || otherBookingTypeProduct?.OfferMessage?.[0] ?.OfferId) && offerProduct?.OfferMode === (sameBookingTypeProduct?.OfferMode || otherBookingTypeProduct?.OfferMode); if (hasMatchingFreeProduct && isMatchingOffer) { // Get loyalty points from the matching free product const matchingFreeProduct = offerProduct?.FreeProductsList?.find((freeProduct) => freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ) ); const prodLoyaltyPoint = matchingFreeProduct?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.ProdLoyaltyPoint || 0; // Update the specific free product in the list const updatedFreeProductsList = offerProduct?.FreeProductsList?.map((freeProduct) => { const isTargetFreeProduct = freeProduct?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === (sameBookingTypeProduct?.InwardDtlId || otherBookingTypeProduct?.InwardDtlId) ) ); if (isTargetFreeProduct) { return { ...freeProduct, FreeQty: finalOrderQty - remainingQty, }; } return freeProduct; }); return { ...offerProduct, ActualFreeQty: finalOrderQty - remainingQty, ActualOfferAmount: (finalOrderQty - remainingQty) * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferAmount: (finalOrderQty - remainingQty) * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), OfferValue: (finalOrderQty - remainingQty) * (sameBookingTypeProduct?.OrderRate || otherBookingTypeProduct?.OrderRate), FreeProductsList: updatedFreeProductsList, UsedCount: (finalOrderQty - remainingQty) * prodLoyaltyPoint, }; } return offerProduct; } ); dispatch( changeFullOfferAppliedProducts(updatedOfferAppliedProducts) ); } } else { // just update the free product list await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice ); const updatedFreeProdList = FreeProdList?.map((product) => { if ( product?.ProdId === editedProduct?.ProdId && product?.InwardDtlId === editedProduct?.InwardDtlId ) { return { ...product, OverAllFreeQty: finalOrderQty, RemainingQty: finalOrderQty - product?.FreeQty, discount: finalOrderQty * editedProduct?.OrderRate, }; } return product; }); dispatch(ChangeFullFreeProductList(updatedFreeProdList)); } } } } else { await handleNormalEditQuantity( editedProduct, editedProductIndex, editedQty, newPrice ); } } }; const handleNormalEditQuantity = async ( editedProduct, index, qty, newPrice = 0, offerApply = false ) => { const fixedQty = Number(qty.toFixed(3)); const updatedProduct = { ...editedProduct, OrderQty: fixedQty, OrderRate: newPrice > 0 ? newPrice : editedProduct?.OrderRate, ...calculateTaxAmounts({ qty: qty, rate: newPrice > 0 ? newPrice : editedProduct?.OrderRate, taxPercentage: editedProduct?.TaxPercentage, type: editedProduct?.Type, product: editedProduct, }), PackageDtl: PackageDtl, // ✅ FIXED: Proper conditional property assignment ...(offerApply && { Offer: qty * (newPrice > 0 ? newPrice : editedProduct?.OrderRate), }), }; if (hasOffer) { const offers = validateOffers( updatedProduct, OverAllproductBasedOfferDatas, CartOrderDetails, TakAwayId, DineinId ); if (!offers?.length) { if (updatedProduct?.OfferType && updatedProduct?.Offer > 0) { dispatch( RemoveOfferAppliedProduct({ ProdId: updatedProduct?.ProdId, InwardDtlId: updatedProduct?.InwardDtlId, OfferType: updatedProduct?.OfferType, }) ); } dispatch( changeOrderCardDetails( CartOrderDetails?.map((i) => i?.InwardDtlId == updatedProduct?.InwardDtlId && i?.BookingTypeName == updatedProduct?.BookingTypeName && i?.localId === updatedProduct?.localId ? { ...updatedProduct, Offer: 0, OfferType: updatedProduct?.Type === 'C' ? updatedProduct?.OfferType : null, OfferMessage: null, } : i ) ) ); return; } let bestOffer = null; for (const offer of offers) { if (!bestOffer || offer.OfferAmount > bestOffer.OfferAmount) { bestOffer = offer; } } const UpdatedCartItemWithOffer = { ...updatedProduct, Offer: bestOffer?.OfferMode === 'I' || bestOffer?.OfferMode === 'Q' ? bestOffer?.OfferAmount || updatedProduct.Offer : updatedProduct.Offer || bestOffer?.OfferAmount, OfferType: updatedProduct?.OfferType || bestOffer?.OfferType, OfferMessage: updatedProduct?.OfferMessage || bestOffer?.OfferMessage, }; console.log(updatedProduct, 'updatedProduct'); const shouldRemove = (c) => c.ProdId === updatedProduct.ProdId && c.InwardDtlId === updatedProduct.InwardDtlId && c.OrderRate === updatedProduct.OrderRate && c.BookingTypeName === updatedProduct.BookingTypeName && !c.SalesId && ((c?.OfferModeType && c?.OfferMode === 'B' ? true : c?.OfferMode !== 'B') && c?.OfferMode !== 'P' && c?.OfferMode !== 'C' && c?.OfferMode !== 'O' && c?.OfferMode !== 'L' ? true : c?.Offer === 0); const filteredCart = CartOrderDetails?.filter((c) => !shouldRemove(c)); const updatedCartData = [UpdatedCartItemWithOffer, ...filteredCart]; if (bestOffer) { dispatch(ChangeOfferAppliedProducts(bestOffer)); } dispatch(changeOrderCardDetails(updatedCartData)); } else { const updatedData = [...CartOrderDetails]; updatedData[index] = updatedProduct; dispatch(changeOrderCardDetails(updatedData)); } }; const calculateTaxAmounts = ({ qty, rate, taxPercentage, type = null, product = {}, isOfferApply = false, }) => { const { OfferType = null, OfferPrice = 0 } = product; const totalAmount = qty * rate; const taxAmount = ( (totalAmount * taxPercentage) / (100 + taxPercentage) ).toFixed(2); const withoutTaxRate = (totalAmount - taxAmount).toFixed(2); const offerValue = type === 'C' ? OfferType === 'F' ? qty * OfferPrice : (qty * rate * OfferPrice) / 100 : null; return { TotalAmt: type === 'C' && OfferPrice > 0 ? totalAmount - (offerValue || 0) : totalAmount, TaxAmt: parseFloat(taxAmount), WithoutTaxRate: parseFloat(withoutTaxRate), OfferValue: offerValue, }; }; const CloseModal = () => { props.handleEditQuantityCancel(); setClearQuantity(false); }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const onRadioBtnChange = (data) => { setRadioBtnSelection(data); }; const onPercentageSelectionChange = (data) => { setPercentageSelection(data); setEditedPrice(0); formRef.current?.resetFields(); setDisableSubmitButton(false); }; const PriceChangefun = (data) => { const enteredDiscount = parseFloat(data?.target.value); if (enteredDiscount) { const sellingPrice = parseFloat(props.Productdata?.SellingPrice || 0); const limit = parseFloat(props.Productdata?.DiscountLimit || 0); const limitType = props.Productdata?.DiscountLimitType; if (limit === null || limit === undefined || limit === 0) { if (PercentageSelection == 'Fixed') { if (parseFloat(enteredDiscount) < parseFloat(sellingPrice)) { // setEditedPrice(enteredDiscount); setEditedPrice( parseFloat(sellingPrice) - parseFloat(enteredDiscount) ); setDisableSubmitButton(true); } else { setMessageType('error'); setMessageData('Please Give less than value for sell price'); setDisableSubmitButton(false); setEditedPrice(0); formRef.current?.resetFields(); } } else { if (parseFloat(enteredDiscount) < 100) { let temperc = (parseFloat(enteredDiscount) * parseFloat(sellingPrice)) / 100; setEditedPrice(parseFloat(sellingPrice) - parseFloat(temperc)); setDisableSubmitButton(true); } else { setMessageType('error'); setMessageData('Please Give less than 100% '); setEditedPrice(0); setDisableSubmitButton(false); formRef.current?.resetFields(); } } return; } let maxDiscount = 0; if (limitType === 'F') { maxDiscount = sellingPrice - limit; } else if (limitType === 'P') { const afterdiscountfullamount = (sellingPrice * limit) / 100; maxDiscount = sellingPrice - afterdiscountfullamount; } if (PercentageSelection == 'Fixed') { if (parseFloat(enteredDiscount) < parseFloat(sellingPrice)) { if (sellingPrice - enteredDiscount === maxDiscount) { setEditedPrice( parseFloat(sellingPrice) - parseFloat(enteredDiscount) ); setDisableSubmitButton(true); return; } if (sellingPrice - enteredDiscount < sellingPrice - maxDiscount) { setMessageType('error'); setMessageData( `Discount amount should not exeed ₹ ${(sellingPrice - maxDiscount).toFixed(2)}` ); setEditedPrice(0); setDisableSubmitButton(true); formRef.current?.resetFields(); setDisableSubmitButton(false); return; } setEditedPrice( parseFloat(sellingPrice) - parseFloat(enteredDiscount) ); setDisableSubmitButton(true); } else { setMessageType('error'); setMessageData('Please Give less than value for sell price'); setDisableSubmitButton(false); setEditedPrice(0); formRef.current?.resetFields(); } } else { if (parseFloat(enteredDiscount) < 100) { const discountAmount = (sellingPrice * enteredDiscount) / 100; if (discountAmount > maxDiscount) { setMessageType('error'); setMessageData( `Discount % should not exeed above ${(maxDiscount / sellingPrice) * 100} %` ); setEditedPrice(0); setDisableSubmitButton(false); formRef.current?.resetFields(); return; } let temperc = (parseFloat(enteredDiscount) * parseFloat(sellingPrice)) / 100; setEditedPrice(parseFloat(sellingPrice) - parseFloat(temperc)); setDisableSubmitButton(true); } else { setMessageType('error'); setMessageData('Please Give less than 100 '); setEditedPrice(0); setDisableSubmitButton(false); formRef.current?.resetFields(); } } } else { setDisableSubmitButton(false); setEditedPrice(0); formRef.current?.resetFields(); } }; const SellingPriceChange = (data) => { if (data?.target.value) { const sellingPrice = parseFloat(props.Productdata?.SellingPrice || 0); const limit = parseFloat(props.Productdata?.DiscountLimit || 0); const limitType = props.Productdata?.DiscountLimitType; const enteredDiscount = parseFloat(data?.target.value); if (limit === null || limit === undefined || limit === 0) { if ( parseFloat(enteredDiscount) < parseFloat(sellingPrice) || parseFloat(enteredDiscount) === parseFloat(sellingPrice) ) { setEditedPrice(enteredDiscount); setDisableSubmitButton(true); } else { setMessageType('error'); setMessageData('Please Give less than value for sell price'); setDisableSubmitButton(false); setEditedPrice(0); formRef.current?.resetFields(); } return; } let maxDiscount = 0; if (limitType === 'F') { maxDiscount = limit; } else if (limitType === 'P') { const afterdiscountfullamount = (sellingPrice * limit) / 100; maxDiscount = afterdiscountfullamount; } if (enteredDiscount === maxDiscount) { setEditedPrice(data?.target.value); setDisableSubmitButton(true); return; } if (enteredDiscount < maxDiscount) { setMessageType('error'); setMessageData(`You cannot sell below ₹${maxDiscount.toFixed(2)}`); setEditedPrice(0); setDisableSubmitButton(false); return; } setDisableSubmitButton(true); setEditedPrice(data?.target.value); } else { setDisableSubmitButton(false); setEditedPrice(0); } }; const AddPacking = async (data) => { console.log(data, 'Cartdata'); setPackageDtl(data || []); }; const handleWeightCalculation = async (data) => { const { price, quantity } = data; setQuantity(quantity); setEditedPrice(price); await handleWeightSubmit(quantity, price); }; const handleWeightSubmit = async (qty, price) => { await dispatch(changeHoldOrderDtl(false)); await dispatch(changePreviousOrderLength(CartOrderDetails?.length)); let localId = props.Index; let editedProductIndex = CartOrderDetails?.findIndex( (e) => e?.localId == localId ); const editedProduct = { ...CartOrderDetails[editedProductIndex], OrderQty: qty }; await handleEditQuantity(editedProduct, editedProductIndex, editedProduct.OrderRate, qty); props.handleEditQuantityCancel(); setClearQuantity(false); }; const isKg = props?.Productdata?.Size == 1 && ["KG", "KGS"].includes(props?.Productdata?.UomName?.toUpperCase()); return (