import { useState, useEffect, useCallback, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { Tables } from '../../Components/Tables/Table.jsx'; import FormHeader from '../PageComponents/FormHeader.jsx'; import Search from '../../Components/Forms/Search.jsx'; import { dateFormatChange, extractLastNumberOrderId, extractLastNumber, getSession, printDiv, dateTimeFormatChange, } from '../../Services/WSOthers.js'; import { Messages } from '../../Components/Notifications/Messages.jsx'; import { DefaultModal } from '../../Components/Modal/DefaultModal.jsx'; import { Table } from 'antd'; import { getAbstractList, sellergetAbstractList, } from '../../Features/WholeSale/WholeSaleAbstract.js'; import { BiSolidPrinter } from 'react-icons/bi'; import { changeBreadCrumb } from '../../Features/AppPage/CenterPage.js'; import WSSellerAbstract from '../PurchaseScreen/WholeSalePrint/WSSellerAbstract.jsx'; import dayjs from 'dayjs'; import './WholeSaleAbstract.scss'; import { DatePicker } from 'antd'; const { RangePicker } = DatePicker; const subDirectory = import.meta.env.BASE_URL; const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, ]; const WholeSaleSellerAbstract = () => { const dispatch = useDispatch(); const formRef = useRef(null); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [TableData, setTableData] = useState([]); const [PrintData, setPrintData] = useState([]); const [filteredInfo, setFilteredInfo] = useState({}); const [sortedInfo, setSortedInfo] = useState({}); const [searchedText, setSearchedText] = useState(''); const [OsearchedText, setOSearchedText] = useState(''); const [OsearchedTextAmt, setOSearchedTextAmt] = useState(''); const [EditRecord, setEditRecord] = useState({}); const [EditRecordModal, setEditRecordModal] = useState(false); const [PaymentType, setPaymentType] = useState('P'); const [OrderFromDate, setOrderFromDate] = useState(); const [page, setpage] = useState(1); const [Rpage, setRpage] = useState(1); const [Opage, setOpage] = useState(1); const [orderModel, setOrderModel] = useState(false); const [OTableData, setOTableData] = useState([]); const [ORTableData, setORTableData] = useState([]); const [OFullData, setOFullData] = useState({}); const itemsPerPage = 10; const indexOfLastItem = page * itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage; const currentItems = TableData?.slice(indexOfFirstItem, indexOfLastItem); const totalPages = Math.ceil(TableData?.length / itemsPerPage); const AppId = getSession('AppId'); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const UserId = getSession('UserId'); // const UserType = getSession('UserType') useEffect(() => { dispatch(changeBreadCrumb({ items: items })); fetchData(); }, []); async function fetchData() { const data = { AppId: AppId, CompId: CompId, BranchId: BranchId, }; const gettingTableData = await dispatch( sellergetAbstractList(data) ).unwrap(); if (gettingTableData?.data?.statusCode === 1) { setTableData(gettingTableData?.data?.data); } } const handleChange = (pagination, filters, sorter) => { setFilteredInfo(filters); setSortedInfo(sorter); }; const onSearch = (value) => { setSearchedText(value); }; const onSearchChange = (e) => { setSearchedText(e?.target?.value); }; const handlePageChange = (current) => { setpage(current); }; useEffect(() => { if ([EditRecord]?.length > 0 && EditRecordModal) { if (EditRecord?.UniqueId) { const percentageAmt = EditRecord?.Amount ?? 0; formRef?.current?.setFieldsValue({ PercentageAmt: percentageAmt }); let cmsAmt = 0; if (EditRecord?.AmountType === 'F') { cmsAmt = EditRecord?.Amount; } else if (EditRecord?.AmountType === 'P') { cmsAmt = (EditRecord?.OverallSales || 0) * (percentageAmt / 100); } formRef?.current?.setFieldsValue({ CommissionAmt: cmsAmt > 0 ? cmsAmt : 0, }); } } }, [EditRecord, EditRecordModal]); useEffect(() => { if (PrintData?.length > 0) { PrintFun(); } }, [PrintData]); const onchangepaymentType = (value) => { formRef.current?.resetFields(); formRef.current?.setFieldsValue({ PaymentType: value }); setPaymentType(value); }; const AmountChange = (e) => { const percentageAmt = e ?? 0; formRef.current?.setFieldsValue({ PercentageAmt: percentageAmt }); let cmsAmt = 0; if (PaymentType === 'F') { cmsAmt = e; } else if (PaymentType === 'P') { cmsAmt = (EditRecord?.OverallSales || 0) * (percentageAmt / 100); } formRef.current?.setFieldsValue({ CommissionAmt: cmsAmt > 0 ? cmsAmt : 0 }); }; const vieworders = async (event) => { const TableData = event?.OrderDetails; const ORTableData = event?.ReceivedDetails; console.log('ORTableData', TableData, ORTableData); setOrderModel(true); setOTableData(TableData); setORTableData(ORTableData); }; const OhandlePageChange = (current) => { setOpage(current); }; const ORhandlePageChange = (current) => { setRpage(current); }; const onOSearch = (value) => { setOSearchedText(value); }; const onOSearchChange = (e) => { setOSearchedText(e?.target?.value); }; const onOSearchAmt = (value) => { setOSearchedTextAmt(value); }; const onOSearchChangeAmt = (e) => { setOSearchedTextAmt(e?.target?.value); }; const printSet = () => { setPrintData(TableData); }; const PrintFun = async () => { const WholeSaleStyle = ``; await printDiv(`WSledger`, WholeSaleStyle); setPrintData([]); }; const Ocolumns = [ { title: 'Sl.No', key: 'sno', align: 'center', width: '80px', render: (text, object, index) => ( {(Opage - 1) * 10 + index + 1} ), }, { title: 'Sales No', key: 'OrderId', dataIndex: 'OrderId', render: (productDetails, record) => ( {extractLastNumberOrderId(record?.OrderId, record?.FYStatus)} ), filteredValue: [OsearchedText], onFilter: (value, record) => { return ( String(extractLastNumberOrderId(record?.OrderId, record?.FYStatus)) ?.toLowerCase() ?.includes(value?.toLowerCase()) || String(record.productDetails?.map((item, index) => item.ProdName)) ?.toLowerCase() ?.includes(value?.toLowerCase()) ); }, }, { title: 'Sales Date', key: 'SalesDate', dataIndex: 'SalesDate', render: (productDetails, record) => ( {dateFormatChange(record?.SalesDate)} ), }, { title: 'Product', key: 'ProdDetails', dataIndex: 'productDetails', render: (productDetails) => productDetails?.length > 0 ? productDetails.map((item, index) => (
{item.ProdName}
)) : 'No Products', }, { title: 'Quality / UOM', key: 'ProdDetails', dataIndex: 'productDetails', render: (productDetails) => productDetails?.length > 0 ? productDetails.map((item, index) => (
{`${item.QualityName}- ${item.UomName}`}
)) : 'No Products', }, { title: 'Received Qty', key: 'productDetails', dataIndex: 'productDetails', align: 'right', render: (productDetails) => productDetails?.length > 0 ? productDetails.map((item, index) => (
{item.SalesQty}
)) : 'No Recived Quantity', }, { title: 'Total Amount', key: 'NetAmount', dataIndex: 'NetAmount', align: 'right', render: (productDetails, record) => ( OnSelectPaidList(productDetails, record)} > {record?.NetAmount} ), }, ]; const ORcolumns = [ { title: 'Sl.No', key: 'sno', align: 'center', width: '80px', render: (text, object, index) => ( {(Rpage - 1) * 10 + index + 1} ), }, { title: 'No', key: 'UniqueId', dataIndex: 'UniqueId', render: (record) => {record}, filteredValue: [OsearchedTextAmt], onFilter: (value, record) => { return String(extractLastNumber(record?.UniqueId)) ?.toLowerCase() ?.includes(value?.toLowerCase()); }, }, { title: 'Date', key: 'Date', dataIndex: 'Date', render: (record) => ( {dateTimeFormatChange(record)} ), }, { title: 'Type', key: 'PaymentTypeName', dataIndex: 'PaymentTypeName', render: (record) => {record}, }, { title: 'Amount', key: 'Amount', dataIndex: 'Amount', align: 'right', render: (record) => {record}, }, ]; const calculateBalance = (record) => { const openingBalance = record?.OpeningBalance || 0; const overallSales = record?.OverallSales || 0; const commissionAmount = record?.CommissionAmount || 0; const extraChargeAmount = record?.ExtraChargeAmount || 0; if (openingBalance >= 0) { return ( Math.abs(openingBalance) - (overallSales - commissionAmount + extraChargeAmount) ); } else { return ( openingBalance - (overallSales - commissionAmount + extraChargeAmount) ); } }; const calculateFinalBalance = (record) => { const balance = calculateBalance(record); if (balance >= 0) { return balance - (record?.OverallReceivedAmount || 0); } else { return balance + (record?.OverallReceivedAmount || 0); } }; const columns = [ { title: 'Sl.No', key: 'sno', align: 'center', width: '80px', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), }, { title: 'Name', dataIndex: 'SuppName', key: 'SuppName', width: '150px', align: 'left', render: (value, record) => ( {record.SuppName ? record.SuppName : record.SuppName} ), filteredValue: [searchedText], onFilter: (value, record) => { return String(record.CustSuppName) ?.toLowerCase() ?.includes(value?.toLowerCase()); }, sorter: (a, b) => a?.CustSuppName?.length - b?.CustSuppName?.length, sortOrder: sortedInfo.columnKey === 'CustSuppName' ? sortedInfo.order : null, ellipsis: true, onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'OB', dataIndex: 'OpeningBalance', key: 'OpeningBalance', width: '80px', children: [ { title: 'Balance', dataIndex: 'OpeningBalance', key: 'OpeningBalance', width: '90px', align: 'right', render: (text, record) => ( {text < 0 ? Math.abs(text) : 0} ), onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'Advance', dataIndex: 'OpeningBalance', key: 'OpeningBalance', width: '90px', align: 'right', render: (text, record) => ( {text > 0 ? Math.abs(text) : 0} ), onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, ], onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'Purchase', dataIndex: 'OverallSales', key: 'OverallSales', width: '100px', align: 'right', render: (text) => {text}, onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, // { // title: "Commission", // dataIndex: "CommissionAmount", // key: "CommissionAmount", // width: "110px", // align:"right", // render: (text, row) => ( //
// {text} //
// ), // onCell: (record) => ({ // onClick: () => { // vieworders(record) // }, // }), // }, { title: 'Commission', dataIndex: 'ExtraChargeAmount', key: 'ExtraChargeAmount', width: '110px', align: 'right', render: (text, row) => (
{text}
), onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'Total', dataIndex: 'Total', key: 'Total', width: '80px', align: 'right', render: (text, record) => ( {(record.OverallSales || 0) - (record.CommissionAmount || 0) + (record.ExtraChargeAmount || 0)} ), filteredValue: filteredInfo.SuppPOC || null, onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'Grand Total', dataIndex: 'GrandTotal', key: 'GrandTotal', width: '100px', align: 'right', render: (text, record) => { const grandTotal = calculateBalance(record)?.toFixed(2); const color = grandTotal > 0 ? 'green' : 'red'; return {Math.abs(grandTotal)}; }, onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'Given', dataIndex: 'OverallReceivedAmount', key: 'OverallReceivedAmount', width: '90px', align: 'right', render: (text) => {text}, onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'Balance', dataIndex: 'Balance', key: 'Balance', width: '85px', align: 'right', render: (text, record) => { let finalBalance; const balance = calculateBalance(record); if (balance >= 0) { finalBalance = ( balance - (record?.OverallReceivedAmount || 0) ).toFixed(2); } else { finalBalance = ( balance + (record?.OverallReceivedAmount || 0) ).toFixed(2); } return ( {finalBalance < 0 ? Math.abs(finalBalance) : 0} ); }, onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, { title: 'Advance', dataIndex: 'Balance', key: 'Balance', align: 'right', render: (text, record) => { let finalAdvance; const balance = calculateBalance(record); if (balance >= 0) { finalAdvance = ( balance - (record?.OverallReceivedAmount || 0) ).toFixed(2); } else { finalAdvance = ( balance + (record?.OverallReceivedAmount || 0) ).toFixed(2); } return ( {finalAdvance > 0 ? Math.abs(finalAdvance) : 0} ); }, onCell: (record) => ({ onClick: () => { vieworders(record); }, }), }, ]; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const rangePresets = [ { label: 'Last 7 Days', value: [dayjs().add(-7, 'd'), dayjs()], }, { label: 'Last 14 Days', value: [dayjs().add(-14, 'd'), dayjs()], }, { label: 'Last 30 Days', value: [dayjs().add(-30, 'd'), dayjs()], }, { label: 'Last 90 Days', value: [dayjs().add(-90, 'd'), dayjs()], }, ]; const dateFormat = 'DD-MM-YYYY'; const onRangeChange = async (dates, dateStrings) => { let fromDateVal = dateStrings[0]?.split('-'); let toDateVal = dateStrings[1]?.split('-'); if (dates) { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, FromDate: fromDateVal[2] + '-' + fromDateVal[1] + '-' + fromDateVal[0], ToDate: toDateVal[2] + '-' + toDateVal[1] + '-' + toDateVal[0], }; let gettingTableData = await dispatch( sellergetAbstractList(data) ).unwrap(); if (gettingTableData?.data?.statusCode === 1) { setTableData(gettingTableData?.data?.data); } else { setTableData([]); } } }; const disabledDate = (current) => { // Can not select days before today and today return current && current > dayjs().endOf('day'); }; return (
{orderModel && (

Order Details

{ORTableData?.length > 0 && ( <>
Received
)}
} handleCancel={() => { setOrderModel(false); }} /> )}
0 ? 'DateWiseReport-printerIcon' : 'DateWiseReport-printerIcon-disabled' } onClick={() => { printSet(); }} />
{ let totalOBBalanceAmount = pageData?.reduce((sum, item) => { return ( sum + (item.OpeningBalance < 0 ? item.OpeningBalance : 0) ); }, 0); let totalOBAdvanceAmount = pageData?.reduce((sum, item) => { return ( sum + (item.OpeningBalance > 0 ? item.OpeningBalance : 0) ); }, 0); let totalSalesAmount = pageData?.reduce( (sum, item) => sum + item.OverallSales, 0 ); // let totalCommissionAmount = pageData?.reduce((sum, item) => sum + (item.CommissionAmount || 0), 0); let totalExtraChargeAmount = pageData?.reduce( (sum, item) => sum + (item.ExtraChargeAmount || 0), 0 ); let totalAmount = pageData?.reduce( (sum, item) => sum + (item?.OverallSales - (item?.CommissionAmount || 0) + (item?.ExtraChargeAmount || 0)), 0 ); let totalGrandTotalAmount = pageData?.reduce((sum, item) => { return sum + calculateBalance(item); }, 0); let totalRecivedAmount = pageData?.reduce((sum, item) => { const receivedAmount = item?.OverallReceivedAmount || 0; return sum + receivedAmount; }, 0); let totalBalanceAmount = pageData?.reduce((sum, item) => { const balance = calculateFinalBalance(item); return sum + (balance < 0 ? balance : 0); }, 0); let totalAdvanceAmount = pageData?.reduce((sum, item) => { const advance = calculateFinalBalance(item); return sum + (advance > 0 ? advance : 0); }, 0); return ( <> Total {Math.abs(totalOBBalanceAmount)} {totalOBAdvanceAmount} {totalSalesAmount} {/* {totalCommissionAmount?.toFixed(2)} */} {totalExtraChargeAmount?.toFixed(2)} {totalAmount?.toFixed(2)} {Math.abs(totalGrandTotalAmount?.toFixed(2))} {totalRecivedAmount} {Math.abs(totalBalanceAmount)} {totalAdvanceAmount} ); }} />{' '}
{totalPages > 1 && (
{[...Array(totalPages)].map((_, pageIndex) => ( ))}
)}
); }; export default WholeSaleSellerAbstract;