import React, { useEffect, useState, useCallback } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { MdOutlinePayments } from 'react-icons/md'; import { HiOutlineBackspace } from 'react-icons/hi'; import { ArrowRightOutlined, ExclamationCircleFilled } from '@ant-design/icons'; import { Modal } from 'antd'; import { CiSearch } from 'react-icons/ci'; import { Collapse, Radio } from 'antd'; import Buttons from '../../../Components/Forms/Buttons'; import Search from '../../../Components/Forms/Search.jsx'; import UPI from '../../../Images/upinew.svg'; import Card from '../../../Images/card.png'; import CrediCard from '../../../Images/PayOptImgs/creditcard.png'; import DebitCard from '../../../Images/PayOptImgs/debitcard.png'; import CashCard from '../../../Images/PayOptImgs/cashcard.png'; import NetBank from '../../../Images/PayOptImgs/netbank.png'; import Wallet from '../../../Images/PayOptImgs/wallet.png'; import { DefaultModal } from '../../../Components/Modal/DefaultModal'; import { Messages } from '../../../Components/Notifications/Messages'; import '../Payment/KioskPaymentWithModal.scss'; import { getKioskLightColour, changeKioskCustomerMobileNo, globalKioskCustomerMobileNo, changeKioskPageName, changeSelectedKioskPaymentOption, getKioskTemplate, GlobalKioskPrinterDetails, getKioskPrinterDetails, } from '../../../Features/Kiosk/kiosk'; import { GlobalBookingTypeKiosk, GlobalKioskBookingTypeBoth, GlobalKioskOrderDetails, PostKioskBookingData, PutBookingPaymentStatusChange, changeOrderId, postPaymentDevice, getPaymentDeviceResponse, getPaymentGatewayDetails, getPaymentOptionsData, getPaymentDeviceAccessData, getPaymentGatewayAccessData, changeAllGlbStatustData, PutKioskBookingData, GlobalPGFailedTransId, changePGFailedTransId, changePaymentgatewayRedirect, getProductCategories, GlobalPGFailedAmt, changePGFailedAmt, getPaymentVerfication, GlobalOrderId, } from '../../../Features/BookingScreen/BookingData/KioskBookingData'; import { getPrintSelectionComponentData, GlobalprintDatas, SelectedPrintTemplate, } from '../../../Features/ThemeChange/ThemeChange'; import { getConfigType, getPreferenceData, PreferenceData, PutPendingPaymentList, } from '../../../Features/BookingScreen/BookingData/BookingData'; import { isMobile } from 'react-device-detect'; import MobilePrint from '../../../Pages/BookingScreen/Components/BookingFunctionality/MobilePrint.jsx'; import KioskMobilePrint from '../../../Pages/BookingScreen/Components/BookingFunctionality/KioskMobilePrint.jsx'; import { PrintStyleFunction } from '../../../Pages/paymentpdfPage/PrintStyleFunction.js'; import { printDiv, extractLastNumberOrderId, encryptedValuesFun, getSession, } from '../../../Services/Others'; import PaymentPdfBooking from '../../paymentpdfPage/PaymentPdfBooking.jsx'; import KioskBookingReceipt from '../../paymentpdfPage/KioskBookingReceipt.jsx'; import { getSalesDetails } from '../../../Features/PaymentGateway/PaymentGateway.js'; import { sendSms } from '../../../Features/Payment/PaymentDetails/PaymentDetails.js'; import { ApplicationPreferences } from '../../../Features/BrachLogin/BranchLogin.js'; import { VerifiedPaymentDtl } from '../../../Features/BookingScreen/Customer/addCustomer.js'; import PaymentGatewayEmbedded from '../../BookingScreen/Components/UtillComponents/PaymentGatewayEmbedded.jsx'; import MobileMultiPdfPrintTrigger from '../../BookingScreen/Components/UtillComponents/MobileMultiPdfPrintTrigger.jsx'; import { checkLastOrderTimeLimit, sendupiotp } from '../../../Features/UpiDetails/UpiDetails.js'; import { isIndianMobile } from '../../../utils/calculations.js'; const CustomPaymentUrl = import.meta.env.ENV_CUSTOM_PAYMENT_URL; const KioskPayment = (props) => { const paymentGatewayRef = React.useRef(null); const dispatch = useDispatch(); const SessionData = props?.sessionData; const DeviceMacAddress = getSession('DeviceAddress'); console.log(DeviceMacAddress, 'DeviceMacAddress'); const [open, setOpen] = useState(props.modalOpen); const [width, setWidth] = useState(window.innerWidth); const [showCancelConfirm, setShowCancelConfirm] = useState(false); const appPreferences = useSelector(ApplicationPreferences); const CustomerMobileNumber = useSelector(globalKioskCustomerMobileNo); const OrderId = useSelector(GlobalOrderId); console.log(OrderId, 'OrderIdOrderId'); const PGfailedId = useSelector(GlobalPGFailedTransId); const PGfailedAmt = useSelector(GlobalPGFailedAmt); const KioskPrinterList = useSelector(GlobalKioskPrinterDetails); const [counterAvailability, setCounterAvailability] = useState(false); const [cardAvailability, setCardAvailability] = useState(false); const [upiAvailability, setUpiAvailability] = useState(false); const [SelectedBookingType, setSelectedBookingType] = useState(null); const [TotalTaxAmount, setTotalTaxAmount] = useState(null); const [TotalBillAmount, setBillAmount] = useState(null); const [TotalNetAmount, setTotalNetAmount] = useState(null); const [PrintOrderDetails, setPrintOrderDetails] = useState([]); const [PaymentOptionsData, setPaymentOptionsData] = useState([]); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [paymentDeviceAccess, setPaymentDeviceAccess] = useState([]); const [paymentGatewayAccess, setPaymentGatewayAccess] = useState([]); const [paymentDefalutOption, setPaymentDefaultOption] = useState(null); const [showPaymentGatewayOptions, setShowPaymentGatewayOptions] = useState(false); const [paymentGatewayMethods, setPaymentGatewayMethods] = useState([]); const [paymentOptionDetailsBusinessUpi, setPaymentOptionDetailsBusinessUpi] = useState(null); const [selectedOption, setselectedOption] = useState(); const [value, setValue] = useState(); const [itemsdata, setItemsdata] = useState(); const [dataAccept, setDataAccept] = useState(); const [cardName, setCardName] = useState(); const [selectedPaymentOption, setSelectedPaymentOption] = useState(null); const [devicePaymentStatus, setDevicePaymentStatus] = useState(false); const [FailedTranId, setFailedTranId] = useState(null); const getKioskLightColourdata = useSelector(getKioskLightColour); const KioskOrderDetails = useSelector(GlobalKioskOrderDetails); console.log(CustomerMobileNumber, 'CustomerMobileNumber'); const [number, setNumber] = useState( CustomerMobileNumber ? CustomerMobileNumber : '' ); const BookingTypeBoth = useSelector(GlobalKioskBookingTypeBoth); const BookingType = useSelector(GlobalBookingTypeKiosk); const printerTemplateStyle = useSelector(SelectedPrintTemplate); const printDatas = useSelector(GlobalprintDatas); const SettingDataSelector = useSelector(PreferenceData); console.log( SettingDataSelector, KioskPrinterList, 'SettingDataSelectorSettingDataSelector' ); const MobileA4Print = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'mobilea4' && setting?.SettingValue === 'Y' ); const isOtpEnabled = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'kioskotp' && setting?.SettingValue === 'Y' ); const isTimeLimitEnabled = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (setting) => (setting?.SettingIdName?.toLowerCase() === 'hours' || setting?.SettingIdName?.toLowerCase() === 'minutes') && setting?.SettingValue === 'Y' ); const bookingTypePreference = appPreferences?.find( (preference) => preference?.PreferredCatName === 'Booking Type' )?.PreferenceCatDetails; const [showPaymentMethods, setShowPaymentMethods] = useState(null); const [resendTimer, setResendTimer] = useState(0) const [canResend, setCanResend] = useState(true) const [otpInput, setOtpInput] = useState(['', '', '', '']); const [otpIndex, setOtpIndex] = useState(0); const [otpSent, setOtpSent] = useState(false); const [otpVerifed, setOtpVerified] = useState(false); const [otpNumber, setOTPNumber] = useState(null); const [paymentUrl, setpaymentUrl] = useState(null); const [businessUPI, setBusinessUPI] = useState(false); console.log(PrintOrderDetails, 'PrintOrderDetails'); const [TransctionId, setTransctionId] = useState(null); const [paymentSucess, setPaymentSuccess] = useState(false); useEffect(() => { fetchPaymentAccess(); }, []); useEffect(() => { TotalCalculation(); }, [KioskOrderDetails]); useEffect(() => { if (SessionData.CompId && SessionData.BranchId && SessionData.AppId) { if (DeviceMacAddress) { let data = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, AppId: SessionData.AppId, DeviceMacAddress: DeviceMacAddress, }; dispatch(getKioskPrinterDetails(data)).unwrap(); } dispatch(getPreferenceData({ CompId: SessionData.CompId, BranchId: SessionData.BranchId, AppId: SessionData.AppId })).unwrap(); } }, [SessionData.CompId, SessionData.BranchId, SessionData.AppId]); useEffect(() => { const getPrintData = async () => { try { const data = { AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, OrderId: TransctionId, }; const res = await dispatch(VerifiedPaymentDtl(data)).unwrap(); if (res?.data?.statusCode === 1 && res?.data?.data?.length > 0) { const orderData = [{ OrderDetails: res.data.data }]; // Reset states first setTransctionId(null); setBusinessUPI(false); setPaymentSuccess(false); // Then set new data and trigger side effects setPrintOrderDetails(orderData); // dispatch(changeKioskPageName('initialPage')); // dispatch(changeAllGlbStatustData()); // CustomerDisplay(); // ClearAllGlobalStateDatas(); // handleURL(orderData); } } catch (error) { console.error('Failed to fetch print data:', error); // Reset states even on error setBusinessUPI(false); setPaymentSuccess(false); } }; if (paymentSucess && TransctionId) { const timer = setTimeout(() => { getPrintData(); }, 3000); return () => clearTimeout(timer); } }, [paymentSucess, TransctionId]); useEffect(() => { getBookingTypeId(); }, [BookingType]); useEffect(() => { getSalesDetail(); }, [FailedTranId, PGfailedId]); const getSalesDetail = async () => { if (PGfailedId) { let OrderId = PGfailedId; let response = await dispatch( getSalesDetails({ SalesId: OrderId }) ).unwrap(); console.log(response, 'salesdetail'); if (response?.data?.statusCode === 1) { if (response?.data?.PaymentOrderDtl?.length >= 2) { setMessageType('error'); setMessageData('Your transaction limt exceeds, Please contact admin'); clearAllStates(); dispatch( getProductCategories({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }) ).unwrap(); setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } } } }; useEffect(() => { if (PrintOrderDetails?.length > 0) { if (selectedPaymentOption == 'Counter') { if (isMobile) { KioskMobilePrint(PrintOrderDetails?.[0]?.OrderDetails?.[0]); setTimeout(function () { dispatch(changeKioskPageName('paymentPage')); }, 3000); } else { Print(); } } if (selectedPaymentOption == 'BU') { if (isMobile) { if (MobileA4Print) { const preferenceDetails = SettingDataSelector?.[0]?.SettingDtlDetails; let PrinterDetails = KioskPrinterList; MobileMultiPdfPrintTrigger({ preferenceDetails, printerTemplateStyle, printDatas, PrinterDetails, PrintOrderDetails, SessionData, bookingTypePreference, }); // } else { MobilePrint( appPreferences, PrintOrderDetails, '', 'Booking', SettingDataSelector ); setTimeout(function () { dispatch(changeKioskPageName('paymentPage')); }, 3000); } dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); ClearAllGlobalStateDatas(); } else { PrintDevice(); } } if (devicePaymentStatus && selectedPaymentOption != 'Counter') { if (isMobile) { MobilePrint( appPreferences, PrintOrderDetails, '', 'Booking', SettingDataSelector ); setTimeout(function () { dispatch(changeKioskPageName('paymentPage')); }, 3000); } else { PrintDevice(); } } } }, [PrintOrderDetails]); useEffect(() => { function handleResize() { setWidth(window.innerWidth); } window.addEventListener('resize', handleResize); return () => window.removeEventListener('resize', handleResize); }, [width]); useEffect(() => { isIndianMobile(number) && dispatch(changeKioskCustomerMobileNo(number)); }, [number]); const onChange = (e) => { setValue(e?.target?.value); setDataAccept( itemsdata?.[e.target.value]?.DataAcceptedAt == 'CCAvenue' ? 'Y' : 'N' ); setCardName(itemsdata?.[e.target.value]?.CardName); }; const onSearchChange = (e) => { let Details = paymentGatewayMethods?.[selectedOption]?.MethodDetails; let searchTerm = e.target.value?.toLowerCase(); let updated = Details.filter((item) => item.CardName?.toLowerCase().startsWith(searchTerm) ); setItemsdata(updated); }; const items = [ { key: '1', label: `${paymentGatewayMethods?.[selectedOption]?.CardType == 'CRDC' || paymentGatewayMethods?.[selectedOption]?.CardType == 'DBCRD' ? 'Choose Your Card' : paymentGatewayMethods?.[selectedOption]?.CardType == 'WLT' ? 'Choose Your Wallet' : 'Choose Your Bank' } `, children: ( {itemsdata?.map((item, index) => { return ( <> {item.CardName} ); })} ), }, ]; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const setNumberFun = (newValue) => { setNumber((prevNumber) => { if (prevNumber.length < 10) { return prevNumber + newValue; } return prevNumber; }); }; const handleOtpNumber = (num) => { if (otpIndex > 3) return; const newOtp = [...otpInput]; newOtp[otpIndex] = num.toString(); setOtpInput(newOtp); if (otpIndex < 3) { setOtpIndex(otpIndex + 1); } }; const handleOtpBackspace = () => { if (otpIndex < 0) return; const newOtp = [...otpInput]; if (newOtp[otpIndex]) { newOtp[otpIndex] = ''; } else if (otpIndex > 0) { newOtp[otpIndex - 1] = ''; setOtpIndex(otpIndex - 1); } setOtpInput(newOtp); }; const handleBackspace = () => { setNumber((prevNumber) => prevNumber.slice(0, -1)); }; const fetchPaymentAccess = async () => { const Data1 = { AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }; dispatch(getPrintSelectionComponentData(Data1)).unwrap(); const paymentDeviceAccessResponse = await dispatch( getPaymentDeviceAccessData({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, UserId: SessionData.UserId, }) ).unwrap(); setPaymentDeviceAccess(paymentDeviceAccessResponse?.data?.data); const paymentGatewayAccessResponse = await dispatch( getPaymentGatewayAccessData({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, ActiveStatus: 'A', }) ).unwrap(); setPaymentGatewayAccess(paymentGatewayAccessResponse?.data?.data); fetchPaymentOptionsData( paymentDeviceAccessResponse?.data?.data, paymentGatewayAccessResponse?.data?.data ); }; function updatePaymentDetails( paymentDetails, paymentDeviceAccess, paymentGatewayAccess ) { const kioskSalesFlow = paymentDetails.find( (detail) => detail.FlowName === 'Kiosk Sales' ); if (kioskSalesFlow) { kioskSalesFlow.OptionDetails = kioskSalesFlow.OptionDetails.filter( (option) => { if (option.OptionName === 'Payment Device') { return paymentDeviceAccess.length > 0; } if (option.OptionName === 'Payment Gateway') { return paymentGatewayAccess.length > 0; } return true; } ); } return paymentDetails; } const fetchPaymentOptionsData = async ( paymentDeviceAccess, paymentGatewayAccess ) => { const paymentOptionsResponse = await dispatch( getPaymentOptionsData({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }) ).unwrap(); if (paymentOptionsResponse?.data?.data?.length > 0) { setPaymentDefaultOption( paymentOptionsResponse?.data?.data?.[0]?.['KioskDefaultOption'] ); setPaymentOptionDetailsBusinessUpi( paymentOptionsResponse?.data?.data?.[0].PaymentDetails?.filter( (element) => element.FlowName === 'Kiosk Sales' )[0]?.OptionDetails?.find((e) => e?.OptionName === 'Business Upi') ); const updatedPaymentDetails = updatePaymentDetails( paymentOptionsResponse?.data?.data?.[0].PaymentDetails, paymentDeviceAccess, paymentGatewayAccess ); updatedPaymentDetails?.forEach((app) => { if (app.FlowName === 'Kiosk Sales') { app?.OptionDetails?.forEach((option) => { if (option.OptionName === 'Pay at the counter') { setCounterAvailability(true); } if ( (option.OptionName === 'Payment Gateway' || option.OptionName === 'Payment Device') && option.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { setUpiAvailability(true); } if ( (option.OptionName === 'Payment Gateway' && option.ModeDetails.some( (mode) => mode.ModeName === 'CreditCard' || mode.ModeName === 'DebitCard' )) || (option.OptionName === 'Payment Device' && option.ModeDetails.some((mode) => mode.ModeName === 'Card')) ) { setCardAvailability(true); } }); setPaymentOptionsData(app); } }); } }; const getBookingTypeId = async () => { let tempconfigdata = await dispatch( getConfigType({ TypeName: 'Booking Type' }) ).unwrap(); let configdata = tempconfigdata?.data?.data; let checkName = BookingTypeBoth ? 'DineIn,TakeAway' : BookingType; let filterconfigdata = configdata?.find((a) => a?.ConfigName === checkName); setSelectedBookingType(filterconfigdata?.ConfigId); }; const TotalCalculation = () => { const totalwithouttax = KioskOrderDetails?.reduce((accumulator, card) => { return accumulator + parseFloat(card.WithoutTaxRate || 0); }, 0); setBillAmount(parseFloat(totalwithouttax)?.toFixed(2)); const totalPrice = KioskOrderDetails?.reduce((accumulator, card) => { return accumulator + parseFloat(card.TotalAmt || 0); }, 0); setTotalNetAmount(parseFloat(totalPrice)?.toFixed(2)); const totalTaxAmt = KioskOrderDetails?.reduce((accumulator, card) => { return accumulator + parseFloat(card.TaxAmt || 0); }, 0); setTotalTaxAmount(parseFloat(totalTaxAmt)?.toFixed(2)); }; function getKioskDefaultOption( paymentDetails, selectedOption, kioskDefaultOption ) { if (kioskDefaultOption === 'PD') { if (selectedOption === 'UPI') { const paymentDevice = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Device' ); if ( paymentDevice && paymentDevice.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PD'; } const paymentGateway = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Gateway' ); if ( paymentGateway && paymentGateway.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PG'; } const payAtCounter = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Pay at the counter' ); if ( payAtCounter && payAtCounter.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PC'; } } else if (selectedOption === 'Card') { const paymentDevice = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Device' ); if ( paymentDevice && paymentDevice.ModeDetails.some((mode) => mode.ModeName === 'Card') ) { return 'PD'; } const paymentGateway = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Gateway' ); if ( paymentGateway && paymentGateway.ModeDetails.some( (mode) => mode.ModeName === 'CreditCard' || mode.ModeName === 'DebitCard' ) ) { return 'PG'; } } } else if (kioskDefaultOption === 'PG') { if (selectedOption === 'UPI') { const paymentGateway = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Gateway' ); if ( paymentGateway && paymentGateway.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PG'; } const paymentDevice = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Device' ); if ( paymentDevice && paymentDevice.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PD'; } const payAtCounter = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Pay at the counter' ); if ( payAtCounter && payAtCounter.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PC'; } } else if (selectedOption === 'Card') { const paymentGateway = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Gateway' ); if ( paymentGateway && paymentGateway.ModeDetails.some( (mode) => mode.ModeName === 'CreditCard' || mode.ModeName === 'DebitCard' ) ) { return 'PG'; } const paymentDevice = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Device' ); if ( paymentDevice && paymentDevice.ModeDetails.some((mode) => mode.ModeName === 'Card') ) { return 'PD'; } } } else if (kioskDefaultOption === null) { if (selectedOption === 'UPI') { const paymentDevice = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Device' ); if ( paymentDevice && paymentDevice.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PD'; } const paymentGateway = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Gateway' ); if ( paymentGateway && paymentGateway.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PG'; } const payAtCounter = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Pay at the counter' ); if ( payAtCounter && payAtCounter.ModeDetails.some((mode) => mode.ModeName === 'UPI') ) { return 'PC'; } } else if (selectedOption === 'Card') { const paymentDevice = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Device' ); if ( paymentDevice && paymentDevice.ModeDetails.some((mode) => mode.ModeName === 'Card') ) { return 'PD'; } const paymentGateway = paymentDetails.OptionDetails.find( (option) => option.OptionName === 'Payment Gateway' ); if ( paymentGateway && paymentGateway.ModeDetails.some( (mode) => mode.ModeName === 'CreditCard' || mode.ModeName === 'DebitCard' ) ) { return 'PG'; } } } return null; } const checkLast30MinOrder = async (MobileNo) => { const response = await dispatch(checkLastOrderTimeLimit({ MobileNo, AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }))?.unwrap(); return response?.data; }; const handlePaymentOption = async (option) => { if (isTimeLimitEnabled) { const withinTimeLimit = await checkLast30MinOrder(number); if (withinTimeLimit?.IsEligible === false) { setMessageData(withinTimeLimit?.response); setMessageType('warning'); return; } } setSelectedPaymentOption(option); dispatch(changeSelectedKioskPaymentOption(option)); if (option == 'UPI' || option == 'Card') { const kioskDefaultOption = getKioskDefaultOption( PaymentOptionsData, option, paymentDefalutOption ); if (kioskDefaultOption == 'PD') { handleDevice(PaymentOptionsData, option); } else if (kioskDefaultOption == 'PG') { if (option == 'UPI') { const filteredUpiData = { ...PaymentOptionsData, OptionDetails: PaymentOptionsData.OptionDetails.filter( (option) => option.OptionName === 'Payment Gateway' ).map((option) => ({ ...option, ModeDetails: option.ModeDetails.filter( (mode) => mode.ModeName == 'UPI' ), })), }; handleGateway( PaymentOptionsData, option, filteredUpiData?.OptionDetails?.[0]?.ModeDetails ); } else { const filteredData = { ...PaymentOptionsData, OptionDetails: PaymentOptionsData.OptionDetails.filter( (option) => option.OptionName === 'Payment Gateway' ).map((option) => ({ ...option, ModeDetails: option.ModeDetails.filter( (mode) => mode.ModeName !== 'UPI' ), })), }; setPaymentGatewayMethods( filteredData?.OptionDetails?.[0]?.ModeDetails ); setselectedOption(0); setItemsdata( filteredData?.OptionDetails?.[0]?.ModeDetails?.[0]?.MethodDetails ); setShowPaymentGatewayOptions(true); } } else { setMessageType('error'); setMessageData('Something went wrong'); } } else if (option == 'BU') { handleCounterBusinessUpi(); } else { handleCounter(); } }; async function getModeId(paymentDetails, option, optionName) { const paymentDeviceOption = paymentDetails.OptionDetails.find( (option) => option.OptionName === optionName ); if (!paymentDeviceOption) { return null; } const selectedMode = paymentDeviceOption.ModeDetails.find( (mode) => mode.ModeName === option ); if (!selectedMode) { return null; } return selectedMode.ModeId; } const clearAllStates = () => { setFailedTranId(null); dispatch(changeKioskCustomerMobileNo(null)); dispatch(changePaymentgatewayRedirect(false)); dispatch(changePGFailedAmt(null)); }; const handleCounter = async () => { const NotSlectedTypeFind = KioskOrderDetails?.find( (a) => a?.BookingType != SelectedBookingType ); let putdevicedata; if (FailedTranId || PGfailedId) { putdevicedata = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, AppId: SessionData.AppId, CustSuppId: CustomerMobileNumber, UpdatedBy: SessionData.UserId, OrderId: PGfailedId ? PGfailedId : FailedTranId, Amount: PGfailedId ? PGfailedAmt : TotalNetAmount, PaymentType: 0, PaymentOptionType: 'PC', PaymentStatus: 'P', Debit: 0, Credit: 0, }; } let postCounterData = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, OrderType: 'O', MobileNo: CustomerMobileNumber, BookingType: NotSlectedTypeFind && !BookingTypeBoth ? NotSlectedTypeFind?.BookingType : SelectedBookingType, ActiveStatus: 'A', CreatedBy: SessionData.UserId, AppId: SessionData.AppId, RefundAmount: 0, BillAmount: TotalBillAmount, OverallDisc: 0, TaxAmount: TotalTaxAmount, VatAmount: 0, NetAmount: TotalNetAmount, PaymentType: 0, GivenAmt: 0, BalGiven: 0, BookingMedia: 'KW', PaymentStatus: 'P', OrderDtlDetails: KioskOrderDetails, Type: 0, Debit: 0, Credit: 0, SalesPaymentType: 'normal', PaymentDetail: [ { Amount: TotalNetAmount, PaymentOptionType: 'PC', PaymentStatus: 'P', Debit: 0, Credit: 0, }, ], }; let response; if (FailedTranId || PGfailedId) { response = await dispatch(PutKioskBookingData(putdevicedata)).unwrap(); } else { response = await dispatch(PostKioskBookingData(postCounterData)).unwrap(); } if (response?.data?.statusCode == 1) { await dispatch( changeOrderId( response?.data?.OrderDetails?.[0]?.SalesId ? extractLastNumberOrderId( response?.data?.OrderDetails?.[0]?.SalesId, response?.data?.OrderDetails?.[0]?.FYStatus ) : null ) ); setPrintOrderDetails([response?.data]); setOpen(false); if (response?.data?.SMSbody) { const postData = { body: response?.data?.SMSbody, }; await dispatch(sendSms(postData)); } clearAllStates(); } else { if ( response?.data?.statusCode == 0 && response?.data?.response == 'Order Limit Exceeded' ) { setMessageType('error'); setMessageData('Order Limit Exceeded'); } else { setMessageType('error'); setMessageData('Something went wrong'); } setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } }; const handleCounterBusinessUpi = async () => { const NotSlectedTypeFind = KioskOrderDetails?.find( (a) => a?.BookingType != SelectedBookingType ); let putdevicedata; if (FailedTranId || PGfailedId) { putdevicedata = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, AppId: SessionData.AppId, CustSuppId: CustomerMobileNumber, UpdatedBy: SessionData.UserId, OrderId: PGfailedId ? PGfailedId : FailedTranId, Amount: PGfailedId ? PGfailedAmt : TotalNetAmount, PaymentType: 0, PaymentOptionType: 'PC', PaymentStatus: 'P', Debit: 0, Credit: 0, }; } let BusinessUpi = paymentOptionDetailsBusinessUpi?.ModeDetails?.[0]; let postCounterData = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, OrderType: 'O', MobileNo: CustomerMobileNumber, BookingType: NotSlectedTypeFind && !BookingTypeBoth ? NotSlectedTypeFind?.BookingType : SelectedBookingType, ActiveStatus: 'A', CreatedBy: SessionData.UserId, AppId: SessionData.AppId, RefundAmount: 0, BillAmount: TotalBillAmount, OverallDisc: 0, TaxAmount: TotalTaxAmount, VatAmount: 0, NetAmount: TotalNetAmount, PaymentType: 0, GivenAmt: 0, BalGiven: 0, BookingMedia: 'KW', PaymentStatus: 'P', OrderDtlDetails: KioskOrderDetails, Type: 0, Debit: 0, Credit: 0, SalesPaymentType: 'normal', PaymentDetail: [ { AccountDtl: [], Amount: TotalNetAmount, Credit: 0, Debit: 0, PaymentOptionType: 'BU', PaymentStatus: 'P', PaymentType: BusinessUpi?.ModeId || 0, ModeOfPayment: null, MerchantId: BusinessUpi?.MerchantId, }, ], }; let response; if (FailedTranId || PGfailedId) { response = await dispatch(PutKioskBookingData(putdevicedata)).unwrap(); } else { response = await dispatch(PostKioskBookingData(postCounterData)).unwrap(); } if (response?.data?.statusCode == 1) { console.log(response?.data?.OrderDetails?.[0]?.SalesId, 'hhhh'); setOpen(false); dispatch( changeOrderId( response?.data?.OrderDetails?.[0]?.SalesId ? extractLastNumberOrderId( response?.data?.OrderDetails?.[0]?.SalesId, response?.data?.OrderDetails?.[0]?.FYStatus ) : null ) ); let OrderId = response?.data?.OrderId; setTransctionId(OrderId); setBusinessUPI(true); setpaymentUrl(response?.data?.PaymentPageLink); } else { if ( response?.data?.statusCode == 0 && response?.data?.response == 'Order Limit Exceeded' ) { setMessageType('error'); setMessageData('Order Limit Exceeded'); } else { setMessageType('error'); setMessageData('Something went wrong'); } setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } }; const handleDevice = async (paymentDetails, option) => { const paymentDeviceDetails = await dispatch( getPaymentGatewayDetails({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, DetailType: 'D', }) ).unwrap(); const NotSlectedTypeFind = KioskOrderDetails?.find( (a) => a?.BookingType != SelectedBookingType ); let putdevicedata; const modeId = await getModeId(paymentDetails, option, 'Payment Device'); if (FailedTranId || PGfailedId) { putdevicedata = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, AppId: SessionData.AppId, CustSuppId: CustomerMobileNumber, UpdatedBy: SessionData.UserId, PaymentType: modeId, OrderId: PGfailedId ? PGfailedId : FailedTranId, Amount: PGfailedId ? PGfailedAmt : TotalNetAmount, PaymentOptionType: 'PD', PaymentStatus: 'P', Debit: 0, Credit: 0, ModeOfPayment: null, AccountDtl: paymentDeviceDetails?.data?.data, }; } let postDeviceData = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, OrderType: 'O', MobileNo: CustomerMobileNumber, BookingType: NotSlectedTypeFind && !BookingTypeBoth ? NotSlectedTypeFind?.BookingType : SelectedBookingType, ActiveStatus: 'A', CreatedBy: SessionData.UserId, AppId: SessionData.AppId, RefundAmount: 0, BillAmount: TotalBillAmount, OverallDisc: 0, TaxAmount: TotalTaxAmount, VatAmount: 0, NetAmount: TotalNetAmount, PaymentType: 0, GivenAmt: 0, BalGiven: 0, BookingMedia: 'KW', PaymentStatus: 'P', OrderDtlDetails: KioskOrderDetails, Type: 0, Debit: 0, Credit: 0, SalesPaymentType: 'normal', PaymentDetail: [ { Amount: TotalNetAmount, PaymentType: modeId, PaymentOptionType: 'PD', PaymentStatus: 'P', Debit: 0, Credit: 0, ModeOfPayment: null, AccountDtl: paymentDeviceDetails?.data?.data, }, ], }; let response; if (FailedTranId || PGfailedId) { response = await dispatch(PutKioskBookingData(putdevicedata)).unwrap(); } else { response = await dispatch(PostKioskBookingData(postDeviceData)).unwrap(); } if (response?.data?.statusCode == 1) { let PaymentOrderDetails = response?.data?.PaymentOrderDtl?.filter( (item) => item.PaymentOptionType == 'PD' && item.PaymentStatus == 'P' ); let PaymentOrderIndividualDetails = PaymentOrderDetails?.length == 1 ? PaymentOrderDetails?.[0] : []; let paymentDeviceData = { TransactionNumber: PaymentOrderIndividualDetails?.['PaymentOrderId'], SequenceNumber: 1, AllowedPaymentMode: option === 'Card' ? '1' : option === 'UPI' ? '10' : '', Amount: `${parseInt(TotalNetAmount) * 100}`, ClientID: paymentDeviceAccess?.[0]?.['ClientId'], StoreID: paymentDeviceAccess?.[0]?.['StoreId'], UserID: SessionData?.UserId, MerchantID: paymentDeviceAccess?.[0]?.['MerchantId'], SecurityToken: paymentDeviceAccess?.[0]?.['SecurityToken'], IMEI: paymentDeviceAccess?.[0]?.['IMEI'], AutoCancelDurationInMinutes: paymentDeviceAccess?.[0]?.['AutoCancelDurationInMinutes'], }; let apiresponse = await dispatch( postPaymentDevice(paymentDeviceData) ).unwrap(); if (apiresponse?.ResponseMessage?.toLowerCase() === 'approved') { let pendingPaymentList = { MerchantID: paymentDeviceAccess?.[0]?.['MerchantId'], SecurityToken: paymentDeviceAccess?.[0]?.['SecurityToken'], ClientID: paymentDeviceAccess?.[0]?.['ClientId'], StoreID: paymentDeviceAccess?.[0]?.['StoreId'], IMEI: paymentDeviceAccess?.[0]?.['IMEI'], PlutusTransactionReferenceId: apiresponse?.PlutusTransactionReferenceID, PaymentOrderId: PaymentOrderIndividualDetails?.['PaymentOrderId'], UpdatedBy: SessionData?.UserId, }; await dispatch(PutPendingPaymentList(pendingPaymentList)).unwrap(); let isApproved = false; const startTime = Date.now(); let postPaymentDeviceData = { MerchantID: paymentDeviceAccess?.[0]?.['MerchantId'], SecurityToken: paymentDeviceAccess?.[0]?.['SecurityToken'], ClientID: paymentDeviceAccess?.[0]?.['ClientId'], StoreID: paymentDeviceAccess?.[0]?.['StoreId'], IMEI: paymentDeviceAccess?.[0]?.['IMEI'], PlutusTransactionReferenceID: apiresponse?.PlutusTransactionReferenceID, }; while (!isApproved) { let ApiResponseget = await dispatch( getPaymentDeviceResponse(postPaymentDeviceData) ).unwrap(); if ( ApiResponseget?.ResponseMessage?.toLowerCase() === 'txn approved' ) { let putPaymentDeviceData = { OrderBookingId: PaymentOrderIndividualDetails?.OrderId, OrderId: PaymentOrderIndividualDetails?.PaymentOrderId, PaymentStatus: 'S', Amount: PaymentOrderIndividualDetails?.Amount, AccountDtl: [paymentDeviceDetails?.data?.data], ResponseDtl: [ApiResponseget], PaymentType: PaymentOrderIndividualDetails?.PaymentType, UpdatedBy: SessionData?.UserId, }; let putPaymentDeviceResponse = await dispatch( PutBookingPaymentStatusChange(putPaymentDeviceData) ).unwrap(); if (putPaymentDeviceResponse?.data?.statusCode === 1) { setDevicePaymentStatus(true); await dispatch( changeOrderId( putPaymentDeviceResponse?.data?.OrderDetails?.[0]?.SalesId ? extractLastNumberOrderId( putPaymentDeviceResponse?.data?.OrderDetails?.[0] ?.SalesId, putPaymentDeviceResponse?.data?.OrderDetails?.[0] ?.FYStatus ) : null ) ); setPrintOrderDetails([putPaymentDeviceResponse?.data]); clearAllStates(); } else { setMessageType('error'); setMessageData('Something went wrong, Please Contact Admin'); setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } isApproved = true; console.log('Transaction Approved!'); break; } if ( Date.now() - startTime > paymentDeviceAccess?.[0]?.['AutoCancelDurationInMinutes'] * 60000 ) { console.error('Transaction not approved within 1 minute.'); let putPaymentDeviceFailureData = { OrderBookingId: PaymentOrderIndividualDetails?.OrderId, OrderId: PaymentOrderIndividualDetails?.PaymentOrderId, PaymentStatus: 'F', Amount: PaymentOrderIndividualDetails?.Amount, AccountDtl: [paymentDeviceDetails?.data?.data], ResponseDtl: [ApiResponseget], PaymentType: PaymentOrderIndividualDetails?.PaymentType, UpdatedBy: SessionData?.UserId, }; await dispatch( PutBookingPaymentStatusChange(putPaymentDeviceFailureData) ).unwrap(); if (response?.data?.PaymentOrderDtl?.length < 2) { setFailedTranId(PaymentOrderIndividualDetails?.OrderId); setMessageType('error'); setMessageData('Payment Failed, Try again..'); } else { setMessageType('error'); setMessageData( 'Your transaction limt exceeds, Please contact admin' ); setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } setSelectedPaymentOption(null); break; } await new Promise((resolve) => setTimeout(resolve, 3000)); } } else { let putPaymentDeviceFailureData = { OrderBookingId: PaymentOrderIndividualDetails?.OrderId, OrderId: PaymentOrderIndividualDetails?.PaymentOrderId, PaymentStatus: 'F', Amount: PaymentOrderIndividualDetails?.Amount, AccountDtl: [paymentDeviceDetails?.data?.data], ResponseDtl: [], PaymentType: PaymentOrderIndividualDetails?.PaymentType, UpdatedBy: SessionData?.UserId, }; await dispatch( PutBookingPaymentStatusChange(putPaymentDeviceFailureData) ).unwrap(); if (response?.data?.PaymentOrderDtl?.length < 2) { setFailedTranId(PaymentOrderIndividualDetails?.OrderId); setMessageType('error'); setMessageData('Payment Failed, Try again..'); } else { setMessageType('error'); setMessageData('Your transaction limt exceeds, Please contact admin'); setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } setSelectedPaymentOption(null); } if (response?.data?.SMSbody) { const postData = { body: response?.data?.SMSbody, }; await dispatch(sendSms(postData)); } } else { if ( response?.data?.statusCode == 0 && response?.data?.response == 'Order Limit Exceeded' ) { setMessageType('error'); setMessageData('Order Limit Exceeded'); } else { setMessageType('error'); setMessageData('Something went wrong'); } setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } }; const handleGateway = async (paymentDetails, option, upiData) => { let bankDetails = { PayOpt: paymentGatewayMethods?.[selectedOption]?.PayOpt, CardType: paymentGatewayMethods?.[selectedOption]?.CardType, cardName: cardName, }; if ( (bankDetails?.PayOpt != undefined && bankDetails?.CardType != undefined && bankDetails?.cardName != undefined && value !== undefined) || option == 'UPI' ) { const paymentGatewayDetails = await dispatch( getPaymentGatewayDetails({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, DetailType: 'P', }) ).unwrap(); const NotSlectedTypeFind = KioskOrderDetails?.find( (a) => a?.BookingType != SelectedBookingType ); const modeId = await getModeId( paymentDetails, option == 'UPI' ? option : paymentGatewayMethods?.[selectedOption]?.ModeName, 'Payment Gateway' ); let putGatewaydata; if (FailedTranId || PGfailedId) { putGatewaydata = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, AppId: SessionData.AppId, CustSuppId: CustomerMobileNumber, UpdatedBy: SessionData.UserId, OrderId: PGfailedId ? PGfailedId : FailedTranId, PaymentType: modeId, Amount: PGfailedId ? PGfailedAmt : TotalNetAmount, PaymentOptionType: 'PG', PaymentStatus: 'P', Debit: 0, Credit: 0, ModeOfPayment: null, AccountDtl: paymentGatewayDetails?.data?.data, }; } let postGatewayData = { CompId: SessionData.CompId, BranchId: SessionData.BranchId, OrderType: 'O', MobileNo: CustomerMobileNumber, BookingType: NotSlectedTypeFind && !BookingTypeBoth ? NotSlectedTypeFind?.BookingType : SelectedBookingType, ActiveStatus: 'A', CreatedBy: SessionData.UserId, AppId: SessionData.AppId, RefundAmount: 0, BillAmount: TotalBillAmount, OverallDisc: 0, TaxAmount: TotalTaxAmount, VatAmount: 0, NetAmount: TotalNetAmount, PaymentType: 0, GivenAmt: 0, BalGiven: 0, BookingMedia: 'KW', PaymentStatus: 'P', OrderDtlDetails: KioskOrderDetails, Type: 0, Debit: 0, Credit: 0, SalesPaymentType: 'normal', PaymentDetail: [ { Amount: TotalNetAmount, PaymentType: modeId, PaymentOptionType: 'PG', PaymentStatus: 'P', Debit: 0, Credit: 0, ModeOfPayment: null, AccountDtl: paymentGatewayDetails?.data?.data, }, ], }; let response; if (FailedTranId || PGfailedId) { response = await dispatch(PutKioskBookingData(putGatewaydata)).unwrap(); } else { response = await dispatch( PostKioskBookingData(postGatewayData) ).unwrap(); } if (response?.data?.statusCode == 1) { let PaymentOrderDetails = response?.data?.PaymentOrderDtl?.filter( (item) => item.PaymentOptionType == 'PG' && item.PaymentStatus == 'P' ); let PaymentOrderIndividualDetails = PaymentOrderDetails?.length == 1 ? PaymentOrderDetails?.[0] : []; const form = document.createElement('form'); form.method = 'POST'; form.action = `${CustomPaymentUrl}/ccavRetailRequestHandler`; form.style.display = 'none'; // Hide the form console.log('upiDataupiData', upiData); const data1 = { merchant_id: paymentGatewayAccess?.[0]?.['MerchantId'], order_id: PaymentOrderIndividualDetails?.PaymentOrderId, currency: 'INR', amount: TotalNetAmount, redirect_url: 'https://pozo.app/CustomPaymentGateway/CustomPaymentGateway/ccavRetailResponseHandler', cancel_url: 'https://pozo.app/CustomPaymentGateway/CustomPaymentGateway/ccavRetailResponseHandler', payment_option: option == 'UPI' ? upiData?.[0]?.PayOpt : paymentGatewayMethods?.[selectedOption]?.PayOpt, card_type: option == 'UPI' ? upiData?.[0]?.CardType : paymentGatewayMethods?.[selectedOption]?.CardType, card_name: option == 'UPI' ? 'UPI' : cardName, data_accept: option == 'UPI' ? upiData?.[0]?.MethodDetails?.[0]?.DataAcceptedAt == 'CCAvenue' ? 'Y' : 'N' : dataAccept, language: 'EN', billing_name: 'User', billing_address: 'xyz', billing_city: 'xyz', billing_state: 'xyz', billing_zip: '000000', billing_country: 'India', billing_tel: CustomerMobileNumber, billing_email: 'xyz@gmail.com', delivery_name: '', delivery_address: SessionData?.AppId, delivery_city: 'K', delivery_zip: SessionData?.BranchId, delivery_country: modeId, delivery_tel: SessionData?.MobileNo, merchant_param1: SessionData?.userName, merchant_param2: PaymentOrderIndividualDetails?.OrderId, merchant_param3: SessionData?.UserId, merchant_param4: SessionData?.CompId, merchant_param5: 'paymentRetailHandler.html', promo_code: '', customer_identifier: '', workingKey: paymentGatewayAccess?.[0]?.['WorkingKey'], // Include the working key accessCode: paymentGatewayAccess?.[0]?.['AccessCode'], }; console.log('data1data1', data1); Object.keys(data1).forEach((key) => { const input = document.createElement('input'); input.type = 'hidden'; input.name = key; input.value = encryptedValuesFun(data1[key]); form.appendChild(input); }); document.body.appendChild(form); form.submit(); if (response?.data?.SMSbody) { const postData = { body: response?.data?.SMSbody, }; await dispatch(sendSms(postData)); } } else { if ( response?.data?.statusCode == 0 && response?.data?.response == 'Order Limit Exceeded' ) { setMessageType('error'); setMessageData('Order Limit Exceeded'); } else { setMessageType('error'); setMessageData('Something went wrong'); } setTimeout(function () { dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); }, 2000); } } else { setMessageType('error'); setMessageData('Please Select the Payment'); } }; const Print = async () => { const style = ``; await printDiv('Kiosk-Print', style); await dispatch(changeKioskPageName('paymentPage')); }; const PrintDevice = 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', }; 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); if (orderDetail?.BookingTypeName !== 'Dine In') { const tokensToPrint = orderDetail?.productDetails?.map( async (item, idx) => { if (item.TokenAvailable === 'Y') { await TokenPrint(`${idx}-${item?.ProdId}`); } } ); if (tokensToPrint?.length > 0) { await Promise.all(tokensToPrint); } } } ) ); setPrintOrderDetails([]); await dispatch(changeKioskPageName('paymentPage')); } await dispatch(changeKioskPageName('initialPage')); await dispatch(changeAllGlbStatustData()); ClearAllGlobalStateDatas(); }; const TokenPrint = async (index) => { try { console.log(`Starting token print for index ${index}`); const stylePrint = ``; await printDiv(`TakeawayToken${index}`, stylePrint); } catch (error) { console.error(`Error printing token for index ${index}:`, error); } }; const HandleCloseModal = () => { if (FailedTranId || PGfailedId) { showDeleteConfirm(); } else { props.handleCancel(); } }; const { confirm } = Modal; const showDeleteConfirm = () => { confirm({ title: 'Are you sure cancel this order?', icon: , content: '', okText: 'Yes', okType: 'danger', cancelText: 'No', onOk() { console.log('OK'); props.handleCancel(); dispatch(changeKioskPageName('initialPage')); dispatch(changeAllGlbStatustData()); dispatch(changePaymentgatewayRedirect(false)); dispatch(changeKioskCustomerMobileNo(null)); dispatch(changePGFailedTransId(null)); dispatch( getKioskTemplate({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }) ).unwrap(); dispatch( getProductCategories({ AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }) ).unwrap(); }, onCancel() { console.log('Cancel'); }, }); }; const ClearAllGlobalStateDatas = () => { setSelectedPaymentOption(null); props.handleCancel(); clearAllStates(); }; const sendOTP = async () => { const valid = isIndianMobile(number); if (valid) { if (isTimeLimitEnabled) { const withinTimeLimit = await checkLast30MinOrder(number); if (withinTimeLimit?.IsEligible === false) { setMessageData(withinTimeLimit?.response); setMessageType('warning'); return; } } } else { setMessageData('Please enter valid mobile No.'); setMessageType('warning'); return } try { setOtpIndex(0); setOtpSent(true); let response = await dispatch(sendupiotp({ "MobileNo": number, "CreatedBy": 0 }))?.unwrap() if (response?.data?.statusCode == 1) { setMessageData('OTP sent to your mobile number'); setMessageType('success'); setOTPNumber(response?.data?.OTP); startResendTimer(); } } catch (error) { console.log(error) } } const startResendTimer = () => { setCanResend(false); setResendTimer(30); const timer = setInterval(() => { setResendTimer((prev) => { if (prev <= 1) { clearInterval(timer); setCanResend(true); return 0; } return prev - 1; }); }, 1000); } const handleOtpChange = (e, index) => { const value = e.target.value.replace(/\D/g, ''); const newOtp = [...otpInput]; newOtp[index] = value; setOtpInput(newOtp); }; const verifyOtp = () => { const enteredOtp = otpInput.join(''); if (enteredOtp === otpNumber?.toString()) { setMessageType('success'); setMessageData('OTP Verified Successfully'); setOtpSent(false); setOtpInput(['', '', '', '']); setShowPaymentMethods(true); setOtpVerified(true); } else { setMessageType('error'); setMessageData('Invalid OTP'); } }; return (
768 ? 800 : 600} children={ showPaymentGatewayOptions ? (
Payment Options
{paymentGatewayMethods?.map((item, index) => (
{ setselectedOption(index); setItemsdata( paymentGatewayMethods?.[index]?.MethodDetails ); setValue(undefined); }} style={{ borderLeft: selectedOption === index ? '5px solid #52C41A' : 'none', backgroundColor: selectedOption === index ? ' #52c41a2e' : ' ', color: selectedOption === index ? ' #000' : ' ', }} >
{item?.ModeName == 'EMI' && emi} {item?.ModeName == 'CreditCard' && ( CrediCard )} {item?.ModeName == 'DebitCard' && ( DebitCard )} {item?.ModeName == 'NetBanking' && ( NetBanking )} {item?.ModeName == 'CashCard' && ( CashCard )} {item?.ModeName == 'Wallet' && ( Wallet )}
{item?.ModeName}
{' '} Google Pay PhonePe & More
))}
INR ₹ {TotalNetAmount}
{ handleGateway(PaymentOptionsData, 'Card', []); }} icon={} >
) : (

{isOtpEnabled && !showPaymentMethods ? "Verify Mobile Number" : "PAYMENT"}

{!otpSent && !otpVerifed && (<>

Get your order bill on your mobile
via SMS / Whatsapp

{number?.length === 10 && !isIndianMobile(number) &&
Please Enter Valid Mobile Number
}
{/* input boxxes */}

setNumberFun(1)}>1

setNumberFun(2)}>2

setNumberFun(3)}>3

setNumberFun(4)}>4

setNumberFun(5)}>5

setNumberFun(6)}>6

