import React, { useEffect, useRef, useState, useCallback } from 'react'; import { shallowEqual, useDispatch, useSelector } from 'react-redux'; import moment from 'moment'; import { Modal } from 'antd'; import { ExclamationCircleOutlined } from '@ant-design/icons'; import { BiBarcodeReader } from 'react-icons/bi'; import { GoTriangleRight } from 'react-icons/go'; import { IoIosSearch } from 'react-icons/io'; import { FiSearch } from 'react-icons/fi'; import defaultimage from '../../../../Images/defaultItemImg.png'; import { Form, AutoComplete } from 'antd'; import { CloseSquareFilled } from '@ant-design/icons'; import '../../../../Styles/BookingScreen/Template/BSLayout7/BSC1Search.scss'; import { changeSearchedData, ChangeWSProduct, ChangeNewQrProduct, getProductsearch, GlobalOrderCardDetails, changeOrderCardDetails, GlobalBookingType, getPreferenceData, GlobalWSProduct, GlobalSearchData, GlobalNewQrProduct, changeHoldOrderDtl, changePreviousOrderLength, Globalcombofocus, GlobalfocusStatusCustMouse, GlobalSelCustId, GlobalPrintStatus, changeCombofocus, GlobalCompoPaymentIconStatus, GlobalReorderHoldDetails, GlobalWeightScalePort, GlobalWeightScaleWeight, changeothersdata, GlobalUnpaidData, GlobalCreditFocus, GlobalBookingTypeBoth, GlobalOrderType, GlobalReorderProductDetails, FeatureAddon, GlobalCompoPreOrderDtlStatus, GlobalDropDownStatus, GlobalPreOrderSearchStatus, GlobalFocusKioskPay, GlobalSelOption, PreferenceData, GlobalFeatAddOnData, GlobalSelectedDatas, } from '../../../../Features/BookingScreen/BookingData/BookingData'; import { changepreOrderList, GlobalPreOrderList, GlobalPreOrderListedit, GlobalPreOrderAdditem, } from '../../../../Features/BookingScreen/PreOrder/PreOrder.js'; import { Messages } from '../../../../Components/Notifications/Messages'; import FormHeader from '../../../PageComponents/FormHeader'; import { DefaultModal } from '../../../../Components/Modal/DefaultModal'; import { Tables } from '../../../../Components/Tables/Table'; import FeaturesFunctionalities from '../BookingFunctionality/FeaturesFunctionalities'; import { gettableData } from '../../../../Features/PreferenceMaster/PreferenceMaster'; import { isMobile } from 'react-device-detect'; import BarcodeScanner from '../UtillComponents/BarcodeScanner.jsx'; import { getTemplateData, StoredSessionData, } from '../../../../Features/ThemeChange/ThemeChange.js'; import { v4 as uuidv4 } from 'uuid'; import { GlobalAddCustomerDetails } from '../../../../Features/BookingScreen/Customer/addCustomer.js'; import BSNavBarWeightScale from '../UtillComponents/BSNavBarWeightScale.jsx'; export default function BSC1Search(props) { const dispatch = useDispatch(); const searchPromiseRef = useRef(null); const debounceTimerRef = useRef(null); const SessionData = useSelector(StoredSessionData); const BranchId = SessionData?.BranchId; const AppId = SessionData?.AppId; const CompId = SessionData?.CompId; const formRef = useRef(); const Globalfocus = useSelector(Globalcombofocus); const GlobalPreOrderData = useSelector(GlobalPreOrderList); const CartOrderDetails = useSelector(GlobalOrderCardDetails); const BookingType = useSelector(GlobalBookingType); const WSProductdata = useSelector(GlobalWSProduct); const ProductSearch = useSelector(GlobalSearchData); const SelectedDatas = useSelector(GlobalSelectedDatas, shallowEqual); const NewQrProductData = useSelector(GlobalNewQrProduct); const ReportholdData = useSelector(GlobalReorderHoldDetails); const WeightScalePort = useSelector(GlobalWeightScalePort); const ReorderProductData = useSelector(GlobalReorderProductDetails); const WeightScaleWeight = useSelector(GlobalWeightScaleWeight); const PreOrderSearchStatus = useSelector(GlobalPreOrderSearchStatus); const KioskFocusStatus = useSelector(GlobalFocusKioskPay); const FeatureAddonData = useSelector(GlobalFeatAddOnData); const preferenceDatas = useSelector(PreferenceData); const BSComboData = props?.hasOwnProperty('data') ? props['data'] : null; const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [qtydata, setQtydata] = useState(); const [modelQty, setModelQty] = useState(false); const [modelstock, setModelstock] = useState(false); const [ModalVarient, setModalVarient] = useState(false); const [QtyIndex, setQtyIndex] = useState(0); const [repeatedModel, setRepeatedModel] = useState(false); const [VarientIndex, setVarientIndex] = useState(0); const [ProductList, setProductList] = useState([]); const [addFirst, setAddFirst] = useState(false); console.log(addFirst, 'addFirstaddFirst'); const [SelectedProduct, setSelectedProduct] = useState({}); const [expModel, setexpModel] = useState(false); const [prodexpir, setProdexpir] = useState(false); const [expVarModel, setexpVarModel] = useState(false); const [expStockModel, setexpStockModel] = useState(false); const [Item, setItem] = useState(); const [VarItem, setVarItem] = useState(); const [StockItem, setStockItem] = useState(); const [StockPreferenceDetail, setStockPreferenceDetail] = useState(); const [QuickAdd, setQuickAdd] = useState(false); const inputRef = useRef(null); const containerRef = useRef(null); // QR code tracking const [lastScannedQr, setLastScannedQr] = useState(null); const [currentSessionQr, setCurrentSessionQr] = useState(null); const focusStatusCustMouse = useSelector(GlobalfocusStatusCustMouse); const CompoPaymentIconStatus = useSelector(GlobalCompoPaymentIconStatus); const CompoPreOrderDtlStatus = useSelector(GlobalCompoPreOrderDtlStatus); const DropDownStatus = useSelector(GlobalDropDownStatus); const CustChangeDropDown = useSelector(GlobalSelCustId); const printStatus = useSelector(GlobalPrintStatus); const [screenWidth, setScreenWidth] = useState(window.innerWidth); const [preFocus, setpreFocus] = useState(false); const OrderType = useSelector(GlobalOrderType); const [autoCompleteVisible, setAutoCompleteVisible] = useState( preFocus && screenWidth > 768 && OrderType != 'Failed' ? true : false ); const CreditFocus = useSelector(GlobalCreditFocus); const [onePeiceFlow, setOnePeiceFlow] = useState(false); const [expQtyModel, setExpQtyModel] = useState(false); const [qtyExpData, setQtyExpData] = useState(); console.log('h'); const PreOrderAdditem = useSelector(GlobalPreOrderAdditem); // const [FeatureAddonData, setFeatureAddonData] = useState([]); const [openScanner, setOpenScanner] = useState(false); const scannerRef = useRef(); const updateScreenSize = () => { setScreenWidth(window.innerWidth); }; const [ExpiredProduct, setExpiredProduct] = useState(); console.log(ExpiredProduct, 'ExpiredProduct'); const isSelectingRef = useRef(false); //dhana useEffect(() => { const handleKeyPress = (event) => { if (event.shiftKey && event.code === 'KeyS') { if ( document.activeElement.tagName !== 'INPUT' && document.activeElement.tagName !== 'TEXTAREA' ) { event.preventDefault(); // Stops "S" from being typed inputRef?.current?.focus(); } } }; const handleClickOutside = () => { inputRef?.current?.blur(); }; window.addEventListener('keydown', handleKeyPress); window.addEventListener('mousedown', handleClickOutside); return () => { window.removeEventListener('keydown', handleKeyPress); window.removeEventListener('mousedown', handleClickOutside); }; }, []); //dhana useEffect(() => { focusPreferenceData(); }, []); useEffect(() => { const first = preferenceDatas?.[0]?.['SettingDtlDetails']?.find( (item) => item.SettingIdName === 'BillItemsOrder' )?.SettingValue === 'Y'; setAddFirst(first); }, [preferenceDatas]); function safeRound(amountStr) { if (amountStr == null) return '0.00'; const cleaned = String(amountStr).replace(/[^0-9.-]+/g, ''); const num = Number(cleaned); return isNaN(num) ? '0.00' : num.toFixed(2); } const focusPreferenceData = async () => { const filteredDatas = preferenceDatas?.[0]?.SettingDtlDetails?.filter( (item) => item.SettingIdName === 'SearchFocus' && item.SettingValue === 'N' ); console.log('focusPreferenceData', filteredDatas); filteredDatas?.length > 0 ? setpreFocus(false) : setpreFocus(true); }; useEffect(() => { updateScreenSize(); window.addEventListener('resize', updateScreenSize); return () => { window.removeEventListener('resize', updateScreenSize); }; }, []); useEffect(() => { if (preFocus && screenWidth < 768) { setAutoCompleteVisible(true); } }, [screenWidth]); useEffect(() => { preFocus && screenWidth > 768 && inputRef?.current?.focus(); }, [CustChangeDropDown]); useEffect(() => { if (CreditFocus) { setAutoCompleteVisible(false); } else { preFocus && screenWidth > 768 && setAutoCompleteVisible(true); } }, [CreditFocus]); useEffect(() => { if (PreOrderSearchStatus) { setAutoCompleteVisible(false); } else { preFocus && screenWidth > 768 && setAutoCompleteVisible(true); } }, [PreOrderSearchStatus]); useEffect(() => { preFocus && screenWidth > 768 && setAutoCompleteVisible(true); preFocus && screenWidth > 768 && inputRef?.current?.focus(); }, [printStatus]); // useEffect(() => { // if (QuickAdd) { // setAutoCompleteVisible(false); // } else { // preFocus && screenWidth > 768 && setAutoCompleteVisible(true); // } // }, [QuickAdd]); useEffect(() => { if ( QuickAdd || CompoPaymentIconStatus || focusStatusCustMouse || modelQty || modelstock || ModalVarient || KioskFocusStatus ) { setAutoCompleteVisible(false); } else { preFocus && screenWidth > 768 && setAutoCompleteVisible(true); preFocus && screenWidth > 768 && inputRef?.current?.focus(); } }, [ QuickAdd, CompoPaymentIconStatus, focusStatusCustMouse, modelQty, modelstock, ModalVarient, KioskFocusStatus, ]); useEffect(() => { if (!CompoPreOrderDtlStatus && !DropDownStatus) { preFocus && screenWidth > 768 && setAutoCompleteVisible(true); preFocus && screenWidth > 768 && inputRef?.current?.focus(); } else { setAutoCompleteVisible(false); } }, [CompoPreOrderDtlStatus]); useEffect(() => { preFocus && screenWidth > 768 && inputRef?.current?.focus(); }, [CartOrderDetails]); // useEffect(() => { // if (!CompoPaymentIconStatus) { // preFocus && screenWidth > 768 && setAutoCompleteVisible(true); // // inputRef.current.click(); // preFocus && screenWidth > 768 && inputRef?.current?.focus(); // } else { // setAutoCompleteVisible(false); // } // }, [CompoPaymentIconStatus]); // useEffect(() => { // if (focusStatusCustMouse) { // setAutoCompleteVisible(false); // } else { // preFocus && screenWidth > 768 && setAutoCompleteVisible(true); // } // }, [focusStatusCustMouse]); useEffect(() => { setAutoCompleteVisible(Globalfocus ? false : true); if (!Globalfocus) { preFocus && screenWidth > 768 && inputRef?.current?.focus(); } }, [Globalfocus]); useEffect(() => { if (!preFocus) { setAutoCompleteVisible(false); } else { setAutoCompleteVisible(true); } }, [preFocus]); useEffect(() => { const handleDocumentClick = (event) => { if ( containerRef.current && event.target !== inputRef?.current && !isDescendant(containerRef?.current, event?.target) && // isDescendant(document.documentElement, event.target) && autoCompleteVisible && !Globalfocus && !QuickAdd && screenWidth > 768 && preFocus && !CreditFocus && !CompoPreOrderDtlStatus && !focusStatusCustMouse && !KioskFocusStatus ) { inputRef?.current?.focus(); } }; document.addEventListener('click', handleDocumentClick); return () => { document.removeEventListener('click', handleDocumentClick); }; }, [ inputRef, Globalfocus, autoCompleteVisible, QuickAdd, screenWidth, preFocus, CreditFocus, CompoPreOrderDtlStatus, CartOrderDetails, KioskFocusStatus, ]); useEffect(() => { if (autoCompleteVisible) { dispatch(changeCombofocus(false)); preFocus && screenWidth > 768 && inputRef?.current?.focus(); } }, [autoCompleteVisible]); const isDescendant = (parent, child) => { let node = child.parentNode; while (node !== null) { if (node === parent) { return true; } node = node.parentNode; } return false; }; const handleFocus = () => { preFocus && screenWidth > 768 && setAutoCompleteVisible(true); }; useEffect(() => { if (autoCompleteVisible) { preFocus && screenWidth > 768 && inputRef?.current?.focus(); } }, [autoCompleteVisible]); const OnfocusTrue = () => { preFocus && screenWidth > 768 && setAutoCompleteVisible(true); preFocus && screenWidth > 768 && inputRef?.current?.focus(); }; useEffect(() => { getPreferenceStock(); }, []); useEffect(() => { if (Object.keys(NewQrProductData)?.length > 0) { let addQrProductData = { ...NewQrProductData }; addQrProductData['OrderRate'] = addQrProductData['SellPrice']; addQrProductData['OrderQty'] = addQrProductData['Quantity']; addQrProductData['BookingTypeName'] = BookingType; AddOrderDetails(addQrProductData); } }, [NewQrProductData]); useEffect(() => { if (Object.keys(SelectedProduct)?.length > 0) { ProductSelected(SelectedProduct); } }, [SelectedProduct]); const stopScannerFromParent = () => { if (scannerRef.current) { scannerRef?.current?.stopScanner(); // Call stopScanner from the child component } }; const handleQrcode = () => { setOpenScanner((prev) => !prev); if (!openScanner && scannerRef.current) { scannerRef.current.reinitializeCamera(); // Call the function to reinitialize the camera } }; const handleQrData = async (value, err) => { if (err && err?.error) { setMessageData(err?.error); setMessageType('error'); } await searchdata(value); setOpenScanner(false); // Close the modal after scanning stopScannerFromParent(); }; // Clear QR tracker function const clearQrTracker = () => { setLastScannedQr(null); setCurrentSessionQr(null); }; const ProductNameOnChange = (data) => { if (isSelectingRef.current) { isSelectingRef.current = false; setProductList([]); return; // ⛔ skip search logic } if (debounceTimerRef.current) { clearTimeout(debounceTimerRef.current); } debounceTimerRef.current = setTimeout(async () => { if (searchPromiseRef.current) { searchPromiseRef.current.abort(); } await dispatch(changeSearchedData(data)); // If same QR as current session, just add quantity if (currentSessionQr === data) { if (lastScannedQr) { const updatedProduct = { ...lastScannedQr, OrderQty: (lastScannedQr.OrderQty || 1) + 1, Quantity: (lastScannedQr.Quantity || 1) + 1 }; ProductSelected(updatedProduct); } return; } try { // 🚀 Call API for new session QR code searchPromiseRef.current = dispatch( getProductsearch({ CompId, BranchId, AppId, ProdName: data, }) ); const ProductListNew = await searchPromiseRef.current.unwrap(); if (ProductListNew?.statusCode === 1) { const ApiSearchData = ProductListNew?.data?.[0]; if ( ApiSearchData?.QrBasedSearch === 'Y' || ApiSearchData?.OnePcQRBased === 'Y' ) { setCurrentSessionQr(data); setLastScannedQr(ApiSearchData); ProductSelected(ApiSearchData); setQuickAdd(false); } else if (!ApiSearchData.ProdId && ApiSearchData?.AppId == 0) { setQuickAdd(true); } else { setProductList(ProductListNew?.data); } } else if (data?.length > 5) { setQuickAdd(true); } else { setProductList(null); } } catch (error) { // ❌ Ignore abort errors if (error?.name !== 'AbortError' && error?.name !== 'CanceledError') { console.error('Search error:', error); } } }, 400); // 👈 debounce delay }; const getPreferenceStock = async () => { const PreferenceStckDtl = preferenceDatas?.[0]?.SettingDtlDetails; const StockPreference = PreferenceStckDtl.find( (item) => item.SettingIdName === 'StockSelection' ); setStockPreferenceDetail(StockPreference); const expiredDate = PreferenceStckDtl?.find( (item) => item.SettingIdName === 'ExpiredSelection' )?.SettingValue === 'Y'; setExpiredProduct(expiredDate); }; const ProductOnSelect = async (data) => { isSelectingRef.current = true; let ProdNamedata = ProductList?.find((item) => item.ProdName === data); setSelectedProduct(ProdNamedata); }; const ProductSelected = (item) => { if (item.OverAllExpStatus == 'Y') { setexpModel(true); setItem(item); } else { setQtydata(item); let count = item?.ProductDetail?.length; if (count > 1) { Quantity(); } else { setQtyIndex(0); SingleQuantity(item, onePeiceFlow); // SingleQuantity(item, item?.OnePcQRBased == 'Y'); } } }; const returnQtyCount = (ProdId, item, orderDetails) => { if (onePeiceFlow) { let ItemQuantity = item?.ProdVariantDetails?.reduce( (accumulator, card) => { return accumulator + parseInt(card.OverAllPcs || 0); }, 0 ); let SelectedProduct = ReorderProductData?.filter( (a) => a?.ProdId === ProdId ); let totalSelectedProductQty = SelectedProduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0 ); let getCurrentProdDtl = orderDetails?.filter((a) => a?.ProdId === ProdId); let totalOrderQty = getCurrentProdDtl?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0); let OverallProdQty = totalOrderQty - totalSelectedProductQty; if ( parseInt(ItemQuantity) > parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ) ) { let count = parseInt(ItemQuantity) - parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ); return parseInt(count); } else { let count = 0; return count; } } else { let ItemQuantity = item?.ProdVariantDetails?.reduce( (accumulator, card) => { return accumulator + parseInt(card.OverAllQty || 0); }, 0 ); let SelectedProduct = ReorderProductData?.filter( (a) => a?.ProdId === ProdId ); let totalSelectedProductQty = SelectedProduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? 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 getCurrentProdDtl = orderDetails?.filter((a) => a?.ProdId === ProdId); let totalOrderQty = getCurrentProdDtl?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? 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 OverallProdQty = totalOrderQty - totalSelectedProductQty; if ( parseInt(ItemQuantity) > parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ) ) { let count = parseInt(ItemQuantity) - parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ); return parseInt(count); } else { let count = 0; return count; } } }; const returnCountStock = ( ProdId, currentQty, orderDetails, InwardDtlId, onepcavailable ) => { if (onepcavailable === 'Y') { let SelectedProduct = ReorderProductData?.filter( (a) => a?.ProdId === ProdId && a?.InwardDtlId === InwardDtlId ); let totalSelectedProductQty = SelectedProduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0 ); let getCurrentProdDtl = orderDetails?.filter( (a) => a?.ProdId === ProdId && a?.InwardDtlId === InwardDtlId ); let totalOrderQty = getCurrentProdDtl?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0); let OverallProdQty = totalOrderQty - totalSelectedProductQty; if ( parseInt(currentQty) > parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ) ) { let count = parseInt(currentQty) - parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ); return parseInt(count); } else { let count = 0; return count; } } else { let SelectedProduct = ReorderProductData?.filter( (a) => a?.ProdId === ProdId && a?.InwardDtlId === InwardDtlId ); let totalSelectedProductQty = SelectedProduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? 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 getCurrentProdDtl = orderDetails?.filter( (a) => a?.ProdId === ProdId && a?.InwardDtlId === InwardDtlId ); let totalOrderQty = getCurrentProdDtl?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? 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 OverallProdQty = totalOrderQty - totalSelectedProductQty; if ( parseInt(currentQty) > parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ) ) { let count = parseInt(currentQty) - parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? OverallProdQty : getCurrentProdDtl ? totalOrderQty : 0 ); return parseInt(count); } else { let count = 0; return count; } } }; const returnVariantStock = ( ProdId, currentQty, orderDetails, ProdVariantName ) => { // let ReorderProdetails = BookingType === "Dine In" && !UnpaidData ? ReportholdData?.OrderDtlDetails // : BookingType === "Dine In" && UnpaidData ? ReportholdData?.productDetails // : ReportholdData?.productDetails if (onePeiceFlow) { let SelectedProduct = ReorderProductData?.filter( (a) => a?.ProdId === ProdId && a?.ProdVariantName === ProdVariantName ); let totalSelectedProductQty = SelectedProduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0 ); let getCurrentProdDtl = orderDetails?.filter( (a) => a?.ProdId === ProdId && a?.ProdVariantName === ProdVariantName ); let totalOrderQty = getCurrentProdDtl?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0); if ( parseInt(currentQty) > parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? totalOrderQty - totalSelectedProductQty : getCurrentProdDtl ? totalOrderQty : 0 ) ) { let count = parseInt(currentQty) - parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? totalOrderQty - totalSelectedProductQty : getCurrentProdDtl ? totalOrderQty : 0 ); return parseInt(count); } else { let count = 0; return count; } } else { let SelectedProduct = ReorderProductData?.filter( (a) => a?.ProdId === ProdId && a?.ProdVariantName === ProdVariantName ); let totalSelectedProductQty = SelectedProduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? 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 getCurrentProdDtl = orderDetails?.filter( (a) => a?.ProdId === ProdId && a?.ProdVariantName === ProdVariantName ); let totalOrderQty = getCurrentProdDtl?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? 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); if ( parseInt(currentQty) > parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? totalOrderQty - totalSelectedProductQty : getCurrentProdDtl ? totalOrderQty : 0 ) ) { let count = parseInt(currentQty) - parseInt( Object.keys(ReportholdData)?.length > 0 && totalOrderQty ? totalOrderQty - totalSelectedProductQty : getCurrentProdDtl ? totalOrderQty : 0 ); return parseInt(count); } else { let count = 0; return count; } } }; const StockDate = (date) => { let dateVal = moment(date, ['YYYY-MM-DDTHH:mm:ss']).format('DD-MM-YYYY'); return dateVal; }; const varientcolumns = [ { title: 'Variant Name', dataIndex: 'VarientName', key: 'VarientName', align: 'left', render: (_, record, index) => ( 0 || record.StockCount === 'Stock Not Maintained' ? { color: '#000', cursor: 'pointer' } : { color: '#f49898', cursor: 'not-allowed' } } > {record.VarientName} ), onCell: (record) => { return { onClick: () => { if ( record.StockCount > 0 || record.StockCount === 'Stock Not Maintained' ) { Stockfun(record); } }, }; }, }, { title: 'Stock Count', dataIndex: 'StockCount', key: 'StockCount', align: 'Right', render: (_, record, index) => ( 0 || record.StockCount === 'Stock Not Maintained' ? { color: '#000', cursor: 'pointer' } : { color: '#f49898', cursor: 'not-allowed' } } > {record.StockCount} ), onCell: (record) => { return { onClick: () => { if ( record.StockCount > 0 || record.StockCount === 'Stock Not Maintained' ) { Stockfun(record); } }, }; }, }, { title: 'Amount', dataIndex: 'Amount', key: 'Amount', align: 'right', render: (_, record, index) => ( 0 || record.StockCount === 'Stock Not Maintained' ? { color: '#000', cursor: 'pointer' } : { color: '#f49898', cursor: 'not-allowed' } } > {safeRound(record.Amount)} ), onCell: (record) => { return { onClick: () => { if ( record.StockCount > 0 || record.StockCount === 'Stock Not Maintained' ) { Stockfun(record); } }, }; }, }, // { // title:'Stock Quantity', // dataIndex:'StockCount', // key:'StockCount', // align: 'right', // onCell: (record) => { // return { // onClick: () => { // if (record.StockCount > 0 || record.StockCount==='Stock Not Maintained') { // Stockfun(record); // } // }, // }; // }, // } ]; const stockcolumns = [ { title: 'Batch No', dataIndex: 'Batch No', key: 'Batch No', align: 'center', render: (text, record, index) => ( 0 ? { color: '#000', cursor: 'pointer' } : { color: '#f49898', cursor: 'not-allowed' } } > {record?.['Batch No']} ), onCell: (record) => { return { onClick: () => { if (record.StockCount > 0) { StockSelected(record); } }, }; }, }, { title: 'Stock Count', dataIndex: 'StockCount', key: 'StockCount', align: 'center', render: (_, record, index) => ( 0 ? { color: '#000', cursor: 'pointer' } : { color: '#f49898', cursor: 'not-allowed' } } > {record.StockCount} ), onCell: (record) => { return { onClick: () => { if (record.StockCount > 0) { StockSelected(record); } }, }; }, }, { title: 'Stock Date', dataIndex: 'Stock Date', key: 'Stock Date', align: 'center', render: (_, record, index) => ( 0 ? { color: '#000', cursor: 'pointer' } : { color: '#f49898', cursor: 'not-allowed' } } > {record?.['Stock Date']} ), onCell: (record) => { return { onClick: () => { if (record.StockCount > 0) { StockSelected(record); } }, }; }, }, { title: 'Exp Date', dataIndex: 'ExpDate', key: 'ExpDate', align: 'center', render: (_, record, index) => ( 0 ? { color: '#000', cursor: 'pointer' } : { color: '#f49898', cursor: 'not-allowed' } } > {record.ExpDate} ), onCell: (record) => { return { onClick: () => { if (record.StockCount > 0) { StockSelected(record); } }, }; }, }, { title: 'Price', dataIndex: 'Price', key: 'Price', align: 'center', render: (text) => {safeRound(text)}, onCell: (record) => { return { onClick: () => { if (record.StockCount > 0) { StockSelected(record); } }, }; }, }, ]; const qtydataSource = []; qtydata?.ProductDetail?.map((item, index) => { qtydataSource.push({ key: index, Quantity: item?.Size + ' ' + item?.UomName, Amount: item?.ProdVariantDetails?.[0]?.StockDetails?.[0]?.SellPrice, }); }); const varientdataSource = []; qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.map((item, index) => { varientdataSource.push({ key: index, VarientName: item?.ProdVariantName, Amount: onePeiceFlow ? item?.StockDetails?.[0]?.OnePcsPrice : item?.StockDetails?.[0]?.SellPrice, StockCount: qtydata?.ProductDetail?.[0]?.StockAvailable === 'Y' ? returnVariantStock( qtydata?.ProductDetail?.[QtyIndex]?.ProdId, item?.OverAllQty, CartOrderDetails, item?.ProdVariantName ) : 'Stock Not Maintained', }); }); const stockdataSource = []; qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ VarientIndex ]?.StockDetails?.map((item, index) => { const expDate = new Date(item?.ExpDate); stockdataSource.push({ key: index, 'Batch No': item?.BatchRef, StockCount: onePeiceFlow ? returnCountStock( item?.ProdId, item?.BalanceQty, CartOrderDetails, item?.InwardDtlId ) * item?.NoOfPcs : returnCountStock( item?.ProdId, item?.BalanceQty, CartOrderDetails, item?.InwardDtlId ), 'Stock Date': StockDate(item?.InwardDate), Price: onePeiceFlow ? item?.OnePcsPrice : item?.SellPrice, ExpDate: expDate != 'Invalid Date' || null || undefined || '' ? StockDate(item?.ExpDate) : '-', }); }); const CloseModal = () => { setModelQty(false); setRepeatedModel(false); setProdexpir(false); setOnePeiceFlow(false); }; const CloseModal1 = () => { setModelstock(false); setRepeatedModel(false); setProdexpir(false); setOnePeiceFlow(false); }; const CloseVarientModal = () => { setModalVarient(false); setRepeatedModel(false); setProdexpir(false); setOnePeiceFlow(false); }; const Quantity = () => { setModelQty(true); }; const SingleQuantity = (item, onePcs) => { let count = item?.ProductDetail?.[0]?.ProdVariantDetails.length; if (count > 1) { setModalVarient(true); } else { setVarientIndex(0); SingleStockfun(item, onePcs); } }; const SingleStockfun = (item, onePcs) => { let count = item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.length; if (StockPreferenceDetail?.SettingValue === 'Y') { if (count > 1) { setModelstock(true); } else { let Isincart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === item?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ VarientIndex ]?.StockDetails?.[0]?.SellPrice && !cartItem?.SalesId ); if (onePcs) { let Isincartonepc = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === item?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && // (cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex]?.StockDetails?.[0]?.SellPrice) !cartItem?.SalesId ); let totalOrderQty = Isincartonepc?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0); if (Isincartonepc && Isincartonepc?.[0]?.StockAvailable === 'Y') { if (Isincartonepc?.[0]?.OverAllPcs > totalOrderQty) { dataTransfer(item, 0, 0, 0, onePcs); } else { dataTransfer(item, 0, 0, 1, onePcs); } } else { dataTransfer(item, 0, 0, 0, onePcs); } } else { if (Isincart && Isincart?.StockAvailable === 'Y') { if (Isincart?.BalanceQty > Isincart?.OrderQty) { dataTransfer(item, 0, 0, 0, onePcs); } else { dataTransfer(item, 0, 0, 1, onePcs); } } else { dataTransfer(item, 0, 0, 0, onePcs); } } } } else { let Isincart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === item?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[0]?.InwardDtlId && cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[0]?.SellPrice && !cartItem?.SalesId ); if (onePcs) { let Isincartonepc = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === item?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && // (cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex]?.StockDetails?.[0]?.SellPrice) !cartItem?.SalesId ); let totalOrderQty = Isincartonepc?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * (card.NoOfPcs ? card.NoOfPcs : 1) : card.OrderQty : 0 ) ); }, 0); if (Isincartonepc && Isincartonepc?.[0]?.StockAvailable === 'Y') { if (Isincartonepc?.[0]?.OverAllPcs > totalOrderQty) { dataTransfer(item, 0, 0, 0, onePcs); } else { dataTransfer(item, 0, 0, 1, onePcs); } } else { dataTransfer(item, 0, 0, 0, onePcs); } } else { if (Isincart && Isincart?.StockAvailable === 'Y') { if (Isincart?.BalanceQty > Isincart?.OrderQty) { dataTransfer(item, 0, 0, 0, onePcs); } else { dataTransfer(item, 0, 0, 1, onePcs); } } else { dataTransfer(item, 0, 0, 0, onePcs); } } } }; const Stockfun = (index) => { setVarientIndex(index.key); const variantDetails = qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[index.key] || {}; const overallExpStatus = variantDetails.OverAllExpStatus; const count = variantDetails.StockDetails?.length || 0; if (StockPreferenceDetail?.SettingValue === 'Y') { if (count > 1) { if ( overallExpStatus === 'N' || (overallExpStatus === 'Y' && prodexpir) ) { setModalVarient(false); setModelstock(true); setVarItem(index.key); if (overallExpStatus === 'Y' && prodexpir) { setRepeatedModel(true); } } else if (overallExpStatus === 'Y' && ExpiredProduct) { setVarItem(index.key); setexpVarModel(true); } } else { if ( overallExpStatus === 'N' || (overallExpStatus === 'Y' && prodexpir) ) { let Isincart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ index.key ]?.StockDetails?.[0]?.InwardDtlId && cartItem?.OrderRate === qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ index.key ]?.StockDetails?.[0]?.SellPrice && !cartItem?.SalesId ); if (onePeiceFlow) { let Isincartonepc = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && // (cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex]?.StockDetails?.[0]?.SellPrice) !cartItem?.SalesId ); let totalOrderQty = Isincartonepc?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * (card.NoOfPcs ? card.NoOfPcs : 1) : card.OrderQty : 0 ) ); }, 0); if (Isincartonepc && Isincartonepc?.[0]?.StockAvailable === 'Y') { if (Isincartonepc?.[0]?.OverAllPcs > totalOrderQty) { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } else { dataTransfer(qtydata, QtyIndex, index.key, 1, onePeiceFlow); } } else { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } } else { if (Isincart && Isincart?.StockAvailable === 'Y') { if (Isincart?.BalanceQty > Isincart?.OrderQty) { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } else { dataTransfer(qtydata, QtyIndex, index.key, 1, onePeiceFlow); } } else { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } } setModelQty(false); setVarItem(index.key); if (overallExpStatus === 'Y' && prodexpir) { setProdexpir(false); setRepeatedModel(true); } } else if (overallExpStatus === 'Y') { setVarItem(index.key); if (!ExpiredProduct) { expVerFun(index.key); } else { setexpVarModel(true); } } } } else { let Isincart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[index.key] ?.StockDetails?.[0]?.InwardDtlId && cartItem?.OrderRate === qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[index.key] ?.StockDetails?.[0]?.SellPrice && !cartItem?.SalesId ); if (onePeiceFlow) { let Isincartonepc = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[ VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && // (cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex]?.StockDetails?.[0]?.SellPrice) !cartItem?.SalesId ); let totalOrderQty = Isincartonepc?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * (card.NoOfPcs ? card.NoOfPcs : 1) : card.OrderQty : 0 ) ); }, 0); if (Isincartonepc && Isincartonepc?.[0]?.StockAvailable === 'Y') { if (Isincartonepc?.[0]?.OverAllPcs > totalOrderQty) { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } else { dataTransfer(qtydata, QtyIndex, index.key, 1, onePeiceFlow); } } else { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } } else { if (Isincart && Isincart?.StockAvailable === 'Y') { if (Isincart?.BalanceQty > Isincart?.OrderQty) { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } else { dataTransfer(qtydata, QtyIndex, index.key, 1, onePeiceFlow); } } else { dataTransfer(qtydata, QtyIndex, index.key, 0, onePeiceFlow); } } setModelQty(false); } }; const VarientFun = (index) => { const QtyExpire = index?.ProdVariantDetails?.every( (item) => item.OverAllExpStatus === 'Y' ); if (QtyExpire && ExpiredProduct) { setExpQtyModel(true); setQtyExpData(index); } else { let selectedProIndex = qtydata?.ProductDetail?.findIndex( (item) => item?.ProdId === index?.ProdId && item?.Size === index?.Size && item?.UomName === index?.UomName && item?.Brand === index?.Brand ); setQtyIndex(selectedProIndex); let count = qtydata?.ProductDetail[selectedProIndex]?.ProdVariantDetails?.length; if (count > 1) { setModelQty(false); setModalVarient(true); } else { const item = { QtyIndex: selectedProIndex, VarientIndex: 0 }; singleVarient(item); setModelQty(false); } } }; const singleVarient = (item) => { let count = qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdVariantDetails?.[ item?.VarientIndex ]?.StockDetails?.length; if (StockPreferenceDetail?.SettingValue === 'Y') { if (count > 1) { setModalVarient(false); setModelstock(true); // setVarientIndex(index.key) } else { let Isincart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdVariantDetails?.[ item?.VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && cartItem?.OrderRate === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdVariantDetails?.[ item?.VarientIndex ]?.StockDetails?.[0]?.SellPrice && !cartItem?.SalesId ); if (onePeiceFlow) { let Isincartonepc = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdVariantDetails?.[ item?.VarientIndexs ]?.StockDetails?.[0]?.InwardDtlId && // (cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex]?.StockDetails?.[0]?.SellPrice) !cartItem?.SalesId ); let totalOrderQty = Isincartonepc?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0); if (Isincartonepc && Isincartonepc?.[0]?.StockAvailable === 'Y') { if (Isincartonepc?.[0]?.OverAllPcs > totalOrderQty) { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 1, onePeiceFlow ); } } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } } else { if (Isincart && Isincart?.StockAvailable === 'Y') { if (Isincart?.BalanceQty > Isincart?.OrderQty) { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 1, onePeiceFlow ); } } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } } setModelQty(false); } } else { let Isincart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdVariantDetails?.[ item?.VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && cartItem?.OrderRate === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdVariantDetails?.[ item?.VarientIndex ]?.StockDetails?.[0]?.SellPrice && !cartItem?.SalesId ); if (onePeiceFlow) { let Isincartonepc = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdId && cartItem?.InwardDtlId === qtydata?.ProductDetail?.[item?.QtyIndex]?.ProdVariantDetails?.[ item?.VarientIndex ]?.StockDetails?.[0]?.InwardDtlId && // (cartItem?.OrderRate === item?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex]?.StockDetails?.[0]?.SellPrice) !cartItem?.SalesId ); let totalOrderQty = Isincartonepc?.reduce((accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? card.SinglePc !== 'Y' ? card.OrderQty * card.NoOfPcs : card.OrderQty : 0 ) ); }, 0); if (Isincartonepc && Isincartonepc?.[0]?.StockAvailable === 'Y') { if (Isincartonepc?.[0]?.OverAllPcs > totalOrderQty) { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 1, onePeiceFlow ); } } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } } else { if (Isincart && Isincart?.StockAvailable === 'Y') { if (Isincart?.BalanceQty > Isincart?.OrderQty) { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 1, onePeiceFlow ); } } else { dataTransfer( qtydata, item?.QtyIndex, item?.VarientIndex, 0, onePeiceFlow ); } } setModelQty(false); } }; const StockSelected = (item) => { const stockDetails = qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[item.key] || {}; const overallExpStatus = stockDetails?.OverAllExpStatus; if (overallExpStatus === 'N' || overallExpStatus === 'Y') { const firstStockDetails = qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[0] ?.StockDetails?.[item.key] || {}; const firstOverallExpStatus = firstStockDetails.OverAllExpStatus; if ( overallExpStatus === 'N' || (firstOverallExpStatus === 'Y' && prodexpir) ) { dataTransfer(qtydata, QtyIndex, VarientIndex, item.key, onePeiceFlow); } else if (overallExpStatus === 'Y' && repeatedModel) { dataTransfer(qtydata, QtyIndex, VarientIndex, item.key, onePeiceFlow); } else { setexpStockModel(true); setStockItem(item.key); } } setProdexpir(false); setRepeatedModel(false); }; useEffect(() => { if (Object.keys(WSProductdata)?.length > 0) { AddOrderDetails(WSProductdata); } }, [WSProductdata]); const dataTransfer = (a, QtyIndex, VarientIndex, stockIndex, onePcs) => { const isKgsProduct = (a?.ProductDetail?.[QtyIndex]?.UomName?.toLowerCase() === 'kgs' || a?.ProductDetail?.[QtyIndex]?.UomName?.toLowerCase() === 'kg'?.toLowerCase()) && a?.ProductDetail?.[QtyIndex]?.Size === '1'; if ( WeightScalePort === true && isKgsProduct && WeightScaleWeight > 0.005 && WeightScaleWeight !== null ) { // if ( // (a?.ProductDetail?.[QtyIndex]?.UomName?.toLowerCase() === // 'KGS'?.toLowerCase() || // a?.ProductDetail?.[QtyIndex]?.UomName?.toLowerCase() === // 'KG'?.toLowerCase()) && // a?.ProductDetail?.[QtyIndex]?.Size === 1 // ) { // if (WeightScaleWeight > 0 && WeightScaleWeight !== null) { let TotalOrderRate = parseFloat( onePcs ? (a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OnePcsPrice / 1000) * (parseFloat(WeightScaleWeight) * 1000) : a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.SellPrice / 1000 ) * (parseFloat(WeightScaleWeight) * 1000); let data = { Type: a?.Type, OverallQuantity: a?.OverAllQty, ActiveStatus: a?.ProductDetail?.[QtyIndex]?.ActiveStatus, AvailableFrom: a?.ProductDetail?.[QtyIndex]?.AvailableFrom, AvailableTo: a?.ProductDetail?.[QtyIndex]?.AvailableTo, Cess: a?.ProductDetail?.[QtyIndex]?.Cess, HSNCode: a?.ProductDetail?.[QtyIndex]?.HSNCode, BrandName: a?.ProductDetail?.[QtyIndex]?.BrandName, // 'ManufDate': a?.ProductDetail?.[QtyIndex]?.ManufDate, OpeningQty: a?.ProductDetail?.[QtyIndex]?.OpeningQty, PartNumber: a?.ProductDetail?.[QtyIndex]?.PartNumber, ProdId: a?.ProductDetail?.[QtyIndex]?.ProdId, ProdLogo: a?.ProductDetail?.[QtyIndex]?.ProdLogo, ProdName: a?.ProductDetail?.[QtyIndex]?.ProdName, QRCode: a?.ProductDetail?.[QtyIndex]?.QRCode, QtyBasedPrice: a?.ProductDetail?.[QtyIndex]?.QtyBasedPrice, Rack: a?.ProductDetail?.[QtyIndex]?.Rack, Size: parseFloat(WeightScaleWeight), StockAvailable: a?.ProductDetail?.[QtyIndex]?.StockAvailable, TokenAvailable: a?.ProductDetail?.[QtyIndex]?.TokenAvailable, TaxId: a?.ProductDetail?.[QtyIndex]?.TaxId, TaxPercentage: a?.ProductDetail?.[QtyIndex]?.TaxPercentage, TaxName: a?.ProductDetail?.[QtyIndex]?.TaxIdName, UniqueId: a?.ProductDetail?.[QtyIndex]?.UniqueId, UomName: onePcs ? 'PCS' : a?.ProductDetail?.[QtyIndex]?.UomName, SinglePc: onePcs ? 'Y' : 'N', NoOfPcs: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.NoOfPcs, ProdVariantName: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.ProdVariantName, BalanceQty: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.BalanceQty, BatchRef: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.BatchRef, InwardDate: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.InwardDate, InwardDtlId: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.InwardDtlId, ExpDate: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.ExpDate, InwardId: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.InwardId, MRP: onePcs ? a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OnePcsPrice : a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.MRP, OrderRate: parseFloat(TotalOrderRate).toFixed(2), SellingPrice: parseFloat(TotalOrderRate).toFixed(2), SuppId: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.SuppId, SuppName: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.SuppName, OverAllPcs: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OverAllPcs, Offer: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OfferPrice, BookingTypeName: BookingType, CounterName: a?.CounterName, }; setModelQty(false); setModalVarient(false); setModelstock(false); setQtyIndex(0); setVarientIndex(0); setVarItem(0); (setItem(), setStockItem()); dispatch(changeSearchedData('')); AddOrderDetails(data); // dispatch(changeWeightScaleWeight(null)); setRepeatedModel(false); setProdexpir(false); setOnePeiceFlow(false); // } else { // setMessageType('error'); // setMessageData('Please Connect WeightScale'); // } // } else { // setMessageType('error'); // setMessageData('Please Select 1Kg Product'); // } } else { if ( (onePcs && a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.NoOfPcs > 0 && a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OnePcsPrice > 0) || !onePcs || (a?.ProductDetail?.[QtyIndex]?.StockAvailable !== 'Y' && onePcs && a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OnePcsPrice > 0) ) { let data = { Type: a?.Type, OverallQuantity: a?.OverAllQty, ActiveStatus: a?.ProductDetail?.[QtyIndex]?.ActiveStatus, AvailableFrom: a?.ProductDetail?.[QtyIndex]?.AvailableFrom, AvailableTo: a?.ProductDetail?.[QtyIndex]?.AvailableTo, Cess: a?.ProductDetail?.[QtyIndex]?.Cess, HSNCode: a?.ProductDetail?.[QtyIndex]?.HSNCode, BrandName: a?.ProductDetail?.[QtyIndex]?.BrandName, // 'ManufDate': a?.ProductDetail?.[QtyIndex]?.ManufDate, OpeningQty: a?.ProductDetail?.[QtyIndex]?.OpeningQty, PartNumber: a?.ProductDetail?.[QtyIndex]?.PartNumber, ProdId: a?.ProductDetail?.[QtyIndex]?.ProdId, ProdLogo: a?.ProductDetail?.[QtyIndex]?.ProdLogo, ProdName: a?.ProductDetail?.[QtyIndex]?.ProdName, QRCode: a?.ProductDetail?.[QtyIndex]?.QRCode, QtyBasedPrice: a?.ProductDetail?.[QtyIndex]?.QtyBasedPrice, Rack: a?.ProductDetail?.[QtyIndex]?.Rack, Size: onePcs ? '1' : a?.ProductDetail?.[QtyIndex]?.Size, StockAvailable: a?.ProductDetail?.[QtyIndex]?.StockAvailable, TokenAvailable: a?.ProductDetail?.[QtyIndex]?.TokenAvailable, TaxId: a?.ProductDetail?.[QtyIndex]?.TaxId, TaxPercentage: a?.ProductDetail?.[QtyIndex]?.TaxPercentage, TaxName: a?.ProductDetail?.[QtyIndex]?.TaxIdName, UniqueId: a?.ProductDetail?.[QtyIndex]?.UniqueId, UomName: a?.ProductDetail?.[QtyIndex]?.UomName, SinglePc: onePcs ? 'Y' : 'N', NoOfPcs: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.NoOfPcs, ProdVariantName: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.ProdVariantName, BalanceQty: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.BalanceQty, BatchRef: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.BatchRef, InwardDate: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.InwardDate, InwardDtlId: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.InwardDtlId, ExpDate: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.ExpDate, InwardId: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.InwardId, MRP: onePcs ? a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OnePcsPrice : a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.MRP, OrderRate: onePcs ? a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OnePcsPrice : a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.SellPrice, SellingPrice: onePcs ? a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OnePcsPrice : a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.SellPrice, SuppId: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.SuppId, OverAllPcs: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OverAllPcs, SuppName: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.SuppName, Offer: a?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[VarientIndex] ?.StockDetails?.[stockIndex]?.OfferPrice, BookingTypeName: BookingType, CounterName: a?.CounterName, }; setModelQty(false); setModalVarient(false); setModelstock(false); setQtyIndex(0); setVarientIndex(0); setVarItem(0); (setItem(), setStockItem()); dispatch(changeSearchedData('')); AddOrderDetails(data); setOnePeiceFlow(false); } else { setMessageType('error'); setMessageData( 'Please add No.of pieces Inside the box in Product master' ); formRef.current.resetFields(['ItemName']); setSelectedProduct({}); setModelQty(false); setModalVarient(false); setModelstock(false); setQtyIndex(0); setVarientIndex(0); setVarItem(0); (setItem(), setStockItem()); dispatch(changeSearchedData('')); setOnePeiceFlow(false); } } }; const CalculateOverallQty = (item, filterItem) => { console.log(item, filterItem, 'totalQuantitytotalQuantity'); const totalQuantity = filterItem?.reduce((accumulator, card) => { if (card?.StockAvailable !== 'Y') return accumulator; if (item?.SinglePc !== 'Y') { let quantity = 0; if (card?.SinglePc !== 'Y') { quantity = card.OrderQty; } else { if (card?.OverAllPcs % card?.NoOfPcs >= card?.OrderQty) { quantity = 0; } else { quantity = Math.ceil(card?.OrderQty / card?.NoOfPcs); } } return accumulator + parseInt(quantity); } else { let quantity = 0; if (card?.SinglePc !== 'Y') { quantity = card?.OrderQty * card?.NoOfPcs; } else { quantity = card?.OrderQty; } return accumulator + parseInt(quantity); } }, 0); console.log( item?.OverAllPcs, item?.BalanceQty, totalQuantity, 'totalQuantity' ); if (!item) return 0; return ( (item?.SinglePc === 'Y' ? item?.OverAllPcs : item?.BalanceQty) - totalQuantity ); }; const AddOrderDetails = async (item) => { dispatch(changeHoldOrderDtl(false)); dispatch(changePreviousOrderLength(CartOrderDetails?.length)); const OtherOrderDatas = CartOrderDetails?.filter( (cartItem) => !( cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName ) && !cartItem?.SalesId ); const OtherOrderDatawithsales = CartOrderDetails?.filter( (cartItem) => cartItem?.SalesId ); const OtherorderDataforNormal = CartOrderDetails?.filter( (cartItem) => !( cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName && !cartItem?.SalesId ) ); const isItemInCart = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName && !cartItem?.SalesId ); // check if the item is already in the cart const isItemInCartfilter = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && !( cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName ) && !cartItem?.SalesId ); // check if the item is already in the cart console.log( isItemInCartfilter, isItemInCart, 'isItemInCartfilterisItemInCartfilter' ); const isItemNotInDine = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName && !cartItem?.SalesId ); // check if the item is already in the cart const isItemInCartHold = CartOrderDetails?.find( (cartItem) => cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName ); // check if the item is already in the cart const isItemInCartHoldfilter = CartOrderDetails?.filter( (cartItem) => cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && !( cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName ) ); // check if the item is already in the cart const holddataproduct = ReorderProductData?.filter( (cartItem) => cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId ); let totalSelectedProductQty = holddataproduct?.reduce( (accumulator, card) => { return ( accumulator + parseInt( card?.StockAvailable === 'Y' ? item?.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 OverallQuantityhold = CalculateOverallQty(isItemInCartHold, isItemInCartHoldfilter) + totalSelectedProductQty; console.log( CalculateOverallQty(isItemInCart, isItemInCartfilter), isItemInCart, totalSelectedProductQty, OverallQuantityhold, 'calculate' ); const OtherorderDataforNormalWithoutSalesId = CartOrderDetails?.filter( (cartItem) => !( cartItem?.ProdId === item?.ProdId && cartItem?.InwardDtlId === item?.InwardDtlId && cartItem?.OrderRate === item?.OrderRate && cartItem?.BookingTypeName === item?.BookingTypeName ) ); if ( isItemInCart && BookingType != 'Dine In' && OrderType != 'Hold' && OrderType != 'PreOrder' ) { if ( (CalculateOverallQty(isItemInCart, isItemInCartfilter) > isItemInCart?.OrderQty && isItemInCart?.StockAvailable === 'Y') || isItemInCart?.StockAvailable !== 'Y' ) { const UpdatedCartItem = // if the item is already in the cart, increase the quantity of the item { ...isItemInCart, OrderQty: isItemInCart?.OrderQty + 1, TotalAmt: (isItemInCart?.OrderQty + 1) * isItemInCart?.OrderRate, TaxAmt: ( ((isItemInCart?.OrderQty + 1) * isItemInCart?.OrderRate * isItemInCart?.TaxPercentage) / (100 + isItemInCart?.TaxPercentage) ).toFixed(2), WithoutTaxRate: (isItemInCart?.OrderQty + 1) * isItemInCart?.OrderRate - ( ((isItemInCart?.OrderQty + 1) * isItemInCart?.OrderRate * isItemInCart?.TaxPercentage) / (100 + isItemInCart?.TaxPercentage) ).toFixed(2), }; const UpdatedData = addFirst ? [UpdatedCartItem, ...OtherorderDataforNormal] : [...OtherorderDataforNormal, UpdatedCartItem]; // if (OfferCheckedInSetup) { // await applyOffer(UpdatedData); // } else { dispatch(changeOrderCardDetails(UpdatedData)); // } } else { setMessageType('error'); setMessageData('Stock Not Available'); formRef.current.resetFields(['ItemName']); setSelectedProduct({}); } } else if (isItemInCartHold && OrderType === 'Hold') { if ( (OverallQuantityhold > isItemInCartHold?.OrderQty && isItemInCartHold?.StockAvailable === 'Y') || isItemInCartHold?.StockAvailable !== 'Y' ) { const UpdatedCartItem = { ...isItemInCartHold, OrderQty: isItemInCartHold?.OrderQty + 1, TotalAmt: (isItemInCartHold?.OrderQty + 1) * isItemInCartHold?.OrderRate, TaxAmt: ( ((isItemInCartHold?.OrderQty + 1) * isItemInCartHold?.OrderRate * isItemInCartHold?.TaxPercentage) / (100 + isItemInCartHold?.TaxPercentage) ).toFixed(2), WithoutTaxRate: (isItemInCartHold?.OrderQty + 1) * isItemInCartHold?.OrderRate - ( ((isItemInCartHold?.OrderQty + 1) * isItemInCartHold?.OrderRate * isItemInCartHold?.TaxPercentage) / (100 + isItemInCartHold?.TaxPercentage) ).toFixed(2), }; // otherwise, return the cart item const UpdatedData = addFirst ? [UpdatedCartItem, ...OtherorderDataforNormalWithoutSalesId] : [...OtherorderDataforNormalWithoutSalesId, UpdatedCartItem]; // if (OfferCheckedInSetup) { // await applyOffer(UpdatedData); // } else { dispatch(changeOrderCardDetails(UpdatedData)); // } } else { setMessageType('error'); setMessageData('Stock Not Available'); formRef.current.resetFields(['ItemName']); setSelectedProduct({}); } } else if ( isItemNotInDine && BookingType == 'Dine In' && OrderType != 'Hold' ) { if ( (CalculateOverallQty(isItemInCart, isItemInCartfilter) > isItemNotInDine?.OrderQty && isItemNotInDine?.StockAvailable === 'Y') || isItemNotInDine?.StockAvailable !== 'Y' ) { const UpdatedCartItem = { ...isItemNotInDine, OrderQty: isItemNotInDine?.OrderQty + 1, TotalAmt: (isItemNotInDine?.OrderQty + 1) * isItemNotInDine?.OrderRate, TaxAmt: ( ((isItemNotInDine?.OrderQty + 1) * isItemNotInDine?.OrderRate * isItemNotInDine?.TaxPercentage) / (100 + isItemNotInDine?.TaxPercentage) ).toFixed(2), WithoutTaxRate: (isItemNotInDine?.OrderQty + 1) * isItemNotInDine?.OrderRate - ( ((isItemNotInDine?.OrderQty + 1) * isItemNotInDine?.OrderRate * isItemNotInDine?.TaxPercentage) / (100 + isItemNotInDine?.TaxPercentage) ).toFixed(2), }; // otherwise, return the cart item const UpdatedData = addFirst ? [UpdatedCartItem, ...OtherOrderDatas, ...OtherOrderDatawithsales] : [...OtherOrderDatas, ...OtherOrderDatawithsales, UpdatedCartItem]; // if (OfferCheckedInSetup) { // await applyOffer(UpdatedData); // } else { dispatch(changeOrderCardDetails(UpdatedData)); // } } else { setMessageType('error'); setMessageData('Stock Not Available'); formRef.current.resetFields(['ItemName']); setSelectedProduct({}); } } else if (BookingType == 'PreOrder') { if (PreOrderAdditem == 'AddItems') { // GlobalPreOrderData let Duplicate = GlobalPreOrderData?.some( (e) => e?.InwardDtlId == item.InwardDtlId && e?.SinglePc === item?.SinglePc ); if (Duplicate) { setMessageData(' you have already Select The Product'); setMessageType('warning'); } else { await dispatch( changepreOrderList([ ...(Array.isArray(GlobalPreOrderData) ? GlobalPreOrderData : []), { ...item, OrderQty: 1, TotalAmt: item?.OrderRate, TaxAmt: ( (item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), WithoutTaxRate: ( item?.OrderRate - (item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), }, ]) ); } } else { setMessageData(' you have got to Choose Add item'); setMessageType('warning'); } } else { if (item?.OtherProduct === 'Others') { const UpdatedData = addFirst ? [ { ...item, TotalAmt: item?.OrderQty * item?.OrderRate, TaxAmt: ( (item?.OrderQty * item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), WithoutTaxRate: ( item?.OrderQty * item?.OrderRate - (item?.OrderQty * item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), localId: uuidv4(), }, ...CartOrderDetails, ] : [ ...CartOrderDetails, { ...item, TotalAmt: item?.OrderQty * item?.OrderRate, TaxAmt: ( (item?.OrderQty * item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), WithoutTaxRate: ( item?.OrderQty * item?.OrderRate - (item?.OrderQty * item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), localId: uuidv4(), }, ]; // if the item is not in the cart, add the item to the cart // if (OfferCheckedInSetup && preferenceOffer) { // const withoutComboOffer_CardDetail = UpdatedData?.filter( // (item) => item.Type !== 'C' // ); // if ( // OrderOfferStatus || // (withoutComboOffer_CardDetail?.length > 0 && CustDetails) // ) { // await newapplyOffer(item, UpdatedData); // } // await applyOffer(UpdatedData); // } else { dispatch(changeOrderCardDetails(UpdatedData)); // } } else { if ( (item?.StockAvailable === 'Y' && CalculateOverallQty(item, isItemInCartfilter) > 0) || item?.StockAvailable === 'N' ) { const UpdatedData = addFirst ? [ { ...item, OrderQty: 1, TotalAmt: item?.OrderRate, TaxAmt: ( (item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), WithoutTaxRate: ( item?.OrderRate - (item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), localId: uuidv4(), }, ...CartOrderDetails, ] : [ ...CartOrderDetails, { ...item, OrderQty: 1, TotalAmt: item?.OrderRate, TaxAmt: ( (item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), WithoutTaxRate: ( item?.OrderRate - (item?.OrderRate * item?.TaxPercentage) / (100 + item?.TaxPercentage) ).toFixed(2), localId: uuidv4(), }, ]; // if the item is not in the cart, add the item to the cart // if (OfferCheckedInSetup && preferenceOffer) { // await applyOffer(UpdatedData); // } else { dispatch(changeOrderCardDetails(UpdatedData)); // } } else { setMessageType('error'); setMessageData('Stock Not Available'); formRef.current.resetFields(['ItemName']); setSelectedProduct({}); } // if the item is not in the cart, add the item to the cart } } dispatch(changeothersdata({})); dispatch(ChangeNewQrProduct({})); formRef.current.resetFields(['ItemName']); setSelectedProduct({}); dispatch(ChangeWSProduct({})); }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const handleQuickCancel = async () => { setQuickAdd(false); dispatch(changeSearchedData([])); formRef.current.resetFields(['ItemName']); }; const expFun = (item) => { setProdexpir(true); setQtydata(item); let count = item?.ProductDetail?.length; if (count > 1) { Quantity(); } else { SingleQuantity(item, onePeiceFlow); } setexpModel(false); }; const expQtyFun = (index) => { const selectedProIndex = qtydata?.ProductDetail?.findIndex( (item) => item?.ProdId === index?.ProdId && item?.Size === index?.Size && item?.UomName === index?.UomName && item?.Brand === index?.Brand ); if (selectedProIndex !== -1) { const count = qtydata?.ProductDetail[selectedProIndex]?.ProdVariantDetails?.length || 0; if (count > 1) { setModelQty(false); setModalVarient(true); } else { const item = { QtyIndex: selectedProIndex, VarientIndex: 0 }; singleVarient(item); setModelQty(false); } } setQtyIndex(selectedProIndex); setRepeatedModel(true); setExpQtyModel(false); }; const expVerFun = (item) => { let count = qtydata?.ProductDetail?.[QtyIndex]?.ProdVariantDetails?.[item] ?.StockDetails?.length; if (count > 1) { setRepeatedModel(true); setModalVarient(false); setModelstock(true); } else { setRepeatedModel(true); dataTransfer(qtydata, QtyIndex, item, 0, onePeiceFlow); setModelQty(false); } setexpVarModel(false); }; const expStockFun = (item) => { dataTransfer(qtydata, QtyIndex, VarientIndex, item, onePeiceFlow); setexpStockModel(false); }; let brandMapping = {}; // Group product details by Brand ID qtydata?.ProductDetail?.forEach((item) => { const brandId = item?.BrandName; if (!brandMapping[brandId]) { brandMapping[brandId] = []; } brandMapping[brandId].push(item); }); const BrandCheckresult = qtydata?.ProductDetail?.every((product) => { return product.BrandName === null || product.BrandName === undefined; }); const getMaxBrandWidth = () => { let maxBrandDataLength = 0; // Iterate through each brand and find the maximum length of the specified key Object.values(brandMapping).forEach((brand) => { const keyDataLength = brand.length; if (keyDataLength > maxBrandDataLength) { maxBrandDataLength = keyDataLength; } }); // Set your width logic here based on the maxBrandDataLength const maxWidth = maxBrandDataLength >= 5 ? 750 : 'max-content'; return maxWidth; }; // Example usage for checking the length of 'ProdVariantDetails' const widthBasedOnProdVariantDetails = getMaxBrandWidth(); return ( <>
OnfocusTrue()} >
({ value: option.ProdName, label: (
{ setOnePeiceFlow(false); }} > {option.ProdName}
{option.ProductDetail?.filter( (item) => item.OnePcsAvailable == 'Y' ).length !== 0 && ( { setOnePeiceFlow(true); }} /> )}
), })) } className="Search-auto-field" ref={inputRef} onChange={ProductNameOnChange} onSelect={ProductOnSelect} placeholder="Product Name (SHIFT + S)" allowClear={{ clearIcon: , }} autoFocus={autoCompleteVisible} onFocus={handleFocus} />
{isMobile && screenWidth <= 768 && ( handleQrcode()} // onClick={() => OnfocusTrue()} /> )} OnfocusTrue()} />
{ProductSearch?.length > 5 && QuickAdd && (
)} {BSComboData == 'Combo1' && FeatureAddonData?.FeatureDtls?.find( (item) => item?.FeatureAddonName?.toLowerCase() === 'weight scale' ) && }

Product Expires

} open={expModel} onOk={() => expFun(Item)} onCancel={() => setexpModel(false)} okText="Submit" cancelText="Don't Submit" >

