diff --git a/src/Pages/BookingScreen/Components/BSBillingTables/BSBillingEditQuantity/WeightCalculatePrice.jsx b/src/Pages/BookingScreen/Components/BSBillingTables/BSBillingEditQuantity/WeightCalculatePrice.jsx index f4b35e8..f9e0d20 100644 --- a/src/Pages/BookingScreen/Components/BSBillingTables/BSBillingEditQuantity/WeightCalculatePrice.jsx +++ b/src/Pages/BookingScreen/Components/BSBillingTables/BSBillingEditQuantity/WeightCalculatePrice.jsx @@ -1,3801 +1,134 @@ -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 { useState, useEffect, useRef } from 'react'; 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'; +import { Form } from 'antd'; +import Buttons from '../../../../../Components/Forms/Buttons.jsx'; +import { ArrowRightOutlined } from '@ant-design/icons'; -const BSBillingEditQuantity = (props) => { - console.log(props?.Productdata.UomName, 'hfghfvbufvbfdviv', props?.Productdata.Size); +const WeightCalculatePrice = ({ itemData, CartOrderDetails, onSubmit }) => { + const [enteredPrice, setEnteredPrice] = useState(''); + const [calculatedQty, setCalculatedQty] = useState(0); + const priceInputRef = useRef(null); + const [form] = Form.useForm(); - 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; + const basePrice = parseFloat(itemData?.OrderRate || itemData?.SellingPrice || 0); useEffect(() => { - if (ConfigDataList?.length === 0) { - getBookingTypeId(); - } + setTimeout(() => { + const inputElement = priceInputRef.current?.querySelector('input'); + if (inputElement) { + inputElement.focus(); + } + }, 100); }, []); - useEffect( - () => { - setEditOpen(props.BSBillingEditQuantity); - setItemData(props.Productdata); - setQuantity( - props?.Productdata?.ScaleType !== 'weight' - ? parseInt(props.Productdata.OrderQty) - : props.Productdata.OrderQty - ); - }, - [props.BSBillingEditQuantity], - [props.Productdata] - ); + // Calculate quantity based on entered price + const handlePriceChange = (e) => { + const value = e.target.value; + setEnteredPrice(value); - 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); + if (value && basePrice > 0) { + const price = parseFloat(value); + const qty = price / basePrice; + setCalculatedQty(qty); } else { - setQuantity(Quantity.toString() + value.toString()); - if (Quantity?.length > 10) { - setMessageType('error'); - setMessageData('Quantity is to long'); - setQuantity(''); - } + setCalculatedQty(0); } }; - 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), - ]; + const handleSubmit = (e) => { + if (e && e.preventDefault) { + e.preventDefault(); } - 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 - ); + if (enteredPrice && calculatedQty > 0) { + console.log('Submitting weight calculation:', { + price: parseFloat(enteredPrice), + quantity: calculatedQty, }); - 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, - }; + // Pass the calculated values back to parent component + if (onSubmit) { + onSubmit({ + price: parseFloat(enteredPrice), + quantity: calculatedQty, }); - - 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 ( -
Product: {itemData?.ProdName}
+Variant: {itemData?.ProdVariantName}
+Base Price: ₹{basePrice.toFixed(2)} per {itemData?.UomName || 'unit'}