import React, { useEffect, useState, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { Switch, Tooltip, Form, DatePicker } from 'antd'; import { BiSolidPrinter, BiUpArrowCircle } from 'react-icons/bi'; import Denomination from '../Denomination/Denomination'; import '../../../Styles/Reports/DateWiseReport/DateWiseReport.scss'; import '../../../Styles/Reports/ItemWiseReport/ItemWiseReport.scss'; import { changeBreadCrumb } from '../../../Features/AppPage/CenterPage'; import { getDatewiseReport, getPreferenceData, PreferenceData, UserDataBasedOnBranchId, wholesalegetDatewiseReport, } 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 { RadioGrpButton } from '../../../Components/Forms/RadioGroup.jsx'; import { IoSearch } from 'react-icons/io5'; import { ExtractDateFormate } from '../../../Services/Others.js'; import { useSelector } from 'react-redux'; import { ReportMobilePDFPrint } from '../../paymentpdfPage/ReportMobilePDFPrint.js'; import dayjs from 'dayjs'; const { RangePicker } = DatePicker; const subDirectory = import.meta.env.BASE_URL; const DateWiseReport = () => { const [open, setOpen] = useState(false); const formRef = useRef(); const dispatch = useDispatch(); const SettingDataSelector = useSelector(PreferenceData); const [datewiseData, setDatewiseData] = useState(); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const UserRole = getSession('UserType'); const AppId = getSession('AppId'); const AppType = getSession('AppType')?.toLowerCase() == 'wholesale' ? true : false; const [OrderFromDate, setOrderFromDate] = useState(); const [OrderToDate, setOrderToDate] = useState(); const sessionuserid = getSession('UserId') 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 [WholeDataSource, setWholeDataSource] = useState([]); const [Selecttype, setSelecttype] = useState('A'); const [TotalCashInHand, setTotalCashInHand] = useState([]); const [allowDecimal, setAllowDecimal] = useState(false); const [openDenomination, setOpenDenomination] = useState(false); const [denominationData, setDenominationData] = useState({ Amounts: {}, OverAllTotal: 0, }); const MobileA4Print = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'mobilea4' && setting?.SettingValue === 'Y' ); console.log(MobileA4Print, SettingDataSelector, 'MobileA4PrintMobileA4Print'); useEffect(() => { if (dataSource?.length > 0) { mobileDateWisePrintFun(dataSource); } }, [dataSource]); useEffect(() => { if (WholeDataSource?.length > 0) { mobileDateWisePrintFun(WholeDataSource); } }, [WholeDataSource]); 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 mobileDateWisePrintFun = async (data) => { const Dataa = ['Cash', 'Upi', 'Card', 'Credit'] ?.map((method) => { const amountKey = `${method}Amount`; const countKey = `${method}Count`; let TableData = AppType ? WholeDataSource : dataSource; const total = TableData?.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 OrderSpace = Math.max( 0, 6 - String(datewiseData?.[0]?.Orders).length ); const Billamountspace = Math.max( 0, 6 - String( (AppType ? datewiseData?.[0]?.WholeSaleExpenseNetAmount : datewiseData?.[0]?.TotalBillAmount )?.toFixed(2) ).length ); const Taxamountspace = Math.max( 0, 6 - String( (AppType ? datewiseData?.[0]?.WholeSaleExpenseTaxAmount : datewiseData?.[0]?.TaxAmount )?.toFixed(2) ).length ); const Chargesamountspace = Math.max( 0, 6 - String(datewiseData?.[0]?.TotalExtraChargeAmount?.toFixed(2)).length ); const Preorderamountspace = Math.max( 0, 6 - String(datewiseData?.[0]?.PreOrderNetAmount?.toFixed(2)).length ); const Discountamountspace = Math.max( 0, 6 - String( (AppType ? datewiseData?.[0]?.WholeSaleExpenseTotalOverallDisc : datewiseData?.[0]?.TotalOfferAmount )?.toFixed(2) ).length ); const Netamountspace = Math.max( 0, 6 - String( (AppType ? datewiseData?.[0]?.WholeSaleExpenseNetAmount : datewiseData?.[0]?.TotalNetAmount )?.toFixed(2) ).length ); var data = datewiseData && datewiseData[0] ? datewiseData[0] : {}; var receiptTextdata = "[C]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' + '[R]Orders:' + (data?.Orders || 0) + ' '.repeat(OrderSpace) + '\n' + '[R]Bill Amount:' + parseFloat( !AppType ? (data?.TotalBillAmount || 0) - (data?.TotalExtraChargeAmount || 0) + (data?.TotalOfferAmount || 0) : data?.WholeSaleExpenseNetAmount || 0 ).toFixed(2) + ' '.repeat(Billamountspace) + '\n'; // Tax if ((AppType ? data?.WholeSaleExpenseTaxAmount : data?.TaxAmount) > 0) { receiptTextdata += '[R]Tax:' + parseFloat( AppType ? data?.WholeSaleExpenseTaxAmount : data?.TaxAmount ).toFixed(2) + ' '.repeat(Taxamountspace) + '\n'; } // Charges if ((data?.TotalExtraChargeAmount || 0) > 0) { receiptTextdata += '[R]Charges:' + parseFloat(data?.TotalExtraChargeAmount).toFixed(2) + ' '.repeat(Chargesamountspace) + '\n'; } // Preorder if ((data?.PreOrderNetAmount || 0) > 0) { receiptTextdata += '[R]Preorder:' + parseFloat(data?.PreOrderNetAmount).toFixed(2) + ' '.repeat(Preorderamountspace) + '\n'; } // Discount var discountAmount = AppType ? data?.WholeSaleExpenseTotalOverallDisc : data?.TotalOfferAmount; if ((discountAmount || 0) > 0) { receiptTextdata += '[R]Discount(-):' + parseFloat(discountAmount).toFixed(2) + ' '.repeat(Discountamountspace) + '\n'; } receiptTextdata += '[L]------------------------------------------------\n' + '[R]Net:' + parseFloat( Math.round( AppType ? datewiseData?.[0]?.WholeSaleExpenseNetAmount || 0 : datewiseData?.[0]?.TotalNetAmount + (datewiseData?.[0]?.PreOrderNetAmount || 0) || 0 ) ).toFixed(2) + ' '.repeat(Netamountspace) + '\n'; setreceiptText(receiptTextdata); }; const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, ]; const style = ``; useEffect(() => { getPreference(); dispatch(changeBreadCrumb({ items: items })); fetchInitialData(); if (UserRole != 'Employee') { userDropData(); } }, []); const getPreference = async () => { const data = { AppId: AppId, CompId: CompId, BranchId: BranchId, UserId: sessionuserid }; 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); } }; 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, filterType: Selecttype, }; if (AppType) { let response = await dispatch(wholesalegetDatewiseReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data); // setdataSource(response?.data?.data?.[0]?.OrderDetails); setWholeDataSource( response?.data?.data?.[0]?.WholeSaleExpenseOrderDetails ); } else { setDatewiseData([]); setdataSource([]); } } else { let response = await dispatch(getDatewiseReport(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([]); } } }; 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(); } function changeDateFormat(dateStr) { if (!dateStr || typeof dateStr !== 'string') return ''; const dateParts = dateStr.split('-'); if (dateParts.length !== 3) return ''; return `${dateParts[2]}-${dateParts[1]}-${dateParts[0]}`; } // const columns = [ // { // title: 'SI NO', // dataIndex: 'SINO', // key: 'SINO', // align: 'center', // render: (text, object, index) => ( // {(page - 1) * 10 + index + 1} // ), // }, // { // title: 'Payment Type', // dataIndex: 'PaymentMethod', // key: 'PaymentMethod', // }, // { // title: 'Date', // dataIndex: 'Date', // key: 'Date', // render: (text) => ( // {changeDateFormat(text)} // ), // }, // { // title: 'Count', // dataIndex: 'TotalOrders', // key: 'TotalOrders', // align: 'right', // }, // { // title: 'Amount Collected', // dataIndex: 'BillAmount', // key: 'BillAmount', // align: 'right', // render: (text) => {safeRound(text)}, // }, // ]; 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 OrderDateRangeFetch = (dates, dateStrings) => { const [from, to] = dates || []; const [fromStr, toStr] = dateStrings || []; // Clear when picker cleared if (!from || !fromStr) { setOrderFromDate(undefined); formRef.current?.setFieldsValue({ Fromdate: undefined }); } else { const DateFrom = `${fromStr.split('-').reverse().join('-')}T00:00:00`; // fromStr is in DD-MM-YYYY, convert to YYYY-MM-DD setOrderFromDate(DateFrom); formRef.current?.setFieldsValue({ Fromdate: DateFrom }); } if (!to || !toStr) { setOrderToDate(undefined); formRef.current?.setFieldsValue({ Todate: undefined }); } else { // set To as end of day for inclusive queries const toIso = `${toStr.split('-').reverse().join('-')}T23:59:59`; setOrderToDate(toIso); formRef.current?.setFieldsValue({ Todate: toIso }); } }; 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, filterType: Selecttype, }; if (AppType) { let response = await dispatch(wholesalegetDatewiseReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data); setWholeDataSource( response?.data?.data?.[0]?.WholeSaleExpenseOrderDetails ); } else { setDatewiseData([]); setdataSource([]); setWholeDataSource([]); } } else { let response = await dispatch(getDatewiseReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data); setdataSource(response?.data?.data?.[0]?.OrderDetails); } else { setDatewiseData([]); setdataSource([]); setWholeDataSource([]); } } }; const TotalBill = AppType ? datewiseData?.[0]?.WholeSaleExpenseNetAmount : datewiseData?.[0]?.TotalBillAmount; const handleDenominationChange = (data) => { setDenominationData(data); }; const selectdataType = (e) => { setSelecttype(e); // formRef.current?.resetFields() }; return (

Daily Sales

current && current > dayjs()} // Disable future dates 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 && ( )} {(AppType ? WholeDataSource : dataSource)?.map((row, idx) => { const { Date, CashCount = 0, CashAmount = 0, UpiCount = 0, UpiAmount = 0, CardCount = 0, CardAmount = 0, CreditCount = 0, CreditAmount = 0, } = row; const date = Date ? ExtractDateFormate(Date) : ''; const totalAmt = [ CashAmount, UpiAmount, CardAmount, CreditAmount, ].reduce((sum, val) => sum + Number(val), 0); return ( {dataSource?.[0]?.Date && ( )} ); })}
S.No Date Cash UPI Card Credit Total
Count Amt Count Amt Count Amt Count Amt
{idx + 1}{date}{CashCount ?? 0} {safeRound(CashAmount)} {UpiCount ?? 0} {safeRound(UpiAmount)} {CardCount ?? 0} {safeRound(CardAmount)} {CreditCount ?? 0} {safeRound(CreditAmount)} {safeRound(totalAmt)}
{/*

Denomination:

Close} content={} trigger="click" open={open} onOpenChange={handleOpenChange} >
*/}
{/*

Denomination

*/}
{!AppType ? datewiseData?.[0]?.TaxAmount > 0 && ( ) : datewiseData?.[0]?.WholeSaleExpenseTaxAmount > 0 && ( )} {datewiseData?.[0]?.TotalExtraChargeAmount > 0 && ( )} {datewiseData?.[0]?.RefundAmount > 0 && ( )} {datewiseData?.[0]?.PreOrderNetAmount > 0 && ( )} {AppType ? datewiseData?.[0]?.WholeSaleExpenseTotalOverallDisc > 0 && ( ) : datewiseData?.[0]?.TotalOfferAmount > 0 && ( )}

Orders {!AppType ? datewiseData?.[0]?.Orders : datewiseData?.[0]?.WholeSaleExpenseCount}
Bill Amount {!AppType ? (datewiseData?.[0]?.TotalBillAmount || 0) - (datewiseData?.[0]?.TotalExtraChargeAmount || 0) + (datewiseData?.[0]?.TotalOfferAmount || 0) : datewiseData?.[0]?.WholeSaleExpenseNetAmount}
Tax {datewiseData?.[0]?.TaxAmount}
Tax {datewiseData?.[0]?.WholeSaleExpenseTaxAmount}
Charges {datewiseData?.[0]?.TotalExtraChargeAmount}
Refund (-) {datewiseData?.[0]?.RefundAmount}
Preorder {datewiseData?.[0]?.PreOrderNetAmount}
Discount(-) { datewiseData?.[0] ?.WholeSaleExpenseTotalOverallDisc }
Discount(-) {datewiseData?.[0]?.TotalOfferAmount}
Net {AppType ? safeRound( datewiseData?.[0]?.WholeSaleExpenseNetAmount ) || 0 : safeRound( (datewiseData?.[0]?.TotalBillAmount || 0) + (datewiseData?.[0]?.TaxAmount || 0) + (datewiseData?.[0]?.PreOrderNetAmount || 0) - (datewiseData?.[0]?.RefundAmount || 0) ) || 0}
{openDenomination && (
<> {TotalCashInHand[0]?.PaymentMethod === 'Cash' && TotalCashInHand[0]?.NetAmount < parseInt(denominationData?.OverAllTotal) && parseInt(denominationData?.OverAllTotal) > 0 && (
Amount is Mismatching
)}
)}
); }; export default DateWiseReport;