import React, { useState, useEffect, useRef, useCallback, useContext, } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import moment from 'moment'; import dayjs from 'dayjs'; import customParseFormat from 'dayjs/plugin/customParseFormat'; import { EditFilled, ArrowRightOutlined } from '@ant-design/icons'; import { Avatar, Flex, Segmented, Badge, Form, DatePicker, Input, Popconfirm, Table, Button, Checkbox, Modal, Space, } from 'antd'; import Search from '../../../../Components/Forms/Search.jsx'; import { Tables } from '../../../../Components/Tables/Table.jsx'; import { RiCloseCircleFill } from 'react-icons/ri'; import { MdHistory } from 'react-icons/md'; import { FiPlus } from 'react-icons/fi'; import { BsClipboardCheckFill } from 'react-icons/bs'; import { MdOutlinePendingActions } from 'react-icons/md'; import BSCustomerSelect from './BSSelectCustomer.jsx'; import BSNavBarAddUser from './BSNavBarAddUser.jsx'; import { InputField } from '../../../../Components/Forms/InputField.jsx'; import TimePickers from '../../../../Components/Forms/TimePickerProduct.jsx'; import Buttons from '../../../../Components/Forms/Buttons.jsx'; import Imageupload from '../../../../Components/Forms/Upload.jsx'; import TextAreaInput from '../../../../Components/Forms/TextArea.jsx'; import WpIcon from '../../../../Images/message.png'; import QrinScreen from '../BookingFunctionality/DynamicScreenQr.jsx'; import { getConfigType, SendPaymentLink, GlobalSelCustId, GlobalSelOption, GlobalpaymentUpiOptionData, changeCustomerID, changeSelectedCustId, changeSelectedOption, changeSummeryTotalAmount, changealldata, changeBookingType, GlobalBookingType, GetPaymentdeviceResponse, PostPaymentdevice, PutBookingPaymentStatusChange, changeCompoPreOrderDtlStatus, changeDropDownStatus, GlobalCommonPaymentOptions, changePaymentloader, GlobalUpiIDprint, PutPendingPaymentList, ChangeSearchFocusPreOrder, PaymentCardGetdetail, GlobalCustId, changePaymentTransactionNumber, getSalesDetailData, PreferenceData, } from '../../../../Features/BookingScreen/BookingData/BookingData.js'; import { PreOrderBookingData, PreOrderGet, PreOrderBookingDataPut, GlobalPreOrderList, GlobalPreOrderAdditem, changePreOrderAdditem, GlobalPreOrderCusName, GlobalPreOrderCusMobNo, GlobalPreOrderDate, GlobalPreOrderAdvance, GlobalPreOrderMessage, GlobalPreOrderAdd1, GlobalPreOrderAdd2, GlobalPreOrderzip, GlobalPreOrderCity, GlobalPreOrderDistrict, GlobalPreOrderState, GlobalPreOrderTime, changePreOrderDate, changepreOrder, changepreOrderList, changePreOrderCusName, changePreOrderCusMob, changePreOrderAdvance, changePreOrderAdd1, changePreOrderAdd2, changePreOrderzip, changePreOrderCity, changePreOrderDistrict, changePreOrderState, changePreOrderTime, GlobalpreOrderOpen, changePreOrderPendingCount, PreOrderBookingDataCancel, } from '../../../../Features/BookingScreen/PreOrder/PreOrder.js'; import { IoEye } from 'react-icons/io5'; import { ChangeTotalAmount, globalExtraTotalAmount, } from '../../../../Features/ExteraCharges/ExtraCharges.js'; import { extractLastNumber, getSession, extractLastNumberOrderId, printDiv, encryptedValuesFun, validateSafeInput, } from '../../../../Services/Others.js'; import { DropDowns } from '../../../../Components/Forms/DropDown.jsx'; import { GlobalSelectedColor, GlobalSelectedFont, SelectedPrintTemplate, } from '../../../../Features/ThemeChange/ThemeChange.js'; import CountUp from 'react-countup'; import { isMobile } from 'react-device-detect'; import { DefaultModal } from '../../../../Components/Modal/DefaultModal.jsx'; import BsBillingCreditCustomer from '../BookingFunctionality/BSBillingCreditCustomer.jsx'; import MobilePrint from '../BookingFunctionality/MobilePrint.jsx'; import { Messages } from '../../../../Components/Notifications/Messages.jsx'; import '../../../../Styles/BookingScreen/Components/UtillComponents/BSNavBarPreOrder.scss'; import { DatePicProd } from '../../../../Components/Forms/DatePickerProduct.jsx'; import { PrintStyleFunction } from '../../../paymentpdfPage/PrintStyleFunction.js'; import { GlobalAddCustomerDetails } from '../../../../Features/BookingScreen/Customer/addCustomer.js'; import SplitPayment from '../BookingFunctionality/SplitPaymentPreorder.jsx'; import PaymentPdfBooking from '../../../paymentpdfPage/PaymentPdfBooking.jsx'; import { getCustomerDisplayWindow } from '../../../../Features/customerDisplayWindow/customerDisplayWindow.js'; import useCountUp from './useCountUp.jsx'; const MainHomeUrl = import.meta.env.ENV_MAIN_BASE_URL; const BSComboNavBarPreOrder = () => { //other Hooks const dispatch = useDispatch(); const splitRef = useRef(); const formRef = useRef(); const ViewformRef = useRef(); const cancelformRef = useRef(); const [Pendingform] = Form.useForm(); const [Itemform] = Form.useForm(); //useSelector const GlobalUpiID = useSelector(GlobalUpiIDprint); const preOrderOpen = useSelector(GlobalpreOrderOpen); const printerTemplateStyle = useSelector(SelectedPrintTemplate); const SelectedCust = useSelector(GlobalSelOption); const SelCustId = useSelector(GlobalSelCustId); const selOption = useSelector(GlobalSelOption); const PreOrderAdditem = useSelector(GlobalPreOrderAdditem); const PreOrderCusName = useSelector(GlobalPreOrderCusName); const PreOrderCusMobNo = useSelector(GlobalPreOrderCusMobNo); const PreOrderDate = useSelector(GlobalPreOrderDate); const PreOrderList = useSelector(GlobalPreOrderList); const PreOrderAdvance = useSelector(GlobalPreOrderAdvance); const PreOrderMessage = useSelector(GlobalPreOrderMessage); const PreOrderAdd1 = useSelector(GlobalPreOrderAdd1); const PreOrderAdd2 = useSelector(GlobalPreOrderAdd2); const PreOrderzip = useSelector(GlobalPreOrderzip); const PreOrderCity = useSelector(GlobalPreOrderCity); const PreOrderDistrict = useSelector(GlobalPreOrderDistrict); const PreOrderState = useSelector(GlobalPreOrderState); const PreOrderTime = useSelector(GlobalPreOrderTime); const preferenceData = useSelector(PreferenceData); const BookingTypeData = useSelector(GlobalBookingType); const GetCustId = useSelector(GlobalCustId); const preferCondition = preferenceData?.[0]?.['SettingDtlDetails']?.filter( (e) => e?.SettingIdName == 'PreOrderPriceChange' )?.[0]?.SettingValue == 'Y'; // other Const dayjs.extend(customParseFormat); const AppId = getSession('AppId'); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const UserId = getSession('UserId'); const FontFamily = useSelector(GlobalSelectedFont); const Color = useSelector(GlobalSelectedColor); const GlobalExtraCharge = useSelector(globalExtraTotalAmount); const EditableContext = React.createContext(null); const PendingEditableContext = React.createContext(null); const useOptions = useSelector(GlobalCommonPaymentOptions); // const AddCustomerDetails = useSelector(GlobalAddCustomerDetails); //useStates const [PendingData, setPendingData] = useState(); const [BookingType, setBookingType] = useState(); const [UpiOpen, setUpiOpen] = useState(false); const [UpiId, setUpiId] = useState(); const [Edit, setEdit] = useState(false); const [qrcode, setqrcode] = useState(false); const [selectedPaymentOption, setselectedPaymentOption] = useState(); const PaymentUpiOptions = useSelector(GlobalpaymentUpiOptionData); const [selectedUPIOption, setselectedUPIOption] = useState(); const [PreOrder, setPreOrder] = useState(false); console.log(PreOrder, 'PreOrderPreOrder'); const [zipCodeData, setZipCodeData] = useState(false); const [SelectedOption, setselectedOption] = useState('Booking'); const [ImageUrl, setImageUrl] = useState(''); const [addDetails, setAddDetails] = useState(false); const [ItemEditdata, setItemEditData] = useState([]); console.log(ItemEditdata, 'ItemEditdata'); const [totalAmount, setTotalAmount] = useState(0); const [balanceAmount, setBalaceAmount] = useState(0); const CustDetails = SelectedCust ? SelectedCust : GetCustId; const [SetAsDefaultCust, setSetAsDefaultCust] = useState(false); const [CusName, setCusName] = useState(); const [MobName, setMobName] = useState(); const [add1, setAdd1] = useState(); const [add2, setAdd2] = useState(); const [zip, setZip] = useState(); const [Index, setIndex] = useState(); const [ShowDetails, setShowDetails] = useState(false); const [TotalTaxAmount, setTotalTaxAmount] = useState(0); const [MessageModel, setMessageModel] = useState(); const [PendingOrderView, setPendingOrderView] = useState([]); const [OldAdvanceAmount, setOldAdvanceAmount] = useState(0); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [ModalProduct, setModalProduct] = useState(false); const [PreOrder_Pending_FromDate, setPreOrder_Pending_FromDate] = useState(); const [PreOrder_Pending_ToDate, setPreOrder_Pending_ToDate] = useState(); const [PreOrder_History_FromDate, setPreOrder_History_FromDate] = useState(); const [PreOrder_History_ToDate, setPreOrder_History_ToDate] = useState(); const [PendingsearchedText, setPendingSearchedText] = useState(''); const [HistorysearchedText, HistorysetSearchedText] = useState(''); const [HistoryData, setHistoryData] = useState(); const [OrderDetail, setOrderDetail] = useState(); const [Status, setStatus] = useState(); const [FullPayment, setFullPayment] = useState(false); const [selectOptionName, setselectOptionName] = useState(); const [pendingCustomerView, setPendingCustomerView] = useState({ Data: null, status: false, }); const [CreditCustomer, setCreditCustomer] = useState({ basic: false, model: false, }); const [HistoryDetailsView, setHistoryDetails] = useState({ Data: null, status: false, }); const [Keys, setKeys] = useState(); const [Buttonicon, setButton] = useState(false); const [Payment_Device, setPayment_Device] = useState(); const [Payment_Gateway, setPayment_Gateway] = useState(); const [PaymentOptions, setPaymentOptions] = useState(); const [GateWayOptions, setGetWayOptions] = useState(); const [selectedGateWayOptions, setSelectedGetWayOptions] = useState(); const [orderId, setorderId] = useState(null); const [failedOrderData, setFailedOrderData] = useState(); const currentDateValue = moment()?.format('YYYY-MM-DD HH:mm:ss'); //split Payment const [splitPayment, setSplitPayment] = useState(false); const [SplitSelPayMode, setSplitSelPayMode] = useState({}); const [PrintOrderDetails, setPrintOrderDetails] = useState([]); const [CancelModal, setCancelModal] = useState(false); const [PreOrderData, setPreOrderData] = useState(); const [PreOrderRefund, setPreOrderRefund] = useState(0); const [CancelPaymentOption, setCancelPaymentOption] = useState(); const gatewayOptions = [ { option: 'Default', value: 'Default' }, { option: 'Payment Device', value: 'PaymentDevice' }, { option: 'Payment Gateway', value: 'PaymentGateway' }, ]; //useCallback const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const containerRef = useRef(null); const ChangeMouseData = async (data) => { await dispatch(changeCompoPreOrderDtlStatus(data)); }; useEffect(() => { OnchangePreOrderIcon(); const handleMouseEnter = async () => await ChangeMouseData(true); const handleMouseLeave = () => ChangeMouseData(false); const divElement = containerRef.current; if (divElement) { divElement.addEventListener('mouseenter', handleMouseEnter); divElement.addEventListener('mouseleave', handleMouseLeave); return () => { divElement.removeEventListener('mouseenter', handleMouseEnter); divElement.removeEventListener('mouseleave', handleMouseLeave); }; } }, []); 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(() => { if (selectedGateWayOptions !== undefined && Buttonicon) { const isCard = selectOptionName === 'Card'; const isUPI = selectOptionName === 'UPI' && selectedGateWayOptions != 'Default'; if (isCard || isUPI) { onFinish(); } } }, [selectedGateWayOptions]); useEffect(() => { async function amoutchange() { let extra = GlobalExtraCharge?.reduce((accumulator, currentObject) => { return accumulator + currentObject.TotalAmt; }, 0); const Totalamount = ItemEditdata?.reduce((acc, item) => { return acc + item.TotalAmt; }, 0); const totalAmount = extra == undefined ? Totalamount : Totalamount + extra; if (PreOrderAdvance > totalAmount) { await dispatch(changePreOrderAdvance(totalAmount)); } const Balance = totalAmount - PreOrderAdvance - OldAdvanceAmount; setTotalAmount(totalAmount); setBalaceAmount(Balance); await dispatch( changeSummeryTotalAmount( formRef?.current?.getFieldsValue()?.AdvanceAmount ) ); } amoutchange(); }, [ItemEditdata]); useEffect(() => { UsePayments(); }, [useOptions, CustDetails]); useEffect(() => { if (PreOrder) { if (SetAsDefaultCust) { formRef?.current?.setFieldsValue({ Name: CustDetails?.CustName, MobileNo: CustDetails?.value || CustDetails?.CustMobile, Address1: CustDetails?.Address1, Address2: CustDetails?.Address2, Zip: CustDetails?.Zip, }); dispatch(changePreOrderCusName(CustDetails?.CustName)); dispatch( changePreOrderCusMob(CustDetails?.value || CustDetails?.CustMobile) ); dispatch(changePreOrderAdd1(CustDetails?.Address1)); dispatch(changePreOrderAdd2(CustDetails?.Address2)); dispatch(changePreOrderzip(CustDetails?.Zip)); if (CustDetails?.Zip?.toString().length === 6) { getPincodeValues(CustDetails?.Zip); } } setFullPayment(false); } }, [SelectedCust, SelectedOption]); useEffect(() => { FetchData(); }, []); useEffect(() => { // Define an async function const handleBookingTypeChange = async () => { if (BookingTypeData !== 'PreOrder') { setPreOrder(false); await dispatch(changepreOrder(false)); } }; // Call the async function inside useEffect handleBookingTypeChange(); }, [BookingTypeData]); useEffect(() => { const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { paymentMethod: selectOptionName, Paymentgateway: false, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }, [selectOptionName]); useEffect(() => { ApiCall(); if (Edit) setEdit(false); if (PreOrder) { if (SetAsDefaultCust) { formRef?.current?.setFieldsValue({ Name: CustDetails?.CustName, MobileNo: CustDetails?.value || CustDetails?.CustMobile, Address1: CustDetails?.Address1, Address2: CustDetails?.Address2, Zip: CustDetails?.Zip, }); dispatch(changePreOrderCusName(CustDetails?.CustName)); dispatch( changePreOrderCusMob(CustDetails?.value || CustDetails?.CustMobile) ); dispatch(changePreOrderAdd1(CustDetails?.Address1)); dispatch(changePreOrderAdd2(CustDetails?.Address2)); dispatch(changePreOrderzip(CustDetails?.Zip)); if (CustDetails?.Zip?.toString().length === 6) { getPincodeValues(CustDetails?.Zip); } } setPreOrder_History_FromDate(null); setPreOrder_Pending_ToDate(null); setPreOrder_Pending_FromDate(null); setPreOrder_History_ToDate(null); } }, [SelectedOption]); useEffect(() => { TotalCalculation(); }, [GlobalExtraCharge]); const OnChangeCancelPaymentOption = async (params) => { setCancelPaymentOption(params); cancelformRef?.current?.setFieldsValue({ CancelPayOptions: params }); }; useEffect(() => { if (Array.isArray(PreOrderList)) { const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { userData: [...PreOrderList], }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } setItemEditData([...PreOrderList]); TotalCalculation(); } }, [PreOrderList]); useEffect(() => { const setFieldsIfNotEmpty = (field, value) => { if (value?.length !== 0) { formRef?.current?.setFieldsValue({ [field]: value }); } }; if (SetAsDefaultCust) { formRef?.current?.setFieldsValue({ Name: CustDetails?.CustName, MobileNo: CustDetails?.value || CustDetails?.CustMobile, Address1: CustDetails?.Address1, Address2: CustDetails?.Address2, Zip: CustDetails?.Zip, }); if (CustDetails?.Zip?.toString().length === 6) { getPincodeValues(CustDetails?.Zip); } } else { formRef?.current?.setFieldsValue({ Name: CusName, MobileNo: MobName, Address1: add1, Address2: add2, Zip: zip, }); if (zip?.toString().length === 6) { getPincodeValues(zip); } } let extra = GlobalExtraCharge?.reduce((accumulator, currentObject) => { return accumulator + currentObject.TotalAmt; }, 0); const Amount = ItemEditdata?.reduce( (accumulator, currentItem) => accumulator + (currentItem?.TotalAmt || 0), 0 ) || 0; const TotalAmount = extra == undefined ? Amount : Amount + extra; const Balance = TotalAmount - PreOrderAdvance - OldAdvanceAmount; setTotalAmount(TotalAmount); setBalaceAmount(Balance); setFieldsIfNotEmpty('AdvanceAmount', PreOrderAdvance); setFieldsIfNotEmpty('Message', PreOrderMessage); setFullPayment(false); }, [PreOrderAdditem]); useEffect(() => { const first = async () => { if (Edit && PreOrderAdditem == 'AddDetails') { await formRef?.current?.setFieldsValue({ MobileNo: Keys?.MobileNo, }); await formRef?.current?.setFieldsValue({ Name: Keys?.Name, }); await setMobName(Keys?.MobileNo); await setCusName(Keys?.Name); await dispatch(changePreOrderCusName(Keys?.Name)); await dispatch(changePreOrderCusMob(Keys?.MobileNo)); await getPincodeValues(Keys?.CustomerDetails[0]?.ZipCode); await dispatch(changePreOrderzip(Keys?.CustomerDetails[0]?.ZipCode)); if (Keys?.OrderPaymentDtls?.[0]?.PaymentTypeName === 'UPI') { await setselectedUPIOption(); await formRef?.current?.setFieldsValue({ UPIOptions: Keys?.OrderPaymentDtls?.[0]?.PaymentType, }); } } }; first(); }, [Edit]); useEffect(() => { splitRef?.current?.setFieldsValue(SplitSelPayMode); }, [splitPayment]); useEffect(() => { if (PrintOrderDetails?.length > 0) { if (isMobile) { MobilePrint(PrintOrderDetails, UpiId, 'Booking', preferenceData); } else { Print(); } } //changeby karthiga }, [PrintOrderDetails]); const fetchingsalesData = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, UserId: UserId, FromDate: currentDateValue, ToDate: currentDateValue, }; await dispatch(getSalesDetailData(data)); }; const UsePayments = () => { if (useOptions?.length > 0) { let AllPaymentOptions = useOptions?.find( (item) => item.FlowName === 'Sales' ); let PaymentDevice = AllPaymentOptions?.OptionDetails.find( (item) => item.OptionName === 'Payment Device' ); let PaymentGateway = AllPaymentOptions?.OptionDetails.find( (item) => item.OptionName === 'Payment Gateway' ); setPayment_Device(PaymentDevice); setPayment_Gateway(PaymentGateway); let object; if (CustDetails === undefined) { object = AllPaymentOptions?.OptionDetails?.find( (item) => item.OptionName === 'Pay at the counter' )?.ModeDetails?.filter((item) => item.ModeName !== 'Credit'); } else { object = AllPaymentOptions?.OptionDetails?.find( (item) => item.OptionName === 'Pay at the counter' )?.ModeDetails; } setPaymentOptions(object); setselectedPaymentOption( object?.find((mode) => mode.ModeName == 'Cash')?.ModeId ); setselectOptionName('Cash'); } }; const cardandUpi = async (e) => { if (Buttonicon) { setStatus('Edit'); } setSelectedGetWayOptions(e); formRef?.current?.setFieldsValue({ GateWayOptions: e }); formRef?.current?.resetFields(['UPIOptions']); setselectedUPIOption(); }; const Hcolumns = [ { title:
SI
, dataIndex: 'OrderId', key: 'OrderId', align: 'center', fixed: 'left', render: (text, object, index) => ( {index + 1} ), }, { title:
O.ID
, dataIndex: 'OrderId', key: 'OrderId', align: 'center', fixed: 'left', filteredValue: [HistorysearchedText], render: (text, record, index) => ( {record.FYStatus === 'Y' ? extractThreeDigitNumber(text) : extractLastNumber(text)} ), onFilter: (value, record) => { return ( String(record.OrderId) ?.toLowerCase() .includes(value?.toLowerCase()) || String(record?.CustomerDetails?.[0]?.CustSuppName) ?.toLowerCase() .includes(value?.toLowerCase()) || String(record?.CustomerDetails?.[0]?.MobileNo) ?.toLowerCase() .includes(value?.toLowerCase()) || String(formatDate(record?.DeliveryDate, record.DeliveryTime)) ?.toLowerCase() .includes(value?.toLowerCase()) || String(record.PaidAmount) ?.toLowerCase() .includes(value?.toLowerCase()) ); }, ellipsis: true, }, { title: (
DATE/TIME
), dataIndex: 'OrderId', key: 'OrderId', align: 'center', render: (_, record) => ( {formatDate(record?.DeliveryDate, record.DeliveryTime)} ), }, { title:
Name
, dataIndex: 'OrderId', key: 'OrderId', render: (_, record) => ( {record?.CustomerDetails?.[0]?.CustSuppName || '-'} ), }, { title:
Mobile
, dataIndex: 'OrderId', key: 'OrderId', align: 'right', render: (_, record) => ( {record?.CustomerDetails?.[0]?.MobileNo || '-'} ), }, { title:
Amount
, dataIndex: 'PaidAmount', key: 'PaidAmount', align: 'right', render: (text, object, index) => ( {text} ), }, { title:
Details
, dataIndex: 'OrderId', align: 'center', render: (_, record) => ( setHistoryDetails({ Data: record, status: true })} /> ), }, ]; const extractThreeDigitNumber = (str) => { const match = str.match(/(\d{3})-/); return match ? match[1] : null; }; const handlerefundvalidator = (_, value) => { const paidAmount = parseFloat(PreOrderData?.PaidAmount ?? 0); const refundAmount = parseFloat(value ?? 0); if (refundAmount > paidAmount) { return Promise.reject('Refund amount cannot exceed advance paid'); } return Promise.resolve(); }; const OnchangeRefund = async (e) => { setPreOrderRefund(e?.target?.value); }; const TotalCalculation = async () => { let totalSum; let totaltax; totalSum = PreOrderList?.reduce((accumulator, card) => { return accumulator + parseFloat(card.TotalAmt || 0); }, 0); totaltax = PreOrderList?.reduce((accumulator, card) => { return accumulator + parseFloat(card.TaxAmt || 0); }, 0); let Totalamount = totaltax ? totalSum + totaltax : totalSum; let extra = GlobalExtraCharge?.reduce((accumulator, currentObject) => { return accumulator + currentObject.TotalAmt; }, 0); let AdvAmount = PreOrderAdvance != null ? parseInt(PreOrderAdvance) : 0 + parseInt(OldAdvanceAmount); let Total = extra == undefined ? Totalamount : Totalamount + extra; let balance = Total - AdvAmount; setBalaceAmount(balance); setTotalAmount(Total?.toFixed(2)); setTotalTaxAmount(totaltax?.toFixed(2)); }; const OnOkView = () => { setShowDetails(false); }; const OnCancelView = () => { setShowDetails(false); }; const ApiCall = async () => { const today = new Date(); const fromDate = today.toISOString().split('T')[0]; if (SelectedOption == 'Pending') { PendingApiCall(fromDate, fromDate); } else if (SelectedOption == 'History') { HistoryApiCall(fromDate, fromDate); } }; const FetchData = async () => { const today = new Date(); const fromDate = today.toISOString().split('T')[0]; BadgePendingApi(); PendingApiCall(); HistoryApiCall(fromDate, fromDate); let Response = await dispatch( getConfigType({ TypeName: 'Booking Type' }) ).unwrap(); if (Response?.data?.statusCode === 1) { setBookingType( Response?.data?.data?.find((item) => item?.ConfigName === 'TakeAway') ?.ConfigId ); } }; const BadgePendingApi = async () => { let Data = { compId: CompId, branchId: BranchId, appId: AppId, deliveryStatus: 'P', }; let PendingResponse = await dispatch(PreOrderGet(Data)).unwrap(); if (PendingResponse?.data?.statusCode === 1) { await dispatch( changePreOrderPendingCount(PendingResponse?.data?.data?.length) ); } }; 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', }; 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 } ) ); setPrintOrderDetails([]); } fetchingsalesData(); }; const OnChangePaymentOption = async (params) => { formRef?.current?.resetFields(['GateWayOptions']); setSelectedGetWayOptions(); formRef?.current?.resetFields(['UPIOptions']); setselectedUPIOption(); let data = PaymentOptions?.filter((e) => e?.ModeId == params)?.[0] ?.ModeName; setCreditCustomer( data == 'Credit' ? { basic: true, model: false } : { basic: false, model: false } ); setqrcode(data == 'UPI' ? true : false); setselectedPaymentOption(params); setselectOptionName(data); formRef?.current?.setFieldsValue({ PaymentOptions: params }); let OptionData; let Device = Payment_Device?.ModeDetails?.some( (item) => item.ModeName === data ); let Gateway; if (data === 'Card') { Gateway = Payment_Gateway?.ModeDetails?.some( (item) => item.ModeName === 'CreditCard' || item.ModeName === 'DebitCard' ); } else { Gateway = Payment_Gateway?.ModeDetails?.some( (item) => item.ModeName === data ); } if (Device === false && Gateway === false) { OptionData = gatewayOptions.filter( (item) => item.value !== 'PaymentDevice' && item.value !== 'PaymentGateway' ); } else if (Device === false) { OptionData = gatewayOptions.filter( (item) => item.value !== 'PaymentDevice' ); } else if (Gateway === false) { OptionData = gatewayOptions.filter( (item) => item.value !== 'PaymentGateway' ); } else { OptionData = gatewayOptions; } if (data === 'Card') { OptionData = OptionData?.filter((item) => item.value !== 'Default'); } if (!useOptions?.[0]?.PaymentDetails?.Payatthecounter?.length > 0) { OptionData = OptionData?.filter((item) => item.value !== 'Default'); } setGetWayOptions(OptionData); }; const OnChangeUPIOption = async (params) => { setselectedUPIOption(params); setUpiId(PaymentUpiOptions?.filter((e) => e?.Mode == params)?.[0]?.UPIId); formRef?.current?.setFieldsValue({ UPIOptions: params }); }; const Pending_onSearch = (value) => { setPendingSearchedText(value); }; const Pending_onSearchChange = (e) => { setPendingSearchedText(e?.target?.value); }; const PendingApiCall = async (Fromdate, Todate) => { let Data = { compId: CompId, branchId: BranchId, appId: AppId, deliveryStatus: 'P', fromDate: Fromdate, toDate: Todate, }; let PendingResponse = await dispatch(PreOrderGet(Data)).unwrap(); if (PendingResponse?.data?.statusCode === 1) { setPendingData(PendingResponse?.data?.data); } else if (PendingResponse?.data?.statusCode === 0) { setPendingData(); } }; const HistoryApiCall = async (Fromdate, Todate) => { let Data = { compId: CompId, branchId: BranchId, appId: AppId, deliveryStatus: 'D', fromDate: Fromdate, toDate: Todate, }; let HistoryResponse = await dispatch(PreOrderGet(Data)).unwrap(); if (HistoryResponse?.data?.statusCode === 1) { setHistoryData(HistoryResponse?.data?.data); } else if (HistoryResponse?.data?.statusCode === 0) { setHistoryData(); } }; const OnchangeAdvance = async (e) => { await dispatch(changePreOrderAdvance(e?.target?.value)); let extra = GlobalExtraCharge?.reduce((accumulator, currentObject) => { return accumulator + currentObject.TotalAmt; }, 0); const Total = PreOrderList?.reduce( (accumulator, currentItem) => accumulator + (currentItem?.TotalAmt || 0), 0 ) || 0; let TotalAmount = extra == undefined ? Total : Total + extra; setTotalAmount(TotalAmount); setBalaceAmount( TotalAmount - formRef?.current?.getFieldsValue()?.AdvanceAmount - OldAdvanceAmount ); await dispatch( changeSummeryTotalAmount( formRef?.current?.getFieldsValue()?.AdvanceAmount ) ); }; const updateImageUrl = async (url) => { setImageUrl(url); let data = [...ItemEditdata]; // Create a shallow copy of the object at the specified index let updatedObject = { ...data[Index], Image: url }; // Update the array with the modified object data[Index] = updatedObject; setItemEditData(data); // Dispatch the updated array // await dispatch(changepreOrderList(data)); }; const NameOnChange = (e) => { setCusName(e?.target?.value); dispatch(changePreOrderCusName(e?.target?.value)); formRef?.current?.setFieldsValue({ Name: e?.target?.value }); }; const MobOnChange = (e) => { setMobName(e?.target?.value); dispatch(changePreOrderCusMob(e?.target?.value)); formRef?.current?.setFieldsValue({ MobileNo: e?.target?.value }); }; const onChangeTime = async (_, timeString) => { if (timeString) { formRef.current?.setFieldsValue({}); const fromTime = moment(timeString, ['h:mm a']).format('HH:mm:ss'); await dispatch(changePreOrderTime(fromTime)); } else { await dispatch(changePreOrderTime(null)); } }; const onChangeDate = async (_, dateString) => { dispatch(changeDropDownStatus(false)); if (dateString) { const Date1 = moment(dateString, ['DD-MM-YYYY']).format( 'YYYY-MM-DDTHH:mm:ss' ); await dispatch(changePreOrderDate(Date1)); } }; const OnChangeMessage = async (e) => { setMessageModel(e?.target?.value); ViewformRef.current?.setFieldsValue({ Message: e?.target?.value }); let data = [...ItemEditdata]; // Create a shallow copy of the object at the specified index let updatedObject = { ...data[Index], Description: e?.target?.value }; // Update the array with the modified object data[Index] = updatedObject; // Dispatch the updated array setItemEditData(data); }; const OnChangeAddress1 = async (e) => { setAdd1(e?.target?.value); await dispatch(changePreOrderAdd1(e?.target?.value)); }; const OnChangeAddress2 = async (e) => { setAdd2(e?.target?.value); await dispatch(changePreOrderAdd2(e?.target?.value)); }; const pinCodeChange = async (e) => { setZip(e?.target?.value); if (e.target.value.length < 6) { setZipCodeData(false); return false; } await getPincodeValues(e?.target?.value); await dispatch(changePreOrderzip(e?.target?.value)); }; const getPincodeValues = async (pinCode) => { let response = ''; await fetch(`https://api.postalpincode.in/pincode/${pinCode}`) .then((res) => res.text()) .then((text) => (response = JSON.parse(text))); if (response[0]['Status'] === 'Success') { setZipCodeData(true); formRef.current?.setFieldsValue({ City: response[0]['PostOffice'][0]['Block'], Dist: response[0]['PostOffice'][0]['District'], State: response[0]['PostOffice'][0]['State'], }); await dispatch(changePreOrderCity(response[0]['PostOffice'][0]['Block'])); await dispatch( changePreOrderDistrict(response[0]['PostOffice'][0]['District']) ); await dispatch( changePreOrderState(response[0]['PostOffice'][0]['State']) ); } else { setZipCodeData(false); } }; const UpiPayment = () => { if ( selectedUPIOption && selectedGateWayOptions == 'Default' && !CreditCustomer?.basic ) { setUpiOpen(true); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { OrderTotalAmount: PreOrderAdvance, paymentMethod: 'UPI', upi: UpiId, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } } else if (CreditCustomer?.basic) { setCreditCustomer({ basic: true, model: true }); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { OrderTotalAmount: PreOrderAdvance, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } } else { setMessageType('error'); setMessageData('Please Select Upi Option'); } }; const removestates = () => { const updatedData = { userData: [...PreOrderList], ExtraCharges: GlobalExtraCharge, customer: selOption != null ? selOption : GetCustId, Paymentgateway: false, }; setFailedOrderData(updatedData); setSplitPayment(true); setSelectedGetWayOptions(); setselectedPaymentOption(); }; const handlesplitpaymentclose = () => { setSplitPayment(false); }; const AddBookingDetails = async (values, Status1) => { const FormValues = formRef?.current?.getFieldsValue(); const DeliveryDate = dayjs(FormValues?.DeliveryDate).format('DD-MM-YYYY'); let data = ItemEditdata.map((item) => ({ OfferValue: item?.OfferValue, OfferAmt: item?.TotalOfferPrice || item?.OfferAmt, OfferType: item?.OfferType, ProdId: item.ProdId, Type: item.Type, OrderQty: item.OrderQty || item.SalesQty, OrderRate: item.OrderRate || item.Rate, TotalAmt: item.TotalAmt, TaxAmt: item.TaxAmt, RefundQty: 0, InwardDtlId: item.InwardDtlId, TaxId: item.TaxId, ProdNameQty: item.ProdName ? `${item.ProdName} ${item.Type != 'C' ? item.Size : '1'} ${item.Type != 'C' ? item.UomName : 'Combo'}` : '', OrderStatus: 'S', OrderType: 'PRE', SinglePc: item.SinglePc, BookingType: BookingType, // Assuming 1 if BookingTypeName exists, otherwise 0 PaymentStatus: 'N', Image: item.Image, Description: item.Description, })); let stocklimitExceeded = false; const NewOrderDetailDelivery = []; if (Status == 'Delivery' || Status1 == 'Delivery') { ItemEditdata.forEach((item) => { const StockDetail = item?.StockDetail; const FoundInwardDtlIdData = StockDetail?.find( (detail) => detail.InwardDtlId === item?.InwardDtlId ); let OrderDtl = { OfferValue: item?.OfferValue, OfferAmt: item?.TotalOfferPrice || item?.OfferAmt, OfferType: item?.OfferType, ProdId: item.ProdId, Type: item.Type, OrderQty: item.OrderQty || item.SalesQty, TotalAmt: item.TotalAmt, TaxAmt: item.TaxAmt, RefundQty: 0, InwardDtlId: item.inwardDtlId, TaxId: item.TaxId, ProdNameQty: item.ProdName ? `${item.ProdName} ${item.Type != 'C' ? item.Size : '1'} ${item.Type != 'C' ? item.UomName : 'Combo'}` : '', OrderStatus: 'S', OrderType: 'PRE', SinglePc: item.SinglePc, BookingType: BookingType, PaymentStatus: 'N', Image: item.Image, Description: item.Description, }; if (item.StockAvailable === 'N') { OrderDtl.InwardDtlId = item?.InwardDtlId; OrderDtl.OrderRate = preferCondition ? StockDetail?.[0]?.SellPrice : item.OrderQty || item.SalesQty; NewOrderDetailDelivery.push(OrderDtl); } else if (item.StockAvailable === 'Y' && StockDetail?.length > 0) { if ( FoundInwardDtlIdData?.BalanceQty >= (item.OrderQty || item.SalesQty) ) { OrderDtl.OrderRate = preferCondition ? FoundInwardDtlIdData.SellPrice : OrderDtl.OrderRate; OrderDtl.InwardDtlId = FoundInwardDtlIdData.InwardDtlId; NewOrderDetailDelivery.push(OrderDtl); } else { const totalAvailableQty = StockDetail.reduce( (total, detail) => total + (detail?.BalanceQty || 0), 0 ); if (totalAvailableQty < Number(item.OrderQty || item.SalesQty)) { setMessageData( `${item?.ProdName + ' ' + item?.Size + ' ' + item?.UomName} Dont have Enough Stock` ); setMessageType('warning'); stocklimitExceeded = true; } else { let accumulatedQty = 0; const targetIndex = StockDetail.findIndex( (detail) => detail.InwardDtlId === item?.InwardDtlId ); const accumulateQty = (startIndex) => { for ( let i = startIndex; i < StockDetail.length && accumulatedQty < Number(item.OrderQty || item.SalesQty); i++ ) { const stockDetail = StockDetail[i]; if (stockDetail?.BalanceQty > 0) { const qtyToAdd = Math.min( stockDetail.BalanceQty, Number(item.OrderQty || item.SalesQty) - accumulatedQty ); NewOrderDetailDelivery.push({ // ...stockDetail, InwardDtlId: stockDetail?.InwardDtlId, OrderRate: preferCondition ? stockDetail?.SellPrice : item.Rate, OrderQty: qtyToAdd, ProdId: item.ProdId, Type: item.Type, TotalAmt: item.TotalAmt, TaxAmt: item.TaxAmt, RefundQty: 0, TaxId: item.TaxId, ProdNameQty: item.ProdName ? `${item.ProdName} ${item.Size} ${item.UomName}` : '', OrderStatus: 'S', OrderType: 'PRE', SinglePc: item.SinglePc, BookingType: BookingType, PaymentStatus: 'N', Image: item.Image, Description: item.Description, }); accumulatedQty += qtyToAdd; } } }; if (targetIndex !== -1) accumulateQty(targetIndex); if (accumulatedQty < item.OrderQty || item.SalesQty) accumulateQty(0); } } } else { alert('fill the Product '); } }); } function changeDateFormat(dateStr) { let dateParts = dateStr.split('-'); return `${dateParts[2]}-${dateParts[1]}-${dateParts[0]}`; } const ModeName = PaymentOptions?.find( (item) => item.ModeId === selectedPaymentOption )?.ModeName; let PaymentType; let PaymentOptionType; if (ModeName === 'Card') { if (selectedGateWayOptions === 'PaymentDevice') { PaymentType = Payment_Device?.ModeDetails.find( (item) => item.ModeName === 'Card' )?.ModeId; PaymentOptionType = 'PD'; } else if (selectedGateWayOptions === 'PaymentGateway') { PaymentType = selectedPaymentOption; PaymentOptionType = 'PG'; } } else if (ModeName === 'UPI') { if (selectedGateWayOptions === 'Default') { PaymentType = selectedPaymentOption; PaymentOptionType = 'PC'; } else if (selectedGateWayOptions === 'PaymentDevice') { PaymentType = Payment_Device?.ModeDetails.find( (item) => item.ModeName === 'UPI' )?.ModeId; PaymentOptionType = 'PD'; } else if (selectedGateWayOptions === 'PaymentGateway') { PaymentType = Payment_Gateway?.ModeDetails.find( (item) => item.ModeName === 'UPI' )?.ModeId; PaymentOptionType = 'PG'; } } else { PaymentType = selectedPaymentOption; PaymentOptionType = 'PC'; } const commonOrderDetails = { CompId: CompId, BranchId: BranchId, AppId: AppId, BookingType: BookingType, ServiceProvider: 0, ActiveStatus: 'A', RefundAmount: 0, AddInfo: 'test', BillAmount: FullPayment ? 0 : totalAmount - TotalTaxAmount, OverallDisc: 0, TaxAmount: FullPayment ? 0 : TotalTaxAmount, VatAmount: 0, NetAmount: FullPayment ? 0 : totalAmount, PaymentType: selectedPaymentOption || null, GivenAmt: 0, BalGiven: 0, BookingMedia: 'DW', ExtraChargeDetails: GlobalExtraCharge, Type: 'P', Debit: 0, Credit: PreOrderAdvance, DeliveryDate: changeDateFormat(DeliveryDate), DeliveryTime: PreOrderTime, Address1: FormValues?.Address1, Address2: FormValues?.Address2, City: FormValues?.City, Dist: FormValues?.Dist, State: FormValues?.State, Zip: FormValues?.Zip, AdvanceAmount: FullPayment ? 0 : FormValues?.AdvanceAmount, MobileNo: PreOrderCusMobNo, Name: PreOrderCusName, DefaultStatus: SetAsDefaultCust ? 'Y' : 'N', SalesPaymentType: 'normal', PaymentStatus: 'P', PaymentDetail: FullPayment ? [] : !splitPayment ? [ { PaymentType: PaymentType || null, Amount: FormValues?.AdvanceAmount, PaymentOptionType: PaymentOptionType || null, ModeOfPayment: selectedGateWayOptions === 'Default' ? useOptions?.[0]?.PaymentDetails?.Payatthecounter?.find( (upipay) => upipay?.UPIId === UpiId )?.UPIDetailId : null, AccountDtl: ModeName === 'UPI' && selectedGateWayOptions === 'Default' ? useOptions?.[0]?.PaymentDetails?.Payatthecounter?.find( (upipay) => upipay?.UPIId === UpiId ) : (ModeName === 'UPI' && PaymentOptionType === 'PD') || (ModeName === 'Card' && PaymentOptionType === 'PD') ? useOptions?.[0]?.PaymentDetails?.PaymentDevice : (ModeName === 'UPI' && PaymentOptionType === 'PG') || (ModeName === 'Card' && PaymentOptionType === 'PG') ? useOptions?.[0]?.PaymentDetails?.PaymentGateway : [], PaymentStatus: ModeName?.toLowerCase() === 'card' || (ModeName?.toLowerCase() === 'upi' && selectedGateWayOptions != 'Default') ? 'P' : 'S', Debit: 0, Credit: ModeName?.toLowerCase() === 'credit' ? FormValues?.AdvanceAmount : 0, }, ] : values, }; if (Buttonicon) { if ( Status == 'Delivery' || (Status1 == 'Delivery' && !stocklimitExceeded) ) { const Put = { ...commonOrderDetails, OrderId: OrderDetail?.OrderId, OrderType: OrderDetail?.OrderType, UpdatedBy: UserId, CustSuppId: CustDetails?.CustId, Reference: 'test', OrderDtlDetails: data, NewOrderDtlDetails: NewOrderDetailDelivery, OrderStatus: 'S', DeliveryStatus: 'D', PaymentStatus: (ModeName?.toLowerCase() === 'card' || ModeName?.toLowerCase() === 'upi') && selectedGateWayOptions !== 'Default' ? 'P' : 'S', }; let Response = await dispatch(PreOrderBookingDataPut(Put)).unwrap(); if (Response?.data?.statusCode === 1) { // if (!FullPayment) { let fullpayment; let data = Response?.data?.PaymentOrderDtl?.filter( (e) => e?.PaymentStatus == 'S' )?.reduce((total, item) => { return total + item.Amount; }, 0); if (Response?.data?.OrderDetails?.[0]?.NetAmount === data) { fullpayment = true; } else { fullpayment = false; } if (!fullpayment) { if ( (ModeName === 'Card' || ModeName === 'UPI') && selectedGateWayOptions !== 'Default' ) { await PaymentDiviceFlow( Response?.data, selectedGateWayOptions, ModeName, PreOrderCusMobNo, 'Delivery' ); } if ( ModeName == 'Cash' || ModeName == 'Credit' || selectedGateWayOptions == 'Default' ) { successFunction(Response); } } else { successFunction(Response); setFullPayment(false); } } else { setMessageType('error'); setMessageData(Response?.data?.response); } } if (Status == 'Edit' || Status1 == 'Edit') { const Put = { ...commonOrderDetails, OrderId: OrderDetail?.OrderId, OrderType: OrderDetail?.OrderType, UpdatedBy: UserId, CustSuppId: CustDetails?.CustId, Reference: 'test', OrderDtlDetails: data, NewOrderDtlDetails: NewOrderDetailDelivery, OrderStatus: 'P', DeliveryStatus: 'P', PaymentStatus: ModeName?.toLowerCase() === 'card' || ModeName?.toLowerCase() === 'upi' ? 'P' : 'P', }; let Response = await dispatch(PreOrderBookingDataPut(Put)).unwrap(); if (Response?.data?.statusCode === 1) { if (splitPayment) { return Response; } else { if (!FullPayment) { if ( (ModeName === 'Card' || ModeName === 'UPI') && selectedGateWayOptions !== 'Default' ) { await PaymentDiviceFlow( Response?.data, selectedGateWayOptions, ModeName, PreOrderCusMobNo ); } if ( ModeName == 'Cash' || ModeName == 'Credit' || selectedGateWayOptions == 'Default' ) { successFunction(); } } else { successFunction(); setFullPayment(false); } } } else { setMessageType('error'); setMessageData(Response?.data?.response); } } // Handle response... } else { const POST = { ...commonOrderDetails, CreatedBy: UserId, OrderType: 'PRE', CustSuppId: CustDetails?.CustId, Reference: 'test', OrderDtlDetails: PreOrderList?.map((item) => ({ OfferValue: item?.OfferValue, OfferAmt: item?.TotalOfferPrice || item?.OfferAmt, OfferType: item?.OfferType, ProdId: item.ProdId, Type: item.Type, OrderQty: item.OrderQty, OrderRate: item.OrderRate, TotalAmt: item.TotalAmt, TaxAmt: item.TaxAmt, RefundQty: 0, InwardDtlId: item.InwardDtlId, TaxId: item.TaxId, ProdNameQty: item.ProdName ? `${item.ProdName} ${item.Type != 'C' ? item.Size : '1'} ${item.Type != 'C' ? item.UomName : 'Combo'}` : '', OrderStatus: 'S', OrderType: 'PRE', SinglePc: item.SinglePc, BookingType: BookingType, Image: item.Image, Description: item.Description, })), OrderStatus: 'O', DeliveryStatus: 'P', }; let Response = await dispatch(PreOrderBookingData(POST)).unwrap(); if (Response?.data?.statusCode === 1) { if (splitPayment) { return Response; } else { if ( (ModeName === 'Card' || ModeName === 'UPI') && selectedGateWayOptions !== 'Default' ) { await PaymentDiviceFlow( Response?.data, selectedGateWayOptions, ModeName, PreOrderCusMobNo ); } if ( ModeName == 'Cash' || ModeName == 'Credit' || selectedGateWayOptions == 'Default' ) { successFunction(); } } } else { setMessageType('error'); setMessageData(Response?.data?.response); } } }; const successFunction = async (Response) => { setMessageType('success'); setMessageData('Order Added Sccessfully'); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { let updatedRemovedData; if (PreOrderAdvance == 0) { updatedRemovedData = { userData: [], ExtraCharges: [], Paymentgateway: false, paymentMethod: 'Cash', type: 'remove', keyValue: 'customer', }; } else { updatedRemovedData = { userData: [], ExtraCharges: [], Paymentgateway: false, paymentMethod: 'Cash', upioption1: 'okk', type: 'remove', keyValue: 'customer', }; } customerDisplayWindow.postMessage(updatedRemovedData, '*'); const updatedRemovedDataNew = { type: 'remove', keyValue: 'OrderTotalAmount', }; customerDisplayWindow.postMessage(updatedRemovedDataNew, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } setOldAdvanceAmount(0); setBalaceAmount(0); setButton(false); setStatus(); await formRef?.current?.resetFields(); await dispatch(changepreOrderList(null)); await dispatch(changepreOrder(true)); await dispatch(changePreOrderCusName(null)); await dispatch(changePreOrderCusMob(null)); await dispatch(changePreOrderAdd1(null)); await dispatch(changePreOrderAdd2(null)); await dispatch(changePreOrderAdvance(null)); await dispatch(changePreOrderzip(null)); await dispatch(changePreOrderCity(null)); await dispatch(changePreOrderDistrict(null)); await dispatch(changePreOrderState(null)); await dispatch(changePreOrderAdditem('AddDetails')); await dispatch(changeCustomerID(null)); await dispatch(changeSelectedCustId(null)); await dispatch(changeSelectedOption(null)); setItemEditData([]); setselectedOption('Booking'); setZipCodeData(false); setSetAsDefaultCust(false); setCusName(); setMobName(); setTotalAmount(); setBalaceAmount(); setAdd1(); setAdd2(); setZip(); Response ? setPrintOrderDetails([Response?.data]) : ''; setImageUrl(''); cancelEdit(); BadgePendingApi(); PendingApiCall(); const today = new Date(); const fromDate = today.toISOString().split('T')[0]; HistoryApiCall(fromDate, fromDate); await dispatch(ChangeTotalAmount([])); setGetWayOptions(); setSelectedGetWayOptions(); setselectedUPIOption(); setselectedPaymentOption(); fetchingsalesData(); /// }; const PaymentDiviceFlow = async (params, type, ModeName, MobNo) => { await dispatch(changePaymentloader(true)); let Paymentdevicefilter = params?.PaymentOrderDtl?.filter( (item) => item.PaymentOptionType === 'PD' && item.PaymentStatus === 'P' ); let PaymentGatewayfilter = params?.PaymentOrderDtl?.filter( (item) => item.PaymentOptionType === 'PG' && item.PaymentStatus === 'P' ); if (type === 'PaymentDevice') { 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, response?.data?.bookingpaymentupdate?.[0]?.FYStatus ) : '') ); dispatch(changePaymentloader(false)); let getpaymentgatewaydetail = await dispatch( PaymentCardGetdetail(bookingpaymentupdate?.data?.OrderId) ).unwrap(); let data = getpaymentgatewaydetail?.data?.data?.[0]?.OrderPaymentDtls.reduce( (total, item) => { return total + item.Amount; }, 0 ); if (totalAmount == data && Buttonicon) { setFullPayment(true); await dispatch(changePreOrderAdvance(0)); } else { successFunction(); } } 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 console.error('Transaction not approved within 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}` ); dispatch(changePaymentloader(false)); let AllPaymentOptions = useOptions?.find( (item) => item.FlowName === 'Sales' ); let object = AllPaymentOptions?.OptionDetails?.find( (item) => item.OptionName === 'Pay at the counter' )?.ModeDetails; setselectedPaymentOption( object?.find((mode) => mode.ModeName == 'Cash')?.ModeId ); setselectOptionName('Cash'); } 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); await dispatch(changePaymentloader(false)); let AllPaymentOptions = useOptions?.find( (item) => item.FlowName === 'Sales' ); let object = AllPaymentOptions?.OptionDetails?.find( (item) => item.OptionName === 'Pay at the counter' )?.ModeDetails; setselectedPaymentOption( object?.find((mode) => mode.ModeName == 'Cash')?.ModeId ); setselectOptionName('Cash'); } } } else if (type === 'PaymentGateway') { const checkPaymentStatus = async () => { const intervalId = setInterval(async () => { try { let getpaymentgatewaydetail = await dispatch( PaymentCardGetdetail(PaymentGatewayfilter?.[0]?.OrderId) ).unwrap(); if (getpaymentgatewaydetail?.data?.statusCode === 1) { let paymentdataget = getpaymentgatewaydetail?.data?.data?.[0]?.OrderPaymentDtls?.find( (item) => item?.PaymentOrderId === PaymentGatewayfilter?.[0]?.PaymentOrderId )?.PaymentStatus; if (paymentdataget === 'S') { setMessageType('success'); setMessageData('Payment Success'); await dispatch(changePaymentloader(false)); clearInterval(intervalId); // Stop the loop when payment is successful let data = getpaymentgatewaydetail?.data?.data?.[0]?.OrderPaymentDtls.reduce( (total, item) => { return total + item.Amount; }, 0 ); if (totalAmount == data && Buttonicon) { setFullPayment(true); await dispatch(changePreOrderAdvance(0)); } else { successFunction(); } } else if (paymentdataget === 'F') { setMessageType('error'); setMessageData('Payment Failed'); await dispatch(changePaymentloader(false)); let AllPaymentOptions = useOptions?.find( (item) => item.FlowName === 'Sales' ); let object = AllPaymentOptions?.OptionDetails?.find( (item) => item.OptionName === 'Pay at the counter' )?.ModeDetails; setselectedPaymentOption( object?.find((mode) => mode.ModeName == 'Cash')?.ModeId ); setselectOptionName('Cash'); clearInterval(intervalId); // Stop the loop when payment fails const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { userData: [...PreOrderList], ExtraCharges: GlobalExtraCharge, customer: selOption != null ? selOption : GetCustId, paymentMethod: selectOptionName, Paymentgateway: false, }; 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 GateWay = PaymentGatewayfilter?.[0]; const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { OrderBookingId: GateWay?.OrderId, Paymentgateway: true, OrderPaymentId: GateWay?.PaymentOrderId, OrderTotalAmount: GateWay?.Amount, paymentMethod: ModeName, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } } }; const cancelEdit = async () => { setEdit(false); setButton(false); setselectedPaymentOption(); setOldAdvanceAmount(0); setBalaceAmount(0); await formRef?.current?.resetFields(); await dispatch(changepreOrderList(null)); await dispatch(changepreOrder(true)); await dispatch(changePreOrderCusName(null)); await dispatch(changePreOrderCusMob(null)); await dispatch(changePreOrderDate()); await dispatch(changePreOrderTime(null)); await dispatch(changePreOrderAdd1(null)); await dispatch(changePreOrderAdd2(null)); await dispatch(changePreOrderAdvance(null)); await dispatch(changePreOrderzip(null)); await dispatch(changePreOrderCity(null)); await dispatch(changePreOrderDistrict(null)); await dispatch(changePreOrderState(null)); await dispatch(changePreOrderAdditem('AddDetails')); await dispatch(changeCustomerID(null)); await dispatch(changeSelectedCustId(null)); await dispatch(changeSelectedOption(null)); setItemEditData([]); setselectedOption('Booking'); setZipCodeData(false); setSetAsDefaultCust(false); setCusName(); setMobName(); setTotalAmount(); setBalaceAmount(); setAdd1(); setAdd2(); setZip(); setImageUrl(''); setGetWayOptions(); setSelectedGetWayOptions(); const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedRemovedData = { userData: [], ExtraCharges: [], paymentMethod: 'Cash', type: 'remove', keyValue: 'customer', }; customerDisplayWindow.postMessage(updatedRemovedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }; const onFinish = async () => { let formattedPreOrderDate = null; if (PreOrderDate !== null && PreOrderDate !== undefined) { const day = String(PreOrderDate.$D).padStart(2, '0'); const month = String(PreOrderDate.$M + 1).padStart(2, '0'); // Month is zero-based const year = PreOrderDate.$y; const dateString = `${day}-${month}-${year}`; formattedPreOrderDate = moment(dateString, 'DD-MM-YYYY').format( 'DD-MM-YYYY' ); } if (formattedPreOrderDate === null && PreOrderTime === null) { setMessageType('error'); setMessageData('Select Date And Time'); } else if (formattedPreOrderDate === null) { setMessageType('error'); setMessageData('Select Date'); } else if (PreOrderTime === null) { setMessageType('error'); setMessageData('Select Time'); } else if (SelCustId === null) { setMessageType('error'); setMessageData('Select Customer'); } else if (splitPayment) { Buttonicon ? setStatus('Edit') : setStatus('Delivery'); } else if ( PreOrderAdvance > 0 && PreOrderAdvance != null && (selectedPaymentOption === ' ' || selectedPaymentOption === undefined || selectedPaymentOption === null) ) { setMessageType('error'); setMessageData('Select Payment Option'); } else { if ( PaymentOptions?.find((item) => item.ModeId === selectedPaymentOption) ?.ModeName === 'Cash' || PaymentOptions?.find((item) => item.ModeId === selectedPaymentOption) ?.ModeName === 'Credit' ) { FurderFlow(); } else if ( PaymentOptions?.find((item) => item.ModeId === selectedPaymentOption) ?.ModeName === 'Card' ) { if (GateWayOptions?.length > 1) { if (selectedGateWayOptions != undefined) { FurderFlow(); } else { setMessageType('error'); setMessageData('Select GateWay Option'); } } else { FurderFlow(); } } else if ( PaymentOptions?.find((item) => item.ModeId === selectedPaymentOption) ?.ModeName === 'UPI' ) { if ( selectedGateWayOptions === 'Default' || GateWayOptions?.length === 1 ) { if (selectedGateWayOptions != undefined) { if (selectedUPIOption != null) { FurderFlow(); } else { setMessageType('error'); setMessageData('Select UPI Option'); } } else { setMessageType('error'); setMessageData('Select GateWay Option'); } } else { FurderFlow(); } } } }; const FurderFlow = () => { if ( (selectedUPIOption && selectedGateWayOptions == 'Default' && qrcode) || CreditCustomer?.basic ) { UpiPayment(); } else { AddBookingDetails(); } }; const onChange_Pending_FromDate = async (_, dateString) => { if (dateString) { const formattedDateTime = moment( dateString, 'DD-MM-YYYY HH:mm:ss' ).format('DD-MM-YYYY HH:mm:ss'); setPreOrder_Pending_FromDate(formattedDateTime); const FromDateApi = moment(dateString, 'DD-MM-YYYY HH:mm:ss').format( 'YYYY-MM-DD' ); const ToDateApi = moment( PreOrder_Pending_ToDate, 'DD-MM-YYYY HH:mm:ss' ).format('YYYY-MM-DD'); if (PreOrder_Pending_ToDate != undefined) { PendingApiCall(FromDateApi, ToDateApi); } } else { setPreOrder_Pending_FromDate(undefined); PendingApiCall(); } }; const onChange_Pending_ToDate = async (_, dateString) => { dispatch(changeDropDownStatus(false)); if (dateString) { const formattedDateTime = moment( dateString, 'DD-MM-YYYY HH:mm:ss' ).format('DD-MM-YYYY HH:mm:ss'); setPreOrder_Pending_ToDate(formattedDateTime); const ToDateApi = moment(dateString, 'DD-MM-YYYY HH:mm:ss').format( 'YYYY-MM-DD' ); const FromDateApi = moment( PreOrder_Pending_FromDate, 'DD-MM-YYYY HH:mm:ss' ).format('YYYY-MM-DD'); if (PreOrder_Pending_FromDate != undefined) { PendingApiCall(FromDateApi, ToDateApi); } } else { setPreOrder_Pending_ToDate(undefined); PendingApiCall(); } }; const onChangeDate_History_FromDate = async (_, dateString) => { if (dateString) { const formattedDateTime = moment( dateString, 'DD-MM-YYYY HH:mm:ss' ).format('DD-MM-YYYY HH:mm:ss'); setPreOrder_History_FromDate(formattedDateTime); const FromDateApi = moment(dateString, 'DD-MM-YYYY HH:mm:ss').format( 'YYYY-MM-DD' ); const ToDateApi = moment( PreOrder_History_ToDate, 'DD-MM-YYYY HH:mm:ss' ).format('YYYY-MM-DD'); if (PreOrder_History_ToDate != undefined) { HistoryApiCall(FromDateApi, ToDateApi); } } else { setPreOrder_History_FromDate(undefined); HistoryApiCall(); } }; const onChangeDate_History_ToDate = async (_, dateString) => { if (dateString) { const formattedDateTime = moment( dateString, 'DD-MM-YYYY HH:mm:ss' ).format('DD-MM-YYYY HH:mm:ss'); setPreOrder_History_ToDate(formattedDateTime); const ToDateApi = moment(dateString, 'DD-MM-YYYY HH:mm:ss').format( 'YYYY-MM-DD' ); const FromDateApi = moment( PreOrder_History_FromDate, 'DD-MM-YYYY HH:mm:ss' ).format('YYYY-MM-DD'); if (PreOrder_History_FromDate != undefined) { HistoryApiCall(FromDateApi, ToDateApi); } } else { setPreOrder_History_ToDate(undefined); HistoryApiCall(); } }; const OnchangePreOrderIcon = async () => { const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedData = { userData: [], ExtraCharges: [], type: 'remove', keyValue: 'customer', paymentMethod: null, }; customerDisplayWindow.postMessage(updatedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } await dispatch(changeBookingType('PreOrder')); await dispatch(changePreOrderAdditem('AddItems')); setPreOrder(true); setZipCodeData(false); setSetAsDefaultCust(false); formRef.current?.resetFields(); await dispatch(changepreOrderList(null)); await dispatch(changepreOrder(true)); await dispatch(changePreOrderCusName(null)); await dispatch(changePreOrderCusMob(null)); await dispatch(changePreOrderDate(null)); await dispatch(changePreOrderAdd1(null)); await dispatch(changePreOrderAdd2(null)); await dispatch(changePreOrderAdvance(null)); await dispatch(changePreOrderzip(null)); await dispatch(changePreOrderCity(null)); await dispatch(changePreOrderDistrict(null)); await dispatch(changePreOrderState(null)); await dispatch(changePreOrderTime(null)); setCusName(); setMobName(); setTotalAmount(); setBalaceAmount(); setAdd1(); setAdd2(); setZip(); // } await dispatch(changeCustomerID(null)); await dispatch(changeSelectedCustId(null)); await dispatch(changeSelectedOption(null)); await dispatch(changealldata(false)); setselectedOption('Booking'); setItemEditData(); }; const productModalCancel = () => { setModalProduct(!ModalProduct); setPendingOrderView(); }; const SelectDefaultCaustmer = async (e) => { setSetAsDefaultCust(e.target.checked); const setZipCodeAddress = async () => { setZipCodeData(true); formRef.current?.setFieldsValue({ City: CustDetails?.City, Dist: CustDetails?.Dist, State: CustDetails?.State, }); await dispatch(changePreOrderCity(CustDetails?.City)); await dispatch(changePreOrderDistrict(CustDetails?.Dist)); await dispatch(changePreOrderState(CustDetails?.State)); }; if (e.target.checked && CustDetails != undefined) { await dispatch(changePreOrderCusName(CustDetails?.CustName)); await dispatch( changePreOrderCusMob(CustDetails?.value || CustDetails?.CustMobile) ); await dispatch(changePreOrderAdd1(CustDetails?.Address1)); await dispatch(changePreOrderAdd2(CustDetails?.Address2)); await dispatch(changePreOrderzip(CustDetails?.Zip)); formRef?.current?.setFieldsValue({ Name: CustDetails?.CustName, MobileNo: CustDetails?.value || CustDetails?.CustMobile, Address1: CustDetails?.Address1, Address2: CustDetails?.Address2, Zip: CustDetails?.Zip, }); if (CustDetails?.Zip?.toString().length === 6) { setZipCodeAddress(); } } else { setZipCodeData(false); await dispatch(changePreOrderCusName(null)); await dispatch(changePreOrderCusMob(null)); await dispatch(changePreOrderAdd1(null)); await dispatch(changePreOrderAdd2(null)); await dispatch(changePreOrderzip(null)); await dispatch(changePreOrderCity(null)); await dispatch(changePreOrderDistrict(null)); await dispatch(changePreOrderState(null)); formRef?.current?.setFieldsValue({ Name: '', MobileNo: '', Address1: '', Address2: '', Zip: '', City: '', Dist: '', State: '', }); } }; const EditableRow = ({ index, ...props }) => { return (
); }; const EditableCell = ({ title, editable, children, dataIndex, record, handleSave, ...restProps }) => { const [editing, setEditing] = useState(false); const inputRef = useRef(null); const form = useContext(EditableContext); useEffect(() => { if (editing) { inputRef?.current?.focus(); } }, [editing]); const toggleEdit = () => { setEditing(!editing); form.setFieldsValue({ [dataIndex]: record[dataIndex], }); }; const save = async () => { try { const values = await form.validateFields(); toggleEdit(); handleSave({ ...record, ...values, }); } catch (errInfo) { console.log('Save failed:', errInfo); } }; let childNode = children; if (editable) { childNode = editing ? ( ) : (
{children}
); } return {childNode}; }; const components = { body: { row: EditableRow, cell: EditableCell, }, }; const handleDelete = async (key) => { const newData1 = PreOrderList?.filter( (item) => !( item.SinglePc === key?.SinglePc && item.InwardDtlId === key?.InwardDtlId ) ); await dispatch(changepreOrderList(newData1)); }; const Icolumns = [ { title: 'SI', key: 'ProdName', align: 'center', render: (text, object, index) => ( {index + 1} ), }, { title: 'PRODUCT', dataIndex: 'ProdName', key: 'ProdName', }, { title: 'QTY', dataIndex: 'OrderQty', key: 'OrderQty', width: '100px', editable: true, render: (_, record, index) => ( <>
{record?.OrderQty || record?.SalesQty}
), }, { title: 'UOM', dataIndex: 'UomName', key: 'UomName', }, { title: 'AMT', dataIndex: 'MRP', key: 'MRP', align: 'right', render: (_, record, index) => ( <>
{record?.OrderRate || record?.MRP}
), }, { title: '%', dataIndex: 'OfferPrice', key: 'OfferPrice', align: 'right', render: (_, record, index) => ( <>
{record?.TotalOfferPrice || record?.OfferAmt ? record?.TotalOfferPrice || record?.OfferAmt : '-'}{' '}
), }, { title: 'TOTAL', dataIndex: 'TotalAmt', key: 'TotalAmt', align: 'right', }, { title: 'Details', dataIndex: 'Details', key: 'Details', width: '50px', render: (_, record, index) => ( <>
ShowDetailFn(record?.Image, record?.Description, index) } > {ItemEditdata.length >= 1 && ( handleDelete(record)} > )}
), }, ]; const ShowDetailFn = (img, mess, index) => { setShowDetails(!ShowDetails); setImageUrl(img); setIndex(index); setMessageModel(mess); ViewformRef.current?.setFieldsValue({ Message: mess }); }; const columns = Icolumns.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record) => ({ record, editable: col.editable, dataIndex: col.dataIndex, title: col.title, handleSave, }), }; }); const handleSave = async (row) => { let off = row?.Type != 'P' ? row.OfferValue : (row?.OrderRate * row?.OfferValue) / 100; const newData = [...ItemEditdata]; const index = newData.findIndex((item) => row.ProdId === item.ProdId); const item = newData[index]; const UpdatedData = { ProdName: row.ProdName, OrderQty: row.OrderQty, UomName: row.UomName, Amount: row.Amount, TotalAmt: row?.Type != 'P' ? (row.OrderRate || row.MRP) * row.OrderQty - row.OrderQty * off : (row.OrderRate || row.MRP) * row.OrderQty, TotalOfferPrice: row?.Type != 'P' ? row.OrderQty * off : '-', }; newData.splice(index, 1, { ...item, ...UpdatedData, }); await dispatch(changepreOrderList(newData)); }; const handleEdit = async (key) => { setorderId(key?.OrderId); await dispatch(changepreOrderList(key?.productDetails)); setKeys(key); await dispatch(changePreOrderAdditem('AddDetails')); setEdit(true); await setCusName(key?.Name); setButton(true); await dispatch(ChangeTotalAmount(key?.ExtraChargeDetails)); setSetAsDefaultCust(key?.DefaultStatus == 'Y' ? true : false); let data = key?.CustomerDetails?.[0]; let data1 = { Address1: data?.Address1, Address2: data?.Address2, City: '', CustId: key?.CustSuppId, CustName: data?.CustSuppName, Dist: '', State: '', Zip: data?.ZipCode, label: data?.CustSuppName || data?.MobileNo, value: data?.MobileNo, }; const fromTime = moment(key?.DeliveryTime, ['h:mm a']).format('HH:mm:ss'); setOldAdvanceAmount(key?.PaidAmount); setselectedOption('Booking'); setOrderDetail({ OrderId: key?.OrderId, OrderType: key?.OrderType }); await dispatch(changeSelectedOption(data1)); await dispatch(changePreOrderTime(fromTime)); await dispatch(changePreOrderDate(key?.DeliveryDate)); await dispatch(changeSelectedCustId(key?.CustSuppId)); let AllPaymentOptions = useOptions?.find( (item) => item.FlowName === 'Sales' ); let object = AllPaymentOptions?.OptionDetails?.find( (item) => item.OptionName === 'Pay at the counter' )?.ModeDetails; setselectedPaymentOption( object?.find((mode) => mode.ModeName == 'Cash')?.ModeId ); setselectOptionName('Cash'); }; const PendingEditableRow = ({ index, ...props }) => { return (
); }; const PendingEditableCell = ({ title, editable, children, dataIndex, record, handleSave, ...restProps }) => { const [editing, setEditing] = useState(false); const inputRef = useRef(null); const form = useContext(PendingEditableContext); useEffect(() => { if (editing) { inputRef?.current?.focus(); } }, [editing]); const toggleEdit = () => { setEditing(!editing); form.setFieldsValue({ [dataIndex]: record[dataIndex], }); }; const save = async () => { try { const values = await form.validateFields(); toggleEdit(); handleSave({ ...record, ...values, }); } catch (errInfo) { console.log('Save failed:', errInfo); } }; let childNode = children; if (editable) { childNode = editing ? ( ) : (
{children}
); } return {childNode}; }; const Pendingcomponents = { body: { row: PendingEditableRow, cell: PendingEditableCell, }, }; const handlePreOrderDelete = async (params) => { if (params?.PaidAmount > 0) { setCancelModal(true); setPreOrderData(params); } else { PreOrderCancel(params); } }; const PreOrderCancel = async (params) => { const CancelDat = { AppId: AppId, CompId: CompId, BranchId: BranchId, OrderId: params?.OrderId, ...(params?.PaidAmount > 0 && { OrderPaymentDtl: [ { PaymentType: cancelformRef?.current?.getFieldsValue()?.CancelPayOptions, Amount: cancelformRef?.current?.getFieldsValue()?.RefundAmount || 0, PaymentStatus: 'S', }, ], }), CreatedBy: UserId, }; let DeleteResponse = await dispatch(PreOrderBookingDataCancel(CancelDat)); if (DeleteResponse?.payload?.data?.statusCode === 1) { setMessageType('success'); setMessageData('OrderStatus Deleted Successfully'); PendingApiCall(); cancelformRef?.current?.resetFields(); setCancelModal(false); setPreOrderData(); setCancelPaymentOption(null); setPreOrderRefund(null); } else { setMessageType('error'); setMessageData(DeleteResponse?.payload?.data?.response); } }; const History_onSearch = (value) => { HistorysetSearchedText(value); }; const History_onSearchChange = (e) => { HistorysetSearchedText(e?.target?.value); }; const formatDate = (paramdate, time) => { const date = new Date(paramdate); if (isNaN(date.getTime())) { return 'Invalid Date'; } const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); // Months are zero-indexed const year = date.getFullYear(); return `${day}-${month}-${year} ${time}`; }; const Pcolumns = [ { title:
SI
, dataIndex: 'OrderId', key: 'OrderId', align: 'center', fixed: 'left', render: (text, object, index) => ( {index + 1} ), }, { title:
O.ID
, dataIndex: 'OrderId', key: 'OrderId', align: 'center', fixed: 'left', filteredValue: [PendingsearchedText], render: (text, record, index) => ( {record.FYStatus === 'Y' ? extractThreeDigitNumber(text) : extractLastNumber(text)} ), onFilter: (value, record) => { return ( String(record.OrderId).toLowerCase().includes(value.toLowerCase()) || String(record.DeliveryDate) .toLowerCase() .includes(value.toLowerCase()) || String(record.DeliveryTime) .toLowerCase() .includes(value.toLowerCase()) || String(formatDate(record?.DeliveryDate, record.DeliveryTime)) .toLowerCase() .includes(value.toLowerCase()) ); }, ellipsis: true, }, { title:
DATE/TIME
, dataIndex: 'OrderId', key: 'ProdNameQty', align: 'center', render: (_, record) => ( {formatDate(record?.DeliveryDate, record.DeliveryTime)} ), }, { title:
Customer
, dataIndex: 'OrderId', align: 'center', render: (_, record) => ( setPendingCustomerView({ Data: record?.CustomerDetails?.[0], status: true, }) } /> ), }, { title:
Order
, dataIndex: 'OrderId', align: 'center', render: (_, record) => ( viewproductModel(record?.productDetails)} /> ), }, { title:
Action
, dataIndex: 'operation', fixed: 'right', align: 'center', render: (_, record) => ( <> handleEdit(record)} > {!Buttonicon && ( handlePreOrderDelete(record)} > )} ), }, ]; const Upimodel = (type) => { setUpiOpen(false); if (type == 'Submit') { AddBookingDetails(); } if (type == 'Cancel') { setselectedUPIOption(); } const customerDisplayWindow = getCustomerDisplayWindow(); if (customerDisplayWindow && !customerDisplayWindow.closed) { const updatedRemovedData = { type: 'remove', keyValue: 'OrderTotalAmount', Paymentgateway: false, upi: GlobalUpiID, paymentMethod: selectOptionName, }; customerDisplayWindow.postMessage(updatedRemovedData, '*'); } else { console.error( 'Customer display window is not available or has been closed.' ); } }; const handleCreditCustomer = (type) => { if (type == 'Submit') { setCreditCustomer({ basic: false, model: false, }); AddBookingDetails(); } if (type == 'Cancel') { setCreditCustomer({ basic: true, model: false, }); } 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 onFinalSubmit = async () => { let MobileNo = selOption?.value; let BrachName = PaymentUpiOptions?.[0]?.BrName; let url = `${MainHomeUrl}payment-page?amt=${PreOrderAdvance}&Id=${MobileNo}&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'); } }; const viewproductModel = (value) => { setModalProduct(true); setPendingOrderView(value); }; const Productcolumns = [ { title: 'Product ', dataIndex: 'ProdName', key: 'ProdName' }, { title: 'Quantity', dataIndex: 'OrderQty', key: 'OrderQty' }, { title: 'Rate', dataIndex: 'MRP', key: 'MRP' }, { title: 'Total Amount', dataIndex: 'TotalAmt', key: 'TotalAmt' }, { title: 'Image', dataIndex: 'Image', key: 'Image', render: (text, record) => record?.Image ? ( Product ) : ( '' ), }, { title: 'Description', dataIndex: 'Description', key: 'Description' }, ]; const Pendingcolumns = Pcolumns.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record) => ({ record, editable: col.editable, dataIndex: col.dataIndex, title: col.title, handleSave, }), }; }); const handleAdvancevalidator = (rule, value, callback) => { if (totalAmount - OldAdvanceAmount - value < 0) { callback('Please Enter AdvanceAmount less than or equal to TotalAmount'); } else { callback(); } }; const MouseFunction = async (e) => { dispatch(changeDropDownStatus(e)); }; const openMenuClick = async () => { await dispatch(ChangeSearchFocusPreOrder(true)); }; const CountUp = useCountUp(Math.round(PreOrderAdvance)); return ( <>
{preOrderOpen && (

Pre Booking

} />
Booking
), value: 'Booking', }, { label: (
} />
Pending{' '}
), value: 'Pending', }, { label: (
} />
History
), value: 'History', }, ]} value={SelectedOption} onChange={(e) => { setselectedOption(e); }} />
{SelectedOption == 'Booking' && ( <>
{PreOrderAdditem == 'AddDetails' && (
MouseFunction(true)} onMouseLeave={() => MouseFunction(false)} // onClick={() => openMenuClick()} > Delivery Time } isOnChange={true} onChange={onChangeTime} valueData={PreOrderTime} />

Set As Customer

{ await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} onClick={() => openMenuClick()} > Name} fieldState={true} fieldApi={true} autocomplete="off" value={PreOrderCusName} onChange={NameOnChange} disabled={SetAsDefaultCust ? true : false} isOnChange={ (CustDetails?.CustName?.length > 0 && SetAsDefaultCust) || CusName ? true : false } /> { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} onClick={() => openMenuClick()} > Mobile No } fieldState={true} maxLength="10" fieldApi={true} autocomplete="off" onChange={MobOnChange} disabled={SetAsDefaultCust ? true : false} value={PreOrderCusMobNo} isOnChange={ CustDetails?.value || (CustDetails?.CustMobile?.length > 0 && SetAsDefaultCust) || MobName ? true : false } />
openMenuClick()} > Advance / Delivery Amount} maxLength="10" fieldState={true} value={PreOrderAdvance} fieldApi={true} onChange={OnchangeAdvance} isOnChange={PreOrderAdvance ? true : false} />
{Buttonicon && (

Old Advance Amount : {OldAdvanceAmount}

)}

