From 5d1e06ffbf460e7801774fd5f42b04c509709d69 Mon Sep 17 00:00:00 2001 From: Srinath Date: Thu, 12 Feb 2026 13:08:57 +0530 Subject: [PATCH] added multiple seleted QR code print --- src/Pages/StockMaster/StockList.jsx | 208 +++++++++++++++++++++++----- 1 file changed, 172 insertions(+), 36 deletions(-) diff --git a/src/Pages/StockMaster/StockList.jsx b/src/Pages/StockMaster/StockList.jsx index 93fd868..068a81a 100644 --- a/src/Pages/StockMaster/StockList.jsx +++ b/src/Pages/StockMaster/StockList.jsx @@ -1,8 +1,8 @@ import { useState, useEffect, useRef, useCallback } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; -import { PlusOutlined, EyeOutlined, PrinterFilled } from '@ant-design/icons'; -import { Image, Pagination, Space, Table, Tooltip } from 'antd'; +import { PlusOutlined, EyeOutlined, PrinterFilled, CheckSquareOutlined } from '@ant-design/icons'; +import { Checkbox, Image, Pagination, Space, Table, Tooltip } from 'antd'; import { changeBreadCrumb, getEmpAccess, @@ -149,7 +149,8 @@ const StockList = () => { ]); const [SearchText, setSearchText] = useState(null); const [debouncedSearchText, setDebouncedSearchText] = useState(null); - + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [multiQrCode, setMultiQrCode] = useState(false); useEffect(() => { const timer = setTimeout(() => { setDebouncedSearchText(SearchText); @@ -276,7 +277,7 @@ const StockList = () => { }); const filteredData = debouncedSearchText ? countData || [] : data || []; - console.log(data, countData, '1111111111111111', filteredData); + console.log('1111111111111111', filteredData); async function searchData({ queryKey }) { const [_, SearchText] = queryKey; @@ -412,6 +413,62 @@ const StockList = () => { } } }; + + const handleSelectAll = (e) => { + if (e.target.checked) { + const currentPageKeys = filteredData + .filter((record) => + record?.ProdDetails?.some((item) => item?.QRCode != null) + ) + .map((record) => record.OrderId); + + setSelectedRowKeys((prev) => [ + ...new Set([...prev, ...currentPageKeys]) + ]); + } else { + const currentPageKeys = filteredData.map((record) => record.OrderId); + setSelectedRowKeys((prev) => + prev.filter((key) => !currentPageKeys.includes(key)) + ); + } + }; + const handleRowSelect = (checked, record) => { + if (checked) { + setSelectedRowKeys([...selectedRowKeys, record.OrderId]); + } else { + setSelectedRowKeys( + selectedRowKeys.filter((key) => key !== record.OrderId) + ); + } + }; + + const handleAllStickerPrint = async () => { + const Response = await dispatch( + getPurchaseData({ + AppId: AppId, + BranchId: BranchId, + CompId: CompId, + OrderFromDate: formatDateForAPI(dateStrings?.[0]) ?? '', + OrderToDate: formatDateForAPI(dateStrings?.[1]) ?? '', + }) + ).unwrap(); + + if (Response?.data?.statusCode === 1) { + const allData = Response?.data?.data || []; + const selectedRecordsData = allData.filter((record) => + selectedRowKeys.includes(record.OrderId) + ); + + const allProdDetails = selectedRecordsData.flatMap( + (record) => record.ProdDetails + ); + + setSelectedRecords(allProdDetails); + QrandBarcodeDats(allProdDetails); + setOpen(true); + } + }; + const columns = [ { title: 'Sl.No', @@ -503,29 +560,98 @@ const StockList = () => { } }, }, + // { + // title: 'Print', + // key: 'Print', + // dataIndex: 'Print', + // width: '100px', + // align: 'center', + // render: (_, record) => ( + // // productData.length >= 1 ? ( + // + // {record?.ProdDetails?.some((item) => item?.QRCode != null) ? ( + // + // Qrcode(record)} + // /> + // + // ) : ( + // '-' + // )} + // + // ), + // // ) : null, + // }, + { - title: 'Print', - key: 'Print', - dataIndex: 'Print', - width: '100px', - align: 'center', - render: (_, record) => ( - // productData.length >= 1 ? ( - - {record?.ProdDetails?.some((item) => item?.QRCode != null) ? ( - - Qrcode(record)} - /> - - ) : ( - '-' + title: ( + + {multiQrCode && ( + 0 && + filteredData + .filter((record) => + record?.ProdDetails?.some((item) => item?.QRCode != null) + ) + .every((record) => selectedRowKeys.includes(record.OrderId)) + } + /> )} + Print + { + setMultiQrCode((prev) => { + const newValue = !prev; + if (!newValue) { + setSelectedRowKeys([]); + } + return newValue; + }); + }} + /> ), - // ) : null, - }, + key: 'Print', + width: '120px', + align: 'center', + + render: (_, record) => { + const hasQRCode = record?.ProdDetails?.some( + (item) => item?.QRCode != null + ); + + if (!hasQRCode) return '-'; + + return ( + + {multiQrCode && ( + + handleRowSelect(e.target.checked, record) + } + /> + )} + {!multiQrCode && ( + Qrcode(record)} + /> + )} + + ); + }, + } + + ]; const Proddetailcolumns = [ { @@ -890,25 +1016,25 @@ const StockList = () => { PaymentAmount: PaymentAmount.toFixed(2), InvoiceDate: groupInfo.InwardDate ? moment(groupInfo.InwardDate, 'YYYY-MM-DD').format( - 'YYYY-MM-DDTHH:mm:ss' - ) + 'YYYY-MM-DDTHH:mm:ss' + ) : null, SuppInvoiceNo: groupInfo.SupplierInvoiceNumber, SuppInvoiceDate: groupInfo.SupplierInvoiceDate ? moment(groupInfo.SupplierInvoiceDate, 'YYYY-MM-DD').format( - 'YYYY-MM-DDTHH:mm:ss' - ) + 'YYYY-MM-DDTHH:mm:ss' + ) : null, DeliveryChallanNo: groupInfo.DeliveryChallanNo, DeliveryInvoiceDate: groupInfo.DeliveryInvoiceDate ? moment(groupInfo.DeliveryInvoiceDate, 'YYYY-MM-DD').format( - 'YYYY-MM-DDTHH:mm:ss' - ) + 'YYYY-MM-DDTHH:mm:ss' + ) : null, DueDate: groupInfo.DueDate ? moment(groupInfo.DueDate, 'YYYY-MM-DD').format( - 'YYYY-MM-DDTHH:mm:ss' - ) + 'YYYY-MM-DDTHH:mm:ss' + ) : null, InvoiceAmount: Totalamount.toFixed(2), TaxAmount: Totaltax.toFixed(2), @@ -926,13 +1052,13 @@ const StockList = () => { FreeQty: item.FreeQty, ManufDate: item.ManufactureDate ? moment(item.ManufactureDate, 'YYYY-MM-DD').format( - 'YYYY-MM-DDTHH:mm:ss' - ) + 'YYYY-MM-DDTHH:mm:ss' + ) : null, ExpDate: item.ExpireDate ? moment(item.ExpireDate, 'YYYY-MM-DD').format( - 'YYYY-MM-DDTHH:mm:ss' - ) + 'YYYY-MM-DDTHH:mm:ss' + ) : null, BatchNo: item.BatchNo, ModelNo: item.ModelNo, @@ -1224,7 +1350,7 @@ const StockList = () => { data={filteredData} dataSource={filteredData} onChange={handleChange} - // pagination={handlePageChange} + // pagination={handlePageChange} />{' '} {countOfProduct > 10 && ( { /> )}{' '} + {multiQrCode && selectedRowKeys.length > 0 && ( +
+ handleAllStickerPrint()} + disabled={addnewAccess} + color="901D77" + /> +
+ )}