import React, { useEffect, useState, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { Tooltip, Form } from 'antd'; import moment from 'moment'; import { DatePicProd } from '../../Components/Forms/DatePickerProduct.jsx'; import { Tables } from '../../Components/Tables/Table.jsx'; import { BiSolidPrinter } from 'react-icons/bi'; import './WholeSalePurchaseReport.scss'; import { changeBreadCrumb } from '../../Features/AppPage/CenterPage.js'; import { getWholeSalePurchaseReport } from '../../Features/BookingScreen/BookingData/BookingData.js'; import { extractLastNumber, getSession } from '../../Services/Others.js'; import { printDiv, RoundOffFun } from '../../Services/WSOthers.js'; import PurchaseReportPdf from '../PurchaseScreen/WholeSalePrint/wholeSalePurchaseReportpdf.jsx'; import { isMobile } from 'react-device-detect'; import { DefaultModal } from '../../Components/Modal/DefaultModal.jsx'; import Search from '../../Components/Forms/Search.jsx'; const subDirectory = import.meta.env.BASE_URL; const WholeSalePurchaseReport = () => { 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 [page, setpage] = useState(1); const [receiptText, setreceiptText] = useState(null); const [WholeDataSource, setWholeDataSource] = useState([]); const ExtraChargeDetails = datewiseData?.ExtraChargeDetails?.length > 0 ? datewiseData?.ExtraChargeDetails : []; const [insideWholeDataSource, setinsideWholeDataSource] = useState([]); const [openDenomination, setOpenDenomination] = useState(false); const [isPurchaseReportModel, SetisPurchaseReportModel] = useState(false); const [searchedText, setSearchedText] = useState(''); 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) => { let Dataa = WholeDataSource; 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]?.WholeSaleExpenseNetAmount?.toFixed(2)).length ); const Taxamountspace = Math.max( 0, 6 - String(datewiseData?.[0]?.WholeSaleExpenseTaxAmount?.toFixed(2)).length ); const Netamountspace = Math.max( 0, 6 - String(datewiseData?.[0]?.WholeSaleExpenseNetAmount?.toFixed(2)).length ); 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' + '[L]' + 'Total Orders:' + datewiseData?.[0]?.Orders + '' + '[R]' + 'TotalAmount:' + parseFloat(TotalBill).toFixed(2) + ' '.repeat(AmountSpace) + '\n' + '[R]' + 'Total Bill:' + parseFloat(datewiseData?.[0]?.WholeSaleExpenseNetAmount).toFixed(2) + ' '.repeat(Billamountspace) + '\n' + '[R]' + 'Total Tax:' + parseFloat(datewiseData?.[0]?.WholeSaleExpenseTaxAmount).toFixed(2) + ' '.repeat(Taxamountspace) + '\n' + '[L]------------------------------------------------\n' + '[R]' + 'Net:' + parseFloat(datewiseData?.[0]?.WholeSaleExpenseNetAmount).toFixed(2) + ' '.repeat(Netamountspace) + '\n'; setreceiptText(receiptTextdata); }; const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, ]; const style = ``; useEffect(() => { dispatch(changeBreadCrumb({ items: items })); fetchInitialData(); }, []); const fetchInitialData = async () => { let currentDate = new Date().toJSON().slice(0, 10); formRef?.current?.setFieldsValue({ Fromdate: currentDate, Todate: currentDate, }); setOrderFromDate(currentDate + 'T00:00:00'); setOrderToDate(currentDate + 'T00:00:00'); let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, OrderFromDate: currentDate, OrderToDate: currentDate, }; let response = await dispatch(getWholeSalePurchaseReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data?.[0]); setWholeDataSource(response?.data?.data?.[0]?.ProductDetails); } else { setDatewiseData([]); } }; const columns = [ { title: 'SI NO', dataIndex: 'SINO', key: 'SINO', align: 'center', width: '100px', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), onCell: (record) => ({ onClick: () => { SetisPurchaseReportModel(true), setinsideWholeDataSource(record?.SupplierList); }, }), }, { title: 'Name', dataIndex: 'ProdName', key: 'ProdName', align: 'left', width: '150px', render: (text, record, index) => ( {`${record?.ProdName} - ${ record?.QualityName.includes('Grade') ? record?.QualityName.split('Grade')[1].trim().replace(/^-/, '') : record?.QualityName } `} ), onCell: (record) => ({ onClick: () => { SetisPurchaseReportModel(true), setinsideWholeDataSource(record?.SupplierList); }, }), filteredValue: [searchedText], onFilter: (value, record) => { return String(record.ProdName) ?.toLowerCase() ?.includes(value?.toLowerCase()); }, }, { title: 'Qty', dataIndex: 'GradeOverAllCount', key: 'GradeOverAllCount', width: '100px', align: 'right', onCell: (record) => ({ onClick: () => { SetisPurchaseReportModel(true), setinsideWholeDataSource(record?.SupplierList); }, }), }, { title: 'Amount', dataIndex: 'GradeOverAllAmount', key: 'GradeOverAllAmount', width: '100px', align: 'right', onCell: (record) => ({ onClick: () => { SetisPurchaseReportModel(true), setinsideWholeDataSource(record?.SupplierList); }, }), }, ]; const Otherscolumns = [ { title: 'SI NO', dataIndex: 'SINO', key: 'SINO', align: 'center', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), }, { title: 'Charge Name', dataIndex: 'ExtraChargeTypeName', width: '150px', key: 'ExtraChargeTypeName', align: 'left', render: (text, record, index) => ( {record?.ExtraChargeTypeName} ), }, { title: 'Amount', dataIndex: 'TotalAmt', key: 'TotalAmt', align: 'right', }, ]; const insidecolumns = [ { title: 'SI NO', dataIndex: 'SINO', key: 'SINO', align: 'center', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), }, { title: 'Receipt No', dataIndex: 'ProdName', key: 'ProdName', align: 'left', render: (text, record, index) => ( {extractLastNumber(record?.OrderId)} ), }, { title: 'Name', dataIndex: 'CustSuppName', key: 'CustSuppName', align: 'left', render: (text, record, index) => ( {`${record?.CustSuppName}`} ), }, { title: 'Qty', dataIndex: 'SalesQty', key: 'SalesQty', align: 'right', }, { title: 'Rate', dataIndex: 'Rate', key: 'Rate', align: 'right', }, { title: 'Amt', dataIndex: 'TotalAmt', key: 'TotalAmt', align: 'right', }, ]; const OrderFromDatefetch = async (date, dateString) => { if (dateString === '') { setOrderFromDate(); } if (dateString) { const Date3 = moment(dateString, ['DD-MM-YYYY']).format( 'YYYY-MM-DDTHH:mm:ss' ); formRef.current?.setFieldsValue({ Fromdate: Date3 }); await setOrderFromDate(Date3); } }; const OrderToDatefetch = async (date, dateString) => { if (dateString === '') { setOrderToDate(); } if (dateString) { const Date4 = moment(dateString, ['DD-MM-YYYY']).format( 'YYYY-MM-DDTHH:mm:ss' ); formRef.current?.setFieldsValue({ Todate: Date4 }); await setOrderToDate(Date4); } }; const Print = async () => { let LogoImage = ''; let OrderId = ''; let UpiId = ''; let TokenData = ''; let FooterPrint = ''; if (isMobile) { 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, }; let response = await dispatch(getWholeSalePurchaseReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data?.[0]); setWholeDataSource(response?.data?.data?.[0]?.ProductDetails); } else { setDatewiseData([]); setWholeDataSource([]); } }; const TotalBill = datewiseData?.[0]?.WholeSaleExpenseNetAmount; const handlePageChange = (current) => { setpage(current); }; const onSearch = (value) => { setSearchedText(value); }; const onSearchChange = (e) => { setSearchedText(e?.target?.value); }; let NetAmt = datewiseData?.OverAllAmount - datewiseData?.OverAllExtraChargesAmount; return ( Purchase Report From Date To Date SUBMIT 0 ? 'PurchaseReport-printerIcon' : 'PurchaseReport-printerIcon-disabled' } onClick={Print} /> Qty : {datewiseData?.OverAllCount || 0} Amount : {datewiseData?.OverAllAmount || 0} Charges (-) : {datewiseData?.OverAllExtraChargesAmount || 0} Total : {datewiseData?.OverAllAmount - datewiseData?.OverAllExtraChargesAmount || 0} Round off : {RoundOffFun(NetAmt || 0)} Total : {Math.round(NetAmt) || 0} { SetisPurchaseReportModel(false); }} footer={false} width={750} className={'WholeSalePurchaseList'} children={ } > ); }; export default WholeSalePurchaseReport;
Purchase Report
From Date
To Date