import React, { useEffect, useState, useRef, useContext, useCallback, } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Select, Tooltip } from 'antd'; import { Form, Input, Table } from 'antd'; import { EditFilled, DeleteFilled, ArrowRightOutlined, } from '@ant-design/icons'; import { PutStockPrice, bulkPriceUpdate, getStockNames, } from '../../Features/StockPriceUpdate/StockPriceUpdateMaster'; import { dateFormatChange, ExtractDateFormate, getSession, } from '../../Services/Others'; import { DefaultModal } from '../../Components/Modal/DefaultModal'; import { Tables } from '../../Components/Tables/Table'; import Buttons from '../../Components/Forms/Buttons'; import { Messages } from '../../Components/Notifications/Messages'; import { changeBreadCrumb, getEmpAccess, } from '../../Features/AppPage/CenterPage.js'; import FormHeader from '../PageComponents/FormHeader'; import Search from '../../Components/Forms/Search'; import { RadioGrpButton } from '../../Components/Forms/RadioGroup.jsx'; import { useAuth } from '../../AuthContext.jsx'; import '../../Styles/OverAllStyle/OverAllStyle.scss'; import { getPreferenceData } from '../../Features/BookingScreen/BookingData/BookingData.js'; import { DropDowns } from '../../Components/Forms/DropDown.jsx'; import { FiDelete, FiUploadCloud } from 'react-icons/fi'; import { CiExport } from 'react-icons/ci'; import Excelupldimg from '../../Images/Excel.png'; import { emptyExcelData, fileInputRefSelector, } from '../../Features/ExcelUploadPage/ExcelUploadPage.js'; const subDirectory = import.meta.env.BASE_URL; import ExcelJS from 'exceljs'; import { read, utils } from 'xlsx'; import { v4 as uuidv4 } from 'uuid'; import { InputField } from '../../Components/Forms/InputField.jsx'; import { MdOutlineAppRegistration } from 'react-icons/md'; import { getFieldSetupData, postFieldSetup, } from '../../Features/ProductPage/ProductPage.js'; import { ApplicationPreferences, getCommonAppPreference, } from '../../Features/BrachLogin/BranchLogin.js'; import { IoClose } from 'react-icons/io5'; const StockPriceUpdate = () => { const { SadminuserAccess } = useAuth(); let SAAccessCommonMaster = SadminuserAccess?.find( (e) => e?.MenuName === 'Price Change' ); const ApplicationPreferenceData = useSelector(ApplicationPreferences); const categoryId = ApplicationPreferenceData?.find( (p) => p?.PreferredCatName?.toLowerCase() === 'price change fields' )?.PreferredCatId; const fileInputRef = useRef(fileInputRefSelector); const excelDataRef = useRef(null); const formRef = useRef(null); const allowedExcelTypes = [ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // .xlsx 'application/vnd.ms-excel', // .xls ]; const dispatch = useDispatch(); const [selectedFields, setSelectedFields] = useState([]); const [tableFieldPreferences, setTableFieldPreferences] = useState([]); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [StockNames, setStockNames] = useState([]); const [ProductName, setProductName] = useState(null); const [StockDetails, setStockDetails] = useState([]); const [dataSource, setDataSource] = useState([]); const [sortedInfo, setSortedInfo] = useState({}); const [BulksortedInfo, setBulksortedInfo] = useState({}); const [searchedText, setSearchedText] = useState(''); const [BulksearchedText, setBulksearchedText] = useState(''); const [filteredInfo, setFilteredInfo] = useState({}); const [page, setpage] = useState(1); const [Bulkchangepage, setBulkchangepage] = useState(1); const [pageSize, setPageSize] = useState(10); const [openEditModal, setOpenEditModal] = useState(false); const [open, setOpen] = useState(false); const [excelModalOpen, setExcelModalOpen] = useState(false); const [priceChangeModalOpen, setPriceChangeModalOpen] = useState(false); const [stockVariantBased, setStockVariantBased] = useState('Yes'); const [exportLoading, setExportLoading] = useState(false); const [loading, setLoading] = useState(false); const [uploadedData, setUploadedData] = useState([]); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const AppId = getSession('AppId'); const UserId = getSession('UserId'); const UserType = getSession('UserType'); const [empData, setEmpData] = useState(); const [addnewAccess, setaddnewAccess] = useState(true); const [RadioSelection, setRadioSelection] = useState('Single'); const [BulkProductData, setBulkProductData] = useState([]); const [allowDecimal, setAllowDecimal] = useState(false); const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, ]; const handleRemoveRecord = (index) => { setUploadedData((prev) => prev.filter((_, i) => i !== index)); }; const columns = [ { title: 'Product Name', dataIndex: 'ProductName', key: 'ProductName', width: 180, render: (value, record, index) => (
{`${value} (${record?.Size} ${record?.UOMName})`}
), }, { title: 'Variant Name', dataIndex: 'VariantName', key: 'VariantName', width: 180, }, { title: 'Batch No', dataIndex: 'BatchRef', key: 'BatchRef', width: 180, }, { title: 'Stock', dataIndex: 'Stock', key: 'Stock', width: 80, }, { title: 'Stock Date', dataIndex: 'StockDate', key: 'StockDate', width: 80, }, { title: 'Old MRP', dataIndex: 'OldMRP', key: 'OldMRP', width: 100, }, { title: 'Old SP', dataIndex: 'OldSP', key: 'OldSP', width: 100, }, { title: 'Old Wholesale Price', dataIndex: 'OldWholeSalePrice', key: 'OldWholeSalePrice', width: 140, }, // ✅ EDITABLE { title: 'New MRP', dataIndex: 'NewMRP', key: 'NewMRP', width: 120, render: (_, record, index) => ({text ? text : 'Enter MRP'}
, width: 100, }, { title: 'New SP', dataIndex: 'CurrentAmt', key: 'CurrentAmt', align: 'right', editable: true, render: (text, record) =>{text ? text : 'Enter Price'}
, width: 100, }, { title: 'Action', dataIndex: 'SellPrice', key: 'SellPrice', align: 'center', width: '100px', render: (_, record, index) => ({text ? text : 'Enter MRP'}
, width: 100, }, { title: 'New SP', dataIndex: 'CurrentAmt', key: 'CurrentAmt', align: 'center', with: '4rem', editable: true, render: (text, record) =>{text ? text : 'Enter Price'}
, width: 100, }, ]; const HandleStockNames = (e, option) => { const newStockDetails = option?.stockDetails || []; // Check if any of the new products already exist in StockDetails setStockDetails((prevStockDetails) => { const existingInwardDtlIds = new Set( prevStockDetails?.map((item) => item.InwardDtlId) ); const uniqueNewStockDetails = newStockDetails ?.filter((item) => !existingInwardDtlIds.has(item.InwardDtlId)) ?.map((detail) => ({ ...detail, UOMName: option?.QuantityName, UOM: option?.Quantity, })); return [...prevStockDetails, ...uniqueNewStockDetails]; }); setProductName(option?.label); }; // const handleCancel = () => { // setOpen(false); // setOpenEditModal(false); // }; // const HandleSubmit = () => { // const newStockDetails = dataSource || []; // const filteredCurrentAmtData = newStockDetails?.filter( // (item) => // item.CurrentAmt !== undefined && // item.CurrentAmt !== null && // item.CurrentMRP !== undefined && // item.CurrentMRP !== null // ); // if (filteredCurrentAmtData?.length > 0) { // setStockDetails((prevStockDetails) => { // const existingInwardDtlIds = new Set( // prevStockDetails?.map((item) => item.InwardDtlId) // ); // const uniqueNewStockDetails = filteredCurrentAmtData?.filter( // (item) => !existingInwardDtlIds.has(item.InwardDtlId) // ); // let beforeFinal = [...prevStockDetails, ...uniqueNewStockDetails]; // const existingInwardDtlIds2 = new Set( // filteredCurrentAmtData?.map((item) => item.InwardDtlId) // ); // const uniqueNewStockDetails2 = beforeFinal?.filter( // (item) => !existingInwardDtlIds2.has(item.InwardDtlId) // ); // return [...filteredCurrentAmtData, ...uniqueNewStockDetails2]; // }); // setOpen(false); // } else { // setMessageType('error'); // setMessageData('Please give all details'); // } // }; const HandlePutData = async () => { if (RadioSelection == 'Bulk') { const filteredCurrentAmtData = BulkProductData?.filter( (item) => item.CurrentAmt !== undefined && item.CurrentAmt !== null && item.CurrentMRP !== '' && item.CurrentAmt !== '' && item.CurrentMRP !== undefined && item.CurrentMRP !== null && item.CurrentMRP !== '' && item.CurrentAmt !== '' ); const hasInvalidData = BulkProductData.every((item) => { const isAbsent = item.CurrentAmt == null && item.CurrentMRP == null; const isPresent = item.CurrentAmt != null && item.CurrentMRP != null; return isAbsent || isPresent; }); if (filteredCurrentAmtData?.length > 0 && hasInvalidData) { let Postdata = { CompId: CompId, BranchId: BranchId, ProductDetails: filteredCurrentAmtData?.map((item) => ({ ProdId: item?.ProdId, MRP: item?.CurrentMRP, SellPrice: item?.CurrentAmt, AdjComment: 'string', InwardDtlId: item?.InwardDtlId, })), }; let response = await dispatch(PutStockPrice(Postdata)).unwrap(); if (response?.data?.statusCode == 1) { setProductName(); setMessageType('success'); setMessageData(response?.data?.response); fetchData(); setBulksearchedText(''); setStockDetails([]); setBulkProductData([]); } else { setMessageType('error'); setMessageData(response?.data?.response); } } else { setMessageType('error'); setMessageData('Please give all details'); } } else { const filteredStockDetails = StockDetails?.filter( (item) => item?.CurrentMRP && item?.CurrentMRP !== '' && item?.CurrentAmt && item?.CurrentAmt !== '' ); if (filteredStockDetails?.length === 0) { setMessageType('error'); setMessageData('Please enter price details for at least one product'); return; } let data = { CompId: CompId, BranchId: BranchId, ProductDetails: filteredStockDetails?.map((item) => ({ ProdId: item?.ProdId, MRP: item?.CurrentMRP, SellPrice: item?.CurrentAmt, AdjComment: 'string', InwardDtlId: item?.InwardDtlId, })), UpdatedBy: 1, AppId: AppId, }; let response = await dispatch(PutStockPrice(data)).unwrap(); let res = await dispatch(getStockNames(data)).unwrap(); setStockNames(res?.data?.data); if (response?.data?.statusCode == 1) { setProductName(); setMessageType('success'); setMessageData(response?.data?.response); fetchData(); } else { setMessageType('error'); setMessageData(response?.data?.response); } setStockDetails([]); } }; // const HandleEditSubmit = () => { // let newStockDetails = dataSource || []; // let filteredInverd = StockDetails?.filter( // (item) => item.InwardDtlId !== newStockDetails?.[0].InwardDtlId // ); // filteredInverd.push(newStockDetails?.[0]); // setStockDetails(filteredInverd); // setOpenEditModal(false); // }; // const columns = defaultColumns?.map((col) => { // if (!col.editable) { // return col; // } // return { // ...col, // onCell: (record) => ({ // record, // editable: col.editable, // dataIndex: col.dataIndex, // title: col.title, // handleSave, // }), // }; // }); const columns2WithEditable = columns2?.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record) => ({ record, editable: col.editable, dataIndex: col.dataIndex, title: col.title, handleSave, }), }; }); const BulkPriceColumns = BulkPricechangeColumns?.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record) => ({ record, editable: col.editable, dataIndex: col.dataIndex, title: col.title, handleSave, }), }; }); const handlePageChange = (current) => { setpage(current); }; const handlePageChangeBulk = (current) => { setBulkchangepage(current); setPageSize(pageSize); }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const onSearch = (value) => { setSearchedText(value); }; const onSearchBulk = (value) => { setBulksearchedText(value); }; const onSearchChange = (e) => { setSearchedText(e?.target?.value); }; const onSearchChangeBulk = (e) => { setBulksearchedText(e?.target?.value); }; const handleChange = (pagination, filters, sorter) => { setFilteredInfo(filters); setSortedInfo(sorter); }; const handleChangeBulk = (pagination, filters, sorter) => { setBulksortedInfo(sorter); }; const onRadioChange = (data) => { setRadioSelection(data); }; const handleUploadExcel = () => { setExcelModalOpen(true); }; const handleFieldSetup = () => { setFieldSetup(true); }; const showPriceChangeModal = () => { setPriceChangeModalOpen(true); }; const handleExport = async (isStockVariantBased = 'Yes') => { setExportLoading(true); setPriceChangeModalOpen(false); const uniqueBulkProductData = isStockVariantBased === 'Yes' ? BulkProductData || [] : (BulkProductData || [])?.filter( (item, index, self) => index === self.findIndex((p) => p.ProdId === item.ProdId) ); if (!uniqueBulkProductData?.length) { setMessageType('error'); setMessageData('No data available to export'); setExportLoading(false); return; } const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('Products'); /* ---------------- COLUMN DEFINITIONS ---------------- */ const columns = [ { header: 'Product Name', key: 'ProdName', width: 20 }, ...(isStockVariantBased === 'Yes' ? [{ header: 'Variant Name', key: 'ProdVariantName', width: 20 }] : []), ...(isStockVariantBased === 'Yes' ? [{ header: 'Batch No', key: 'BatchRef', width: 20 }] : []), { header: 'Stock Date', key: 'StockDate', width: 15 }, { header: 'Exp Date', key: 'ExpDate', width: 15 }, { header: 'Stock', key: 'Stock', width: 10 }, { header: 'Old MRP', key: 'OldMRP', width: 10 }, { header: 'Old SP', key: 'OldSP', width: 10 }, { header: 'Old Wholesale Price', key: 'WhSalePrice', width: 14 }, { header: 'Size', key: 'Size', width: 10 }, { header: 'Stock Maintainence', key: 'StockAvailable', width: 18 }, { header: 'UOMName', key: 'UOMName', width: 15 }, { header: 'New MRP', key: 'NewMRP', width: 12 }, { header: 'New SP', key: 'NewSP', width: 12 }, { header: 'New Wholesale Price', key: 'NewWhSalePrice', width: 14 }, { header: 'ProdId', key: 'ProdId', width: 1 }, ...(isStockVariantBased === 'Yes' ? [{ header: 'InwardDtlId', key: 'InwardDtlId', width: 1 }] : []), { header: 'key', key: 'key', width: 1 }, { header: 'downloadType', key: 'downloadType', width: 1 }, ]; worksheet.columns = columns; worksheet.views = [{ state: 'frozen', xSplit: 1, ySplit: 1 }]; const headerRow = worksheet.getRow(1); const newMRPCol = headerRow.values.indexOf('New MRP'); const newSPCol = headerRow.values.indexOf('New SP'); /* ---------------- HEADER STYLE ---------------- */ worksheet.getRow(1).eachCell((cell) => { const header = cell.value; const isHiddenCol = header === 'key' || header === 'ProdId' || header === 'InwardDtlId' || header === 'downloadType'; cell.font = { bold: true, size: isHiddenCol ? 1 : 11, color: { argb: isHiddenCol ? 'FFFFFFFF' : 'FF000000' }, }; cell.alignment = { horizontal: 'center', vertical: 'middle', wrapText: true, // ✅ prevents overflow in header }; cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: isHiddenCol ? 'FFFFFFFF' : 'FF52C41A', }, }; cell.border = isHiddenCol ? undefined : { right: { style: 'thin', color: { argb: 'FF000000' } }, bottom: { style: 'thin', color: { argb: 'FF000000' } }, }; }); /* ---------------- ADD DATA ---------------- */ uniqueBulkProductData.forEach((product) => { worksheet.addRow({ ProdName: product?.ProdName, ProdVariantName: product?.ProdVariantName, BatchRef: product?.BatchRef, StockDate: product?.InwardDate, ExpDate: product?.ExpDate || '-', Stock: product?.BalanceQty, OldMRP: product?.MRP, OldSP: product?.SellPrice, WhSalePrice: product?.WhSalePrice, Size: product?.Size, StockAvailable: product?.StockAvailable, UOMName: product?.UOMName, key: product?.key, downloadType: isStockVariantBased === 'Yes' ? 'Variant' : 'Product', NewMRP: '', NewSP: '', NewWhSalePrice: '', ProdId: product?.ProdId, InwardDtlId: isStockVariantBased === 'Yes' ? product?.InwardDtlId : undefined, }); }); // ---------------- VALIDATION: New SP <= New MRP ---------------- worksheet.eachRow({ includeEmpty: true }, (row, rowNumber) => { if (rowNumber === 1) return; // skip header const newMRPCell = row.getCell(newMRPCol); const newSPCell = row.getCell(newSPCol); newSPCell.dataValidation = { type: 'custom', allowBlank: true, formulae: [ `IFERROR(VALUE(${newSPCell.address}),0) <= IFERROR(VALUE(${newMRPCell.address}),0)`, ], showErrorMessage: true, errorStyle: 'stop', errorTitle: 'Invalid Selling Price', error: 'New SP cannot be greater than New MRP', }; }); /* ---------------- UNLOCK EVERYTHING ---------------- */ worksheet.eachRow({ includeEmpty: true }, (row) => { row.eachCell({ includeEmpty: true }, (cell) => { cell.protection = { locked: false }; }); }); /* ---------------- LOCK HEADER ---------------- */ worksheet.getRow(1).eachCell((cell) => { cell.protection = { locked: true }; }); worksheet.getRow(1).height = 32; /* ---------------- LOCK ALL EXCEPT New MRP & New SP ---------------- */ worksheet.eachRow({ includeEmpty: true }, (row, rowNumber) => { if (rowNumber === 1) return; row.eachCell((cell, colNumber) => { const header = worksheet.getRow(1).getCell(colNumber).value; const isHiddenCol = header === 'key' || header === 'ProdId' || header === 'InwardDtlId' || header === 'downloadType'; const isEditable = header === 'New MRP' || header === 'New SP' || header === 'New Wholesale Price'; cell.protection = { locked: !isEditable }; cell.alignment = { vertical: 'middle', wrapText: true, }; if (isHiddenCol) { cell.font = { size: 1, color: { argb: 'FFFFFFFF' }, }; cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFFFFF' }, }; } }); }); /* ---------------- PROTECT SHEET ---------------- */ await worksheet.protect('', { selectLockedCells: false, selectUnlockedCells: true, formatCells: false, formatColumns: false, insertRows: false, deleteRows: false, }); /* ---------------- DOWNLOAD ---------------- */ const buffer = await workbook.xlsx.writeBuffer(); const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', }); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = 'PriceChange_Data.xlsx'; link.click(); setExportLoading(false); }; const handleClick = () => { fileInputRef.current.click(); }; const handleFileUpload = (e) => { const file = e.target.files[0]; if (!file) { dispatch(emptyExcelData()); return; } const isAllowed = allowedExcelTypes?.includes(file.type); if (!isAllowed) { Modal.error({ title: 'Invalid File Type', content: 'Only Excel files (.xls, .xlsx) are allowed.', }); handleCancelData(); return; } const reader = new FileReader(); reader.onload = (event) => { const arrayBuffer = event.target.result; const extractedData = extractPriceChangeDataFromExcel(arrayBuffer); console.log(extractedData, 'extractedData'); if ((extractedData || [])?.length === 0) { setMessageData('No Data Found in Uploaded Sheet'); setMessageType('error'); handleCancelData(); return; } setUploadedData(extractedData); // setFormValuesFromExtractedData(extractedData); }; reader.readAsArrayBuffer(file); // ✅ THIS IS REQUIRED }; const setFormValuesFromExtractedData = (data) => { const formValues = {}; data.forEach((item) => { const id = item.localId; if (item.NewMRP !== null && item.NewMRP !== undefined) { formValues[`NewMRP${id}`] = item.NewMRP; } if (item.NewSellPrice !== null && item.NewSellPrice !== undefined) { formValues[`NewSellPrice${id}`] = item.NewSellPrice; } if ( item.NewWholeSalePrice !== null && item.NewWholeSalePrice !== undefined ) { formValues[`NewWholeSalePrice${id}`] = item.NewWholeSalePrice; } }); excelDataRef.current?.setFieldsValue(formValues); }; const extractPriceChangeDataFromExcel = (arrayBuffer) => { const workbook = read(arrayBuffer, { type: 'array' }); const worksheet = workbook.Sheets[workbook.SheetNames[0]]; const rows = utils.sheet_to_json(worksheet, { header: 1, raw: false, defval: '', }); if (!rows.length) return []; const header = rows[0]; const dataRows = rows.slice(1); // Helper to safely get column value const getVal = (row, colName) => { const idx = header.indexOf(colName); return idx !== -1 ? row[idx] : ''; }; const result = dataRows .map((row) => { const prodId = getVal(row, 'ProdId')?.toString().trim(); if (!prodId) return null; const newMRP = getVal(row, 'New MRP') !== '' ? Number(getVal(row, 'New MRP')) : null; const newSP = getVal(row, 'New SP') !== '' ? Number(getVal(row, 'New SP')) : null; const newWholesale = getVal(row, 'New Wholesale Price') !== '' ? Number(getVal(row, 'New Wholesale Price')) : null; // ❌ Must have at least one change if (newMRP === null && newSP === null && newWholesale === null) { return null; } return { // 🔹 Product identity localId: uuidv4(), ProdId: prodId, InwardDtlId: getVal(row, 'InwardDtlId') ? getVal(row, 'InwardDtlId').toString() : null, // 🔹 Product info VariantName: getVal(row, 'Variant Name') || null, BatchRef: getVal(row, 'Batch No') || null, ProductName: getVal(row, 'Product Name') || null, Size: getVal(row, 'Size') || null, UOMName: getVal(row, 'UOMName') || null, StockMaintainence: getVal(row, 'Stock Maintainence') || null, // 🔹 Stock / dates StockDate: getVal(row, 'Stock Date') || null, ExpDate: getVal(row, 'Exp Date') || null, downloadType: getVal(row, 'downloadType') || null, Stock: getVal(row, 'Stock') !== '' ? Number(getVal(row, 'Stock')) : null, // 🔹 Old prices OldMRP: getVal(row, 'Old MRP') !== '' ? Number(getVal(row, 'Old MRP')) : null, OldSP: getVal(row, 'Old SP') !== '' ? Number(getVal(row, 'Old SP')) : null, OldWholeSalePrice: getVal(row, 'Old Wholesale Price') !== '' ? Number(getVal(row, 'Old Wholesale Price')) : null, // 🔹 New prices (normalized) NewMRP: newMRP, NewSellPrice: newSP, NewWholeSalePrice: newWholesale, }; }) .filter(Boolean); return result; }; const handleCancelData = () => { dispatch(emptyExcelData()); if (fileInputRef.current) { fileInputRef.current.value = ''; } setUploadedData([]); }; const handleSubmit = async () => { try { const formValues = excelDataRef.current?.getFieldsValue(); // Validate all records for (let i = 0; i < uploadedData.length; i++) { const record = uploadedData[i]; const newMRP = formValues[`NewMRP${record.localId}`]; const newSP = formValues[`NewSellPrice${record.localId}`]; // If MRP is present, SP must also be present if (newMRP && !newSP) { setMessageType('error'); setMessageData( 'If New MRP is provided, New SP must also be provided' ); return; } // If SP is present, MRP must also be present if (newSP && !newMRP) { setMessageType('error'); setMessageData( 'If New SP is provided, New MRP must also be provided' ); return; } // New SP cannot be greater than New MRP if (newMRP && newSP && parseFloat(newSP) > parseFloat(newMRP)) { setMessageType('error'); setMessageData('New SP cannot be greater than New MRP'); return; } } const updatedData = uploadedData ?.filter((data) => { const hasMRP = !!data?.NewMRP; const hasSell = !!data?.NewSellPrice; const hasWholesale = !!data?.NewWholeSalePrice; // valid cases if (hasMRP && hasSell) return true; if (!hasMRP && !hasSell && hasWholesale) return true; return false; }) ?.map((data) => ({ ProdId: data?.ProdId, InwardDtlId: data?.InwardDtlId, NewSellPrice: data?.NewSellPrice, NewMRP: data?.NewMRP, NewWholeSalePrice: data?.NewWholeSalePrice, AdjComment: 'string', })); const putData = { AppId: AppId, CompId: CompId, BranchId: BranchId, Type: uploadedData?.[0]?.downloadType, ProductDetails: updatedData, CreatedBy: UserId, }; const res = await dispatch(bulkPriceUpdate(putData))?.unwrap(); if (res?.data?.statusCode === 1) { setMessageData(res?.data?.response || 'Price Updated Successfully'); setMessageType('success'); setUploadedData([]); handleCancelData(); setExcelModalOpen(false); await fetchData(); } else { setMessageData(res?.data?.response); setMessageType('error'); } // If validation passes, proceed with submission console.log('Form validation passed', updatedData); } catch (error) { setMessageType('error'); setMessageData('Please check all fields and try again'); } }; return (