setNumberFun(7)}>7

setNumberFun(8)}>8

setNumberFun(9)}>9

setNumberFun(0)}>0

{isOtpEnabled && ( <> )} )} {(isOtpEnabled && otpSent) && (
{/* Mobile Number + Edit */}
{number}
{/* 4 Digit OTP Input */}
{otpInput.map((digit, index) => ( setOtpIndex(index)} readOnly /> ))}

handleOtpNumber(1)}>1

handleOtpNumber(2)}>2

handleOtpNumber(3)}>3

handleOtpNumber(4)}>4

handleOtpNumber(5)}>5

handleOtpNumber(6)}>6

handleOtpNumber(7)}>7

handleOtpNumber(8)}>8

handleOtpNumber(9)}>9

handleOtpNumber(0)}>0

{/* Buttons */}
)} {(!isOtpEnabled || (showPaymentMethods && otpVerifed)) && <>

Select Payment Method

{console.log('selectedOption', selectedPaymentOption)}
{/* {upiAvailability && (
handlePaymentOption('UPI')} >

UPI

)} */} {/* {cardAvailability && (
handlePaymentOption('Card')} >

CARD

)} */} {counterAvailability && (
handlePaymentOption('Counter')} >

PAY AT THE COUNTER

)} {paymentOptionDetailsBusinessUpi && (
handlePaymentOption('BU')} >

UPI

)} {!paymentOptionDetailsBusinessUpi && !counterAvailability && (
Please Set Payment Options Contact Admin
)}
}
) } >
{PrintOrderDetails?.length > 0 && PrintOrderDetails?.[0]?.OrderDetails?.map((orderDetail, index) => (
{selectedPaymentOption == 'Counter' && ( )}
))} {/* {paymentUrl != null && (

Complete Payment

)} */} setShowCancelConfirm(true)} footer={false} width={500} children={ <> } /> {showCancelConfirm && ( { paymentGatewayRef.current?.clearPolling(); setBusinessUPI(false); setShowCancelConfirm(false); ClearAllGlobalStateDatas(); }} onCancel={() => setShowCancelConfirm(false)} okText="Yes" cancelText="No" > Do you want to cancel the payment? )}
); }; export default KioskPayment;