Quantity Expires

} open={expQtyModel} onOk={() => expQtyFun(qtyExpData)} onCancel={() => { (setRepeatedModel(false), setProdexpir(false), setExpQtyModel(false)); }} okText="Submit" cancelText="Don't Submit" maskTransitionName="" transitionName="" >

Variant Expires

} open={expVarModel} onOk={() => expVerFun(VarItem)} onCancel={() => { (setexpVarModel(false), setRepeatedModel(false), setProdexpir(false)); }} okText="Submit" cancelText="Don't Submit" >

Stock Expires

} open={expStockModel} onOk={() => expStockFun(StockItem)} onCancel={() => { (setexpStockModel(false), setRepeatedModel(false), setProdexpir(false)); }} okText="Submit" cancelText="Don't Submit" >
} open={modelQty} width={widthBasedOnProdVariantDetails} footer={null} children={

Item Name:

{qtydata?.ProdName}

{Object.keys(brandMapping)?.map((brandId) => (

{' '} {brandId !== 'null' && brandId !== 'undefined' ? brandId : ''}

{brandMapping[brandId]?.map((item, index) => (
0 || item?.StockAvailable !== 'Y' ? 'ItemQtyCard' : 'ItemQtyCard-disabled' } onClick={() => VarientFun(item)} >
{`Product

{item?.Size + ' ' + item?.UomName}

{returnQtyCount( item?.ProdId, item, CartOrderDetails ) > 0 || item?.StockAvailable !== 'Y' ? (

  { item?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.SellPrice }

) : ( '' )}
))}
{brandId !== 'null' && brandId !== 'undefined' ? (
) : ( '' )}
))} {Object.keys(brandMapping).length === 0 && (

No product details available

)}
} handleCancel={CloseModal} /> } open={modelstock} // width={500} footer={null} children={

Item Name:

{qtydata?.ProdName}

Item Quantity:

{qtydata?.ProductDetail?.[QtyIndex]?.Size}{' '} {onePeiceFlow ? 'PCS' : qtydata?.ProductDetail?.[QtyIndex]?.UomName}

} handleCancel={CloseModal1} /> } open={ModalVarient} width={500} footer={null} children={

Item Name:

{qtydata?.ProdName}

Item Quantity:

{qtydata?.ProductDetail?.[QtyIndex]?.Size}{' '} {onePeiceFlow ? 'PCS' : qtydata?.ProductDetail?.[QtyIndex]?.UomName}

} handleCancel={CloseVarientModal} /> {isMobile && screenWidth <= 768 && ( {openScanner && ( )} )} ); }