Total Amount : {totalAmount}

Balance Amount : {balanceAmount}

{ItemEditdata !== null && ItemEditdata?.length > 0 && ( <> {PreOrderAdvance > 0 && ( <>
openMenuClick()} > ({ value: option.ModeId, label: option.ModeName, }) )} label={ } isOnchanges={ selectedPaymentOption ? true : false } onChangeFunction={(e) => { OnChangePaymentOption(e); }} valueData={selectedPaymentOption} /> {(PaymentOptions?.find( (item) => item.ModeId === selectedPaymentOption )?.ModeName === 'UPI' || PaymentOptions?.find( (item) => item.ModeId === selectedPaymentOption )?.ModeName === 'Card') && GateWayOptions?.length > 0 && ( openMenuClick()} > ({ value: option.value, label: option.option, }) )} label={ } isOnchanges={ selectedGateWayOptions ? true : false } onChangeFunction={(e) => { cardandUpi(e); }} valueData={selectedGateWayOptions} /> )}
openMenuClick()} > {PaymentOptions?.find( (item) => item.ModeId === selectedPaymentOption )?.ModeName === 'UPI' && selectedGateWayOptions === 'Default' && ( ({ value: option.UPIId, label: option.ModeName, }) )} label={ } isOnchanges={ selectedUPIOption ? true : false } onChangeFunction={(e) => { OnChangeUPIOption(e); }} valueData={selectedUPIOption} /> )}
)} )} {addDetails && ( <>
{ await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > Address Line1 } fieldState={true} fieldApi={true} isOnChange={PreOrderAdd1 ? true : false} onChange={OnChangeAddress1} /> { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} >
{ await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > Zipcode } maxLength="6" fieldState={true} fieldApi={true} isOnChange={PreOrderzip ? true : false} onChange={pinCodeChange} />
{zipCodeData ? ( <>
{ await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} >
{ await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} >
) : ( '' )}
)}
{ addDetails ? setAddDetails(false) : setAddDetails(true); }} > Additional Details
{Buttonicon ? (
{balanceAmount === 0 && (selectOptionName == 'Cash' || selectOptionName == 'Credit' || (selectOptionName == 'Card' && FullPayment) || (selectOptionName === 'UPI' && selectedGateWayOptions === 'Default' && selectedUPIOption != undefined)) && ( )}
{PreOrderAdvance > 1 && PreOrderAdvance != null && !FullPayment && PaymentOptions?.length > 1 && (
{ removestates(); }} > Split Payment
)}
Cancel
) : (
<> {PreOrderAdvance > 1 && PreOrderAdvance != null && !FullPayment && PaymentOptions?.length > 1 && (
{ removestates(); }} > Split Payment
)}
{ cancelEdit(); }} > Cancel
)}
)} {PreOrderAdditem == 'AddItems' && (
'editable-row'} bordered dataSource={ItemEditdata} columns={columns} /> )} )} {SelectedOption == 'Pending' && ( <>

From Date

To Date

'editable-row'} bordered dataSource={PendingData} columns={Pendingcolumns} size="small" /> )} {SelectedOption == 'History' && (
<>

From Date

To Date

)} )}

