import React, { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import '../../../../../Styles/BookingScreen/Components/BSBillingTables/BSBillingTable7/BSBillingTable7.scss'; import { getTemplateData, SelectedGlobalBillingColorDetail, SelectedGlobalBillingFont, } from '../../../../../Features/ThemeChange/ThemeChange'; import { Tooltip } from 'antd'; import { GlobalBookingType, GlobalHoldOrderDtl, GlobalOrderCardDetails, GlobalPreviousOrderLength, GlobalUnpaidData, changeOrderCardDetails, ChangeSelectedCustDisable, changeReorderHoldDetails, changeBookingType, changeSelectedOption, GlobalSelProdWiseEst, GlobalBookingTypeBoth, GlobalOrderType, changeAllProductTokenAvailable, changeTokenOnly, changeOrderType, changeReorderProductDetails, changeSelectedCustId, changeCustomerID, ChangeNavHoldData, PreferenceData, GlobalEstimateBooking, ChangeOverAllDiscSales, ChangeOverAllDiscEstimate, changeSelProdWiseEst, changeUnpaidData, GlobalOtherSevices, GlobalDefaultBookingType, GlobalCustId, GlobalSelOption, } from '../../../../../Features/BookingScreen/BookingData/BookingData'; import { ChangeFullFreeProductList, changeFullOfferAppliedProducts, ClearOfferAppliedProducts, GlobalFreeProdList, GlobalOfferAppliedProducts, } from '../../../../../Features/Offer/Offernew/BookingOffernew.js'; import BSBillingEditQuantity from '../BSBillingEditQuantity/BSBillingEditQuantity'; import { ChangeTotalAmount, globalExtraTotalAmount, } from '../../../../../Features/ExteraCharges/ExtraCharges'; import WebFont from 'webfontloader'; import { isMobile } from 'react-device-detect'; import dineInIcon from '../../../../../Images/Dine In.svg'; import TakeAwayIcon from '../../../../../Images/Take away.svg'; import { getCustomerDisplayWindow } from '../../../../../Features/customerDisplayWindow/customerDisplayWindow.js'; import { useApplyOfferto_CardDetail } from '../../UtillComponents/BSNavBarOffer/BSNavBarOffer_CustomHooks.jsx'; import BSEditTotalAmt from '../BSEditTotalAmount/BSEditTotalAmt.jsx'; import BSImeiDetails from '../BSImeiDetails/BSImeiDetails.jsx'; import { getSession } from '../../../../../Services/Others.js'; import { useUtilsComponent } from '../../../../../Services/utils.js'; import CustomerPriceHistory from '../../UtillComponents/CustomerPriceHistory.jsx'; const BSBillingTable7 = () => { const { removeExtraCharge } = useUtilsComponent(); const dispatch = useDispatch(); const preferenceDatas = useSelector(PreferenceData); const preferenceOffer = preferenceDatas?.[0]?.['SettingDtlDetails']?.find( (item) => item.SettingIdName === 'Offer' )?.SettingValue === 'Y'; const applyOffer = useApplyOfferto_CardDetail(); const SelectedBillColor = useSelector(SelectedGlobalBillingColorDetail); const SelectedFont = useSelector(SelectedGlobalBillingFont); const tableData = useSelector(GlobalOrderCardDetails); const GlobalOfferAppliedProductsData = useSelector( GlobalOfferAppliedProducts ); const OfferFreeProduct = useSelector(GlobalFreeProdList); const templateData = useSelector(getTemplateData); const allowDecimal = preferenceDatas?.[0]?.SettingDtlDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'decimal' && setting?.SettingValue === 'Y' ); const tableOptions = templateData?.BookingBilling?.[1]; const OfferCheckedInSetup = templateData?.BookingNavbar?.[1].some( (item) => item?.OptionName == 'Offer' ); const BookingType = useSelector(GlobalBookingType); const defaultBookingType = useSelector(GlobalDefaultBookingType); const GetCustId = useSelector(GlobalCustId); const selectedCustomer = useSelector(GlobalSelOption); const [customerPriceHistoryOpen, setCustomerPriceHistoryOpen] = useState(false); const [customerProduct, setCustomerProduct] = useState(null); const [EditQuantity, setEditQuantity] = useState(false); const [Modaldata, setModaldata] = useState([]); const [editdelete, seteditdelete] = useState(''); const [PreviousdataLength, setPreviousdataLength] = useState(); const [triggerAnimation, setTriggerAnimation] = useState(true); const PreviousOrderLength = useSelector(GlobalPreviousOrderLength); const HoldOrderDtl = useSelector(GlobalHoldOrderDtl); const UnpaidData = useSelector(GlobalUnpaidData); const GlobProdwisedata = useSelector(GlobalSelProdWiseEst); const [editField, setEditField] = useState(false); const [deleteField, setDeleteField] = useState(false); const [Index, setIndex] = useState(null); const [shortKeyMethod, setshortKeyMethod] = useState(null); const BillOrderPre = preferenceDatas?.[0]?.SettingDtlDetails?.find( (item) => item.SettingIdName === 'BillItemsOrder' )?.SettingValue; const BookingTypeBoth = useSelector(GlobalBookingTypeBoth); const OrderType = useSelector(GlobalOrderType); const GlobEstBooking = useSelector(GlobalEstimateBooking); const [OpenImeiDetail, setOpenImeiDetail] = useState(false); const GlobalExtraCharge = useSelector(globalExtraTotalAmount); const OtherServicesglobal = useSelector(GlobalOtherSevices); const [OpenEditTotalAmt, setOpenEditTotalAmt] = useState(false); const tableDataDinein = tableData?.filter( (a, b) => a.BookingTypeName === 'Dine In' && !a?.SalesId ); const tableDataTakeAway = OrderType === 'Hold' ? tableData?.filter((a, b) => a.BookingTypeName === 'TakeAway') : tableData?.filter( (a, b) => a.BookingTypeName === 'TakeAway' && !a?.SalesId ); const OldtableDataDinein = tableData?.filter( (a, b) => a.BookingTypeName === 'Dine In' && a?.SalesId ); const OldtableDataTakeAway = OrderType != 'Hold' ? tableData?.filter( (a, b) => a.BookingTypeName === 'TakeAway' && a?.SalesId ) : []; const productBasedExtraCharges = GlobalExtraCharge.filter( (obj) => 'ProdName' in obj ); const preferenceshortcutkey = preferenceDatas?.[0]?.SettingDtlDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'shortcutkeys' && setting?.SettingValue === 'Y' ); useEffect(() => { if (SelectedFont) { WebFont.load({ google: { families: [SelectedFont], // Load the selected font }, }); } }, [SelectedFont]); useEffect(() => { const handleKeyDown = (e) => { if (e.ctrlKey && e.key.toLowerCase() === 'i') { e.preventDefault(); const prodId = tableData?.[0]?.ProdId; if (GetCustId && prodId) { setCustomerPriceHistoryOpen(true); setCustomerProduct(prodId); } } }; window.addEventListener('keydown', handleKeyDown); return () => { window.removeEventListener('keydown', handleKeyDown); }; }, [GetCustId, tableData]); useEffect(() => { if (tableData?.length === 0) { dispatch(ClearOfferAppliedProducts()); } // setTriggerAnimation(true); if (!isMobile) { const customerDisplayWindow = getCustomerDisplayWindow(); console.log('customerDisplayWindowtableData', customerDisplayWindow); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { userData: tableData, }; customerDisplayWindow.postMessage(updatedData, '*'); } const timer = setTimeout(() => { setTriggerAnimation(false); }, 400); return () => clearTimeout(timer); } }, [tableData]); useEffect(() => { if (tableOptions?.length > 0) { let editFieldValue = tableOptions?.filter( (item) => item.OptionName == 'Edit' ); if (editFieldValue?.length > 0) { setEditField(true); } else { setEditField(false); } let DeleteFieldValue = tableOptions?.filter( (item) => item.OptionName == 'Delete' ); if (DeleteFieldValue?.length > 0) { setDeleteField(true); } else { setDeleteField(false); } } }, [tableOptions]); useEffect(() => { setPreviousdataLength(PreviousOrderLength); }, [PreviousOrderLength]); useEffect(() => { if (!preferenceshortcutkey) return; const getSelectedItem = () => { const getItem = (data = []) => { if (!data.length) return null; return BillOrderPre === 'Y' ? data[0] : data[data.length - 1]; }; if (tableDataTakeAway?.length > 0) { return getItem(tableDataTakeAway); } else if (tableDataDinein?.length > 0) { return getItem(tableDataDinein); } return null; }; const handleShortcut = (method) => { const item = getSelectedItem(); if (!item) return; handleEditQuantity(item); setshortKeyMethod(method); }; const handleKeyDown = (event) => { const key = event.key.toLowerCase(); // 👉 ALT + P → Open Edit Total Amount if (event.altKey && key === 'p') { event.preventDefault(); if (tableData?.length > 0) { OpenEditTotalAmount(); } return; } if (!event.ctrlKey) return; if (key === 'q') { event.preventDefault(); handleShortcut('qty'); } else if (key === 'e') { event.preventDefault(); handleShortcut('price'); } else if (key === 'y') { event.preventDefault(); handleShortcut('Parcel'); } else if (key === 'b') { event.preventDefault(); handleShortcut('weightAmount'); } }; window.addEventListener('keydown', handleKeyDown); return () => { window.removeEventListener('keydown', handleKeyDown); }; }, [preferenceshortcutkey, tableDataTakeAway, tableDataDinein, BillOrderPre]); const handleImeiDetails = (value) => { setOpenImeiDetail(true); setModaldata(value); }; const handleImeiDetailClose = () => { setOpenImeiDetail(false); }; const calculateAmounts = ( OrderQty, OrderRate, TaxPercentage, IsPaid = true ) => { const total = OrderQty * OrderRate; const withoutTax = total - (total * TaxPercentage) / (100 + TaxPercentage); return { TotalAmt: total, ...(IsPaid && { Offer: total }), WithoutTaxRate: +withoutTax.toFixed(2), }; }; const ChangeOrderCardDetailsFn = async ({ OrderQty, InwardDtlId, Offer, CompleteRemove = false, RemoveAndUpdate = false, BuyInwardDtlId, BuyProdQty, UpdateBuyAndFree = false, CompleteRemoveBuyAndAddWithPaid = false, CompleteRemoveconvertFreetoPaid = false, CompleteRemoveconvertFreetoPaidTwoTypes = false, CompleteRemoveconvertFreetoPaidNotCompletely = false, CompleteRemoveAndPaidToFreeOtherType = false, CompleteRemoveAndPaidToFreeOtherTypeWithoutMerge = false, RemoveAndUpdateOtherBookingType = false, BookingTypeName, OrderRate, }) => { let ModifiedOrderCardDetail = JSON.parse(JSON.stringify(tableData)); if (RemoveAndUpdate) { const data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === InwardDtlId && e?.Offer === Offer && e?.BookingTypeName === BookingTypeName ) )?.map((e) => { if ( e?.InwardDtlId == InwardDtlId && e?.Offer > 0 && e?.BookingTypeName === BookingTypeName ) { const newQty = OrderQty; return { ...e, OrderQty: newQty, ...calculateAmounts(newQty, e.OrderRate, e.TaxPercentage), }; } if (e?.InwardDtlId == BuyInwardDtlId) { return { ...e, OrderQty: BuyProdQty, ...calculateAmounts( BuyProdQty, e.OrderRate, e.TaxPercentage, false ), }; } return e; }); return dispatch(changeOrderCardDetails(data)); } if (RemoveAndUpdateOtherBookingType) { const data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === InwardDtlId && e?.Offer === Offer && e?.BookingTypeName === BookingTypeName ) )?.flatMap((e) => { if ( e?.InwardDtlId == InwardDtlId && e?.Offer > 0 && e?.BookingTypeName === BookingTypeName ) { const newQty = e?.OrderQty - BuyProdQty; return { ...e, OrderQty: newQty, ...calculateAmounts(newQty, e.OrderRate, e.TaxPercentage), }; } if ( e?.InwardDtlId == InwardDtlId && e?.Offer == 0 && e?.BookingTypeName !== BookingTypeName ) { const newQty = e?.OrderQty - BuyProdQty; let first = { ...e, OrderQty: BuyProdQty, ...calculateAmounts(BuyProdQty, e.OrderRate, e.TaxPercentage), }; if (newQty > 0) { let second = { ...e, Offer: 0, OrderQty: newQty, ...calculateAmounts(newQty, e.OrderRate, e.TaxPercentage, false), }; return [first, second]; } return [first]; } if (e?.InwardDtlId == BuyInwardDtlId) { return { ...e, OrderQty: BuyProdQty, ...calculateAmounts( BuyProdQty, e.OrderRate, e.TaxPercentage, false ), }; } return e; }); return dispatch(changeOrderCardDetails(data)); } if (CompleteRemove) { const data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === InwardDtlId && e?.Offer === Offer && e?.BookingTypeName === BookingTypeName && e?.OrderRate == OrderRate ) ); return dispatch(changeOrderCardDetails(data)); } if (CompleteRemoveAndPaidToFreeOtherType) { let data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === InwardDtlId && e?.Offer === Offer && e?.BookingTypeName === BookingTypeName ) )?.flatMap((exp) => { // Same product but different booking type and not an offer if ( exp?.InwardDtlId == InwardDtlId && exp?.Offer == 0 && exp?.BookingTypeName !== BookingTypeName ) { const remainingQty = exp.OrderQty - OrderQty; if (remainingQty === 0) { return { ...exp, OfferMode: 'B', ...calculateAmounts( exp.OrderQty, exp.OrderRate, exp.TaxPercentage, true ), }; } if (remainingQty > 0) { return [ { ...exp, OrderQty: remainingQty, ...calculateAmounts( remainingQty, exp.OrderRate, exp.TaxPercentage, false ), }, { ...exp, OrderQty: OrderQty, Offer: 0, OfferMode: 'B', ...calculateAmounts( OrderQty, exp.OrderRate, exp.TaxPercentage, true ), }, ]; } } return exp; }); // ===== Merge duplicates for free offers ===== const mergedData = []; data?.forEach((item) => { if (item?.OfferMode === 'B') { // Check if a free item already exists for this product + booking type const existingIndex = mergedData.findIndex( (e) => e.InwardDtlId === item.InwardDtlId && e.BookingTypeName === item.BookingTypeName && e.OfferMode === 'B' ); if (existingIndex > -1) { // Merge quantities const existing = mergedData[existingIndex]; const newQty = existing.OrderQty + item.OrderQty; mergedData[existingIndex] = { ...existing, OrderQty: newQty, ...calculateAmounts( newQty, item.OrderRate, item.TaxPercentage, true ), }; } else { mergedData.push(item); } } else { mergedData.push(item); } }); return dispatch(changeOrderCardDetails(mergedData)); } if (CompleteRemoveAndPaidToFreeOtherTypeWithoutMerge) { let data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === InwardDtlId && e?.Offer === Offer && e?.BookingTypeName === BookingTypeName ) )?.flatMap((exp) => { // Same product but different booking type and not an offer if ( exp?.InwardDtlId == InwardDtlId && exp?.Offer == 0 && exp?.BookingTypeName !== BookingTypeName ) { const remainingQty = exp.OrderQty - OrderQty; if (remainingQty === 0) { return { ...exp, OfferMode: 'B', ...calculateAmounts( exp.OrderQty, exp.OrderRate, exp.TaxPercentage, true ), }; } if (remainingQty < 0) { return [ { ...exp, OrderQty: exp.OrderQty, OfferMode: 'B', ...calculateAmounts( exp.OrderQty, exp.OrderRate, exp.TaxPercentage, true ), }, ]; } } return exp; }); return dispatch(changeOrderCardDetails(data)); } if (CompleteRemoveconvertFreetoPaid) { const data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === BuyInwardDtlId && e?.BookingTypeName === BookingTypeName ) )?.map((exp) => { if ( exp?.InwardDtlId == InwardDtlId && exp?.Offer > 0 && exp?.BookingTypeName === BookingTypeName ) { const { OfferType, OfferMessage, ...exp1 } = exp; return { ...exp1, Offer: 0, OrderQty: OrderQty, ...calculateAmounts( OrderQty, exp.OrderRate, exp.TaxPercentage, false ), }; } return exp; // keep unchanged item }); return dispatch(changeOrderCardDetails(data)); } if (CompleteRemoveconvertFreetoPaidNotCompletely) { const data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === BuyInwardDtlId && e?.BookingTypeName === BookingTypeName ) )?.flatMap((exp) => { if ( exp?.InwardDtlId == InwardDtlId && exp?.Offer > 0 && exp?.BookingTypeName === BookingTypeName ) { const { OfferType, OfferMessage, ...exp1 } = exp; let first = { ...exp1, Offer: 0, OrderQty: BuyProdQty, ...calculateAmounts( OrderQty, exp.OrderRate, exp.TaxPercentage, false ), }; if (BuyProdQty < OrderQty) { let second = { ...exp1, Offer: 0, OrderQty: exp1?.OrderQty - BuyProdQty, ...calculateAmounts( exp1?.OrderQty - BuyProdQty, exp.OrderRate, exp.TaxPercentage, true ), }; return [first, second]; } return [first]; } return exp; // keep unchanged item }); return dispatch(changeOrderCardDetails(data)); } if (CompleteRemoveBuyAndAddWithPaid) { const data = ModifiedOrderCardDetail?.filter( (e) => !( (e?.InwardDtlId === BuyInwardDtlId && e?.BookingTypeName === BookingTypeName) || (e?.InwardDtlId == InwardDtlId && e?.Offer > 0 && e?.BookingTypeName === BookingTypeName) ) )?.map((exp) => { if ( exp?.InwardDtlId == InwardDtlId && exp?.Offer == 0 && exp?.BookingTypeName === BookingTypeName ) { return { ...exp, // keep existing fields OrderQty: OrderQty, ...calculateAmounts( OrderQty, exp.OrderRate, exp.TaxPercentage, false ), }; } return exp; // keep unchanged item }); return dispatch(changeOrderCardDetails(data)); } if (UpdateBuyAndFree) { const data = ModifiedOrderCardDetail?.map((e) => { if ( e?.InwardDtlId == InwardDtlId && e?.Offer > 0 && e?.BookingTypeName === BookingTypeName ) { const newQty = e?.OrderQty + OrderQty; return { ...e, OrderQty: newQty, ...calculateAmounts(newQty, e.OrderRate, e.TaxPercentage), }; } if (e?.InwardDtlId == InwardDtlId && e?.Offer == Offer) { const newQty = e?.OrderQty - OrderQty; return { ...e, OrderQty: newQty, ...calculateAmounts(newQty, e.OrderRate, e.TaxPercentage, false), }; } if ( e?.InwardDtlId == BuyInwardDtlId && e?.BookingTypeName === BookingTypeName ) { return { ...e, OrderQty: BuyProdQty, ...calculateAmounts( BuyProdQty, e.OrderRate, e.TaxPercentage, false ), }; } return e; }); return dispatch(changeOrderCardDetails(data)); } if (CompleteRemoveconvertFreetoPaidTwoTypes) { const data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === BuyInwardDtlId && e?.BookingTypeName === BookingTypeName ) )?.flatMap((exp) => { if ( exp?.InwardDtlId == InwardDtlId && exp?.Offer > 0 && exp?.BookingTypeName === BookingTypeName ) { const { OfferType, OfferMessage, ...exp1 } = exp; return { ...exp1, Offer: 0, OrderQty: OrderQty, ...calculateAmounts( OrderQty, exp.OrderRate, exp.TaxPercentage, false ), }; } if ( exp?.InwardDtlId == InwardDtlId && exp?.Offer > 0 && exp?.BookingTypeName !== BookingTypeName ) { const { ...exp1 } = exp; let first = { ...exp1, // Offer: 0, OrderQty: exp1?.OrderQty - BuyProdQty, ...calculateAmounts( exp1?.OrderQty - BuyProdQty, exp.OrderRate, exp.TaxPercentage, true ), }; let second = { ...exp1, Offer: 0, OrderQty: BuyProdQty, ...calculateAmounts( BuyProdQty, exp.OrderRate, exp.TaxPercentage, false ), }; delete second?.OfferMessage; delete second?.OfferType; return [first, second]; } return exp; // keep unchanged item }); return dispatch(changeOrderCardDetails(data)); } // Update qty for normal case const data = ModifiedOrderCardDetail?.map((e) => { if ( e?.InwardDtlId == InwardDtlId && e?.Offer == Offer && e?.BookingTypeName === BookingTypeName ) { return { ...e, OrderQty, ...calculateAmounts(OrderQty, e.OrderRate, e.TaxPercentage, false), }; } return e; }); dispatch(changeOrderCardDetails(data)); }; const ChangeFreeprodlistFn = async ({ FreeProdId, OfferId, OverAllFreeQty, RemainingQty, FreeQty, CompleteRemove = false, }) => { const deepCopy = JSON.parse(JSON.stringify(OfferFreeProduct)); let ModifyedData; if (CompleteRemove) { // 🔹 Remove the matching FreeProd completely ModifyedData = deepCopy?.filter( (exp) => !(exp?.OfferId == OfferId && exp?.FreeProdId == FreeProdId) ); } else { // 🔹 Update the matching FreeProd ModifyedData = deepCopy?.map((exp) => { if (exp?.OfferId == OfferId && FreeProdId == exp?.FreeProdId) { return { ...exp, OverAllFreeQty, RemainingQty, FreeQty, }; } return { ...exp }; }); } dispatch(ChangeFullFreeProductList(ModifyedData)); }; const ChangeOfferAppliedProdsFn = async ({ inwardDtlId, OfferAmount, FreeQty, CompleteRemove = false, insideinwardDtlId = false, }) => { const deepCopy = JSON.parse(JSON.stringify(GlobalOfferAppliedProductsData)); let ModifyedData; if (CompleteRemove) { // 🔹 Remove case if (!insideinwardDtlId) { ModifyedData = deepCopy?.filter( (exp) => exp?.InwardDtlId !== inwardDtlId ); } else { ModifyedData = deepCopy?.filter( (exp) => !( Array?.isArray(exp?.FreeProductsList) ? exp?.FreeProductsList : [exp?.FreeProductsList] )?.some((freeProd) => freeProd?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === inwardDtlId ) ) ) ); } } else { // 🔹 Update case ModifyedData = deepCopy?.map((exp) => { let shouldUpdate = false; if (!insideinwardDtlId) { shouldUpdate = exp?.InwardDtlId == inwardDtlId; } else { shouldUpdate = ( Array?.isArray(exp?.FreeProductsList) ? exp?.FreeProductsList : [exp?.FreeProductsList] )?.some((freeProd) => freeProd?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === inwardDtlId ) ) ); } if (shouldUpdate) { return { ...exp, OfferAmount, ActualFreeQty: FreeQty, FreeProductsList: (Array?.isArray(exp?.FreeProductsList) ? exp?.FreeProductsList : [exp?.FreeProductsList] )?.map((item, idx) => idx === 0 ? { ...item, FreeQty, } : item ), }; } return { ...exp }; }); } dispatch(changeFullOfferAppliedProducts(ModifyedData)); }; const removeFromCart = async (item) => { removeExtraCharge(item); setPreviousdataLength(tableData?.length); let ischeckBothBookingType = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer > 0 && e?.BookingTypeName != item?.BookingTypeName ); if (item?.Offer > 0) { //check is Buyxgetx Or something // let ischeck= GlobalOfferAppliedProductsData?.some((e)=>e?.FreeProductsList?.[0]??. const isBuyAndGetX = GlobalOfferAppliedProductsData?.find((data) => (Array?.isArray(data?.FreeProductsList) ? data?.FreeProductsList : [data?.FreeProductsList] )?.some((freeProd) => freeProd?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === item?.InwardDtlId ) ) ) )?.OfferMode == 'B'; const isItemWiseOrQuantityProduct = GlobalOfferAppliedProductsData?.find( (data) => data?.ProdId === item?.ProdId && data?.InwardDtlId === item?.InwardDtlId && (data?.OfferMode === 'I' || data?.OfferMode === 'Q') && data?.OfferAmount === item?.Offer ); const isCheckFreeProduct = GlobalOfferAppliedProductsData?.find((off) => (Array.isArray(off?.FreeProductsList) ? off?.FreeProductsList : [off?.FreeProductsList] )?.some((prod) => prod?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock.FreeInwardDtlId === item?.InwardDtlId ) ) ) ); if (isBuyAndGetX) { let isPaidproduct = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer == 0 && item?.BookingTypeName == e?.BookingTypeName ); const isCheckFreeProduct = OfferFreeProduct?.find((exp) => exp?.ProdVariantDetails?.some((variant) => variant?.StockDetails?.some( (stock) => stock?.FreeInwardDtlId === item?.InwardDtlId ) ) ); if (isPaidproduct) { if (isPaidproduct?.OrderQty == item?.OrderQty) { //just remove Paid Qty await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidproduct?.OrderQty, CompleteRemove: true, InwardDtlId: isPaidproduct?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); } else if (isPaidproduct?.OrderQty > item?.OrderQty) { // Just Decrease Paid Qty await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidproduct?.OrderQty - item?.OrderQty, CompleteRemove: false, InwardDtlId: isPaidproduct?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); } else if (isPaidproduct?.OrderQty < item?.OrderQty) { //just remove Paid Qty //decrease FreeQty if (ischeckBothBookingType) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: -isPaidproduct?.OrderQty, RemoveAndUpdate: true, InwardDtlId: isPaidproduct?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); await ChangeFreeprodlistFn({ OverAllFreeQty: isCheckFreeProduct?.OverAllFreeQty, RemainingQty: isCheckFreeProduct?.OverAllFreeQty - (ischeckBothBookingType?.OrderQty + isPaidproduct?.OrderQty), FreeQty: ischeckBothBookingType?.OrderQty + isPaidproduct?.OrderQty, FreeProdId: isPaidproduct?.ProdId, OfferId: isCheckFreeProduct?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * isPaidproduct?.OrderQty), isPaidproduct?.OrderQty, true, insideinwardDtlId true) await ChangeOfferAppliedProdsFn({ inwardDtlId: isPaidproduct?.InwardDtlId, OfferAmount: isPaidproduct?.OrderRate * isPaidproduct?.OrderQty, FreeQty: isPaidproduct?.OrderQty, CompleteRemove: false, insideinwardDtlId: true, }); } else { let FreeProdcutinPaidModeOtherBookingType = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer == 0 && item?.BookingTypeName != e?.BookingTypeName ); if (FreeProdcutinPaidModeOtherBookingType) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: item?.OrderQty - isPaidproduct?.OrderQty, OrderQty: item.OrderQty, RemoveAndUpdateOtherBookingType: true, InwardDtlId: isPaidproduct?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); await ChangeFreeprodlistFn({ OverAllFreeQty: item?.OrderQty, RemainingQty: item?.OrderQty - (isPaidproduct?.OrderQty + (FreeProdcutinPaidModeOtherBookingType?.OrderQty - (item?.OrderQty - isPaidproduct?.OrderQty) || FreeProdcutinPaidModeOtherBookingType?.OrderQty)), FreeQty: isPaidproduct?.OrderQty + (FreeProdcutinPaidModeOtherBookingType?.OrderQty - (item?.OrderQty - isPaidproduct?.OrderQty) || FreeProdcutinPaidModeOtherBookingType?.OrderQty), FreeProdId: isPaidproduct?.ProdId, OfferId: isCheckFreeProduct?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * isPaidproduct?.OrderQty), isPaidproduct?.OrderQty, true, insideinwardDtlId true) await ChangeOfferAppliedProdsFn({ inwardDtlId: isPaidproduct?.InwardDtlId, OfferAmount: isPaidproduct?.OrderRate * (isPaidproduct?.OrderQty + (FreeProdcutinPaidModeOtherBookingType?.OrderQty - (item?.OrderQty - isPaidproduct?.OrderQty) || FreeProdcutinPaidModeOtherBookingType?.OrderQty)), FreeQty: isPaidproduct?.OrderQty + (FreeProdcutinPaidModeOtherBookingType?.OrderQty - (item?.OrderQty - isPaidproduct?.OrderQty) || FreeProdcutinPaidModeOtherBookingType?.OrderQty), insideinwardDtlId: true, }); } else { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidproduct?.OrderQty, RemoveAndUpdate: true, InwardDtlId: isPaidproduct?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); await ChangeFreeprodlistFn({ OverAllFreeQty: item?.OrderQty, RemainingQty: item?.OrderQty - isPaidproduct?.OrderQty, FreeQty: isPaidproduct?.OrderQty, FreeProdId: isPaidproduct?.ProdId, OfferId: isCheckFreeProduct?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * isPaidproduct?.OrderQty), isPaidproduct?.OrderQty, true, insideinwardDtlId true) await ChangeOfferAppliedProdsFn({ inwardDtlId: isPaidproduct?.InwardDtlId, OfferAmount: isPaidproduct?.OrderRate * isPaidproduct?.OrderQty, FreeQty: isPaidproduct?.OrderQty, CompleteRemove: false, insideinwardDtlId: true, }); } } } } else { if (ischeckBothBookingType) { // //Free Product in Paid Mode let FreeProdcutinPaidModeOtherBookingType = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer == 0 && item?.BookingTypeName != e?.BookingTypeName ); //if free product is available in paid mode in other booking type then just decrease the free qty from that product if (FreeProdcutinPaidModeOtherBookingType) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: item?.OrderQty, CompleteRemoveAndPaidToFreeOtherType: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: isCheckFreeProduct?.OverAllFreeQty, RemainingQty: isCheckFreeProduct?.OverAllFreeQty, FreeQty: isCheckFreeProduct?.FreeQty, FreeProdId: isCheckFreeProduct?.FreeProdId, OfferId: isCheckFreeProduct?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * Quantity), Quantity, true,) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: isCheckFreeProduct?.FreeQty * item?.OrderRate, FreeQty: item?.OrderQty, CompleteRemove: false, insideinwardDtlId: true, }); } else { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidproduct?.OrderQty, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: isCheckFreeProduct?.OverAllFreeQty, RemainingQty: isCheckFreeProduct?.OverAllFreeQty - item?.OrderQty, FreeQty: isCheckFreeProduct?.FreeQty - item?.OrderQty, FreeProdId: isCheckFreeProduct?.FreeProdId, OfferId: isCheckFreeProduct?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * Quantity), Quantity, true,) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: (isCheckFreeProduct?.FreeQty - item?.OrderQty) * item?.OrderRate, FreeQty: item?.OrderQty, CompleteRemove: false, insideinwardDtlId: true, }); } } // } else { let isPaidProductAvailableInCartOtherType = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer == 0 && item?.BookingTypeName != e?.BookingTypeName ); if (isPaidProductAvailableInCartOtherType) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: item?.OrderQty, CompleteRemoveAndPaidToFreeOtherTypeWithoutMerge: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: isCheckFreeProduct?.OverAllFreeQty, RemainingQty: isCheckFreeProduct?.OverAllFreeQty - (isCheckFreeProduct?.FreeQty - (item?.OrderQty - isPaidProductAvailableInCartOtherType?.OrderQty)), FreeQty: isCheckFreeProduct?.FreeQty - (item?.OrderQty - isPaidProductAvailableInCartOtherType?.OrderQty), FreeProdId: isCheckFreeProduct?.FreeProdId, OfferId: isCheckFreeProduct?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * Quantity), Quantity, true,) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: item?.OrderRate * (isCheckFreeProduct?.FreeQty - (item?.OrderQty - isPaidProductAvailableInCartOtherType?.OrderQty)), FreeQty: isCheckFreeProduct?.FreeQty - (item?.OrderQty - isPaidProductAvailableInCartOtherType?.OrderQty), CompleteRemove: false, insideinwardDtlId: true, }); } else { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidproduct?.OrderQty, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: isCheckFreeProduct?.OverAllFreeQty, RemainingQty: isCheckFreeProduct?.OverAllFreeQty, FreeQty: 0, FreeProdId: isCheckFreeProduct?.FreeProdId, OfferId: isCheckFreeProduct?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * Quantity), Quantity, true,) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: item?.OrderRate * item?.OrderQty, FreeQty: item?.OrderQty, CompleteRemove: true, insideinwardDtlId: true, }); } } //Change Remove OrderCartDetail //Remove FreeprodList //ChangeOfferApplied Products } } else { ///remove item wise offer if (isItemWiseOrQuantityProduct) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: item?.OrderQty, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, }); await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: item?.OrderRate * item?.OrderQty, FreeQty: item?.OrderQty, CompleteRemove: true, }); } else if (isCheckFreeProduct) { // remove or update loyalty/code based free product which is added in cart const freeProdList = Array?.isArray( isCheckFreeProduct?.FreeProductsList ) ? isCheckFreeProduct?.FreeProductsList?.[0] : isCheckFreeProduct?.FreeProductsList; let isPaidProductAvailableInCart = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer == 0 && item?.BookingTypeName == e?.BookingTypeName ); if (isPaidProductAvailableInCart) { if (isPaidProductAvailableInCart?.OrderQty === item?.OrderQty) { //just remove Paid Qty await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidProductAvailableInCart?.OrderQty, CompleteRemove: true, InwardDtlId: isPaidProductAvailableInCart?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); } else if ( isPaidProductAvailableInCart?.OrderQty > item?.OrderQty ) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidProductAvailableInCart?.OrderQty - item?.OrderQty, CompleteRemove: false, InwardDtlId: isPaidProductAvailableInCart?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); } else if ( isPaidProductAvailableInCart?.OrderQty < item?.OrderQty ) { //just remove Paid Qty //decrease FreeQty await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: -isPaidProductAvailableInCart?.OrderQty, RemoveAndUpdate: true, InwardDtlId: isPaidProductAvailableInCart?.InwardDtlId, BuyInwardDtlId: null, Offer: 0, }); if (ischeckBothBookingType) { await ChangeFreeprodlistFn({ OverAllFreeQty: freeProdList?.OverAllFreeQty, RemainingQty: freeProdList?.OverAllFreeQty - (ischeckBothBookingType?.OrderQty + isPaidProductAvailableInCart?.OrderQty), FreeQty: ischeckBothBookingType?.OrderQty + isPaidProductAvailableInCart?.OrderQty, FreeProdId: isPaidProductAvailableInCart?.ProdId, OfferId: freeProdList?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * isPaidproduct?.OrderQty), isPaidproduct?.OrderQty, true, insideinwardDtlId true) await ChangeOfferAppliedProdsFn({ inwardDtlId: isPaidProductAvailableInCart?.InwardDtlId, OfferAmount: isPaidProductAvailableInCart?.OrderRate * isPaidProductAvailableInCart?.OrderQty, FreeQty: isPaidProductAvailableInCart?.OrderQty, CompleteRemove: false, insideinwardDtlId: true, }); } else { await ChangeFreeprodlistFn({ OverAllFreeQty: item?.OrderQty, RemainingQty: item?.OrderQty - isPaidProductAvailableInCart?.OrderQty, FreeQty: isPaidProductAvailableInCart?.OrderQty, FreeProdId: isPaidProductAvailableInCart?.ProdId, OfferId: freeProdList?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * isPaidproduct?.OrderQty), isPaidproduct?.OrderQty, true, insideinwardDtlId true) await ChangeOfferAppliedProdsFn({ inwardDtlId: isPaidProductAvailableInCart?.InwardDtlId, OfferAmount: isPaidProductAvailableInCart?.OrderRate * isPaidProductAvailableInCart?.OrderQty, FreeQty: isPaidProductAvailableInCart?.OrderQty, CompleteRemove: false, insideinwardDtlId: true, }); } } } else { if (ischeckBothBookingType) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidProductAvailableInCart?.OrderQty, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: freeProdList?.OverAllFreeQty, RemainingQty: freeProdList?.OverAllFreeQty - item?.OrderQty, FreeQty: freeProdList?.FreeQty - item?.OrderQty, FreeProdId: freeProdList?.FreeProdId, OfferId: freeProdList?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * Quantity), Quantity, true,) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: (freeProdList?.FreeQty - item?.OrderQty) * item?.OrderRate, FreeQty: item?.OrderQty, CompleteRemove: false, insideinwardDtlId: true, }); } else { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidProductAvailableInCart?.OrderQty, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: freeProdList?.OverAllFreeQty, RemainingQty: freeProdList?.OverAllFreeQty, FreeQty: 0, FreeProdId: freeProdList?.FreeProdId, OfferId: freeProdList?.OfferId, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * Quantity), Quantity, true,) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: item?.OrderRate * item?.OrderQty, FreeQty: item?.OrderQty, CompleteRemove: true, insideinwardDtlId: true, }); } } } else { let ModifiedOrderCardDetail = JSON.parse(JSON.stringify(tableData)); const data = ModifiedOrderCardDetail?.filter( (e) => !( e?.InwardDtlId === item?.InwardDtlId && e?.Offer === item?.Offer && e?.BookingTypeName === item?.BookingTypeName && (!e?.SalesId || OrderType == 'Hold') ) ); return dispatch(changeOrderCardDetails(data)); } } } else { const isCheckFreeProductOutside = OfferFreeProduct?.find( (exp) => exp?.InwardDtlId == item?.InwardDtlId ); if (!isCheckFreeProductOutside) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: item?.OrderQty, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: null, Offer: item?.Offer, OrderRate: item?.OrderRate, }); } else { const isCheck = GlobalOfferAppliedProductsData?.find( (exp) => exp?.InwardDtlId === item?.InwardDtlId ); const FreeProd = OfferFreeProduct?.find( (exp) => exp?.InwardDtlId === item?.InwardDtlId ); if (isCheck) { let inward = isCheck?.FreeProductsList?.[0]?.ProdVariantDetails?.[0] ?.StockDetails?.[0]?.FreeInwardDtlId; let isPaidproduct = tableData?.find( (e) => e?.InwardDtlId == inward && e?.Offer == 0 && e?.BookingTypeName == item?.BookingTypeName ); if (isPaidproduct) { let ischeckBothBookingType = tableData?.find( (e) => e?.InwardDtlId == inward && e?.Offer > 0 && e?.BookingTypeName != item?.BookingTypeName ); //if any Paid Product is there, we have to Merge With That if (ischeckBothBookingType) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidproduct?.OrderQty + isCheck?.ActualFreeQty - ischeckBothBookingType?.OrderQty, CompleteRemoveBuyAndAddWithPaid: true, InwardDtlId: isPaidproduct?.InwardDtlId, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: FreeProd?.OverAllFreeQty - item?.OrderQty, RemainingQty: FreeProd?.OverAllFreeQty - item?.OrderQty - (FreeProd?.FreeQty - item?.OrderQty), FreeQty: FreeProd?.FreeQty - item?.OrderQty, FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: false, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * isPaidproduct?.OrderQty), isPaidproduct?.OrderQty, true, insideinwardDtlId true) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: isPaidproduct?.OrderRate * (FreeProd?.FreeQty - item?.OrderQty), FreeQty: FreeProd?.FreeQty - item?.OrderQty, CompleteRemove: false, insideinwardDtlId: false, }); } else { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: isPaidproduct?.OrderQty + isCheck?.ActualFreeQty, CompleteRemoveBuyAndAddWithPaid: true, InwardDtlId: isPaidproduct?.InwardDtlId, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: item?.OrderQty, RemainingQty: item?.OrderQty - isPaidproduct?.OrderQty, FreeQty: isPaidproduct?.OrderQty, FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: true, }); // await ChangeOfferAppliedProdsFn(isPaidproduct?.InwardDtlId, (isPaidproduct?.OrderRate * isPaidproduct?.OrderQty), isPaidproduct?.OrderQty, true, insideinwardDtlId true) await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: isPaidproduct?.OrderRate * isPaidproduct?.OrderQty, FreeQty: isPaidproduct?.OrderQty, CompleteRemove: true, insideinwardDtlId: false, }); } } else { //have to find if thereis two Booking Type is there //Convert That Free Product To Paid Product let ischeckBothBookingType = tableData?.find( (e) => e?.InwardDtlId == inward && e?.Offer > 0 && e?.BookingTypeName != item?.BookingTypeName ); let FreeProductSameBookingType = tableData?.find( (e) => e?.InwardDtlId == inward && e?.Offer > 0 && e?.BookingTypeName == item?.BookingTypeName ); if (ischeckBothBookingType) { //Convert That Free Product To Paid Product //merge that paid product with same booking type //decrease free prod list qty //change offer applied product qty // await ChangeOrderCardDetailsFn(item?.BookingTypeName, null, ischeckBothBookingType?.OrderQty + FreeProductSameBookingType?.OrderQty, false, ischeckBothBookingType?.InwardDtlId, item?.InwardDtlId, item?.Offer, true) if (FreeProductSameBookingType?.OrderQty >= item?.OrderQty) { await ChangeFreeprodlistFn({ OverAllFreeQty: FreeProd?.OverAllFreeQty - item?.OrderQty, RemainingQty: FreeProd?.OverAllFreeQty - item?.OrderQty - (FreeProd?.FreeQty - item?.OrderQty), FreeQty: FreeProd?.FreeQty - item?.OrderQty, FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: false, }); await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: item?.OrderQty, OrderQty: FreeProductSameBookingType?.OrderQty, CompleteRemoveconvertFreetoPaidNotCompletely: true, InwardDtlId: inward, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: (FreeProd?.FreeQty - item?.OrderQty) * ischeckBothBookingType?.OrderRate, FreeQty: FreeProd?.FreeQty - item?.OrderQty, CompleteRemove: false, insideinwardDtlId: false, }); } else { let data = isCheckFreeProductOutside?.FreeQty - item?.OrderQty; //First i Calculate Another Booking Type Qty let anotherBookingType = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer == 0 && e?.BookingTypeName != item?.BookingTypeName ); let anotherBookingTypeOffer = tableData?.find( (e) => e?.InwardDtlId == inward && e?.Offer > 0 && e?.BookingTypeName != item?.BookingTypeName ); let diff = item?.OrderQty - FreeProductSameBookingType?.OrderQty; //SameBookingFreeQty //FreeProductSameBookingType?.OrderQty //Another BookingType Paid Qty //anotherBookingType //anotherBookingType?.Free OrderQty //ischeckBothBookingType //anotherBookingType?.OrderQty-ischeckBothBookingType?.OrderQty //convert another Booking Type Qty also Free to Paid if ( (anotherBookingType?.OrderQty || 0) < anotherBookingTypeOffer?.OrderQty ) { //paidproduct ischeckBothBookingType?.OrderQty-anotherBookingType?.OrderQty //PaidProdcut Current BookingType FreeProductSameBookingType?.OrderQty let paidproductAnotherType = ischeckBothBookingType?.OrderQty - anotherBookingType?.OrderQty; let paidproductCurrentType = FreeProductSameBookingType?.OrderQty; await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: paidproductAnotherType, OrderQty: paidproductCurrentType, CompleteRemoveconvertFreetoPaidTwoTypes: true, InwardDtlId: inward, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: FreeProd?.OverAllFreeQty - item?.OrderQty, RemainingQty: FreeProd?.OverAllFreeQty - item?.OrderQty - (FreeProd?.FreeQty - (paidproductCurrentType + paidproductCurrentType)), FreeQty: FreeProd?.FreeQty - (paidproductCurrentType + paidproductCurrentType), FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: false, }); await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: (FreeProd?.FreeQty - item?.OrderQty) * ischeckBothBookingType?.OrderRate, FreeQty: FreeProd?.FreeQty - item?.OrderQty, CompleteRemove: false, insideinwardDtlId: false, }); } else { await ChangeFreeprodlistFn({ OverAllFreeQty: FreeProd?.OverAllFreeQty - item?.OrderQty, RemainingQty: FreeProd?.OverAllFreeQty - item?.OrderQty - (FreeProd?.FreeQty - item?.OrderQty), FreeQty: FreeProd?.FreeQty - item?.OrderQty, FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: false, }); await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: FreeProductSameBookingType?.OrderQty, CompleteRemoveconvertFreetoPaid: true, InwardDtlId: inward, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: (FreeProd?.FreeQty - item?.OrderQty) * ischeckBothBookingType?.OrderRate, FreeQty: FreeProd?.FreeQty - item?.OrderQty, CompleteRemove: false, insideinwardDtlId: false, }); } } } else { await ChangeFreeprodlistFn({ OverAllFreeQty: item?.OrderQty, RemainingQty: item?.OrderQty - isPaidproduct?.OrderQty, FreeQty: isPaidproduct?.OrderQty, FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: true, }); await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: FreeProductSameBookingType?.OrderQty, CompleteRemoveconvertFreetoPaid: true, InwardDtlId: inward, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeOfferAppliedProdsFn({ inwardDtlId: item?.InwardDtlId, OfferAmount: (isCheck?.ActualFreeQty - FreeProductSameBookingType?.OrderQty) * isPaidproduct?.OrderQty, FreeQty: isCheck?.ActualFreeQty - FreeProductSameBookingType?.OrderQty, CompleteRemove: true, insideinwardDtlId: false, }); } } } else { let ischeckBothBookingType = tableData?.find( (e) => e?.InwardDtlId == item?.InwardDtlId && e?.Offer == 0 && e?.BookingTypeName != item?.BookingTypeName ); if (ischeckBothBookingType) { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: 0, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: FreeProd?.OverAllFreeQty - item?.OrderQty, RemainingQty: FreeProd?.OverAllFreeQty - item?.OrderQty, FreeQty: 0, FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: false, }); } else { await ChangeOrderCardDetailsFn({ BookingTypeName: item?.BookingTypeName, BuyProdQty: null, OrderQty: 0, CompleteRemove: true, InwardDtlId: item?.InwardDtlId, BuyInwardDtlId: item?.InwardDtlId, Offer: item?.Offer, }); await ChangeFreeprodlistFn({ OverAllFreeQty: item?.OrderQty, RemainingQty: 0, FreeQty: 0, FreeProdId: FreeProd?.FreeProdId, OfferId: FreeProd?.OfferId, CompleteRemove: true, }); } //Remove From Free ProdList That Entirely } } } }; // const removeFromCart = async (item) => { // setPreviousdataLength(tableData?.length); // if (item?.BookingTypeName !== 'Dine In' && OrderType !== 'Hold') { // const UpdatedData = tableData?.filter( // (cartItem) => // !( // cartItem?.ProdId === item?.ProdId && // cartItem?.InwardDtlId === item?.InwardDtlId && // cartItem?.OrderRate === item?.OrderRate && // cartItem?.BookingTypeName === item?.BookingTypeName && // !cartItem?.SalesId // ) // ); // if (OfferCheckedInSetup && preferenceOffer) { // await applyOffer(UpdatedData); // } else { // dispatch(changeOrderCardDetails(UpdatedData)); // } // await dispatch( // ChangeTotalAmount( // GlobalExtraCharge?.filter((extra) => { // if (BookingType === 'Dine In') { // // Remove extra charges linked to the removed product // return !(extra.ProdId === item?.ProdId && !extra.SalesId); // } else if (BookingType === 'TakeAway') { // // Remove extra charges only if SalesId is not present // return extra.ProdId !== item?.ProdId; // } // return true; // Keep everything else // }) // ) // ); // // if the quantity of the item is 1, remove the item from the cart // if (tableData?.length <= 1) { // await dispatch(changeReorderHoldDetails({})); // await dispatch(changeReorderHoldDetails([])); // await dispatch(changeUnpaidData(false)); // await dispatch(changeBookingType('TakeAway')); // await dispatch(changeTokenOnly(false)); // await dispatch(changeAllProductTokenAvailable(false)); // await dispatch(ChangeOverAllDiscSales(null)); // await dispatch(ChangeOverAllDiscEstimate(null)); // await dispatch(changeSelProdWiseEst([])); // await dispatch(ChangeTotalAmount([])); // } // } else if (item?.BookingTypeName !== 'Dine In' && OrderType === 'Hold') { // const UpdatedData = tableData?.filter( // (cartItem) => // !( // cartItem?.ProdId === item?.ProdId && // cartItem?.InwardDtlId === item?.InwardDtlId && // cartItem?.OrderRate === item?.OrderRate && // cartItem?.BookingTypeName === item?.BookingTypeName // ) // ); // if (OfferCheckedInSetup && preferenceOffer) { // await applyOffer(UpdatedData); // } else { // dispatch(changeOrderCardDetails(UpdatedData)); // } // await dispatch( // ChangeTotalAmount( // GlobalExtraCharge?.filter((extra) => { // if (BookingType === 'Dine In') { // // Remove extra charges linked to the removed product // return !(extra.ProdId === item?.ProdId && !extra.SalesId); // } else if (BookingType === 'TakeAway') { // // Remove extra charges only if SalesId is not present // return extra.ProdId !== item?.ProdId; // } // return true; // Keep everything else // }) // ) // ); // // if the quantity of the item is 1, remove the item from the cart // if (tableData?.length <= 1) { // await dispatch(changeReorderHoldDetails({})); // await dispatch(changeReorderHoldDetails([])); // await dispatch(changeUnpaidData(false)); // await dispatch(changeBookingType('TakeAway')); // await dispatch(changeTokenOnly(false)); // await dispatch(changeAllProductTokenAvailable(false)); // await dispatch(ChangeOverAllDiscSales(null)); // await dispatch(ChangeOverAllDiscEstimate(null)); // await dispatch(changeSelProdWiseEst([])); // await dispatch(ChangeTotalAmount([])); // } // } else if (item?.BookingTypeName === 'Dine In') { // const UpdatedData = tableData?.filter( // (cartItem) => // !( // cartItem?.ProdId === item?.ProdId && // cartItem?.InwardDtlId === item?.InwardDtlId && // cartItem?.OrderRate === item?.OrderRate && // cartItem?.BookingTypeName === item?.BookingTypeName && // !cartItem?.SalesId // ) // ); // if (OfferCheckedInSetup && preferenceOffer) { // await applyOffer(UpdatedData); // } else { // dispatch(changeOrderCardDetails(UpdatedData)); // } // await dispatch( // ChangeTotalAmount( // GlobalExtraCharge?.filter((extra) => { // if (BookingType === 'Dine In') { // // Remove extra charges linked to the removed product // return !(extra.ProdId === item?.ProdId && !extra.SalesId); // } else if (BookingType === 'TakeAway') { // // Remove extra charges only if SalesId is not present // return extra.ProdId !== item?.ProdId; // } // return true; // Keep everything else // }) // ) // ); // if the quantity of the item is 1, remove the item from the cart // if (tableData?.length <= 1) { // await dispatch(changeReorderHoldDetails({})); // await dispatch(changeReorderHoldDetails([])); // await dispatch(changeUnpaidData(false)); // await dispatch(ChangeSelectedCustDisable(false)); // await dispatch(changeSelectedOption(false)); // await dispatch(changeBookingType('TakeAway')); // await dispatch(changeTokenOnly(false)); // await dispatch(changeAllProductTokenAvailable(false)); // await dispatch(ChangeOverAllDiscSales(null)); // await dispatch(ChangeOverAllDiscEstimate(null)); // await dispatch(changeSelProdWiseEst([])); // await dispatch(ChangeTotalAmount([])); // } // } // }; 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 handleCustomerProductPriceHistory = (item) => { setCustomerPriceHistoryOpen(true); setCustomerProduct(item?.ProdId); } const handlechange33 = () => { if (editdelete === 'Edit') { seteditdelete(''); } else { seteditdelete('Edit'); } }; const handlechange22 = async () => { if (editdelete === 'Delete') { seteditdelete(''); } else { seteditdelete('Delete'); if (OrderType === 'Failed') { await dispatch(changeOrderType('')); await dispatch(changeOrderCardDetails([])); await dispatch(ChangeTotalAmount([])); await dispatch(changeReorderHoldDetails({})); await dispatch(changeReorderProductDetails([])); setFirstPaymentclick(false); await dispatch(ChangeNavHoldData(false)); await dispatch(changeCustomerID(null)); await dispatch(changeSelectedCustId()); await dispatch(changeSelectedOption(null)); await dispatch(changeBookingType(defaultBookingType || 'TakeAway')); } } }; const OpenEditTotalAmount = () => { setOpenEditTotalAmt(true); }; const handleEditTotalAmountCancel = () => { setOpenEditTotalAmt(false); }; const handleEditQuantity = (value) => { console.log(value, 'value'); if (OtherServicesglobal && value.Type == 'OS' && value.ServiceType == 'I') { setEditQuantity(false); } else { setEditQuantity(true); setModaldata(value); setIndex(value?.localId); } }; const handleEditQuantityCancel = () => { setEditQuantity(false); }; return ( <>
|
{!isMobile ? (
{''}
)}
|
)}
{item.OptionName == 'Sl.No' && (
{!isMobile ? (
Sl.No
)}
|
)}
{item.OptionName == 'Item' && (
{!isMobile ? (
Item
)}
|
)}
{item.OptionName == 'MRP' && (
{!isMobile ? (
MRP
)}
|
)}
{item.OptionName == 'Discount' && (
{!isMobile ? (
₹/%
)}
|
)}
{item.OptionName == 'Quantity' && (
0? OpenEditTotalAmount :""}
onClick={() => {
if (tableData?.length > 0) {
OpenEditTotalAmount();
}
}}
>
{!isMobile ? (
Qty
)}
|
)}
{item.OptionName == 'Rate' && (
{!isMobile ? (
Rt
)}
|
)}
{item.OptionName == 'Amount' && (
{!isMobile ? (
Amt
)}
|
)}
>
))}
|---|---|---|---|---|---|---|---|
|
|
)}
{tableitem.OptionName == 'Sl.No' && (
{index + 1} | )} {tableitem.OptionName == 'Item' && (
(item.FullProductIdentifierDtls?.length > 0 ||
item.ProductIdentifierDtls?.length > 0) &&
handleImeiDetails(item)
}
>
{item?.ProdName}
{item?.Type != 'C' && (
<>
( {!item?.ProdVariantName?.toLowerCase()?.includes( 'variant' ) && {item?.ProdVariantName} } {item?.Size} {item?.SinglePc == 'Y' ? 'PCS' : item?.UomName}) {item?.OfferMessage && !Array.isArray(item.OfferMessage) && ({item.OfferMessage?.split('>')?.[0] + `> ${item?.OrderQty} Eligible Free`} )} > )} {item?.Type === 'C' && (
{item.ProdDetail?.map((prod, index) => (
)}
{productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
) !== undefined && (
{prod.ProdName} - {prod.Size} {prod.UomName} ))}
Extra Charges :{' '}
{
productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
)?.TotalAmt
}
)}
|
)}
{tableitem.OptionName == 'MRP' && (
{item?.MRP} | )} {tableitem.OptionName == 'Discount' && ({item?.Type != 'C' ? item.Offer ? item.Offer : '-' : item?.OfferPrice && item?.OfferPrice > 0 ? item?.OfferType === 'F' ? `₹${safeRound(item.OfferPrice)}` : `${item.OfferPrice}%` : '-'} | )} {tableitem.OptionName == 'Quantity' && ({item?.OrderQty} | )} {tableitem.OptionName == 'Rate' && ({item?.OrderRate} | )} {tableitem.OptionName == 'Amount' && ({ e.stopPropagation(); if (GetCustId) { handleCustomerProductPriceHistory(item); } }} style={{ fontFamily: 'Poppins' }}> {safeRound(item?.TotalAmt)} | )} > ))}
|
|
)}
{tableitem.OptionName == 'Sl.No' && (
{OldtableDataTakeAway?.length + index + 1} | )} {tableitem.OptionName == 'Item' && (
{item?.ProdName}
{item?.Type != 'C' && (
<>
( {!item?.ProdVariantName?.toLowerCase()?.includes( 'variant' ) && {item?.ProdVariantName} } {item?.Size} {item?.SinglePc == 'Y' ? 'PCS' : item?.UomName}) {item?.OfferMessage && !Array.isArray(item.OfferMessage) && ({item.OfferMessage?.split('>')?.[0] + `> ${item?.OrderQty} Eligible Free`} )} > )} {item?.Type === 'C' && (
{item.ProdDetail?.map((prod, index) => (
)}
{productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
) !== undefined && (
{prod.ProdName} - {prod.Size} {prod.UomName} ))}
Extra Charges :{' '}
{
productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
)?.TotalAmt
}
)}
|
)}
{tableitem.OptionName == 'MRP' && (
{item?.MRP} | )} {tableitem.OptionName == 'Discount' && ({item?.Type != 'C' ? item.Offer ? item.Offer : '-' : item?.OfferPrice && item?.OfferPrice > 0 ? item?.OfferType === 'F' ? `₹${safeRound(item.OfferPrice)}` : `${item.OfferPrice}%` : '-'} | )} {tableitem.OptionName == 'Quantity' && ({item?.OrderQty} | )} {tableitem.OptionName == 'Rate' && ({item?.OrderRate} | )} {tableitem.OptionName == 'Amount' && ({ e.stopPropagation(); if (GetCustId) { handleCustomerProductPriceHistory(item); } }} style={{ fontFamily: 'Poppins' }}> {safeRound(item?.TotalAmt)} | )} > ))}
|
|
)}
{tableitem.OptionName == 'Sl.No' && (
{OldtableDataDinein?.length + OldtableDataTakeAway?.length + index + 1} | )} {tableitem.OptionName == 'Item' && (
(item.FullProductIdentifierDtls?.length > 0 ||
item.ProductIdentifierDtls?.length > 0) &&
handleImeiDetails(item)
}
>
{item?.Type !== 'OS'
? item.ProdName
: item.ServiceName}
{item?.Type != 'C' && (
<>
{/* ( {!item?.ProdVariantName?.toLowerCase()?.includes( 'variant' ) && {item?.ProdVariantName} } {item?.Size} {item?.SinglePc == 'Y' ? 'PCS' : item?.UomName}) */} {item?.Type !== 'OS' && ( <> {!item?.ProdVariantName?.toLowerCase()?.includes( 'variant' ) && {item?.ProdVariantName} } {item?.Size} {item?.SinglePc == 'Y' ? 'PCS' : item?.UomName} > )} {item?.OfferMessage && !Array.isArray(item.OfferMessage) && ({item.OfferMessage?.split('>')?.[0] + `> ${item?.OrderQty} Eligible Free`} )} > )} {item?.Type === 'C' && (
{item.ProdDetail?.map((prod, index) => (
)}
{productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
) !== undefined && (
{prod.ProdName} - {prod.Size} {prod.UomName} ))}
Extra Charges :{' '}
{
productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
)?.TotalAmt
}
)}
|
)}
{tableitem.OptionName == 'MRP' && (
{item?.MRP} | )} {tableitem.OptionName == 'Discount' && ({item?.Type != 'C' ? item.Offer ? item.Offer : '-' : item?.OfferPrice && item?.OfferPrice > 0 ? item?.OfferType === 'F' ? `₹${safeRound(item.OfferPrice)}` : `${item.OfferPrice}%` : '-'} | )} {tableitem.OptionName == 'Quantity' && ({item?.OrderQty} | )} {tableitem.OptionName == 'Rate' && ({safeRound(item?.OrderRate)} | )} {tableitem.OptionName == 'Amount' && ({ e.stopPropagation(); if (GetCustId) { handleCustomerProductPriceHistory(item); } }} style={{ fontFamily: 'Poppins' }}> {item?.TotalAmt} | )} > ))}
|
|
)}
{tableitem.OptionName == 'Sl.No' && (
{OldtableDataTakeAway?.length + OldtableDataDinein?.length + tableDataTakeAway?.length + index + 1} | )} {tableitem.OptionName == 'Item' && (
{item?.ProdName}
{item?.Type != 'C' && (
<>
( {!item?.ProdVariantName?.toLowerCase()?.includes( 'variant' ) && {item?.ProdVariantName} } {item?.Size} {item?.SinglePc == 'Y' ? 'PCS' : item?.UomName}) {item?.OfferMessage && !Array.isArray(item.OfferMessage) && ({item.OfferMessage?.split('>')?.[0] + `> ${item?.OrderQty} Eligible Free`} )} > )} {item?.Type === 'C' && (
{item.ProdDetail?.map((prod, index) => (
)}
{productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
) !== undefined && (
{prod.ProdName} - {prod.Size} {prod.UomName} ))}
Extra Charges :{' '}
{
productBasedExtraCharges?.find(
(find) => find.ProdId === item.ProdId
)?.TotalAmt
}
)}
|
)}
{tableitem.OptionName == 'MRP' && (
{item?.MRP} | )} {tableitem.OptionName == 'Discount' && ({item?.Type != 'C' ? item.Offer ? item.Offer : '-' : item?.OfferPrice && item?.OfferPrice > 0 ? item?.OfferType === 'F' ? `₹${safeRound(item.OfferPrice)}` : `${item.OfferPrice}%` : '-'} | )} {tableitem.OptionName == 'Quantity' && ({item?.OrderQty} | )} {tableitem.OptionName == 'Rate' && ({item?.OrderRate} | )} {tableitem.OptionName == 'Amount' && ({ e.stopPropagation(); if (GetCustId) { handleCustomerProductPriceHistory(item); } }} style={{ fontFamily: 'Poppins' }}> {safeRound(item?.TotalAmt)} | )} > ))}