import { FaAngleDown, FaCartPlus, FaMoneyBillWave, FaPrint, FaWhatsapp, } from 'react-icons/fa'; import { IoClose } from 'react-icons/io5'; import { FaMobileScreenButton } from 'react-icons/fa6'; import moment from 'moment'; import Credit from '../../UtillComponents/Pozo retail icons/credit.svg'; import { FaCreditCard } from 'react-icons/fa6'; import { changeAddBookingDetailsTrigger, changeBillEditingMode, changeBookingType, ChangeComboCarddata, changeCurrentOrderId, changeCustomerID, ChangeInitialPaymentName, ChangeNavHoldData, changeOrderCardDetails, changeOrderType, changeOtherServiceTicketClaim, ChangeOverAllDiscEstimate, ChangeOverAllDiscSales, changePaymentloader, changePaymentTransactionNumber, changePreviousOrderOfferDetail, changePreviousOrderPayment, changeReorderHoldDetails, changeReorderProductDetails, changeSelectChair, ChangeSelectedCustDisable, changeSelectedCustId, changeSelectedOption, changeSelectedTableDetails, changeSelectTable, changeSelProdWiseEst, changeSummeryComboOfferAmount, changeSummeryTotalAmount, changeTipAmount, changeUnpaidData, changeunpaidflow, changeUpiIDName, changeUpiIDoptionId, changeUpiIDprint, getCardDataWithoutSub, getCardDataWithoutSubmodule, getCombolist, getConfigType, getCreditCustomer, getCurrentOrderid, getLayoutproductCard, GetPaymentdeviceResponse, getPaymentOptions, getSalesDetailData, getSelectedFavItems, getUnpaidData, GlobalAddBookingDetailsTrigger, GlobalBookingType, GlobalBookingTypeBoth, GlobalCombocarddata, GlobalComboOfferAmount, GlobalCommonPaymentOptions, GlobalCurrentOrderId, GlobalCustId, GlobalDefaultBookingType, GlobalEstimateBooking, GlobalFailedTotalAmt, GlobalNavHoldData, GlobalOrderCardDetails, GlobalOrderType, GlobalOtherServiceTicketClaim, GlobalOtherSevices, GlobalOverAllDiscEstimate, GlobalOverAllDiscSales, GlobalPayementloader, GlobalpaymentOptionData, GlobalPaymentTrigger, GlobalPreviousOrderOfferDetails, GlobalPreviousOrderPayment, GlobalProductCategorie, GlobalProductSubCategorie, GlobalReorderHoldDetails, GlobalRetailWSSalesType, GlobalSalesBillEdit, GlobalSelCustId, GlobalSelectedTableDetails, GlobalSelOption, GlobalSelProdWiseEst, GlobalSummeryTotalItems, GlobalSummeryTotalTaxAmount, GlobaltipAmount, Globalunpaidflow, GlobalUnpaidListData, PaymentGatewayGetdetail, PostBookingData, PostPaymentdevice, PreferenceData, PutBookingData, PutBookingPaymentStatusChange, PutPendingPaymentList, putSalesBillEdit, putSplitpaymentStatus, SendPaymentLink, } from '../../../../../Features/BookingScreen/BookingData/BookingData'; import { shallowEqual, useSelector } from 'react-redux'; import { Global_OrderOfferDetail, Global_OverallOfferAmount, } from '../../../../../Features/Offer/Offer'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { getPrinterMappingDetails, getPrintSelectionComponentData, getTemplateData, GlobalprintDatas, GlobalPrinterMappingDtls, GlobalSelectedFont, SelectedPrintTemplate, StoredSessionData, } from '../../../../../Features/ThemeChange/ThemeChange'; import { getCustomerDisplayWindow } from '../../../../../Features/customerDisplayWindow/customerDisplayWindow'; import { ChangeTotalAmount, globalExtraTotalAmount, } from '../../../../../Features/ExteraCharges/ExtraCharges'; import { encryptObject, extractLastNumberOrderId, } from '../../../../../Services/Others'; import { useDispatch } from 'react-redux'; import { getPaymentOptionsData } from '../../../../../Features/BookingScreen/BookingData/KioskBookingData'; import { PostOtherServices } from '../../../../../Features/OtherServices/OtherServices'; import paygate from '../../../../../Images/paygate.png'; import defaultupi from '../../../../../Images/defaultupi.png'; import paydevice from '../../../../../Images/paydevice.png'; import QrinScreen from '../../BookingFunctionality/DynamicScreenQr.jsx'; import { changeholddata, gettinghold, globalholddata, } from '../../../../../Features/BookingScreen/HoldOption/HoldOption'; import { Modal, Tooltip } from 'antd'; import { changeSalesPaymentoption, GlobalSalesPaymentoption, } from '../../../../../Features/Payment/Paymentoptions/Paymentoptions'; import UpiPopover from './Utils/UpiPopOver'; import { isMobile } from 'react-device-detect'; import { MobilePdfPrint } from '../../BookingFunctionality/MobilePdfPrint'; import IndividualTokenMobilePrint from '../../BookingFunctionality/IndividualTokenMobilePrint'; import SingleTokenMobilePrint from '../../BookingFunctionality/SingleTokenMobilePrint'; import MobilePrint from '../../BookingFunctionality/MobilePrint'; import { PrintStyleFunction } from '../../../../paymentpdfPage/PrintStyleFunction'; import { printDiv } from '../../../../../Services/WSOthers'; import { MdSms } from 'react-icons/md'; import WhatsAppShare from '../../../../WhatsAppShare/whatsAppShare'; import SMSShare from '../../../../WhatsAppShare/SmsShare'; import { GlobalBookingStatus } from '../../../../../Features/Payment/PaymentReceivedRetail/PaymentReceivedRetail'; import { useAuth } from '../../../../../AuthContext'; import CountUp from 'react-countup'; import { BiRightArrowAlt } from 'react-icons/bi'; import { GlobalpreOrderOpen } from '../../../../../Features/BookingScreen/PreOrder/PreOrder'; import BsBillingCreditCustomer from '../../BookingFunctionality/BSBillingCreditCustomer'; import TokensinglePrint from '../../../../paymentpdfPage/TokenOnlyPrints/TokeninsinglePrint'; import PaymentPdfBooking from '../../../../paymentpdfPage/PaymentPdfBooking'; import { DefaultModal } from '../../../../../Components/Modal/DefaultModal'; import Buttons from '../../../../../Components/Forms/Buttons'; import { ArrowRightOutlined } from '@ant-design/icons'; import Paymentoption from '../../../../Payment/PaymentOptions/PaymentOptions'; import PozoSplitPaymentIcon from '../../UtillComponents/Pozo retail icons/PozoSplitPaymentIcon'; import SplitPayment from '../../BookingFunctionality/SplitPayment'; import BSCreditCustomer from '../../UtillComponents/BSCreditCustomer'; import PozoAdvanceIcon from '../../UtillComponents/Pozo retail icons/PozoAdvanceIcon'; import { getDefaultPaymentOptions, GlobalAddCustomerDetails, ReprintDetails, triggerCustomerRefresh, } from '../../../../../Features/BookingScreen/Customer/addCustomer'; import { useNavigate } from 'react-router-dom'; import { ApplicationPreferences } from '../../../../../Features/BrachLogin/BranchLogin'; import PozoDineInIcon from '../../UtillComponents/Pozo retail icons/PozoDineIn'; import { Messages } from '../../../../../Components/Notifications/Messages'; import WpIcon from '../../../../../Images/message.png'; import { FaAngleUp } from 'react-icons/fa'; import { useApplyOfferto_CardDetail } from '../../UtillComponents/BSNavBarOffer/BSNavBarOffer_CustomHooks.jsx'; import CardPopover from './Utils/CardPopover.jsx'; import { ChangeFullFreeProductList, changeFullOfferAppliedProducts, GlobalFreeProdList, GlobalOfferAppliedProducts, GlobalOverAllOfferAmt, } from '../../../../../Features/Offer/Offernew/BookingOffernew.js'; import { useDateStore } from '../../../../../Features/BookingScreen/BookingData/DateStore.js'; import { PublicQrCodepost } from '../../../../../Features/ConfigMasterPage/ConfigMasterPage.js'; import TooltipWrapper from '../../../../../Components/Tooltip/Tooltip.jsx'; import PozoUnpaidIcon from '../../UtillComponents/Pozo retail icons/PozoUnpaidIcon.jsx'; import { Tables } from '../../../../../Components/Tables/Table.jsx'; import pozologoimg from '../../../../../Images/pozologoimg.png'; import PaymentGatewayEmbedded from '../../UtillComponents/PaymentGatewayEmbedded.jsx'; import MobileMultiPdfPrintTrigger from '../../UtillComponents/MobileMultiPdfPrintTrigger.jsx'; import OtherServicePrintStyle1 from '../../../PrintTemplates/ThermalPrinter/OtherServicePrintStyle1.jsx'; import OtherServiceMobilePrint from '../../BookingFunctionality/OtherServiceMobilePrint.jsx'; import { getExpireProductsList, getLowStockAlertProductsList, } from '../../../../../Features/ProductPage/ProductPage.js'; import { PostBlockSlots } from '../../../../../Features/Kiosk/kiosk.js'; import CustomerOrders from '../../BookingFunctionality/CustomerOrders.jsx'; const subDirectory = import.meta.env.ENV_BASE_URL; const MainHomeUrl = import.meta.env.ENV_MAIN_BASE_URL; const RetailApiurl = import.meta.env.ENV_API_URL; const currentDateValue = moment().format('YYYY-MM-DD HH:mm:ss'); const StandardTablePayment = () => { const isF4Pressed = useRef(false); const { SadminuserAccess } = useAuth(); let SAAccessCommonMaster = SadminuserAccess?.find( (e) => e?.MenuName === 'Sales' ); const dispatch = useDispatch(); const navigate = useNavigate(); const SessionData = useSelector(StoredSessionData); const BranchId = SessionData?.BranchId; const AppId = SessionData?.AppId; const CompId = SessionData?.CompId; const UserId = SessionData?.UserId; const UserType = SessionData?.UserType; const AuthToken = SessionData?.AuthToken; const SessionMobileNo = SessionData?.SessionMobileNo; const applyOffer = useApplyOfferto_CardDetail(); const defaultPaymentTrigger = useSelector(GlobalPaymentTrigger); const defaultBookingType = useSelector(GlobalDefaultBookingType); const Holddata = useSelector(globalholddata); const FontFamily = useSelector(GlobalSelectedFont); const prodCat = useSelector(GlobalProductCategorie); const ProdSubCat = useSelector(GlobalProductSubCategorie); const templateData = useSelector(getTemplateData); const printerTemplateStyle = useSelector(SelectedPrintTemplate); const printDatas = useSelector(GlobalprintDatas); const ReportholdData = useSelector(GlobalReorderHoldDetails); const FailedTotalAmt = useSelector(GlobalFailedTotalAmt); const orderCardDetail = useSelector(GlobalOrderCardDetails); console.log(orderCardDetail, 'orderCardDetailorderCardDetail'); const preOrder = useSelector(GlobalpreOrderOpen); const OverallOfferAmount = useSelector(Global_OverallOfferAmount); const SelectedTableDetails = useSelector(GlobalSelectedTableDetails); const TotalTaxAmount = useSelector(GlobalSummeryTotalTaxAmount); const globalTipAmount = useSelector(GlobaltipAmount); const GlobalExtraCharge = useSelector(globalExtraTotalAmount); const GlobalSalesPaymentoptions = useSelector(GlobalSalesPaymentoption); const Discount = useSelector(GlobalOverAllOfferAmt) + Number(useSelector(GlobalComboOfferAmount)); const OverAllSales = useSelector(GlobalOverAllDiscSales); const OverAllEstimate = useSelector(GlobalOverAllDiscEstimate); const OfferCheckedInSetup = templateData?.BookingNavbar?.[1].some( (item) => item?.OptionName == 'Offer' ); const FreeProdList = useSelector(GlobalFreeProdList); const offerAppliedProducts = useSelector(GlobalOfferAppliedProducts); const BookingType = useSelector(GlobalBookingType); const BookingTypeBoth = useSelector(GlobalBookingTypeBoth); const preferenceDatas = useSelector(PreferenceData); const preferenceDetails = preferenceDatas?.[0]?.SettingDtlDetails; const OtherServiceTicketClaim = useSelector(GlobalOtherServiceTicketClaim); const NavHoldData = useSelector(GlobalNavHoldData); const [SelectedBookingType, setSelectedBookingType] = useState(null); const GlobaluseOptions = useSelector(GlobalCommonPaymentOptions); const SelCustId = useSelector(GlobalSelCustId); const OrderOfferDetail = useSelector(Global_OrderOfferDetail, shallowEqual); const GlobProdwisedata = useSelector(GlobalSelProdWiseEst); const GlobEstBooking = useSelector(GlobalEstimateBooking); const OtherServicesglobal = useSelector(GlobalOtherSevices); const salesBillEdit = useSelector(GlobalSalesBillEdit); const previousOrderPayment = useSelector(GlobalPreviousOrderPayment); const previousOrderOfferDetails = useSelector(GlobalPreviousOrderOfferDetails); const AllPaymentOptions = useSelector(GlobalpaymentOptionData); const OrderType = useSelector(GlobalOrderType); const unpaidFlow = useSelector(Globalunpaidflow); const selOption = useSelector(GlobalSelOption); console.log(selOption, 'selOptionstandard'); const paymentloader = useSelector(GlobalPayementloader); const BookingStatus = useSelector(GlobalBookingStatus); const tabledata = useSelector(GlobalUnpaidListData); const tableOptions = templateData?.BookingBilling?.[1]; const GlobalAddCustomerDetails1 = useSelector(GlobalAddCustomerDetails); const AddBookingDetailsTrigger = useSelector(GlobalAddBookingDetailsTrigger); const GetCustId = useSelector(GlobalCustId); const appPreferences = useSelector(ApplicationPreferences); // customOrderId const CurrentOrderId = useSelector(GlobalCurrentOrderId); const RetailWSSalesType = useSelector(GlobalRetailWSSalesType, shallowEqual); const Combodata = useSelector(GlobalCombocarddata, shallowEqual); console.log(CurrentOrderId, 'CurrentOrderIdtable'); const bookingTypePreference = appPreferences?.find( (preference) => preference?.PreferredCatName === 'Booking Type' )?.PreferenceCatDetails; const dinePreference = bookingTypePreference?.find( (type) => type?.PreferredSubCatName?.toLowerCase() === 'dine in' && type?.PreferredStatus === 'Y' ); const { selectedDate, invoiceDate, clearInvoiceDate } = useDateStore(); const salespagefields = appPreferences?.find( (pref) => pref?.PreferredCatName === 'Sales Page Fields' )?.PreferenceCatDetails; const AvailableDate = salespagefields?.find( (type) => type?.PreferredSubCatName?.toLowerCase() === 'available date' && type?.PreferredStatus === 'Y' ); const commonModulePreference = appPreferences?.find( (preference) => preference?.PreferredCatName === 'Common Module' )?.PreferenceCatDetails; const sportsAppPreference = commonModulePreference?.find( (preference) => preference?.PreferredSubCatName === 'SportsApp' && preference?.PreferredStatus == 'Y' ); console.log(selectedDate, 'selectedDateselectedDate'); const PrinterDetails = useSelector(GlobalPrinterMappingDtls); const UpiQRPreference = preferenceDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'upiqr' && setting?.SettingValue === 'Y' ); const [defaultPaymentMode, setDefaultPaymentMode] = useState([]); const [defaultEnabled, setDefaultEnabled] = useState(false); const [blink, setBlink] = useState(false); const [showWhatsAppShare, setShowWhatsAppShare] = useState(false); const [showSMSShare, setSMSShare] = useState(false); const [formattedDate, setFormattedDate] = useState(''); const [OrderStatus, setOrderStatus] = useState(true); const [OtherServicesPrintDetails, setOtherServicesPrintDetails] = useState( [] ); const [UpiOpen, setUpiOpen] = useState(false); const [useOptions, setuseOptions] = useState([]); const [PaymentOptions, setPaymentOptions] = useState([]); const [addnewAccess, setaddnewAccess] = useState(true); const [empData, setEmpData] = useState(); const [urlData, setUrlData] = useState(); const [paybtnselected, setPaybtnselected] = useState(); const [Paybtnnameselected, setPaybtnnameselected] = useState(); const [payBtns, setPayBtns] = useState(); console.log(payBtns, 'payBtnspayBtns'); const [paymentSucess, setPaymentSuccess] = useState(false); const [businessUPI, setBusinessUPI] = useState(false); const [businessUPIOrderId, setBusinessUPIOrderId] = useState(null); const [businessUPILink, setBusinessUPILink] = useState(null); const [showCancelConfirm, setShowCancelConfirm] = useState(false); const [creditCustomerOpen, setcreditCustomerOpen] = useState(false); const [Splitpayment, setSplitpayment] = useState(false); const [customerPreviesOrders, setCustomerPreviesOrders] = useState(false); const [PrintOrderDetails, setPrintOrderDetails] = useState([]); const [PaymentUpiOptions, setPaymentUpiOptions] = useState([]); const [PaymentDeviceCard, setPaymentDeviceCard] = useState([]); const [SelectedCardOption, setSelectedCardOption] = useState(null); const [PaymentgatewayCard, setPaymentgatewayCard] = useState([]); const [PaymentgatewayUPI, setPaymentgatewayUPI] = useState([]); const [PaymentDeviceUPI, setPaymentDeviceUPI] = useState([]); const [ConfigDataList, setConfigDataList] = useState([]); const [TotalAmount, setTotalAmount] = useState(0); const [refundPayBtns, setRefundPayBtns] = useState([]); const [refundPaySelected, setRefundPaySelected] = useState(); const [refundPaySelectedName, setRefundPaySelectedName] = useState(null); const [currentOrderNetAmount, setCurrentOrderNetAmount] = useState(0); const [previousNetAmount, setPreviousNetAmount] = useState(0); const [FirstPaymentclick, setFirstPaymentclick] = useState(false); const [UpinotSelected, setUpinotSelected] = useState(false); const [brachName, setbrachName] = useState(''); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [UpiOptionOpen, setUpiOptionOpen] = useState(false); const [SelectedUpiOption, setSelectedUpiOption] = useState(); const [UpiOption, setUpiOption] = useState(''); const [CardOptionOpen, setCardOptionOpen] = useState(false); const [UpiId, setUpiId] = useState(); const [Success, SetSuccess] = useState(); const [qrCode, setQrCode] = useState(false); const [credit, setCredit] = useState(false); const [overAllBal, setOverAllBal] = useState(0); const [CardoptionnotSelected, setCardoptionnotSelected] = useState(false); const [CreditCustomer, setCreditCustomer] = useState(false); const [UpiPayOption, setUpiPayOption] = useState([]); const [BusinessPayOption, setBusinessPayoption] = useState([]); const [SelectedUPIPayOption, setSelectedUPIPayOption] = useState('Default'); const [CardPayOption, setCardPayOption] = useState([]); const [MobileNoWhatsApp, setMobileNoWhatsApp] = useState(); const [summary, setSummary] = useState(false); const summaryRef = useRef(null); const [unpaidopen, setUnpaidOpen] = useState(false); const [UnpaidConfirmation, setUnpaidConfirmation] = useState(false); const [unpaidselectedindex, setunpaidselectedindex] = useState(); const [extra, setExtra] = useState(); const PaymentOptionsModeName = PaymentOptions?.find((e) => e.ModeDefault?.toUpperCase() === 'Y') ?.ModeName || PaymentOptions?.[0]?.ModeName; const PaymentOptionsModeId = PaymentOptions?.find((e) => e.ModeDefault?.toUpperCase() === 'Y')?.ModeId || PaymentOptions?.[0]?.ModeId; const preferenceshortcutkey = preferenceDatas?.[0]?.SettingDtlDetails?.some( (setting) => setting?.SettingIdName?.toLowerCase() === 'shortcutkeys' && setting?.SettingValue === 'Y' ); console.log(preferenceDatas, 'preferenceDatas', preferenceshortcutkey); console.log( PaymentOptionsModeName, 'PaymentPrefarance', PaymentOptionsModeId ); const allowedNames = ['whatsapp', 'Print', 'SMS']; const allowDecimal = preferenceDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'decimal' && setting?.SettingValue === 'Y' ); const Custombill = preferenceDetails?.some( (setting) => setting?.SettingIdName?.toLowerCase() === 'customisedbillnumber' && setting?.SettingValue === 'Y' ); const Weightasquantity = preferenceDetails?.some( (setting) => setting?.SettingIdName?.toLowerCase() === 'weightasquantity' && setting?.SettingValue === 'Y' ); const filteredSettingNames = preferenceDetails ?.filter( (item) => allowedNames.includes(item?.SettingIdName) && item?.SettingValue === 'Y' ) ?.map((item) => item?.SettingIdName); const preferenceOffer = preferenceDetails?.find((item) => item.SettingIdName === 'Offer') ?.SettingValue === 'Y'; const UomPrint = preferenceDetails?.filter( (i) => i.SettingIdName === 'PrintUom' )?.[0]; const Estimation = preferenceDetails?.find( (item) => item.SettingIdName == 'Estimation' ); const MobileA4Print = preferenceDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'mobilea4' && setting?.SettingValue === 'Y' ); const TokenOnly = preferenceDetails?.filter( (i) => i.SettingIdName === 'TokenOnly' )?.[0]; const IndividualToken = preferenceDetails?.filter( (i) => i.SettingIdName === 'AllProductindividualToken' )?.[0]; const CheckOrderType = orderCardDetail?.filter( (a) => a?.BookingTypeName !== BookingType ); const CheckBookingStatus = BookingStatus?.find((item) => item.ScreenType === 'Booking') ?.ScreenStatus ?? 'Open'; const orderIdsArray = PrintOrderDetails?.[0]?.OrderDetails?.map( (orderDetail) => orderDetail?.OrderId ) || []; const handleURL = async (PrintOrderDetails) => { let orderIdsArray = PrintOrderDetails?.[0]?.OrderDetails?.map( (orderDetail) => orderDetail?.OrderId ); const encrypted = encryptObject(orderIdsArray); const postData = { Url: encrypted, CreatedBy: UserId, }; if (orderIdsArray) { const res = await dispatch(PublicQrCodepost(postData)).unwrap(); const urlData = res?.data?.ReferenceNo; setUrlData(urlData); } }; useEffect(() => { setExtra( GlobalExtraCharge?.reduce((accumulator, currentObject) => { return accumulator + currentObject.TotalAmt; }, 0) ); }, [GlobalExtraCharge]); useEffect(() => { if (salesBillEdit) { dispatch(getPaymentOptions()).unwrap(); } }, [salesBillEdit]); const customerNameOrMobile = MobileNoWhatsApp?.CustName?.trim() ? `Dear ${MobileNoWhatsApp?.CustName}` : `Dear ${MobileNoWhatsApp?.value}`; const documentUrl = `${MainHomeUrl}viewbill?code=${urlData}`; const encodedMessage = `${customerNameOrMobile},\n\n🙏 Thank you for being a valuable customer!\n\n🧾 To view your bill, please click the link below:\n${documentUrl}`; const isDisabled = (BookingType === 'Dine In' || BookingTypeBoth || CheckOrderType?.length > 0) && !unpaidFlow && OrderStatus; const formatAmount = (value) => { return allowDecimal ? parseFloat(value || 0).toFixed(2) : Math.round(value || 0); }; const columns = [ { title: 'Sl.No', key: 'sno', align: 'center', width: '100px', render: (text, object, index) => ( {index + 1} ), }, { title: 'Table Name/Chair Name', dataIndex: 'TableName', key: 'TableName', width: '150px', onCell: (_, record, index) => { return { onClick: () => { Unpaidfun(record); }, }; }, }, { title: 'Order Id', dataIndex: 'OrderID', key: 'OrderID', width: '150px', align: 'right', onCell: (_, record, index) => { return { onClick: () => { Unpaidfun(record); }, }; }, }, { title: "Item's", dataIndex: 'ProductName', key: 'ProductName', width: '250px', onCell: (_, record, index) => { return { onClick: () => { Unpaidfun(record); }, }; }, }, { title: 'Amount', dataIndex: 'TotalAmount', key: 'TotalAmount', width: '150px', align: 'right', render: (text) => {safeRound(text)}, onCell: (_, record, index) => { return { onClick: () => { Unpaidfun(record); }, }; }, }, ]; useEffect(() => { let data = { compId: CompId, branchId: BranchId }; dispatch(getCurrentOrderid(data)).unwrap(); }, []); const TableData = []; tabledata?.map((item) => TableData.push({ TableName: item.SalesTableLinkDetails?.map((item) => item.ChairName == null ? item.TableName : item.ChairName )?.join(','), OrderID: extractLastNumberOrderId(item?.OrderId, item?.FYStatus), ProductName: item.productDetails ?.map( (item) => item?.ProdName + '-' + (item?.Type != 'C' ? item?.OrderQty : '1 Combo') ) ?.join(','), TotalAmount: item.NetAmount, }) ); console.log( BookingType, BookingTypeBoth, CheckOrderType, unpaidFlow, 'ffffffffffff' ); useEffect(() => { if (NavHoldData) { AddBookingDetails('Hold'); } }, [NavHoldData]); useEffect(() => { if (AddBookingDetailsTrigger) { AddBookingDetails('TakeAway', true); } }, [AddBookingDetailsTrigger]); // useEffect(() => { // let data = { // CompId: CompId, // BranchId: BranchId, // AppId: AppId, // UserId: UserId, // }; // dispatch(getPrinterMappingDetails(data)).unwrap(); // const Data1 = { AppId, CompId, BranchId }; // dispatch(getPrintSelectionComponentData(Data1)).unwrap(); // }, []); useEffect(() => { if (isMobile) { OtherServiceMobilePrint( OtherServicesPrintDetails, UpiId, 'Booking', preferenceDatas ); } else { Otherserviceprint(); } }, [OtherServicesPrintDetails]); useEffect(() => { let hasAccess = false; if (UserType === 'Admin' || UserType === 'Super Admin') { hasAccess = true; } else if (UserType === 'Employee') { hasAccess = empData?.AddAccess === 'Y'; } else if (UserType === 'Super Admin User') { hasAccess = SAAccessCommonMaster?.AddAccess === 'Y'; } setaddnewAccess(!hasAccess); }, [empData, SAAccessCommonMaster, UserType]); useEffect(() => { if (selOption) { closePrintOption(); setMobileNoWhatsApp(selOption); } }, [selOption]); useEffect(() => { const handleKeyPress = (event) => { if (!preferenceshortcutkey) return; if (event.key === 'F4' && isButtonActive() && !isF4Pressed.current) { isF4Pressed.current = true; // BranchFinancialStatus==='N'? financialYearError(): handleButtonClick(); setTimeout(() => { isF4Pressed.current = false; // Reset after a short delay }, 1000); } if (event.altKey && event.key === 's') { event.preventDefault(); if ( orderCardDetail?.length > 0 && CheckBookingStatus !== 'Close' && !addnewAccess && !unpaidFlow && !OrderStatus ) { SplitPaymentOpen(); } } }; window.addEventListener('keydown', handleKeyPress); return () => { window.removeEventListener('keydown', handleKeyPress); }; }, [ FirstPaymentclick, orderCardDetail, paybtnselected, OrderStatus, qrCode, SelectedUPIPayOption, TotalAmount, SelectedUpiOption, SelectedCardOption, BookingType, Holddata, CheckBookingStatus, addnewAccess, preferenceshortcutkey, unpaidFlow, ]); // useEffect(() => { // const handleKeyPress = (event) => { // if (event.shiftKey && event.code === 'KeyM') { // if ( // document.activeElement.tagName !== 'INPUT' && // document.activeElement.tagName !== 'TEXTAREA' // ) { // event.preventDefault(); // setBlink(true); // } // } // }; // const handleClickOutside = (event) => { // setBlink(false); // }; // window.addEventListener('keydown', handleKeyPress); // window.addEventListener('mousedown', handleClickOutside); // return () => { // window.removeEventListener('keydown', handleKeyPress); // window.addEventListener('mousedown', handleClickOutside); // }; // }, []); useEffect(() => { // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); // setPaybtnselected(PaymentOptions?.[0]?.ModeId); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); setQrCode(false); }, [PaymentOptions]); useEffect(() => { const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { paymentMethod: Paybtnnameselected, Paymentgateway: false, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } dispatch(ChangeInitialPaymentName(Paybtnnameselected)); }, [Paybtnnameselected]); useEffect(() => { let data = selOption != null ? selOption : GetCustId; const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { customer: data, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }, [selOption, GetCustId]); useEffect(() => { const fetchCreditCustomer = async () => { const selectedMode = payBtns?.find( (pay) => paybtnselected === pay?.ModeId )?.ModeName; if ( selectedMode?.toLowerCase() === 'credit' && (!UpinotSelected || !CardoptionnotSelected) ) { setCredit(true); try { const res = await dispatch( getCreditCustomer({ CompId, AppId, BranchId, CustId: selOption?.CustId, }) ).unwrap(); if (res?.data?.statusCode === 1 && res?.data?.data?.length > 0) { setOverAllBal(res.data.data[0]?.OverAllBal ?? 0); } else { setOverAllBal(0); } } catch (error) { console.error('Credit fetch failed', error); setOverAllBal(0); } } else { setCredit(false); setOverAllBal(0); } }; fetchCreditCustomer(); }, [paybtnselected, selOption, payBtns]); useEffect(() => { if (orderCardDetail?.length == 0) { dispatch(changeunpaidflow(false)); // dispatch(changePreviousOrderPayment([])); // dispatch(changePreviousOrderOfferDetail([])); // dispatch(changeBillEditingMode(false)); } if (!preOrder) { const totalSum = orderCardDetail?.reduce( (acc, card) => acc + parseFloat(card.OrderRate * card.OrderQty || 0), 0 ); const extra = GlobalExtraCharge?.reduce( (acc, obj) => acc + (obj.TotalAmt || 0), 0 ); let withComboSum = 0; const withComboOffer_CardDetail = orderCardDetail?.filter( (item) => item.Type === 'C' ); if (withComboOffer_CardDetail?.length > 0) { withComboSum = formatAmount( withComboOffer_CardDetail.reduce( (acc, card) => acc + parseFloat(card.OrderRate * card.OrderQty - card.TotalAmt || 0), 0 ) ); } let Total = extra === undefined ? totalSum - OverallOfferAmount : totalSum + extra - OverallOfferAmount; // Subtract OtherServiceTicketClaim?.totalTicketamount if present and > 0 if (OtherServiceTicketClaim?.TotalAmt > 0) { if (Total - OtherServiceTicketClaim.TotalAmt > 0) { Total -= OtherServiceTicketClaim.TotalAmt; } else { dispatch( changeOtherServiceTicketClaim({ TicketId: null, TotalAmt: 0, ParkingClaimed: false, ServiceCategory: null, }) ); } } else if (OtherServiceTicketClaim?.OtherType == 'Remove') { dispatch( changeOtherServiceTicketClaim({ TicketId: null, TotalAmt: 0, ParkingClaimed: false, ServiceCategory: null, }) ); } const filteredPayments = previousOrderPayment?.filter( p => p?.LastOrderTran === 'Y' && p?.AfterAdjustment != null && p?.AfterAdjustment !== '' && p?.AfterAdjustment ) || []; const paymentsToUse = filteredPayments.length > 0 ? filteredPayments : previousOrderPayment || []; const totalPreviouspayment = paymentsToUse?.reduce( (acc, payment) => acc + parseFloat(payment.AfterAdjustment || payment.Amount || 0), 0 ); const totalPreviousOfferAmount = previousOrderOfferDetails?.reduce( (acc, offer) => acc + parseFloat(offer.OfferAmount || 0), 0 ); const previousNetAmount = (totalPreviouspayment) || 0; let withdiscTotal = Total - ((OverAllSales || 0) + (OverAllEstimate || 0) + (Discount > 0 ? Discount : 0)); const currentOrderNetAmount = formatAmount( withdiscTotal >= 0 ? (Number(withdiscTotal) + Number(globalTipAmount)).toFixed(2) : (Number(Total) + Number(globalTipAmount)).toFixed(2) ) console.log(salesBillEdit ? (currentOrderNetAmount > previousNetAmount) ? (currentOrderNetAmount - previousNetAmount) : 0 : currentOrderNetAmount, "totalPreviouspayment") setTotalAmount(salesBillEdit ? (currentOrderNetAmount > previousNetAmount) ? (currentOrderNetAmount - previousNetAmount) : 0 : currentOrderNetAmount); setCurrentOrderNetAmount(currentOrderNetAmount); setPreviousNetAmount(previousNetAmount); dispatch(changeSummeryTotalAmount(salesBillEdit ? (currentOrderNetAmount > previousNetAmount) ? (currentOrderNetAmount - previousNetAmount) : 0 : currentOrderNetAmount)); // dispatch( // changeSummeryTotalAmount(withdiscTotal > 0 ? withdiscTotal : Number(Total)) // ); dispatch(changeSummeryComboOfferAmount(withComboSum)); // if (withdiscTotal <= 0) { // dispatch(ChangeOverAllDiscSales(0)); // dispatch(ChangeOverAllDiscEstimate(0)); // } } else { setTotalAmount(0); dispatch(changeSummeryTotalAmount(0)); dispatch(changeSummeryComboOfferAmount(0)); } }, [ orderCardDetail, GlobalExtraCharge, OverAllSales, OverAllEstimate, globalTipAmount, OtherServiceTicketClaim, Discount, ]); useEffect(() => { if ( orderCardDetail?.length === 1 && orderCardDetail?.[0]?.OrderQty === 1 && !SelCustId ) { closePrintOption(); setPrintOrderDetails([]); } }, [orderCardDetail]); // useEffect(() => { // if ( // PrintOrderDetails?.length > 0 && // (!filteredSettingNames || // filteredSettingNames?.includes('Print') || // filteredSettingNames?.length === 0) && // ((!filteredSettingNames?.includes('whatsapp') && // (!isMobile || !filteredSettingNames?.includes('SMS'))) || // ((filteredSettingNames?.includes('whatsapp') || // (isMobile && filteredSettingNames?.includes('SMS'))) && // (!MobileNoWhatsApp || Object.keys(MobileNoWhatsApp).length === 0))) // ) { // handlePrintOrToken(); // } // }, [PrintOrderDetails]); useEffect(() => { if (!PrintOrderDetails?.length) return; const selectedOptions = filteredSettingNames || []; const count = selectedOptions.length; if (count === 0) { handlePrintOrToken(); return; } if (count === 1) { const option = selectedOptions[0]; switch (option) { // case "whatsapp": // handleWhatsAppClick(); // return; case 'whatsapp': if (!selOption && MobileNoWhatsApp?.value) { handleWhatsAppClick(); } else { handlePrintOrToken(); } return; case 'SMS': if (isMobile) handleSMSClick(); else handlePrintOrToken(); return; case 'Print': handlePrintOrToken(); return; // case "Email": // handleEmailClick(); // return; default: return; } } return; }, [PrintOrderDetails]); useEffect(() => { getPaymentOptionFeature(); getBookingTypeId(); }, []); useEffect(() => { getPaymentOptionFeature(); }, [GlobaluseOptions]); useEffect(() => { getBookingTypeId(); }, [BookingType]); useEffect(() => { if (SelCustId) { if (UserType !== 'Admin' || UserType !== 'Employee') { setPayBtns(PaymentOptions); } else { let data1 = PaymentOptions?.[1] ? PaymentOptions?.[1] : null; let data = [...PaymentOptions]; data?.splice(1, 1); data1 && data?.push(data1); setPayBtns(data); } } else { const withoutCustomer = PaymentOptions?.filter?.( (item) => item?.ModeName?.toLowerCase() !== 'credit' ); setPayBtns(withoutCustomer); } }, [PaymentUpiOptions, PaymentOptions, SelCustId]); useEffect(() => { if (salesBillEdit) { if (SelCustId) { setRefundPayBtns(AllPaymentOptions); setRefundPaySelected(AllPaymentOptions?.[0]?.ConfigId); setRefundPaySelectedName(AllPaymentOptions?.[0]?.ConfigName); } else { const withoutCustomer = AllPaymentOptions?.filter?.( (item) => item?.ConfigName?.toLowerCase() !== 'credit' ); setRefundPaySelected(withoutCustomer?.[0]?.ConfigId); setRefundPaySelectedName(withoutCustomer?.[0]?.ConfigName); setRefundPayBtns(withoutCustomer); } } }, [AllPaymentOptions, SelCustId, salesBillEdit]) useEffect(() => { if ( (BookingType === 'Dine In' || BookingTypeBoth || CheckOrderType?.length > 0) && !unpaidFlow && SelectedTableDetails?.length !== 0 ) { setOrderStatus(true); } else { setOrderStatus(false); } }, [BookingTypeBoth, BookingType, unpaidFlow]); useEffect(() => { if (UserType === 'Employee') { fetchApi(); } }, [UserType]); useEffect(() => { const getPrintData = async () => { try { const data = { AppId, CompId, BranchId, OrderId: businessUPIOrderId, }; const res = await dispatch(ReprintDetails(data)).unwrap(); if (res?.data?.statusCode === 1 && res?.data?.data?.length > 0) { const orderData = [{ OrderDetails: res.data.data }]; // Reset states first setBusinessUPIOrderId(null); setBusinessUPI(false); setPaymentSuccess(false); // Then set new data and trigger side effects setPrintOrderDetails(orderData); CustomerDisplay(); ClearAllGlobalStateDatas(); filteredSettingNames?.includes('whatsapp') && MobileNoWhatsApp?.value && handleURL(orderData); } } catch (error) { console.error('Failed to fetch print data:', error); // Reset states even on error setBusinessUPI(false); setPaymentSuccess(false); } }; if (paymentSucess && businessUPIOrderId) { const timer = setTimeout(() => { getPrintData(); }, 3000); return () => clearTimeout(timer); } }, [paymentSucess, businessUPIOrderId, AppId, CompId, BranchId, dispatch]); const isButtonActive = () => { const baseCondition = FirstPaymentclick === false && orderCardDetail?.length > 0 && paybtnselected && CheckBookingStatus !== 'Close'; let accessCondition = true; if (UserType === 'Employee') { accessCondition = empData?.AddAccess === 'Y'; } else if (UserType === 'Super Admin User') { accessCondition = SAAccessCommonMaster?.AddAccess === 'Y'; } return baseCondition && accessCondition; }; const fetchApi = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, EmpId: UserId, }; let response = await dispatch(getEmpAccess(data)).unwrap(); let datas = response?.data?.data?.[0]?.EmpAccessDetails?.filter( (item) => item.ConfigName === 'Sales' ); setEmpData(datas?.[0]); }; const handleButtonClick = () => { if (qrCode && SelectedUPIPayOption === 'Default' && UpiQRPreference) { UpiPayment(); } else if (salesBillEdit && currentOrderNetAmount < previousNetAmount && !refundPaySelected) { setMessageType('warning'); setMessageData('Please Select Refund Payment Method'); return; } else { OrderStatus ? AddBookingDetails('Dine-In', false) : AddBookingDetails(BookingType, true); } }; const Otherserviceprint = async () => { if (OtherServicesPrintDetails?.length > 0) { const style = await PrintStyleFunction('OtherServices1'); const stylesMap = { OtherServices1: 'OtherServices1', }; const selectedStyle = stylesMap['OtherServices1']; console.log(selectedStyle, 'selectedStyle'); await printDiv('OtherServices1', style); // Use unique IDs for each print setOtherServicesPrintDetails([]); closePrintOption(); } }; const handleCreditCustomer = (type) => { setCreditCustomer(false); if (type == 'Submit') { Booking(BookingType, true); } if (type == 'Cancel') { // setPaybtnselected(PaymentOptions?.[0]?.ModeId); // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); } const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedRemovedData = { type: 'remove', keyValue: 'OrderTotalAmount', }; customerDisplayWindow.postMessage(updatedRemovedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }; const getBookingTypeId = async () => { let tempconfigdata = await dispatch( getConfigType({ TypeName: 'Booking Type' }) ).unwrap(); if (tempconfigdata?.data?.statusCode == 1) { setConfigDataList(tempconfigdata?.data?.data); let configdata = tempconfigdata?.data?.data; let checkName = BookingTypeBoth ? 'DineIn,TakeAway' : BookingType; let filterconfigdata = configdata?.find( (a) => a?.ConfigName === checkName ); setSelectedBookingType(filterconfigdata?.ConfigId); } }; const UpiPayment = () => { if (OrderStatus) { AddBookingDetails('Dine-In', false); } else { if ( SelectedUpiOption && orderCardDetail?.length > 0 && TotalAmount == 0 ) { Upimodel('Submit'); } else if (SelectedUpiOption) { if (orderCardDetail?.length > 0) setUpiOpen(true); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { OrderTotalAmount: TotalAmount, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } } else { setUpinotSelected(true); setMessageType('error'); setMessageData('Please Select Upi Option'); } } }; const Upimodel = (type) => { setUpiOpen(false); if (type == 'Submit') { AddBookingDetails(BookingType, true); } const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedRemovedData = { type: 'remove', keyValue: 'OrderTotalAmount', }; customerDisplayWindow.postMessage(updatedRemovedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }; const AddBookingDetails = async (value, pay) => { const customerDisplayWindow = getCustomerDisplayWindow(); const OnUpiSelected = PaymentOptions?.find( (item) => item.ModeId === paybtnselected ); if ( OnUpiSelected?.ModeName?.toLowerCase() === 'upi' && (SelectedUPIPayOption?.toLowerCase() === 'default' || SelectedUPIPayOption?.toLowerCase() === 'business') ) { SetSuccess(false); setTimeout(function () { SetSuccess(true); // Add your state change code here // For example: // setNewState(newValue); }, 3000); if (SelectedUpiOption) { Booking(value, pay); } else { setUpinotSelected(true); setMessageType('error'); setMessageData('Please Select Upi Option'); } } else if ( OnUpiSelected?.ModeName?.toLowerCase() === 'card' && PaymentgatewayCard?.length > 0 && PaymentDeviceCard?.length > 0 ) { if (SelectedCardOption) { if (SelectedCardOption?.toLowerCase() === 'pg') { if (customerDisplayWindow && !customerDisplayWindow.closed) { if (SelCustId) { Booking(value, pay); } else { setMessageType('error'); setMessageData('Please Select Customer'); } } else { setMessageType('error'); setMessageData('Please Set the customer display'); } } else { Booking(value, pay); } } else { setCardoptionnotSelected(true); setMessageType('error'); setMessageData('Please Select Card Option'); } } else if (OnUpiSelected?.ModeName?.toLowerCase() === 'credit') { if (!SelCustId) { setMessageType('error'); setMessageData('Please Select Customer'); } else { if (TotalAmount <= 0) { return; } setCreditCustomer(true); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { OrderTotalAmount: TotalAmount, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } } } else if ( OnUpiSelected?.ModeName?.toLowerCase() === 'upi' && SelectedUPIPayOption?.toLowerCase() === 'pg' ) { if (customerDisplayWindow && !customerDisplayWindow.closed) { if (SelCustId) { Booking(value, pay); } else { setMessageType('error'); setMessageData('Please Select Customer'); } } else { setMessageType('error'); setMessageData('Please Set the customer display'); } } else if ( OnUpiSelected?.ModeName?.toLowerCase() === 'card' && SelectedCardOption?.toLowerCase() === 'pg' ) { if (customerDisplayWindow && !customerDisplayWindow.closed) { if (SelCustId) { Booking(value, pay); } else { setMessageType('error'); setMessageData('Please Select Customer'); } } else { setMessageType('error'); setMessageData('Please Set the customer display'); } } else { Booking(value, pay); } }; const Booking = async (value, pay) => { const TakAwayId = ConfigDataList?.find( (a) => a?.ConfigName === 'TakeAway' )?.ConfigId; const DineinId = ConfigDataList?.find( (a) => a?.ConfigName === 'Dine In' )?.ConfigId; setFirstPaymentclick(true); let temporderdetail = orderCardDetail?.map((a) => ({ ProdId: a.ProdId, Type: a.Type, OrderQty: a.OrderQty, OrderRate: a.OrderRate, TotalAmt: a.OrderQty * a.OrderRate, TaxAmt: a.TaxAmt, RefundQty: 0, InwardDtlId: a.InwardDtlId, TaxId: a.TaxId, ProdNameQty: UomPrint?.SettingValue === 'N' ? `${a.ProdName} ${a.UomName?.toLowerCase() === 'half' ? '(Half)' : ''}` : `${a.ProdName} ${a.Size} ${a.UomName}`, OrderStatus: 'O', OrderType: BookingType === 'Dine In' || BookingTypeBoth || Estimation?.SettingValue == 'N' ? 'S' : GlobEstBooking === 'OvrAllEst' ? 'E' : GlobEstBooking === 'ParEst' ? GlobProdwisedata?.includes( a.InwardDtlId + ' ' + a?.BookingTypeName ) ? 'E' : 'S' : 'S', SinglePc: a.SinglePc, BookingType: a.BookingTypeName === 'Dine In' ? DineinId : TakAwayId, OfferValue: a?.Type === 'C' ? a?.OfferValue : a.Offer, OfferAmt: a?.Type === 'C' ? a?.TotalAmt : a.Offer, OfferType: a?.Type === 'C' ? a?.OfferType : '', OfferMode: a?.OfferMode, OfferMessage: a?.OfferMessage, CounterName: a?.TokenAvailable === 'Y' ? a?.CounterName : null, ProductIdentifierDtls: a.ProductIdentifierDtls, ModelNumber: a.ModelNumber, BatchRef: a.BatchRef, PackageDtl: a.PackageDtl, SetCount: a.SetCount, BookingDate: AvailableDate ? Object.keys(ReportholdData)?.length > 0 ? a?.BookingDate : a.BookedDate : null, ScaleType: a.ScaleType, })); const NotSlectedTypeFind = temporderdetail?.find( (a) => a?.BookingType != SelectedBookingType ); const { totalwithouttax, totaltax } = orderCardDetail?.reduce( (totals, card) => { totals.totalwithouttax += parseFloat(card.WithoutTaxRate || 0); totals.totaltax += parseFloat(card.TaxAmt || 0); return totals; }, { totalwithouttax: 0, totaltax: 0 } ) || { totalwithouttax: 0, totaltax: 0 }; let updatedOfferDetails = offerAppliedProducts; if (GlobEstBooking !== 'Sales') { updatedOfferDetails = offerAppliedProducts?.filter( (item) => !( item.TableName === 'LoyaltyPoints' && item.TableUniqueName === 'UniqueId' && item.Type === 'A' ) ); } let temppostdata = { SalesMode: RetailWSSalesType || 'R', CompId: CompId, BranchId: BranchId, AppId: AppId, OrderDate: Custombill ? invoiceDate : null, CustomOrderNo: Custombill ? CurrentOrderId : null, OrderType: Object.keys(ReportholdData)?.length > 0 ? ReportholdData?.OrderType : 'S', CustSuppId: SelCustId ? SelCustId : null, Reference: 'test', BookingType: NotSlectedTypeFind && !BookingTypeBoth ? NotSlectedTypeFind?.BookingType : SelectedBookingType, ServiceProvider: 0, ActiveStatus: 'A', CreatedBy: UserId, AddlInfo: 'test', BillAmount: totalwithouttax.toFixed(2), OverallDiscSales: OverAllSales > 0 ? OverAllSales : 0, OverallDiscEst: OverAllEstimate > 0 ? OverAllEstimate : 0, TaxAmount: totaltax.toFixed(2), VatAmount: 0, NetAmount: Math.round(TotalAmount), PaymentType: Paybtnnameselected?.toLowerCase() === 'upi' ? SelectedUPIPayOption?.toLowerCase() === 'pd' ? PaymentDeviceUPI?.[0]?.ModeId : SelectedUPIPayOption?.toLowerCase() === 'pg' ? PaymentgatewayUPI?.[0]?.ModeId : paybtnselected : paybtnselected ? paybtnselected : null, GivenAmt: 0, BalGiven: 0, BookingMedia: 'DW', RefundAmount: 0, ServiceCategory: OtherServiceTicketClaim?.ServiceCategory || null, OtherServiceTicketId: OtherServiceTicketClaim?.TicketId || null, OtherServiceTicketAmount: OtherServiceTicketClaim?.TotalAmt || null, PaymentStatus: Paybtnnameselected?.toLowerCase() === 'cash' ? 'S' : Paybtnnameselected?.toLowerCase() === 'credit' ? 'S' : Paybtnnameselected?.toLowerCase() === 'upi' && SelectedUPIPayOption?.toLowerCase() === 'default' ? 'S' : 'P', OrderDtlDetails: Object.keys(ReportholdData)?.length > 0 ? ProductSummary(temporderdetail) : temporderdetail, // (BookingType === "Dine In" || BookingTypeBoth) ExtraChargeDetails: GlobalExtraCharge?.length > 0 ? extrachargesbookingtype(GlobalExtraCharge) : null, SalesTableLinkDetails: SelectedTableDetails?.length > 0 ? globalTipAmount === 0 ? SelectedTableDetails : SelectedTableDetails?.map((item) => ({ ...item, TipsAmount: globalTipAmount, })) : null, SalesPaymentType: 'normal', PaymentDetail: [ { PaymentType: (salesBillEdit && currentOrderNetAmount < previousNetAmount) ? refundPaySelected : Paybtnnameselected?.toLowerCase() === 'upi' ? SelectedUPIPayOption?.toLowerCase() === 'pd' ? PaymentDeviceUPI?.[0]?.ModeId : SelectedUPIPayOption?.toLowerCase() === 'pg' ? PaymentgatewayUPI?.[0]?.ModeId : SelectedUPIPayOption?.toLowerCase() === 'business' ? BusinessPayOption?.find( (busupi) => busupi?.ModeId === UpiId )?.ModeId : paybtnselected : paybtnselected ? paybtnselected : null, Amount: (salesBillEdit && currentOrderNetAmount < previousNetAmount) ? previousNetAmount - currentOrderNetAmount : Math.round(TotalAmount), MerchantId: (salesBillEdit && currentOrderNetAmount < previousNetAmount) ? null : Paybtnnameselected?.toLowerCase() === 'upi' && SelectedUPIPayOption?.toLowerCase() === 'business' ? BusinessPayOption?.find((busupi) => busupi?.ModeId === UpiId) ?.MerchantId : null, PaymentOptionType: (salesBillEdit && currentOrderNetAmount < previousNetAmount) && (refundPaySelectedName?.toLowerCase() === 'cash' || refundPaySelectedName?.toLowerCase() === 'credit') ? 'PC' : Paybtnnameselected?.toLowerCase() === 'cash' ? 'PC' : Paybtnnameselected?.toLowerCase() === 'credit' ? 'PC' : Paybtnnameselected?.toLowerCase() === 'card' ? SelectedCardOption : Paybtnnameselected?.toLowerCase() === 'upi' ? SelectedUPIPayOption?.toLowerCase() === 'default' ? 'PC' : SelectedUPIPayOption?.toLowerCase() === 'business' ? 'BU' : SelectedUPIPayOption : null, ModeOfPayment: (salesBillEdit && currentOrderNetAmount < previousNetAmount) ? null : SelectedUPIPayOption?.toLowerCase() === 'default' ? PaymentUpiOptions?.find((upipay) => upipay?.UPIId === UpiId) ?.UPIDetailId : SelectedUPIPayOption?.toLowerCase() === 'business' ? BusinessPayOption?.find((busupi) => busupi?.ModeId === UpiId) ?.MerchantUPIId : null, AccountDtl: (salesBillEdit && currentOrderNetAmount < previousNetAmount) ? [] : Paybtnnameselected?.toLowerCase() === 'upi' && SelectedUPIPayOption?.toLowerCase() === 'default' ? useOptions?.[0]?.PaymentDetails?.Payatthecounter?.find( (upipay) => upipay?.UPIId === UpiId ) : (Paybtnnameselected?.toLowerCase() === 'upi' && SelectedUPIPayOption?.toLowerCase() === 'pd') || (Paybtnnameselected?.toLowerCase() === 'card' && SelectedCardOption?.toLowerCase() === 'pd') ? useOptions?.[0]?.PaymentDetails?.PaymentDevice : (Paybtnnameselected?.toLowerCase() === 'upi' && SelectedUPIPayOption?.toLowerCase() === 'pg') || (Paybtnnameselected?.toLowerCase() === 'card' && SelectedCardOption?.toLowerCase() === 'pg') ? useOptions?.[0]?.PaymentDetails?.PaymentGateway : [], PaymentStatus: (salesBillEdit && currentOrderNetAmount < previousNetAmount) ? 'S' : Paybtnnameselected?.toLowerCase() === 'cash' ? 'S' : Paybtnnameselected?.toLowerCase() === 'credit' ? 'S' : Paybtnnameselected?.toLowerCase() === 'upi' && SelectedUPIPayOption?.toLowerCase() === 'default' ? 'S' : 'P', Debit: (salesBillEdit && currentOrderNetAmount < previousNetAmount && refundPaySelectedName?.toLowerCase() === 'credit') ? Math.round(previousNetAmount - currentOrderNetAmount) : 0, Credit: salesBillEdit ? (currentOrderNetAmount > previousNetAmount && Paybtnnameselected?.toLowerCase() === 'credit') ? Math.round(TotalAmount) : 0 : Paybtnnameselected?.toLowerCase() === 'credit' ? Math.round(TotalAmount) : 0, }, ], OrderOfferDetail: updatedOfferDetails, RefDetails: [ { FreeProdList: FreeProdList, OfferAppliedProductList: offerAppliedProducts, }, ], }; let PostData = temppostdata; if (value === 'Dine-In') { PostData['PaymentStatus'] = pay ? 'S' : 'P'; PostData['PaymentDetail'] = !pay && []; PostData['PaymentType'] = !pay && ''; } else if (value === 'Hold') { ((PostData['PaymentStatus'] = pay ? 'S' : 'P'), (PostData['PaymentDetail'] = !pay && [])); PostData['PaymentType'] = !pay && ''; PostData['ActiveStatus'] = pay ? 'A' : 'D'; } else if (value === 'Unpaid') { PostData['PaymentStatus'] = pay ? 'S' : 'P'; PostData['PaymentDetail'] = !pay && []; PostData['PaymentType'] = !pay && ''; PostData['PrintType'] = 'Y'; } // if(sportsAppPreference){ // let singlepcProd = orderCardDetail?.filter((item) => item.SinglePc === "Y"); // console.log("singlepcProd",singlepcProd); // if (singlepcProd?.length > 0) { // const ProductList = singlepcProd.map((item) => ({ // ProdId: item?.ProdId, // InwardDtlId: item?.InwardDtlId, // SinglePc: item?.SinglePc, // Qty: item?.OrderQty, // Date: item?.BookedDate, // })); // const BlockPostdata = { // CompId: CompId, // BranchId: BranchId, // AppId: AppId, // ProductList: ProductList, // Status: "UnBlock", // CreatedBy: UserId, // }; // await dispatch(PostBlockSlots(BlockPostdata)).unwrap(); // } // } Object.keys(ReportholdData)?.length > 0 ? OrderType === 'Failed' ? PutFailedPayment(PostData, value, pay) : PutBooking(PostData, value, pay) : !OtherServicesglobal ? PostBooking(PostData, value) : OtherServicePostBooking(PostData, value); // getstockbadge(); // Combocarddata(); }; const PostBooking = async (PostData, value) => { let response = await dispatch(PostBookingData(PostData)).unwrap(); if (response?.data?.statusCode == 1) { let Paymentdevicefilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pd' && item?.PaymentStatus === 'P' ); let PaymentGatewayfilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pg' && item?.PaymentStatus === 'P' ); let businessUPIfilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'bu' && item?.PaymentStatus === 'P' ); let PayatCounterfilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pc' ); if ( PayatCounterfilter?.length === 1 || response?.data?.PaymentOrderDtl?.length === 0 ) { setMessageType('success'); setMessageData( response?.data?.response + ' ' + (response?.data?.OrderDetails?.length > 0 ? response?.data?.OrderId && extractLastNumberOrderId( response?.data?.OrderId, response?.data?.OrderDetails?.[0]?.FYStatus ) : '') ); response?.data?.OrderDetails?.length > 0 && setPrintOrderDetails([response?.data]); CustomerDisplay(value); ClearAllGlobalStateDatas(value); filteredSettingNames?.includes('whatsapp') && MobileNoWhatsApp?.value && handleURL([response?.data]); } if (Paymentdevicefilter?.length === 1) { if ( Paymentdevicefilter?.[0]?.PaymentOptionType?.toLowerCase() === 'pd' ) { PaymentDeviceFlow(Paymentdevicefilter, value); } } else { console.log('more pd data'); } if (PaymentGatewayfilter?.length === 1) { if ( PaymentGatewayfilter?.[0]?.PaymentOptionType?.toLowerCase() === 'pg' ) { await dispatch(changePaymentloader(true)); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { OrderBookingId: PaymentGatewayfilter?.[0]?.OrderId, Paymentgateway: true, OrderPaymentId: PaymentGatewayfilter?.[0]?.PaymentOrderId, OrderTotalAmount: PaymentGatewayfilter?.[0]?.Amount, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } const checkPaymentStatus = async () => { const intervalId = setInterval(async () => { try { let getpaymentgatewaydetail = await dispatch( PaymentGatewayGetdetail(PaymentGatewayfilter?.[0]?.OrderId) ).unwrap(); if (getpaymentgatewaydetail?.data?.statusCode === 1) { let paymentdataget = getpaymentgatewaydetail?.data?.PaymentOrderDtl?.find( (item) => item?.PaymentOrderId === PaymentGatewayfilter?.[0]?.PaymentOrderId )?.PaymentStatus; if (paymentdataget === 'S') { setMessageType('success'); setMessageData('Payment Success'); await dispatch(changePaymentloader(false)); if ( getpaymentgatewaydetail?.data?.OrderDetails?.length > 0 ) { setPrintOrderDetails([getpaymentgatewaydetail?.data]); CustomerDisplay(value); ClearAllGlobalStateDatas(value); } clearInterval(intervalId); // Stop the loop when payment is successful } else if (paymentdataget === 'F') { setMessageType('error'); setMessageData('Payment Failed'); setFirstPaymentclick(false); await dispatch(changePaymentloader(false)); // setPaybtnselected(PaymentOptions?.[0]?.ModeId); // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); clearInterval(intervalId); // Stop the loop when payment fails CustomerDisplayRemovedData(); ClearAllGlobalStateDatas(value); } } } catch (error) { console.error('Error fetching payment details: ', error); } }, 3000); // Call the API every 3 seconds }; // Call the function to start checking payment status checkPaymentStatus(); } } else { console.log('more pg data'); } if (businessUPIfilter?.length === 1) { businessUPIFlow( businessUPIfilter, response?.data?.OrderId, response?.data?.PaymentPageLink ); } dispatch(triggerCustomerRefresh()); } else { setMessageType('error'); setMessageData(response?.data?.response); setFirstPaymentclick(false); // clearInvoiceDate clearInvoiceDate(); dispatch(changeCurrentOrderId(null)); } }; const PutBooking = async (putdatas, value, pay) => { let putdata = putdatas; putdata['OrderId'] = ReportholdData?.OrderId; putdata['SalesId'] = ReportholdData?.SalesId; putdata['UpdatedBy'] = UserId; if (value === 'Dine-In') { putdata['PaymentStatus'] = pay ? 'S' : 'P'; putdata['PaymentDetail'] = !pay && []; putdata['PaymentType'] = !pay && ''; } else if (value === 'Hold') { ((putdata['PaymentStatus'] = pay ? 'S' : 'P'), (putdata['PaymentDetail'] = !pay && [])); putdata['PaymentType'] = !pay && ''; putdata['ActiveStatus'] = pay ? 'A' : 'D'; } else if (value === 'Unpaid') { putdata['PaymentStatus'] = pay ? 'S' : 'P'; putdata['PaymentDetail'] = !pay && []; putdata['PaymentType'] = !pay && ''; putdata['PrintType'] = 'Y'; } let response = null; if (salesBillEdit) { response = await dispatch(putSalesBillEdit(putdata)).unwrap(); } else { response = await dispatch(PutBookingData(putdata)).unwrap(); } if (value !== 'Unpaid') { if (response?.data?.statusCode == 1) { let Paymentdevicefilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pd' && item?.PaymentStatus === 'P' ); let PaymentGatewayfilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pg' && item?.PaymentStatus === 'P' ); let PayatCounterfilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pc' ); if ( PayatCounterfilter?.length === 1 || response?.data?.PaymentOrderDtl?.length === 0 ) { setMessageType('success'); setMessageData( response?.data?.response + ' ' + (response?.data?.OrderDetails?.length > 0 ? response?.data?.OrderId && extractLastNumberOrderId( response?.data?.OrderId, response?.data?.OrderDetails?.[0]?.FYStatus ) : '') ); response?.data?.OrderDetails?.length > 0 && setPrintOrderDetails([response?.data]); CustomerDisplay(value); ClearAllGlobalStateDatas(value); } if (Paymentdevicefilter?.length === 1) { if ( Paymentdevicefilter?.[0]?.PaymentOptionType?.toLowerCase() === 'pd' ) { PaymentDeviceFlow(Paymentdevicefilter, value); } } else { console.log('more pd data'); } if (PaymentGatewayfilter?.length === 1) { PaymentGatewayFlow(PaymentGatewayfilter); } else { if (response?.data?.OrderDetails?.length > 0) { setPrintOrderDetails([response?.data]); } ClearAllGlobalStateDatas(); console.log('more pg data'); } } else { // clearInvoiceDate clearInvoiceDate(); dispatch(changeCurrentOrderId(null)); } } else { setPrintOrderDetails([response?.data]); await dispatch(changeOrderCardDetails([])); await dispatch(changeReorderHoldDetails({})); await dispatch(changeReorderProductDetails([])); setFirstPaymentclick(false); if (defaultBookingType === 'Both') { await dispatch(changeBookingType('TakeAway')); } await dispatch(changeSelectTable([])); await dispatch(changeSelectChair([])); getUnpaiddatas(); } }; const PutFailedPayment = async (PayData, value, pay) => { let tempsplitdata = { CompId: PayData?.CompId, BranchId: PayData?.BranchId, AppId: PayData?.AppId, CustSuppId: PayData?.SelCustId ? SelCustId : null, UpdatedBy: UserId, OrderId: ReportholdData?.OrderId, PaymentType: PayData?.PaymentDetail?.[0]?.PaymentType, Amount: FailedTotalAmt, PaymentOptionType: PayData?.PaymentDetail?.[0]?.PaymentOptionType, ModeOfPayment: PayData?.PaymentDetail?.[0]?.ModeOfPayment, AccountDtl: PayData?.PaymentDetail?.[0]?.AccountDtl, PaymentStatus: PayData?.PaymentDetail?.[0]?.PaymentStatus, Debit: PayData?.PaymentDetail?.[0]?.Debit, Credit: PayData?.PaymentDetail?.[0]?.Credit, }; let response = await dispatch( putSplitpaymentStatus(tempsplitdata) ).unwrap(); if (response?.data?.statusCode == 1) { let Paymentdevicefilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pd' && item?.PaymentStatus === 'P' ); let PaymentGatewayfilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pg' && item?.PaymentStatus === 'P' ); let PayatCounterfilter = response?.data?.PaymentOrderDtl?.filter( (item) => item?.PaymentOptionType?.toLowerCase() === 'pc' && item?.PaymentType === PayData?.PaymentDetail?.[0]?.PaymentType ); if ( PayatCounterfilter?.length > 0 || response?.data?.PaymentOrderDtl?.length === 0 ) { setMessageType('success'); // setSplitSelPayMode({...SplitSelPayMode,...{[`PaymentStatus-${i}`]:"S"}}) const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { upi: null, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } setMessageData( response?.data?.response + ' ' + (response?.data?.OrderDetails?.length > 0 ? response?.data?.OrderId && extractLastNumberOrderId( response?.data?.OrderId, response?.data?.OrderDetails?.[0]?.FYStatus ) : '') ); if (response?.data?.OrderDetails?.length > 0) { setPrintOrderDetails([response?.data]); CustomerDisplay(); ClearAllGlobalStateDatas(); } } if (Paymentdevicefilter?.length === 1) { if ( Paymentdevicefilter?.[0]?.PaymentOptionType?.toLowerCase() === 'pd' ) { PaymentDeviceFlow(Paymentdevicefilter, value); } } if (PaymentGatewayfilter?.length === 1) { if ( PaymentGatewayfilter?.[0]?.PaymentOptionType?.toLowerCase() === 'pg' ) { PaymentGatewayFlow(PaymentGatewayfilter, value); } } } }; const handleSalesBillEdit = async (putdatas, value, pay) => { console.log(putdatas, value, pay, "handleSalesBillEdit") } const OtherServicePostBooking = async (PostData, value) => { console.log(PostData, value, 'PostData, value'); let postdata = { AppId: AppId, CompId: CompId, BranchId: BranchId, BillAmount: PostData?.BillAmount, TaxAmount: PostData?.TaxAmount, NetAmount: PostData?.NetAmount, OtherServicesTicketDetails: orderCardDetail.map((item) => ({ ServiceId: item.ServiceId, ServiceCategory: item.ServiceCategory, VehicleNumber: item.VehicleNo || '', Qty: item.OrderQty, Rate: item.Rate, TaxAmount: item.TaxAmt, TotalAmount: item.TotalAmt, })), PaymentDetail: PostData?.PaymentDetail, CreatedBy: UserId, }; let Response = await dispatch(PostOtherServices(postdata)).unwrap(); if (Response?.data?.statusCode == 1) { setMessageType('success'); setMessageData(Response?.data?.response); ClearAllGlobalStateDatas(value); setOtherServicesPrintDetails([ Response?.data?.OtherServicesTicketDetails?.[0], ]); } console.log(postdata, 'PostdataPostdataPostdata'); }; const getstockbadge = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, ...(AvailableDate && selectedDate ? { fromDate: selectedDate?.[0], toDate: selectedDate?.[1], } : {}), }; await dispatch(getSelectedFavItems(data)).unwrap(); let data1 = { CompId: CompId, BranchId: BranchId, AppId: AppId, ProdSubCat: ProdSubCat, ...(AvailableDate && selectedDate ? { fromDate: selectedDate?.[0], toDate: selectedDate?.[1], } : {}), }; let data2 = { compId: CompId, branchId: BranchId, appId: AppId, prodCat: prodCat, ...(AvailableDate && selectedDate ? { fromDate: selectedDate?.[0], toDate: selectedDate?.[1], } : {}), }; if ( templateData?.BookingLayout?.[1]?.some( (item) => item?.OptionName === 'SubCategory' ) && ProdSubCat ) { await dispatch(getLayoutproductCard(data1)).unwrap(); } else if ( !templateData?.BookingLayout?.[1]?.some( (item) => item?.OptionName === 'SubCategory' ) ) { await dispatch(getCardDataWithoutSubmodule(data2)).unwrap(); } else { await dispatch(getCardDataWithoutSub(data2)).unwrap(); } }; const Combocarddata = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, ActiveStatus: 'A', }; let response = await dispatch(getCombolist(data)).unwrap(); if (response?.data?.statusCode === 1) { let datas = response?.data?.data; await dispatch(ChangeComboCarddata(datas)); // let Data = response?.data?.data // let comboList = Data?.map((item, index) => ({ // ...item, // id: `${item.ComboName || 'Combo'}-${index}`, // ProdName:item?.ComboName, // OverAllQty:item?.OverallQuantity // })); // setCombocardata(comboList); } else { await dispatch(ChangeComboCarddata([])); } }; const CustomerDisplay = (value) => { const customerDisplayWindow = getCustomerDisplayWindow(); if (value == 'TakeAway') { if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { userData: [], ExtraCharges: [], Paymentgateway: false, upioption1: 'okk', type: 'remove', keyValue: 'customer', }; customerDisplayWindow.postMessage(updatedData, '*'); const updatedRemovedData = { type: 'remove', keyValue: 'OrderTotalAmount', }; customerDisplayWindow.postMessage(updatedRemovedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } } else { if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { type: 'remove', keyValue: 'customer', }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } } }; const CustomerDisplayRemovedData = () => { const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { userData: [], ExtraCharges: [], Paymentgateway: false, type: 'remove', keyValue: 'customer', }; customerDisplayWindow.postMessage(updatedData, '*'); const updatedRemovedData = { type: 'remove', keyValue: 'OrderTotalAmount', }; customerDisplayWindow.postMessage(updatedRemovedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }; const PaymentDeviceFlow = async (Paymentdevicefilter, value) => { await dispatch(changePaymentloader(true)); await dispatch( changePaymentTransactionNumber(Paymentdevicefilter?.[0]?.PaymentOrderId) ); let paymentdetail = { TransactionNumber: Paymentdevicefilter?.[0]?.PaymentOrderId, SequenceNumber: 1, AllowedPaymentMode: Paymentdevicefilter?.[0]?.PaymentTypeName?.toLowerCase() === 'card' ? '1' : Paymentdevicefilter?.[0]?.PaymentTypeName?.toLowerCase() === 'upi' ? '10' : '', Amount: `${parseInt(Paymentdevicefilter?.[0]?.Amount) * 100}`, ClientID: useOptions?.[0]?.PDConfigDetails?.[0]?.ClientId, StoreID: useOptions?.[0]?.PDConfigDetails?.[0]?.StoreId, UserID: useOptions?.[0]?.PDConfigDetails?.[0]?.UserId, MerchantID: useOptions?.[0]?.PDConfigDetails?.[0]?.MerchantId, SecurityToken: useOptions?.[0]?.PDConfigDetails?.[0]?.SecurityToken, IMEI: useOptions?.[0]?.PDConfigDetails?.[0]?.IMEI, AutoCancelDurationInMinutes: useOptions?.[0]?.PDConfigDetails?.[0]?.AutoCancelDurationInMinutes, }; let apiresponse = await dispatch(PostPaymentdevice(paymentdetail)).unwrap(); if (apiresponse?.ResponseMessage?.toLowerCase() === 'approved') { let pendingPaymentList = { MerchantID: useOptions?.[0]?.PDConfigDetails?.[0]?.MerchantId, SecurityToken: useOptions?.[0]?.PDConfigDetails?.[0]?.SecurityToken, ClientID: useOptions?.[0]?.PDConfigDetails?.[0]?.ClientId, StoreID: useOptions?.[0]?.PDConfigDetails?.[0]?.StoreId, IMEI: useOptions?.[0]?.PDConfigDetails?.[0]?.IMEI, PlutusTransactionReferenceId: apiresponse?.PlutusTransactionReferenceID, PaymentOrderId: Paymentdevicefilter?.[0]?.PaymentOrderId, UpdatedBy: UserId, }; await dispatch(PutPendingPaymentList(pendingPaymentList)).unwrap(); let isApproved = false; const startTime = Date.now(); let postpaymentdata = { MerchantID: useOptions?.[0]?.PDConfigDetails?.[0]?.MerchantId, SecurityToken: useOptions?.[0]?.PDConfigDetails?.[0]?.SecurityToken, ClientID: useOptions?.[0]?.PDConfigDetails?.[0]?.ClientId, StoreID: useOptions?.[0]?.PDConfigDetails?.[0]?.StoreId, IMEI: useOptions?.[0]?.PDConfigDetails?.[0]?.IMEI, PlutusTransactionReferenceID: apiresponse?.PlutusTransactionReferenceID, }; // Loop to call the second API every 3 seconds while (!isApproved) { let ApiResponseget = await dispatch( GetPaymentdeviceResponse(postpaymentdata) ).unwrap(); if (ApiResponseget?.ResponseMessage?.toLowerCase() === 'txn approved') { let putbookingdata = { OrderBookingId: Paymentdevicefilter?.[0]?.OrderId, OrderId: Paymentdevicefilter?.[0]?.PaymentOrderId, PaymentStatus: 'S', Amount: Paymentdevicefilter?.[0]?.Amount, ResponseDtl: [ApiResponseget], PaymentType: Paymentdevicefilter?.[0]?.PaymentType, UpdatedBy: UserId, }; let bookingpaymentupdate = await dispatch( PutBookingPaymentStatusChange(putbookingdata) ).unwrap(); if (bookingpaymentupdate?.data?.statusCode === 1) { setMessageType('success'); setMessageData( bookingpaymentupdate?.data?.response + ' ' + (bookingpaymentupdate?.data?.OrderDetails?.length > 0 ? bookingpaymentupdate?.data?.OrderId && extractLastNumberOrderId( bookingpaymentupdate?.data?.OrderId, bookingpaymentupdate?.data?.OrderDetail?.[0]?.FYStatus ) : '') ); bookingpaymentupdate?.data?.OrderDetails?.length > 0 && setPrintOrderDetails([bookingpaymentupdate?.data]); CustomerDisplay(value); ClearAllGlobalStateDatas(value); await dispatch(changePaymentloader(false)); } isApproved = true; console.log('Transaction Approved!'); // Exit the loop break; } // Check if 1 minute has passed if ( Date.now() - startTime > useOptions?.[0]?.PDConfigDetails?.[0]?.AutoCancelDurationInMinutes * 60000 ) { // 60,000 ms = 1 minute let putbookingdata = { OrderBookingId: Paymentdevicefilter?.[0]?.OrderId, OrderId: Paymentdevicefilter?.[0]?.PaymentOrderId, PaymentStatus: 'F', Amount: Paymentdevicefilter?.[0]?.Amount, ResponseDtl: [ApiResponseget], PaymentType: Paymentdevicefilter?.[0]?.PaymentType, UpdatedBy: UserId, }; let bookingpaymentupdate = await dispatch( PutBookingPaymentStatusChange(putbookingdata) ).unwrap(); if (bookingpaymentupdate?.data?.statusCode === 1) { setMessageType('error'); setMessageData( `Payment Failed. Your Transaction Number is ${Paymentdevicefilter?.[0]?.PaymentOrderId}` ); setFirstPaymentclick(false); // setPaybtnselected(PaymentOptions?.[0]?.ModeId); // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); await dispatch(changePaymentloader(false)); CustomerDisplayRemovedData(); ClearAllGlobalStateDatas(value); } console.error('Transaction not approved within 1 minute.'); // Send an error message or handle the timeout // You can dispatch an action, show a notification, etc. break; } // Wait for 3 seconds before making the next call await new Promise((resolve) => setTimeout(resolve, 3000)); } } else { let putbookingdata = { OrderBookingId: Paymentdevicefilter?.[0]?.OrderId, OrderId: Paymentdevicefilter?.[0]?.PaymentOrderId, PaymentStatus: 'F', Amount: Paymentdevicefilter?.[0]?.Amount, PaymentType: Paymentdevicefilter?.[0]?.PaymentType, UpdatedBy: UserId, }; let bookingpaymentupdate = await dispatch( PutBookingPaymentStatusChange(putbookingdata) ).unwrap(); if (bookingpaymentupdate?.data?.statusCode === 1) { setMessageType('error'); setMessageData(apiresponse?.ResponseMessage); setFirstPaymentclick(false); // setPaybtnselected(PaymentOptions?.[0]?.ModeId); // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); dispatch(changePaymentloader(false)); CustomerDisplayRemovedData(); ClearAllGlobalStateDatas(value); } } }; const PaymentGatewayFlow = async (PaymentGatewayfilter) => { if (PaymentGatewayfilter?.[0]?.PaymentOptionType?.toLowerCase() === 'pg') { await dispatch(changePaymentloader(true)); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { OrderBookingId: PaymentGatewayfilter?.[0]?.OrderId, Paymentgateway: true, OrderPaymentId: PaymentGatewayfilter?.[0]?.PaymentOrderId, OrderTotalAmount: PaymentGatewayfilter?.[0]?.Amount, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } const checkPaymentStatus = async () => { const intervalId = setInterval(async () => { try { let getpaymentgatewaydetail = await dispatch( PaymentGatewayGetdetail(PaymentGatewayfilter?.[0]?.OrderId) ).unwrap(); if (getpaymentgatewaydetail?.data?.statusCode === 1) { let paymentdataget = getpaymentgatewaydetail?.data?.PaymentOrderDtl?.find( (item) => item?.PaymentOrderId === PaymentGatewayfilter?.[0]?.PaymentOrderId )?.PaymentStatus; if (paymentdataget === 'S') { setMessageType('success'); setMessageData('Payment Success'); await dispatch(changePaymentloader(false)); if (getpaymentgatewaydetail?.data?.OrderDetails?.length > 0) { setPrintOrderDetails([getpaymentgatewaydetail?.data]); CustomerDisplay(value); ClearAllGlobalStateDatas(value); } clearInterval(intervalId); // Stop the loop when payment is successful } else if (paymentdataget === 'F') { setMessageType('error'); setMessageData('Payment Failed'); await dispatch(changePaymentloader(false)); setFirstPaymentclick(false); // setPaybtnselected(PaymentOptions?.[0]?.ModeId); // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); clearInterval(intervalId); // Stop the loop when payment fails CustomerDisplayRemovedData(); ClearAllGlobalStateDatas(value); // const customerDisplayWindow = getCustomerDisplayWindow(); // if (customerDisplayWindow && !customerDisplayWindow.closed) { // const updatedData = { // userData: orderCardDetail, // ExtraCharges: GlobalExtraCharge, // upi: GlobalUpiID, // customer: selOption != null ? selOption : GetCustId, // paymentMethod: Paybtnnameselected, // Paymentgateway: false, // OrderTotalAmount: PaymentGatewayfilter?.[0]?.Amount // }; // customerDisplayWindow.postMessage(updatedData, '*'); // } } } } catch (error) { console.error('Error fetching payment details: ', error); } }, 3000); // Call the API every 3 seconds }; // Call the function to start checking payment status checkPaymentStatus(); } }; const businessUPIFlow = async ( businessUPIfilter, OrderId, PaymentStatusLink ) => { // Implement your business UPI flow here console.log('Business UPI Flow Triggered', businessUPIfilter); // You can add similar logic as PaymentDeviceFlow or PaymentGatewayFlow based on your requirements setBusinessUPILink(PaymentStatusLink); setBusinessUPI(true); setBusinessUPIOrderId(OrderId); }; const getPaymentOptionFeature = async () => { const FiltersalesPayment = GlobaluseOptions?.filter( (item) => item.FlowName?.toLowerCase() === 'sales' ); setuseOptions(FiltersalesPayment); const filterpaycounter = FiltersalesPayment?.[0]?.OptionDetails?.filter( (item) => item?.OptionName?.toLowerCase() === 'pay at the counter' ); const filterpaymentgateway = FiltersalesPayment?.[0]?.OptionDetails?.filter( (item) => item?.OptionName?.toLowerCase() === 'payment gateway' ); const filterpaymentdevice = FiltersalesPayment?.[0]?.OptionDetails?.filter( (item) => item?.OptionName?.toLowerCase() === 'payment device' ); const filterBusinessUpi = FiltersalesPayment?.[0]?.OptionDetails?.filter( (item) => item?.OptionName?.toLowerCase() === 'business upi' ); const cardinpaymentgateway = filterpaymentgateway?.[0]?.ModeDetails?.filter((item) => item?.ModeName?.toLowerCase()?.includes('card') ) || []; const cardinpaymentdevice = filterpaymentdevice?.[0]?.ModeDetails?.filter((item) => item?.ModeName?.toLowerCase()?.includes('card') ) || []; const upiinpaymentgateway = filterpaymentgateway?.[0]?.ModeDetails?.filter((item) => item?.ModeName?.toLowerCase()?.includes('upi') ) || []; const upiinpaymentdevice = filterpaymentdevice?.[0]?.ModeDetails?.filter((item) => item?.ModeName?.toLowerCase()?.includes('upi') ) || []; setPaymentOptions(filterpaycounter?.[0]?.ModeDetails); setPaymentUpiOptions( FiltersalesPayment?.[0]?.PaymentDetails?.Payatthecounter ); setPaymentDeviceCard(cardinpaymentdevice); setPaymentgatewayCard(cardinpaymentgateway); setPaymentgatewayUPI(upiinpaymentgateway); setPaymentDeviceUPI(upiinpaymentdevice); const cardoptions = []; if (cardinpaymentgateway?.length > 0) { cardoptions.push({ label: 'Payment Gateway', value: 'PG', imgSrc: paygate, }); } if (cardinpaymentdevice?.length > 0) { cardoptions.push({ label: 'Payment Device', value: 'PD', imgSrc: paydevice, }); } setCardPayOption(cardoptions); const options = []; if (FiltersalesPayment?.[0]?.PaymentDetails?.Payatthecounter?.length > 0) { options.push({ label: 'Personal UPI', value: 'Default', imgSrc: defaultupi, }); } if (filterBusinessUpi?.[0]?.ModeDetails?.length > 0) { options.push({ label: 'Business UPI', value: 'Business', imgSrc: pozologoimg, PaymentOptionId: filterBusinessUpi?.[0]?.PaymentOptionId, PaymentFlowId: filterBusinessUpi?.[0]?.PaymentFlowId, OptionId: filterBusinessUpi?.[0]?.OptionId, }); } if (upiinpaymentgateway?.length > 0) { options.push({ label: 'Payment Gateway', value: 'PG', imgSrc: paygate, PaymentOptionId: upiinpaymentgateway?.[0]?.PaymentOptionId, PaymentModeId: upiinpaymentgateway?.[0]?.PaymentModeId, ModeId: upiinpaymentgateway?.[0]?.ModeId, }); } if (upiinpaymentdevice?.length > 0) { options.push({ label: 'Payment Device', value: 'PD', imgSrc: paydevice }); } setUpiPayOption(options); setBusinessPayoption(filterBusinessUpi?.[0]?.ModeDetails || []); // } }; const ProductSummary = (salesData) => { const productMap = new Map(); salesData.forEach((item) => { let offerMode = item?.OfferMode?.trim(); offerMode = offerMode && offerMode !== '' ? offerMode : null; let OfferId = null; if ( item?.OfferMessage && Array.isArray(item.OfferMessage) && item.OfferMessage.length > 0 ) { OfferId = item.OfferMessage[0]?.OfferId || null; } const keyData = [ item.ProdId || null, item.InwardDtlId || null, item.BookingType || null, item.SinglePc || null, item.OrderRate || null, item.ScaleType || null, offerMode, OfferId, ]; const key = keyData.join('-'); if (productMap.has(key)) { const existingItem = productMap.get(key); existingItem.OrderQty = (existingItem.OrderQty || 0) + (item.OrderQty || 0); existingItem.TotalAmt = (existingItem.TotalAmt || 0) + (item.TotalAmt || 0); existingItem.TaxAmt = (parseFloat(existingItem.TaxAmt) || 0) + (parseFloat(item.TaxAmt) || 0); } else { const newItem = { ...item, OfferMode: offerMode, OfferMessage: item?.OfferMessage && Array.isArray(item.OfferMessage) ? item.OfferMessage : null, }; productMap.set(key, newItem); } }); // Convert the map values back to an array const aggregatedProducts = Array.from(productMap.values()); return aggregatedProducts; }; const extrachargesbookingtype = (extradata) => { const TakAwayId = ConfigDataList?.find( (a) => a?.ConfigName === 'TakeAway' )?.ConfigId; const DineinId = ConfigDataList?.find( (a) => a?.ConfigName === 'Dine In' )?.ConfigId; let tempdata = extradata?.map((data) => ({ ...data, BookingType: data?.BookingTypeName === 'Dine In' ? DineinId : TakAwayId, })); return tempdata; }; const getUnpaiddatas = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, }; await dispatch(getUnpaidData(data)).unwrap(); }; const Unpaidfun = async (event) => { dispatch(changeunpaidflow(true)); if ( orderCardDetail?.length > 0 && (BookingType === 'Dine In' || BookingTypeBoth) ) { // await dispatch(changeOrderCardDetails([])) // await dispatch(changeOrderCardDetails(tabledata?.[event]?.productDetails)) // await dispatch(ChangeTotalAmount(tabledata?.[event]?.ExtraChargeDetails)) // await dispatch(changeUnpaidData(true)) // await dispatch(changeReorderHoldDetails([tabledata?.[event]]?.[0])); // await dispatch(changeReorderProductDetails(tabledata?.[event]?.productDetails)) // setUnpaidOpen(false) setUnpaidConfirmation(true); setunpaidselectedindex(event); } else { const UpdatedData = tabledata?.[event]?.productDetails; if (OfferCheckedInSetup && preferenceOffer) { await applyOffer(UpdatedData); } else { dispatch(changeOrderCardDetails(UpdatedData)); } await dispatch(changeReorderHoldDetails([tabledata?.[event]]?.[0])); await dispatch(ChangeTotalAmount(tabledata?.[event]?.ExtraChargeDetails)); await dispatch( changeReorderProductDetails(tabledata?.[event]?.productDetails) ); await dispatch(changeUnpaidData(true)); setUnpaidOpen(false); } }; const UnpaidOk = async () => { setOrderStatus(false); await dispatch(changeSelectedTableDetails([])); await dispatch(changeSelectTable([])); await dispatch(changeSelectChair([])); if (defaultBookingType === 'Both') { await dispatch(changeBookingType('TakeAway')); } await dispatch( changeOrderCardDetails(tabledata?.[unpaidselectedindex]?.productDetails) ); await dispatch( changeReorderProductDetails( tabledata?.[unpaidselectedindex]?.productDetails ) ); await dispatch( changeReorderHoldDetails([tabledata?.[unpaidselectedindex]]?.[0]) ); await dispatch( ChangeTotalAmount(tabledata?.[unpaidselectedindex]?.ExtraChargeDetails) ); await dispatch(changeUnpaidData(true)); setUnpaidOpen(false); setUnpaidConfirmation(false); }; const Unpaidclose = async () => { dispatch(changeunpaidflow(false)); setUnpaidOpen(false); setUnpaidConfirmation(false); }; const AddUPIPaymentOption = async (data, mode = false) => { setSelectedUpiOption(''); setUpiOption(''); setUpiId(''); await dispatch(changeUpiIDprint(null)); await dispatch(changeUpiIDName('')); await dispatch(changeUpiIDoptionId(null)); setSelectedUPIPayOption(data); setUpinotSelected(false); setCardoptionnotSelected(false); if (data !== 'Default' && data !== 'Business' && !mode) { setUpiOptionOpen(false); } }; const hideDefault = () => { setUpiOptionOpen(false); }; const handleUPIButtonClick = (id, name) => { if (paymentloader === false) { setPaybtnnameselected(name); setPaybtnselected(id); let brachName1 = PaymentUpiOptions?.[0]?.BrName; setbrachName(brachName1); if (UpiPayOption?.length === 1) { setSelectedUPIPayOption(UpiPayOption?.[0]?.value); if (UpiPayOption?.[0]?.value?.toLowerCase() === 'default') { if (PaymentUpiOptions?.length === 1) { addUpiOption( PaymentUpiOptions?.[0]?.Mode, PaymentUpiOptions?.[0]?.ModeName, PaymentUpiOptions?.[0]?.UPIId ); } } } setQrCode(true); SetSuccess(true); } }; const handlePaymentMode = (id, name) => { if (name?.toLowerCase() !== 'credit') { setOverAllBal(0); setCredit(false); } if (paymentloader === false) { setPaybtnselected(id); setPaybtnnameselected(name); if (CardPayOption?.length === 1) { setSelectedCardOption(CardPayOption?.[0]?.value); } setUpiOptionOpen(false); setQrCode(false); setUpinotSelected(false); setCardoptionnotSelected(false); } }; const handleRefundPaymentMode = (id, name) => { setRefundPaySelected(id); setRefundPaySelectedName(name); } const addUpiOption = async (id, name, UPIId) => { await dispatch(changeUpiIDprint(UPIId)); await dispatch(changeUpiIDName(name)); await dispatch(changeUpiIDoptionId(id)); setSelectedUpiOption(id); setUpiOption(name); setUpiId(UPIId); setUpinotSelected(false); setCardoptionnotSelected(false); // setQrCode(true) }; const AddCardOption = (data) => { setSelectedCardOption(data); setCardOptionOpen(false); setCardoptionnotSelected(false); }; const ClearAllGlobalStateDatas = async (value) => { if (OfferCheckedInSetup && preferenceOffer) { await applyOffer([]); } else { dispatch(changeOrderCardDetails([])); } dispatch( changeOtherServiceTicketClaim({ TotalAmt: 0, ParkingClaimed: false, }) ); dispatch(changeBillEditingMode(false)); await dispatch(changePreviousOrderPayment([])); await dispatch(changePreviousOrderOfferDetail([])); dispatch(changeTipAmount(0)); dispatch(changeFullOfferAppliedProducts([])); dispatch(ChangeFullFreeProductList([])); 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(ChangeSelectedCustDisable(false)); // setPaybtnselected(PaymentOptions?.[0]?.ModeId); // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); setQrCode(false); setUpinotSelected(false); getHolddata(); setCurrentOrderNetAmount(0); setPreviousNetAmount(0); if (defaultBookingType === 'Both') { await dispatch(changeBookingType('TakeAway')); } await dispatch(changeSelProdWiseEst([])); await dispatch(ChangeOverAllDiscSales(null)); await dispatch(ChangeOverAllDiscEstimate(null)); await dispatch(changeAddBookingDetailsTrigger(false)); (dispatch( getExpireProductsList({ compId: CompId, branchId: BranchId, appId: AppId, }) )?.unwrap(), dispatch( getLowStockAlertProductsList({ compId: CompId, branchId: BranchId, appId: AppId, }) )?.unwrap(), // clearInvoiceDate clearInvoiceDate()); dispatch(changeCurrentOrderId(null)); // await dispatch(changeEstimateBooking(null)) getstockbadge(); Combodata?.length > 0 && Combocarddata(); getUnpaiddatas(); await dispatch(changeSelectTable([])); await dispatch(changeSelectChair([])); await dispatch(changeSelectedTableDetails([])); await dispatch(changeOrderType()); if (value === 'Dine-In') { navigate(`${subDirectory}sales/dine-in`); } let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, UserId: UserId, FromDate: currentDateValue, ToDate: currentDateValue, }; await dispatch(getSalesDetailData(data)); }; const getHolddata = async () => { const data = { CompId: CompId, BranchId: BranchId, AppId: AppId }; let response = await dispatch(gettinghold(data)).unwrap(); if (response?.data?.statusCode == 1) { dispatch(changeholddata(response?.data?.data)); } else { dispatch(changeholddata([])); } }; const handlePrintOrToken = async () => { const dinein = PrintOrderDetails?.[0]?.OrderDetails?.[0]?.productDetails?.some( (product) => product.BookingTypeName === 'Dine In' ); const Tokenthere = PrintOrderDetails?.[0]?.OrderDetails?.[0]?.productDetails?.some( (product) => product.TokenAvailable === 'Y' ); if (isMobile) { if (MobileA4Print) { await MobileMultiPdfPrintTrigger({ preferenceDetails, printerTemplateStyle, printDatas, PrinterDetails, PrintOrderDetails, SessionData, bookingTypePreference, }); } else { if (Tokenthere && TokenOnly?.SettingValue === 'Y' && !dinein) { if (IndividualToken?.SettingValue === 'Y' && !dinein) { IndividualTokenMobilePrint(PrintOrderDetails, UpiId, 'Booking'); closePrintOption(); } else { SingleTokenMobilePrint(PrintOrderDetails, UpiId, 'Booking'); closePrintOption(); } } else { MobilePrint( appPreferences, PrintOrderDetails, UpiId, 'Booking', preferenceDatas ); closePrintOption(); } } } else { if (Tokenthere && TokenOnly?.SettingValue === 'Y' && !dinein) { AllProductTokenFunction(); } else { Print(); } } }; const Print = async () => { const style = await PrintStyleFunction( printerTemplateStyle == undefined ? 'Style 13' : printerTemplateStyle, 'Sales' ); const stylesMap = { 'Style 1': 'PrintStyle1', 'Style 2': 'PrintStyle2', 'Style 3': 'PrintStyle3', 'Style 4': 'PrintStyle4', 'Style 5': 'PrintStyle5', 'Style 6': 'PrintStyle6', 'Style 7': 'PrintStyle7', 'Style 8': 'PrintStyle8', 'Style 9': 'PrintStyle9', 'Style 10': 'PrintStyle10', 'Style 11': 'PrintStyle11', 'Style 12': 'PrintStyle12', 'Style 13': 'RePrint', A4: 'PrintStyleA4', A5: 'PrintStyleA5', A4Standard: 'A4Standard', TaxInvoice: 'TaxInvoice', }; const selectedStyle = stylesMap[ printerTemplateStyle == undefined ? 'Style 13' : printerTemplateStyle ]; if (selectedStyle) { await Promise.all( PrintOrderDetails?.[0]?.OrderDetails?.map( async (orderDetail, index) => { await printDiv(`${selectedStyle}-${index}`, style); // Use unique IDs for each print if (orderDetail?.BookingTypeName !== 'Dine In') { const groupedTokens = orderDetail?.productDetails?.filter(data => data?.EditTokenAvailable !== 'N')?.reduce( (acc, item, idx) => { if (item.TokenAvailable === 'Y') { if (!item.CounterName) { // If CounterName is null or empty acc[`individual-${idx}-${item.ProdId}`] = [item]; // Unique entry for each null/empty CounterName item } else { if (!acc[item.CounterName]) { acc[item.CounterName] = []; } acc[item.CounterName].push(item); // Group by CounterName } } return acc; }, {} ); // Iterate over grouped tokens and print them const tokensToPrint = Object.entries(groupedTokens).map( async ([counterName, items], idx) => { // Use the counterName (or unique identifier for individual items) as part of the tokenId const tokenId = `${idx}-${items?.[0]?.ProdId}-${counterName}`; await TokenPrint(tokenId, items); // Pass all grouped items to the print function } ); if (tokensToPrint?.length > 0) { await Promise.all(tokensToPrint); } } } ) ); setPrintOrderDetails([]); closePrintOption(); } }; const AllProductTokenFunction = async () => { if (IndividualToken?.SettingValue === 'Y') { await Promise.all( PrintOrderDetails?.[0]?.OrderDetails?.map( async (orderDetail, index) => { const groupedTokens = orderDetail?.productDetails?.filter(data => data?.EditTokenAvailable !== 'N')?.reduce( (acc, item, idx) => { if (item.TokenAvailable === 'Y') { if (!item.CounterName) { // If CounterName is null or empty acc[`single-${idx}-${item.ProdId}`] = [item]; // Unique entry for each null/empty CounterName item } else { if (!acc[item.CounterName]) { acc[item.CounterName] = []; } acc[item.CounterName].push(item); // Group by CounterName } } return acc; }, {} ); // Iterate over grouped tokens and print them const tokensToPrint = Object.entries(groupedTokens).map( async ([counterName, items], idx) => { // Use the counterName (or unique identifier for individual items) as part of the tokenId const tokenId = `${idx}-${items?.[0]?.ProdId}-${counterName}`; await TokenPrint(tokenId, items); // Pass all grouped items to the print function } ); if (tokensToPrint?.length > 0) { await Promise.all(tokensToPrint); } setPrintOrderDetails([]); closePrintOption(); } ) ); } else { await Promise.all( PrintOrderDetails?.[0]?.OrderDetails?.filter(data => data?.EditTokenAvailable !== 'N')?.map( async (orderDetail, index) => { await TokenPrint(`${index}-${orderDetail?.OrderId}`); } ) ); setPrintOrderDetails([]); closePrintOption(); } }; const TokenPrint = async (index) => { try { console.log(`Starting token print for index ${index}`); const stylePrint = ``; if (TokenOnly?.SettingValue === 'Y') { if (IndividualToken?.SettingValue === 'Y') { await printDiv(`TokenOnlySingle${index}`, stylePrint); } else { await printDiv(`TokenOnlyMultiple${index}`, stylePrint); } } else { await printDiv(`TakeawayToken${index}`, stylePrint); } } catch (error) { console.error(`Error printing token for index ${index}:`, error); } }; const handlePaymentOptions = async () => { dispatch(changeSalesPaymentoption(true)); dispatch( getPaymentOptionsData({ AppId: AppId, CompId: CompId, BranchId: BranchId, }) ); }; const closePrintOption = () => { setShowWhatsAppShare(false); setSMSShare(false); setPrintOrderDetails([]); setMobileNoWhatsApp(); }; const handleWhatsAppClick = () => { setShowWhatsAppShare(true); }; const handleSMSClick = () => { setSMSShare(true); }; const EnableUpiOptions = () => { setUpiOptionOpen(!UpiOptionOpen); }; const EnableCardOptions = () => { setCardOptionOpen(!CardOptionOpen); }; const onFinalSubmit = async () => { let url = `${MainHomeUrl}payment-page?amt=${TotalAmount}&Id=${selOption?.value}&cus=${SelCustId} &CusN=${selOption?.CustName}&Br=${brachName}`; let response = await dispatch(SendPaymentLink({ MobileNo, url })).unwrap(); if (response?.data?.statusCode === 1) { setMessageType('success'); setMessageData('Link Sent Successfully'); } }; 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 CreditCustomer1 = () => { if ( orderCardDetail?.length === 0 && (selOption?.value !== undefined || GlobalAddCustomerDetails1?.length > 0 || GetCustId?.CustMobile !== undefined) ) { setcreditCustomerOpen(true); } else { if (selOption?.value == undefined) { setMessageType('warning'); setMessageData('Please Select the Customer'); } } }; const SplitPaymentOpen = () => { if (orderCardDetail?.length > 0 && TotalAmount > 0) { // const updatedData = { // userData: OrderCardDetail, // ExtraCharges: GlobalExtraCharge, // customer: selOption != null ? selOption : GetCustId, // Paymentgateway: false, // }; // setFailedOrderData(updatedData); setSplitpayment(true); } else { if (TotalAmount <= 0) { setMessageType('warning'); setMessageData('Cannot split when total amount is zero or less'); return; } setMessageType('warning'); setMessageData('Please Select the Product'); } }; const CreditCustomerHAndleCancel = () => { setcreditCustomerOpen(false); }; const handlesplitpaymentclose = () => { setSplitpayment(false); setPaybtnselected(PaymentOptions?.[0]?.ModeId); setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { paymentMethod: PaymentOptions?.[0]?.ModeName, Paymentgateway: false, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const changeOrderStatus = () => { setOrderStatus(!OrderStatus); // setPaybtnnameselected(PaymentOptions?.[0]?.ModeName); // setPaybtnselected(PaymentOptions?.[0]?.ModeId); setPaybtnnameselected(PaymentOptionsModeName); setPaybtnselected(PaymentOptionsModeId); }; const handleSummary = () => { setSummary((prev) => !prev); }; useEffect(() => { const handleClickOutside = (event) => { if (summaryRef.current && !summaryRef.current.contains(event.target)) { setSummary(true); } }; // Attach the listener always document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); useEffect(() => { const setDefaultPaymentOption = async () => { const res = await dispatch( getDefaultPaymentOptions({ AppId, CompId, BranchId }) )?.unwrap(); const defaultDetail = res?.data?.data?.[0]?.DefaultDetails?.[0]; if (res?.data?.data?.length > 0 && defaultDetail) { setDefaultEnabled(true); setDefaultPaymentMode(defaultDetail); const { option, card } = defaultDetail; if (option?.value) setSelectedUPIPayOption(option.value); if (card) { const isDefault = String(option?.value ?? '').toLowerCase() === 'default'; const idToUse = isDefault ? card?.UPIId : card?.ModeId; if (idToUse) { addUpiOption(card?.Mode, card?.ModeName, idToUse); } } } else { setDefaultEnabled(false); setDefaultPaymentMode([]); } }; setDefaultPaymentOption(); }, [defaultPaymentTrigger]); 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(); } return (
{orderCardDetail?.length || 0}
{orderCardDetail?.reduce((acc, item) => { const isWeightScale = item?.ScaleType === 'weight'; if (isWeightScale) { return ( acc + (Weightasquantity ? Math.round(Number(item?.OrderQty || 0)) : 1) ); } return acc + Math.round(Number(item?.OrderQty || 0)); }, 0)}
₹ {orderCardDetail?.reduce( (acc, data) => parseFloat(data?.TotalAmt || 0) + acc, 0 )}
{safeRound(TotalTaxAmount)}
{safeRound(extra)}
-₹ {(OverAllSales > 0 ? OverAllSales : 0) + (OverAllEstimate > 0 ? OverAllEstimate : 0) + (Discount > 0 ? Discount : 0)}
₹ {safeRound( orderCardDetail?.reduce( (acc, data) => parseFloat(data?.TotalAmt || 0) + acc, 0 ) - ((OverAllSales > 0 ? OverAllSales : 0) + (OverAllEstimate > 0 ? OverAllEstimate : 0) + (Discount > 0 ? Discount : 0)) )}
Refund: ₹{(previousNetAmount || 0) - (currentOrderNetAmount || 0)}
: ( <>{isMobile ? ( `₹ ${safeRound( OrderType === 'Failed' ? FailedTotalAmt : credit && overAllBal >= 0 ? Math.max(0, TotalAmount - overAllBal) : TotalAmount )}` ) : (