Upload Image

{ await validateSafeInput(value); return Promise.resolve(); }, }, ]} > Message..} onChange={OnChangeMessage} isOnChange={MessageModel ? true : false} value={MessageModel} />
Customer Details} open={pendingCustomerView?.status === true} onCancel={() => { setPendingCustomerView({ Data: null, status: false }); }} footer={false} width={700} >
{pendingCustomerView?.Data?.Address1 && (
Address1: {pendingCustomerView?.Data?.Address1}
)} {pendingCustomerView?.Data?.Address2 && (
Address2: {pendingCustomerView?.Data?.Address2}
)} {pendingCustomerView?.Data?.City && (
City: {pendingCustomerView?.Data?.City}
)} {pendingCustomerView?.Data?.CustSuppName && (
Customer: {pendingCustomerView?.Data?.CustSuppName}
)} {pendingCustomerView?.Data?.District && (
District: {pendingCustomerView?.Data?.District}
)} {pendingCustomerView?.Data?.Email && (
Email: {pendingCustomerView?.Data?.Email}
)} {pendingCustomerView?.Data?.MobileNo && (
Mobile No: {pendingCustomerView?.Data?.MobileNo}
)} {pendingCustomerView?.Data?.State && (
State: {pendingCustomerView?.Data?.State}
)} {pendingCustomerView?.Data?.ZipCode && (
Zip Code: {pendingCustomerView?.Data?.ZipCode}
)}
Product Details} open={ModalProduct} onCancel={() => productModalCancel()} footer={false} width={700} >
{ Upimodel('Cancel'); }} footer={false} children={

RS :{PreOrderAdvance ? PreOrderAdvance : 0}

{(selOption || SelCustId) && (
Sent Payment Link Your Alt Text
)}
} handleSubmit={() => { Upimodel('Submit'); }} />
} /> {CreditCustomer?.model && (
{ handleCreditCustomer('Cancel'); }} handleOk={() => { handleCreditCustomer('Submit'); }} />
)} History Details} open={HistoryDetailsView?.status === true} onCancel={() => { setHistoryDetails({ Data: null, status: false }); }} footer={false} width={900} >

