import React, { useEffect, useState, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { Switch, Tooltip, Form, DatePicker } from 'antd'; import moment from 'moment'; import dayjs from 'dayjs'; import { DatePicProd } from '../../../Components/Forms/DatePickerProduct.jsx'; import { Tables } from '../../../Components/Tables/Table'; import { BiSolidPrinter, BiUpArrowCircle } from 'react-icons/bi'; import Denomination from '../Denomination/Denomination'; import { Popover } from 'antd'; import '../../../Styles/Reports/DateWiseReport/DateWiseReport.scss'; import { changeBreadCrumb } from '../../../Features/AppPage/CenterPage'; import { getEstimateDatewiseReport, getPreferenceData, PreferenceData, UserDataBasedOnBranchId, } from '../../../Features/BookingScreen/BookingData/BookingData'; import { getSession, printDiv } from '../../../Services/WSOthers'; import DatewiseReportPdf from '../../paymentpdfPage/DateWiseReportPdf'; import { DropDowns } from '../../../Components/Forms/DropDown.jsx'; import { isMobile } from 'react-device-detect'; import logo from '../../../Images/pozologoimg.png'; import { RadioGrpButton } from '../../../Components/Forms/RadioGroup.jsx'; import { IoSearch } from 'react-icons/io5'; import { ExtractDateFormate } from '../../../Services/Others.js'; import { ReportMobilePDFPrint } from '../../paymentpdfPage/ReportMobilePDFPrint.js'; import { useSelector } from 'react-redux'; const subDirectory = import.meta.env.BASE_URL; const { RangePicker } = DatePicker; const EstimateDateWiseReport = () => { const [open, setOpen] = useState(false); const formRef = useRef(); const dispatch = useDispatch(); const [datewiseData, setDatewiseData] = useState(); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const UserRole = getSession('UserType'); const AppId = getSession('AppId'); const [OrderFromDate, setOrderFromDate] = useState(); const [OrderToDate, setOrderToDate] = useState(); const [UserId, setUserId] = useState( UserRole != 'Employee' ? 0 : getSession('UserId') ); const [userDropDown, setuserDropDown] = useState([]); const [selectedUserData, setSelectedUserData] = useState(null); const [dataSource, setdataSource] = useState([]); const [page, setpage] = useState(1); const [receiptText, setreceiptText] = useState(null); const [TotalCashInHand, setTotalCashInHand] = useState([]); const [openDenomination, setOpenDenomination] = useState(false); const [Selecttype, setSelecttype] = useState('A'); const [denominationData, setDenominationData] = useState({ Amounts: {}, OverAllTotal: 0, }); const SettingDataSelector = useSelector(PreferenceData); const MobileA4Print = SettingDataSelector?.[0]?.SettingDtlDetails?.find((setting) => setting?.SettingIdName?.toLowerCase() === "mobilea4" && setting?.SettingValue === 'Y'); const [allowDecimal, setAllowDecimal] = useState(false); useEffect(() => { if (dataSource.length > 0) { mobileDateWisePrintFun(dataSource); } }, [dataSource]); const reprintDate = (date) => { const salesDate = new Date(date); const formattedDate = salesDate.toLocaleDateString('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric', }); return formattedDate; }; const formatAmount = (value) => { return allowDecimal ? parseFloat(value || 0).toFixed(2) : Math.round(value || 0); }; const getPreference = async () => { const data = { AppId: AppId, CompId: CompId, BranchId: BranchId ,UserId: UserId}; const { data: res } = await dispatch(getPreferenceData(data)).unwrap() const decimalSetting = res?.data?.[0]?.SettingDtlDetails?.find((setting) => setting?.SettingIdName?.toLowerCase() === "decimal" && setting?.SettingValue === 'Y'); if (decimalSetting) { setAllowDecimal(true) } } function safeRound(amountStr) { if (amountStr == null) return allowDecimal ? '0.00' : '0'; const cleaned = String(amountStr).replace(/[^0-9.-]+/g, ''); const num = Number(cleaned); if (isNaN(num)) return allowDecimal ? '0.00' : '0'; return allowDecimal ? num.toFixed(2) : Math.round(num).toString(); } const mobileDateWisePrintFun = async (data) => { const Dataa = ["Cash", "Upi", "Card", "Credit"].map(method => { const amountKey = `${method}Amount`; const countKey = `${method}Count`; const total = dataSource?.reduce((acc, entry) => { acc.amount += entry[amountKey] || 0; acc.count += entry[countKey] || 0; return acc; }, { amount: 0, count: 0 }); return { PaymentMethod: method, CountOfPaymentType: total.count, NetAmount: total.amount }; })?.filter(entry => entry.NetAmount > 0); let Tabledata = Dataa?.map((data, index) => { const snoSpacing = Math.max(0, 3 - String(index + 1).length); // Calculate dynamic spacing for Rate const rateSpacing = Math.max(0, 9 - String(data?.NetAmount).length); const QtySpacing = Math.max( 0, 3 - String(data?.CountOfPaymentType).length ); // Generate formatted string with dynamic spacings const formattedString = ' '.repeat(snoSpacing) + parseInt(index + 1) + ' ' + (data?.PaymentMethod + ' '.repeat(22)).substring(0, 22) + ' ' + ' '.repeat(QtySpacing) + String(data?.CountOfPaymentType) + ' ' + ' '.repeat(rateSpacing) + String(data?.NetAmount) + ' ' + '\n'; return formattedString; }); const AmountSpace = Math.max( 0, 6 - String(parseFloat(TotalBill).toFixed(2)).length ); const Billamountspace = Math.max( 0, 6 - String((datewiseData?.[0]?.TotalBillAmount).toFixed(2)).length ); const Taxamountspace = Math.max( 0, 6 - String((datewiseData?.[0]?.TaxAmount).toFixed(2)).length ); const Netamountspace = Math.max( 0, 6 - String((datewiseData?.[0]?.TotalNetAmount).toFixed(2)).length ); var receiptTextdata = "[C]" + ' Estimate Datewise Sales' + '\n' + '[L]From Date :' + reprintDate(OrderFromDate) + '[R]' + ' ' + 'To Date :' + reprintDate(OrderToDate) + '\n' + '[C]------------------------------------------------\n' + '[L]' + '' + 'S.No' + ' ' + ' Payment Type ' + ' ' + 'Count ' + ' ' + 'Amount ' + '' + '' + '[L]\n' + '[C]------------------------------------------------\n' + Tabledata.join('') + '[C]------------------------------------------------\n' + '[L]' + 'Total Orders:' + datewiseData?.[0]?.Orders + '' + '[R]' + 'TotalAmount:' + parseFloat(TotalBill).toFixed(2) + ' '.repeat(AmountSpace) + '\n' + '[R]' + 'Total Bill:' + parseFloat(datewiseData?.[0]?.TotalBillAmount).toFixed(2) + ' '.repeat(Billamountspace) + '\n' + '[R]' + 'Total Tax:' + parseFloat(datewiseData?.[0]?.TaxAmount).toFixed(2) + ' '.repeat(Taxamountspace) + '\n' + '[L]------------------------------------------------\n' + '[R]' + 'Net:' + parseFloat(datewiseData?.[0]?.TotalNetAmount).toFixed(2) + ' '.repeat(Netamountspace) + '\n'; setreceiptText(receiptTextdata); }; const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, // { // name: "Estimate Date WiseReport", // link: `${subDirectory}report/estimatedatewisereport`, // }, ]; const style = ``; useEffect(() => { dispatch(changeBreadCrumb({ items: items })); fetchInitialData(); if (UserRole != 'Employee') { userDropData(); } getPreference() }, []); const userDropData = async () => { const gettinguserDropDown = await dispatch( UserDataBasedOnBranchId(BranchId) ).unwrap(); if (gettinguserDropDown?.data?.statusCode === 1) { let finaluserDropDown = gettinguserDropDown?.data?.data?.filter( (value) => value.ActiveStatus === 'A' ); finaluserDropDown.push({ UserId: 0, UserName: 'All User' }); // let admindtl = {"UserId":finaluserDropDown?.[0]?.AdminDetail?.[0]?.UserId, // "UserName":finaluserDropDown?.[0]?.AdminDetail?.[0]?.UserName+' ('+"Admin"+')'}; // finaluserDropDown.push(admindtl); setSelectedUserData(0); formRef.current?.setFieldsValue({ UserId: 0, }); setuserDropDown(finaluserDropDown); } }; const fetchInitialData = async () => { let currentDate = new Date().toJSON().slice(0, 10); formRef?.current?.setFieldsValue({ dateRange: [dayjs(currentDate, 'YYYY-MM-DD'), dayjs(currentDate, 'YYYY-MM-DD')], }); setOrderFromDate(currentDate + 'T00:00:00'); setOrderToDate(currentDate + 'T23:59:59'); let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, OrderFromDate: currentDate, OrderToDate: currentDate, UserId: UserRole != 'Employee' ? 0 : UserId, type: 'E', filterType: Selecttype, }; let response = await dispatch(getEstimateDatewiseReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data); setdataSource(response?.data?.data?.[0]?.OrderDetails); setTotalCashInHand(response?.data?.data?.[0]?.OrderDetails); } else { setDatewiseData([]); setdataSource([]); } }; const columns = [ { title: 'SL NO', dataIndex: 'SINO', key: 'SINO', align: 'center', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), }, { title: 'Payment Type', dataIndex: 'PaymentMethod', key: 'PaymentMethod', }, { title: 'Count', dataIndex: 'TotalOrders', key: 'TotalOrders', align: 'right', }, { title: 'Amount Collected', dataIndex: 'BillAmount', key: 'BillAmount', align: 'right', render: (text) => ( {safeRound(text)} ), }, ]; // const onChange = (checked) => { // setOpenDenomination(checked); // }; const hide = () => { setOpen(false); }; const handleOpenChange = (newOpen) => { setOpen(newOpen); }; const OrderDateRangeFetch = (dates, dateStrings) => { const [from, to] = dates || []; const [fromStr, toStr] = dateStrings || []; if (!from || !fromStr) { setOrderFromDate(undefined); formRef.current?.setFieldsValue({ Fromdate: undefined }); } else { const DateFrom = `${fromStr.split('-').reverse().join('-')}T00:00:00`; setOrderFromDate(DateFrom); formRef.current?.setFieldsValue({ Fromdate: DateFrom }); } if (!to || !toStr) { setOrderToDate(undefined); formRef.current?.setFieldsValue({ Todate: undefined }); } else { const toIso = `${toStr.split('-').reverse().join('-')}T23:59:59`; setOrderToDate(toIso); formRef.current?.setFieldsValue({ Todate: toIso }); } }; const UserDropDownChange = async (e) => { setUserId(e); let mob = userDropDown?.filter((item) => item?.UserId === e); formRef.current?.setFieldsValue({ UserId: e, MobileNo: mob?.[0]?.MobileNo, }); setSelectedUserData(e); }; const Print = async () => { let LogoImage = ''; let OrderId = ''; let UpiId = ''; let TokenData = ''; let FooterPrint = ''; if (isMobile) { if (MobileA4Print) { ReportMobilePDFPrint({ printId: 'RePrint', printStyle: style, }); } else { var textEncoded = encodeURI(receiptText); var TypeCheck = 'PrintReceipt'; var scheme = 'pozoprinter'; var packageName = 'com.example.pozoprinter'; window.location.href = scheme + '://' + textEncoded + '#Intent;scheme=' + scheme + ';package=' + packageName + 'ImgS' + LogoImage + 'ImgE' + TypeCheck + 'TokenS' + TokenData + 'TokenE' + 'EstimateS' + '' + 'EstimateE' + 'HasFooterTextS' + FooterPrint + 'HasFooterTextE' + ';end;'; } } else { await printDiv('RePrint', style); } }; const onFinish = async (values) => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, OrderFromDate: OrderFromDate?.split('T')?.[0], OrderToDate: OrderToDate?.split('T')?.[0], UserId: UserId, type: 'E', filterType: Selecttype, }; let response = await dispatch(getEstimateDatewiseReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data); setdataSource(response?.data?.data?.[0]?.OrderDetails); } else { setDatewiseData([]); setdataSource([]); } }; const TotalBill = datewiseData?.[0]?.TotalBillAmount; const handleDenominationChange = (data) => { setDenominationData(data); }; const selectdataType = (e) => { setSelecttype(e); // formRef.current?.resetFields() }; return (

Estimate Daily Sales

current && current > dayjs()} onChange={(dates, dateStrings) => { OrderDateRangeFetch(dates, dateStrings); }} placeholder={['From Date', 'To Date']} />
{UserRole != 'Employee' && ( ({ value: option?.UserId, label: option?.UserName, }))} label={} id="UserId" field="UserId" fieldState={true} fieldApi={true} className="field-DropDown-Emp" onChangeFunction={(e) => UserDropDownChange(e)} isOnchanges={selectedUserData ? true : false} valueData={selectedUserData} // defaultValue={LastSelectConfig} /> )}
selectdataType(e)} onClickFunction={(e) => selectdataType(e)} />
0 ? 'DateWiseReport-printerIcon' : 'DateWiseReport-printerIcon-disabled' } onClick={Print} />
{/*
*/}
{dataSource?.[0]?.Date && } {dataSource && dataSource.length > 0 ? ( dataSource.map((row, idx) => { const date = row.Date const cashCount = row.CashCount || 0; const cashAmount = safeRound(row.CashAmount || 0); const upiCount = row.UpiCount || 0; const upiAmount = safeRound(row.UpiAmount || 0); const cardCount = row.CardCount || 0; const cardAmount = safeRound(row.CardAmount || 0); const creditCount = row.CreditCount || 0; const creditAmount = safeRound(row.CreditAmount || 0); const totalAmt = Number(row.CashAmount || 0) + Number(row.UpiAmount || 0) + Number(row.CardAmount || 0) + Number(row.CreditAmount || 0); return ( {dataSource?.[0]?.Date && } ); }) ) : ( )}
S.No Date Cash UPI Card Credit Total
Count Amt Count Amt Count Amt Count Amt
{idx + 1}{ExtractDateFormate(date)}{cashCount} {cashAmount} {upiCount} {upiAmount} {cardCount} {cardAmount} {creditCount} {creditAmount} {safeRound(totalAmt)}
No data found
{/*

Denomination:

Close} content={} trigger="click" open={open} onOpenChange={handleOpenChange} >
*/}
{!datewiseData?.[0]?.TotalOverallDisc && (

Total Amount : {safeRound(datewiseData?.[0]?.TotalBillAmount)}

)} {/*

Denomination

*/}
{datewiseData?.[0]?.TotalOverallDisc > 0 && ( )} {datewiseData?.[0]?.TaxAmount > 0 && ( )}

Total Orders {datewiseData?.[0]?.Orders}
Total Bill {safeRound(datewiseData?.[0]?.TotalBillAmount)}
Discount Amount {safeRound(datewiseData?.[0]?.TotalOverallDisc)}
Total Tax {safeRound(datewiseData?.[0]?.TaxAmount)}
Net {safeRound(datewiseData?.[0]?.TotalNetAmount)}
{/* {openDenomination && (
<> {TotalCashInHand[0]?.PaymentMethod === 'Cash' && TotalCashInHand[0]?.NetAmount < parseInt(denominationData?.OverAllTotal) && parseInt(denominationData?.OverAllTotal) > 0 && (
Amount is Mismatching
)}
)} */}
); }; export default EstimateDateWiseReport;