import React, { useEffect, useState, useCallback, lazy, Suspense, useMemo, } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import moment from 'moment'; import { Tooltip, Badge, Popconfirm } from 'antd'; const BSBillingTable1 = lazy( () => import('../../Components/BSBillingTables/BSBillingTable1/BSBillingTable1') ); const BSBillingTable2 = lazy( () => import('../../Components/BSBillingTables/BSBillingTable2/BsBill2') ); const BSBillingTable3 = lazy( () => import('../../Components/BSBillingTables/BSBillingTable3/BSBillingTable3') ); const BSBillingTable4 = lazy( () => import('../../Components/BSBillingTables/BSBillingTable4/BSBillingTable4') ); const BSBillingTable5 = lazy( () => import('../../Components/BSBillingTables/BSBillingTable5/BsBill') ); const BSBillingTable6 = lazy( () => import('../../Components/BSBillingTables/BSBillingTable6/BSBillingTable6') ); const BSBillingTable7 = lazy( () => import('../../Components/BSBillingTables/BSBillingTable7/BSBillingTable7') ); // Combo components (lazy) const BSC1Payment = lazy(() => import('../../Components/BSCombo/BSC1Payment')); const BSC1NavBar = lazy(() => import('../../Components/BSCombo/BSC1NavBar')); const BSC1Search = lazy(() => import('../../Components/BSCombo/BSC1Search')); import { GlobalCombosearch, GlobalPayementloader, GlobalSalesDetailData, getSalesDetailData, GlobalPaymentTransactionNumber, GlobalOrderType, GlobalOrderStatus, PreferenceData, GlobalAppExpDateData, GlobalBtoBQuickProductTransfer, changeCombosearch, Comboget, } from '../../../../Features/BookingScreen/BookingData/BookingData.js'; import { isMobile } from 'react-device-detect'; import { ArrowUpOutlined } from '@ant-design/icons'; import { getSession } from '../../../../Services/Others.js'; const BSNavBarComboSearch = lazy( () => import('../../Components/UtillComponents/BSNavBarComboSearch.jsx') ); const BSKioskCounterPayment = lazy( () => import('../../Components/UtillComponents/BSKioskCounterPayment.jsx') ); import { getKioskDatas, globalKioskSalesCount, } from '../../../../Features/Kiosk/kiosk.js'; import PozoKioskIcon from '../../Components/UtillComponents/Pozo retail icons/PozoKioskIcon.jsx'; import { getTemplateData, GlobalPricingAppPricingName, StoredSessionData, } from '../../../../Features/ThemeChange/ThemeChange.js'; import './../../../../Styles/BookingScreen/Template/BSLayout7/Combo1.scss'; import '../../../../Styles/BookingScreen/Components/BSBillingTables/BSBillingTable6/BST6Payment.scss'; import { GLobalSadminUserPin, putSadminUserExit, checkSession, ApplicationPreferences, } from '../../../../Features/BrachLogin/BranchLogin'; import { Messages } from '../../../../Components/Notifications/Messages.jsx'; import SAdminUserNotification from '../../Components/BookingFunctionality/SAdminUserNotification.jsx'; import SalesCountComponent from '../SalesCountComponent.jsx'; import { getBookingStatus, GlobalBookingStatus, } from '../../../../Features/Payment/PaymentReceivedRetail/PaymentReceivedRetail.js'; import { PutBookingClose } from '../../../../Features/BookingScreen/RetailBookingClose.js'; import TooltipWrapper from '../../../../Components/Tooltip/Tooltip.jsx'; import BookingCloseIcon from '../../Components/UtillComponents/BookingCloseIcon.jsx'; const RetailBookingClosing = lazy(() => import('../RetailBookingClose.jsx')); const ListOfSalesInvoices = lazy( () => import('../../Components/BSBillingTables/ListofInvoices/ListOfSalesInvoices.jsx') ); const BranchTransferComponent = lazy( () => import('../../Components/UtillComponents/BSQuickBranchToBranchTransferComponent.jsx') ); const BSExpireProductsList = lazy( () => import('../../Components/UtillComponents/BSExpireProductsList.jsx') ); const ComboSalesBillTable = lazy( () => import('../../Components/BSBillingTables/ComboSalesBillTable/ComboSalesBillTable.jsx') ); import { GiBasket } from 'react-icons/gi'; import { FaRegKeyboard } from 'react-icons/fa'; import { CgSearchLoading } from 'react-icons/cg'; import { DefaultModal } from '../../../../Components/Modal/DefaultModal.jsx'; const MultipleSearch = lazy( () => import('../../Components/UtillComponents/MultipleSearch.jsx') ); const VerfiedProducts = lazy( () => import('../../Components/BSNavbar/verfiedProduct/VerfiedProducts.jsx') ); import ShortcutKeyHelper from '../../Components/UtillComponents/ShortcutKeyHelper.jsx'; import PlanExpireNotification from '../PlanExpireNotification.jsx'; import CardSkeleton from '../../../../Components/Skeleton/CardSkeleton.jsx'; import { TbSettingsSearch } from 'react-icons/tb'; const subDirectory = import.meta.env.BASE_URL; const commonDirectory = import.meta.env.COMMON_BASE_URL; const MemoGiBasket = React.memo(GiBasket); export default function BSCombo1() { const dispatch = useDispatch(); const { action, selectedProducts } = useSelector( GlobalBtoBQuickProductTransfer ); const BSComboData = useSelector(getTemplateData); const SettingDataSelector = useSelector(PreferenceData); const GlobalsalesDetailData = useSelector(GlobalSalesDetailData); const SessionData = useSelector(StoredSessionData); const badgeCount = useSelector(globalKioskSalesCount); const Comboglobal = useSelector(GlobalCombosearch); const paymentloader = useSelector(GlobalPayementloader); const PaymentTransactionNumber = useSelector(GlobalPaymentTransactionNumber); const OrderStatus = useSelector(GlobalOrderStatus); const OrderType = useSelector(GlobalOrderType); const SAdminuserPin = useSelector(GLobalSadminUserPin); const AppExpDate = useSelector(GlobalAppExpDateData); const PricingAppPricingName = useSelector(GlobalPricingAppPricingName); const appPreferences = useSelector(ApplicationPreferences); const [isAltPressed, setIsAltPressed] = useState(false); const commonModulePreference = appPreferences?.find( (preference) => preference?.PreferredCatName === 'Common Module' )?.PreferenceCatDetails; const sportsAppPreference = commonModulePreference?.find( (preference) => preference?.PreferredSubCatName === 'SportsApp' && preference?.PreferredStatus == 'Y' ); const preferenceshortcutkey = SettingDataSelector?.[0]?.[ 'SettingDtlDetails' ]?.some( (item) => item.SettingIdName.toLowerCase() === 'shortcutkeys' && item.SettingValue === 'Y' ); const [popOverOpen, setPopOverOpen] = useState(false); // const [AppExpDate, setAppExpDate] = useState(0); const [Kioskopen, setKioskopen] = useState(false); const [count, setcount] = useState(0); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [multiple, setMultiple] = useState(false); const BookingBilling = BSComboData?.BookingBilling?.[0]; const DineInAccess = SettingDataSelector?.[0]?.SettingDtlDetails.filter( (i) => i.SettingIdName === 'DineIn' )?.[0]; const VerifyTheProducts = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (item) => item.SettingIdName === 'VerifyProduct' && item?.SettingValue === 'Y' ); const AppName = SessionData?.AppName; const AppId = SessionData?.AppId; const CompId = SessionData?.CompId; const BranchId = SessionData?.BranchId; const UserId = SessionData?.UserId; const UserType = SessionData?.UserType; const BookingStatus = useSelector(GlobalBookingStatus); const CheckBookingStatus = BookingStatus?.find((item) => item.ScreenType === 'Booking') ?.ScreenStatus ?? 'Open'; const [BookingModalOpen, setBookingModalOpen] = useState(false); const currentDateValue = moment().format('YYYY-MM-DD HH:mm:ss'); const animations = ['example1', 'example2', 'example3']; let ss = animations[count]; const [ListOfInvoices, setListOfInvoices] = useState(false); const [ComboDropDown, setComboDropDown] = useState(); useEffect(() => { fetchAmount(); if ( SessionData?.FeatureAddonData?.FeatureDtls?.find( (item) => item?.FeatureAddonName?.toLowerCase() === 'kiosk sales' ) ) { fetchKioskDatas(); } }, [SessionData]); useEffect(() => { if (AppExpDate?.RemainingDays <= 7) { const interval = setInterval(() => { setcount((prevCount) => (prevCount >= 2 ? 0 : prevCount + 1)); }, 22000); return () => clearInterval(interval); } }, [count == 2]); useEffect(() => { Combodata(); if (AppId && CompId && BranchId && UserId) { fetchBookingStatus(); } }, [AppId, CompId, BranchId, UserId]); const OpenListOfInvoices = () => { setListOfInvoices(true); }; const handleInvoiceClose = () => { setListOfInvoices(false); }; const fetchKioskDatas = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, UserId: 0, }; await dispatch(getKioskDatas(data)); }; const fetchAmount = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, UserId: UserId, FromDate: currentDateValue, ToDate: currentDateValue, }; await dispatch(getSalesDetailData(data)).unwrap(); }; const openModalKiosk = () => { setKioskopen(true); }; const closeModalKiosk = () => { setKioskopen(false); }; const handlePopOverOpen = () => { setPopOverOpen(!popOverOpen); }; const handleSupportUser = async () => { let response = await dispatch( putSadminUserExit({ AppId: AppId, CompId: CompId, BranchId: BranchId, UserId: UserId, UpdatedBy: UserId, }) ).unwrap(); if (response?.data?.statusCode == 1) { setMessageData('success'); setMessageType(response?.data?.data); setPopOverOpen(false); const UserId = getSession('UserId'); const sessionId = getSession('SessionId'); await dispatch(checkSession({ UserId, sessionId })).unwrap(); } else { setMessageData('error'); setMessageType(response?.data?.data); } }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const fetchBookingStatus = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, UserId: UserId, }; await dispatch(getBookingStatus(data)); }; const BookingOpenFun = async (status) => { let Postdata = { AppId: AppId, CompId: CompId, BranchId: BranchId, UserId: UserId, ScreenType: 'Booking', ScreenStatus: status, CreatedBy: UserId, Date: new Date(), }; let Postresponse = await dispatch(PutBookingClose(Postdata)).unwrap(); if (Postresponse?.data?.statusCode === 1) { fetchBookingStatus(); } else { } }; const OpenBookingModal = () => { setBookingModalOpen(true); }; const HandleBookingModalClose = () => { setBookingModalOpen(false); }; const Combodata = async () => { let data = { AppId: AppId, CompId: CompId, BranchId: BranchId, ActiveStatus: 'A', }; let Response = await dispatch(Comboget(data)).unwrap(); if (Response?.data?.statusCode == 1) { setComboDropDown(Response?.data?.data); } }; const handleClick = async () => { if (Comboglobal == false) { await dispatch(changeCombosearch(true)); } else { await dispatch(changeCombosearch(false)); } }; const fill = useMemo( () => (Comboglobal ? '#52C41A' : '#1292EE'), [Comboglobal] ); const enableBackground = useMemo( () => (Comboglobal ? '#1292EE' : '#52C41A'), [Comboglobal] ); const basketStyle = useMemo( () => ({ pointerEvents: OrderType === 'Failed' ? 'none' : 'auto', cursor: 'pointer', }), [OrderType] ); const handleClickMemo = useCallback(() => { handleClick(); }, []); return ( }> <> {UserType != 'Super Admin' && UserType != 'Super Admin User' && (AppExpDate?.RemainingDays <= 7 || AppExpDate === 'undefined' || AppExpDate?.PlanType?.toLowerCase() === 'extend') && ( )} {/* Combo Container */}
{/* Multiple search */}
setMultiple(true)} />
{Comboglobal === false && ( )} {Comboglobal === true && (
)}
{/*
*/}
{UserType !== 'Employee' && (

{PricingAppPricingName?.[0]?.PricingName}

{PricingAppPricingName?.[0]?.Type}

{/* {PricingAppPricingName?.[0]?.PricingName + ' / ' + PricingAppPricingName?.[0]?.Type} */}
)} {SessionData?.FeatureAddonData?.FeatureDtls?.find( (item) => item?.FeatureAddonName?.toLowerCase() === 'kiosk sales' ) && !sportsAppPreference && (
0 ? 'none' : 'auto', opacity: OrderStatus > 0 ? 0.5 : 1, }} > {''} openModalKiosk()} style={{ cursor: 'pointer', fontSize: '1.5rem' }} className="iconsize" />
)} {Kioskopen && ( )} {SAdminuserPin?.length > 0 && UserType != 'Super Admin User' && (
)}
{/* LOW STOCK ALERT */}
{' '}
{CheckBookingStatus == 'Open' ? (
{' '} {/* */}
) : (
BookingOpenFun('Open')} >
)} {/* Verify Products */} {VerifyTheProducts && (
)}
{ComboDropDown?.length >= 1 && (
)}
{action ? ( ) : ( // <> {BookingBilling == 'Billing1' && } {BookingBilling == 'Billing2' && } {BookingBilling == 'Billing3' && } {BookingBilling == 'Billing4' && } {BookingBilling == 'Billing5' && } {BookingBilling == 'Billing6' && } {BookingBilling == 'Billing7' && } {BookingBilling == 'Billing8' && } )}
{paymentloader === true && (
 
 
 
 

{' '} Please wait while we process your payment

{PaymentTransactionNumber != null && (

Transaction Number : {PaymentTransactionNumber}

)}
)}
{BookingModalOpen && ( )} {ListOfInvoices && ( )} setMultiple(false)} destroyOnClose={true} children={ <> } /> ); }