Customer Details

{HistoryDetailsView?.Data?.CustomerDetails?.[0]?.Address1 && (
Address1:{' '} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.Address1}
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.Address2 && (
Address2:{' '} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.Address2}
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.City && (
City: {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.City}
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0] ?.CustSuppName && (
Customer:{' '} { HistoryDetailsView?.Data?.CustomerDetails?.[0] ?.CustSuppName }
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.District && (
District:{' '} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.District}
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.Email && (
Email:{' '} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.Email}
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.MobileNo && (
Mobile No:{' '} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.MobileNo}
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.State && (
State:{' '} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.State}
)} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.ZipCode && (
Zip Code:{' '} {HistoryDetailsView?.Data?.CustomerDetails?.[0]?.ZipCode}
)}

Payment Details

{HistoryDetailsView?.Data?.OrderPaymentDtls?.[0]?.OrderId && (
OrderId:{' '} {HistoryDetailsView?.Data?.OrderPaymentDtls?.[0]?.OrderId}
)} {HistoryDetailsView?.Data?.OrderPaymentDtls?.[0]?.Amount && (
Amount:{' '} {HistoryDetailsView?.Data?.OrderPaymentDtls?.[0]?.Amount}
)} {HistoryDetailsView?.Data?.OrderPaymentDtls?.[0] ?.PaymentTypeName && (
Payment Type Name:{' '} { HistoryDetailsView?.Data?.OrderPaymentDtls?.[0] ?.PaymentTypeName }
)}

