import React, { useEffect, useState, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { Tooltip, Form, Divider, Rate } 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 './WholeSaleSalesReport.scss'; import { changeBreadCrumb } from '../../Features/AppPage/CenterPage.js'; import { getWholeSaleSalesReport } from '../../Features/BookingScreen/BookingData/BookingData.js'; import { extractLastNumber, getSession } from '../../Services/Others.js'; import { printDiv } from '../../Services/WSOthers.js'; import SalesPrintpdf from '../PurchaseScreen/WholeSalePrint/wholeSaleSaleReportPrintPdf.jsx'; import { isMobile } from 'react-device-detect'; import Search from '../../Components/Forms/Search.jsx'; import { DefaultModal } from '../../Components/Modal/DefaultModal.jsx'; const subDirectory = import.meta.env.BASE_URL; const WholeSaleSalesReport = () => { 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 [page1, setpage1] = useState(1); const [receiptText, setreceiptText] = useState(null); const [WholeDataSource, setWholeDataSource] = useState([]); const [searchedText, setSearchedText] = useState(''); const [isSalesReportModel, SetisSalesReportModel] = useState(false); const [insideWholeDataSource, SetinsideWholeDataSource] = useState([]); const OthersDataSource = datewiseData?.[0]?.ExtraChargeDetails?.length > 0 ? datewiseData?.[0]?.ExtraChargeDetails : []; const [selectedCus, setselectedCus] = useState(''); console.log(datewiseData?.[0]?.ExtraChargeDetails, 'sssssssssssssssssss'); console.log(insideWholeDataSource, 'insideWholeDataSource'); 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, UserId: UserRole != 'Employee' ? 0 : UserId, }; let response = await dispatch(getWholeSaleSalesReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data); setWholeDataSource(response?.data?.data); } else { setDatewiseData([]); } }; const addinsideWholeDataSource = (record) => { SetinsideWholeDataSource( record?.ProductDetails?.flatMap((item, index) => item?.SupplierList?.map((item1, index1) => ({ SINO: index1 + 1, ProdName: item?.ProdName, QualityName: item?.QualityName, OrderId: item1?.OrderId, GradeOverAllCount: item1?.SalesQty, GradeOverAllAmount: item1?.TotalAmt, Rate: item1?.Rate, Amount: item1?.Amount, TotalAmount: item1?.TotalAmount, CustSuppName: item1?.CustSuppName, })) ) ); setselectedCus( record?.CustShortName || record?.CustSuppName || record?.CustSuppMobileNo ); }; const columns = [ { title: 'SI NO', dataIndex: 'SINO', key: 'SINO', align: 'center', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), onCell: (record) => ({ onClick: () => { SetisSalesReportModel(true); addinsideWholeDataSource(record); }, }), }, { title: 'Customer Name', dataIndex: 'CustShortName', key: 'CustShortName', render: (text, record, index) => ( {record?.CustShortName || record?.CustSuppName || record?.CustSuppMobileNo} ), onCell: (record) => ({ onClick: () => { SetisSalesReportModel(true); addinsideWholeDataSource(record); }, }), filteredValue: [searchedText], onFilter: (value, record) => { return String( record?.CustShortName || record?.CustSuppName || record?.CustSuppMobileNo ) ?.toLowerCase() ?.includes(value?.toLowerCase()); }, }, { title: 'Qty', dataIndex: 'OverAllCount', key: 'OverAllCount', align: 'right', render: (text, record, index) => ( {record?.OverAllCount} ), onCell: (record) => ({ onClick: () => { SetisSalesReportModel(true); addinsideWholeDataSource(record); }, }), }, { title: 'Amount', dataIndex: 'OverAllAmount', key: 'OverAllAmount', align: 'right', render: (text, record, index) => ( {record?.OverAllAmount} ), onCell: (record) => ({ onClick: () => { SetisSalesReportModel(true); addinsideWholeDataSource(record); }, }), }, ]; 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) => ( {(page1 - 1) * 10 + index + 1} ), }, { title: 'Receipt No', dataIndex: 'OrderId', key: 'OrderId', align: 'left', render: (text, record, index) => ( {extractLastNumber(record?.OrderId)} ), }, { title: 'Seller', dataIndex: 'CustSuppName', key: 'CustSuppName', align: 'left', render: (text, record, index) => ( {record?.CustSuppName} ), }, { title: 'Product Name', dataIndex: 'ProdName', key: 'ProdName', align: 'left', render: (text, record, index) => ( {record?.ProdName}{' '} {record?.QualityName?.includes('Grade') ? record?.QualityName.split('Grade')[1].trim().replace(/^-/, '') : record?.QualityName} ), }, { title: 'Rate', dataIndex: 'Rate', key: 'Rate', align: 'right', render: (text, record, index) => ( {record?.Rate} ), }, { title: 'Qty', dataIndex: 'GradeOverAllCount', key: 'GradeOverAllCount', align: 'right', render: (text, record, index) => ( {record?.GradeOverAllCount} ), }, { title: 'Amount', dataIndex: 'GradeOverAllAmount', key: 'GradeOverAllAmount', align: 'right', render: (text, record, index) => ( {record?.GradeOverAllAmount} ), }, ]; 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(getWholeSaleSalesReport(data)).unwrap(); if (response?.data?.statusCode === 1) { setDatewiseData(response?.data?.data); setWholeDataSource(response?.data?.data); } else { setDatewiseData([]); setWholeDataSource([]); } }; const TotalBill = 0; let totalCount = WholeDataSource?.reduce((accumulator, currentValue) => { return accumulator + currentValue?.OverAllCount; }, 0); let TotalAmt = WholeDataSource?.reduce((accumulator, currentValue) => { return accumulator + currentValue?.OverAllAmount; }, 0); let TotalCharges = WholeDataSource?.[0]?.OverallExtraChargesAmount; let TotalCommision = WholeDataSource?.[0]?.OverallCommissionAmount; const handlePageChange = (current) => { setpage(current); }; const handlePageChangeInside = (current) => { setpage1(current); }; const onSearch = (value) => { setSearchedText(value); }; const onSearchChange = (e) => { setSearchedText(e?.target?.value); }; return ( Sales Report From Date To Date SUBMIT 0 ? 'SalesReport-printerIcon' : 'SalesReport-printerIcon-disabled' } onClick={Print} /> Qty : {WholeDataSource?.reduce( (accumulator, currentValue) => { return accumulator + currentValue?.OverAllCount; }, 0 )} Amount : {TotalAmt || 0} Charges(+) : {TotalCharges || 0} Commission(-): {TotalCommision || 0} Total: {Math.round(TotalAmt + TotalCharges - TotalCommision) || 0} { SetisSalesReportModel(false); }} footer={false} width={750} className={'WholeSalePurchaseList'} children={ {selectedCus} {' '} } > ); }; export default WholeSaleSalesReport;
Sales Report
From Date
To Date