Product Details

{PrintOrderDetails?.length > 0 && PrintOrderDetails?.[0]?.OrderDetails?.map((orderDetail, index) => (
))} {splitPayment && ( )} {CancelModal && ( Cancel Pre Booking} open={CancelModal} onCancel={() => setCancelModal(false)} footer={false} width={700} >
{/* Summary Block */}
Bill Amount: ₹ {PreOrderData?.NetAmount ?? 0}
Advance Paid: ₹ {PreOrderData?.PaidAmount ?? 0}
{/* Refund Amount Input */}
{ PreOrderCancel(PreOrderData); }} > Refund Amount} maxLength={10} fieldState={true} value={PreOrderRefund} fieldApi={true} onChange={OnchangeRefund} isOnChange={!!PreOrderRefund} onKeyPress={(e) => { const char = String.fromCharCode(e.charCode); const isValid = /[0-9.]$/.test(char); if (!isValid) e.preventDefault(); if (char === '.' && e.currentTarget.value.includes('.')) { e.preventDefault(); } }} /> {/* Payment Method Dropdown */} option.ModeName !== 'Credit' && option.ModeName !== 'Card' )?.map((option) => ({ value: option.ModeId, label: option.ModeName, }))} label={} isOnchanges={!!CancelPaymentOption} onChangeFunction={OnChangeCancelPaymentOption} valueData={CancelPaymentOption} />
} />
)} ); }; export default BSComboNavBarPreOrder;