Merge pull request 'Missed Functions' (#94) from feature/pricebulkchanges into main

Reviewed-on: Pozomind/pozo-retail-app#94
This commit is contained in:
karthikalakshmi 2026-02-06 15:44:50 +05:30
commit c8202c696a
3 changed files with 197 additions and 186 deletions

View File

@ -158,7 +158,7 @@ const ProductList = () => {
UomTypePreference?.some?.(
(e) =>
e?.PreferredSubCatName?.toLowerCase() ==
item?.ConfigName?.toLowerCase() && e?.PreferredStatus == 'Y'
item?.ConfigName?.toLowerCase() && e?.PreferredStatus == 'Y'
)
);
@ -965,19 +965,19 @@ const ProductList = () => {
},
...(brandColumn && subCategory
? [
{
title: 'Brand',
dataIndex: 'BrandName',
key: 'BrandName',
columnKey: 'BrandName',
width: '100px',
render: (text) => <a style={{ color: 'black' }}>{text}</a>,
sorter: (a, b) => a?.BrandName?.localeCompare(b?.BrandName),
sortOrder:
sortedInfo.columnKey === 'BrandName' ? sortedInfo.order : null,
ellipsis: true,
},
]
{
title: 'Brand',
dataIndex: 'BrandName',
key: 'BrandName',
columnKey: 'BrandName',
width: '100px',
render: (text) => <a style={{ color: 'black' }}>{text}</a>,
sorter: (a, b) => a?.BrandName?.localeCompare(b?.BrandName),
sortOrder:
sortedInfo.columnKey === 'BrandName' ? sortedInfo.order : null,
ellipsis: true,
},
]
: []),
{
@ -996,127 +996,127 @@ const ProductList = () => {
...(qrCodeColumn
? [
{
title: 'QRCode',
dataIndex: 'QRCode',
key: 'QRCode',
width: '100px',
align: 'center',
render: (text) => (
<a style={{ color: 'black' }}>{text ? text : '-'}</a>
),
ellipsis: true,
},
{
title: (
<Tooltip title=" printing multiple QR codes">
<Space>
{MultiCode && (
<input
type="checkbox"
checked={
selectedRecords.length > 0 &&
productData
.filter((p) => p?.QRCode)
.every((p) =>
selectedRecords.some((r) => r.ProdId === p.ProdId)
)
}
onChange={(e) => {
const productsWithQR = productData.filter(
(p) => p?.QRCode
);
if (e.target.checked) {
const newSelections = productsWithQR.filter(
(p) =>
!selectedRecords.some(
(r) => r.ProdId === p.ProdId
)
);
setSelectedRecords((prev) => [
...prev,
...newSelections,
]);
// Create QR codes for newly selected products
CreateQrcodesBatch(newSelections, true);
} else {
// Remove QR codes for deselected products
CreateQrcodesBatch(productsWithQR, false);
setSelectedRecords((prev) =>
prev.filter(
(r) =>
!productsWithQR.some(
(p) => p.ProdId === r.ProdId
)
{
title: 'QRCode',
dataIndex: 'QRCode',
key: 'QRCode',
width: '100px',
align: 'center',
render: (text) => (
<a style={{ color: 'black' }}>{text ? text : '-'}</a>
),
ellipsis: true,
},
{
title: (
<Tooltip title=" printing multiple QR codes">
<Space>
{MultiCode && (
<input
type="checkbox"
checked={
selectedRecords.length > 0 &&
productData
.filter((p) => p?.QRCode)
.every((p) =>
selectedRecords.some((r) => r.ProdId === p.ProdId)
)
}
onChange={(e) => {
const productsWithQR = productData.filter(
(p) => p?.QRCode
);
if (e.target.checked) {
const newSelections = productsWithQR.filter(
(p) =>
!selectedRecords.some(
(r) => r.ProdId === p.ProdId
)
);
}
}}
/>
)}
<span>Print QRCode</span>
<CheckSquareOutlined
style={{
fontSize: '18px',
cursor: 'pointer',
color: MultiCode ? '#1890ff' : '#666',
}}
onClick={() => {
setMultiCode((prev) => {
const newValue = !prev;
if (!newValue) {
setSelectedRecords([]);
}
return newValue;
});
);
setSelectedRecords((prev) => [
...prev,
...newSelections,
]);
// Create QR codes for newly selected products
CreateQrcodesBatch(newSelections, true);
} else {
// Remove QR codes for deselected products
CreateQrcodesBatch(productsWithQR, false);
setSelectedRecords((prev) =>
prev.filter(
(r) =>
!productsWithQR.some(
(p) => p.ProdId === r.ProdId
)
)
);
}
}}
/>
</Space>
</Tooltip>
),
key: 'Print',
dataIndex: 'Print',
width: '100px',
align: 'center',
render: (_, record) =>
productData.length >= 1 ? (
<Space size="middle">
{MultiCode ? (
record?.QRCode ? (
<input
type="checkbox"
checked={selectedRecords.some(
(r) => r.ProdId == record.ProdId
)}
onChange={(e) => {
handleCheckboxChange(record, e.target.checked);
CreateQrcode(
e.target.checked,
record.QRCode,
record?.ProdName,
record?.StockAvailable,
record?.TotalBalanceQty
);
}}
/>
) : (
'-'
)
) : record?.QRCode ? (
<a>
<PrinterFilled
style={{ fontSize: '20px' }}
onClick={() => Qrcode(record)}
/>
</a>
)}
<span>Print QRCode</span>
<CheckSquareOutlined
style={{
fontSize: '18px',
cursor: 'pointer',
color: MultiCode ? '#1890ff' : '#666',
}}
onClick={() => {
setMultiCode((prev) => {
const newValue = !prev;
if (!newValue) {
setSelectedRecords([]);
}
return newValue;
});
}}
/>
</Space>
</Tooltip>
),
key: 'Print',
dataIndex: 'Print',
width: '100px',
align: 'center',
render: (_, record) =>
productData.length >= 1 ? (
<Space size="middle">
{MultiCode ? (
record?.QRCode ? (
<input
type="checkbox"
checked={selectedRecords.some(
(r) => r.ProdId == record.ProdId
)}
onChange={(e) => {
handleCheckboxChange(record, e.target.checked);
CreateQrcode(
e.target.checked,
record.QRCode,
record?.ProdName,
record?.StockAvailable,
record?.TotalBalanceQty
);
}}
/>
) : (
'-'
)}
</Space>
) : null,
},
]
)
) : record?.QRCode ? (
<a>
<PrinterFilled
style={{ fontSize: '20px' }}
onClick={() => Qrcode(record)}
/>
</a>
) : (
'-'
)}
</Space>
) : null,
},
]
: []),
{
@ -1134,11 +1134,11 @@ const ProductList = () => {
style={{ color: '#1292EE' }}
onClick={() =>
UserType === 'Super Admin' ||
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.UpdateAccess === 'Y') ||
(UserType === 'Employee' &&
empData?.UpdateAccess === 'Y') ||
UserType === 'Admin'
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.UpdateAccess === 'Y') ||
(UserType === 'Employee' &&
empData?.UpdateAccess === 'Y') ||
UserType === 'Admin'
? actionsFormatter(record, index)
: null
}
@ -1155,11 +1155,11 @@ const ProductList = () => {
}}
onClick={() =>
UserType === 'Super Admin' ||
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.DeleteAccess === 'Y') ||
(UserType === 'Employee' &&
empData?.DeleteAccess === 'Y') ||
UserType === 'Admin'
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.DeleteAccess === 'Y') ||
(UserType === 'Employee' &&
empData?.DeleteAccess === 'Y') ||
UserType === 'Admin'
? statusFormatter(record)
: null
}
@ -1171,11 +1171,11 @@ const ProductList = () => {
}}
onClick={() =>
UserType === 'Super Admin' ||
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.DeleteAccess === 'Y') ||
(UserType === 'Employee' &&
empData?.DeleteAccess === 'Y') ||
UserType === 'Admin'
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.DeleteAccess === 'Y') ||
(UserType === 'Employee' &&
empData?.DeleteAccess === 'Y') ||
UserType === 'Admin'
? statusFormatter(record)
: null
}
@ -2269,7 +2269,7 @@ const ProductList = () => {
: generateBarcode(currentCode)
: !MultiCode
? base64Image
: generateQRCode(QrandbarcodeDatas, code)
: generateQRCode(QrandbarcodeDatas, currentCode)
}
alt="Barcode"
/>
@ -2641,7 +2641,7 @@ const ProductList = () => {
generateQRCodeCopy={(code) =>
generateQRCodeCopy(QrandbarcodeDatas, code)
}
generateCodeImage={generateCodeImage}
generateCodeImage={(code, codeType = 'Q') => generateCodeImage(code, codeType, QrandbarcodeDatas) }
imageTagBarcodeAndQR={imageTagBarcodeAndQR}
dropdownValue={dropdownValue}
barcodeTemplateDetails={barcodeTemplateDetails}
@ -2747,7 +2747,7 @@ const ProductList = () => {
}}
onlineImage={onlineImage}
ImageLink={rowRecord?.ProdLogo || null}
updateImageUrl={imageModalRowIndex ? updateImageUrl : () => {}}
updateImageUrl={imageModalRowIndex ? updateImageUrl : () => { }}
handleClose={handleImageModalClose}
/>
<button

View File

@ -1143,7 +1143,7 @@ const StockList = () => {
: generateBarcode(currentCode)
: !MultiCode
? base64Image
: generateQRCode(QrandbarcodeDatas, code)
: generateQRCode(QrandbarcodeDatas, currentCode)
}
alt="Barcode"
/>
@ -1393,7 +1393,7 @@ const StockList = () => {
generateQRCodeCopy={(code) =>
generateQRCodeCopy(QrandbarcodeDatas, code)
}
generateCodeImage={generateCodeImage}
generateCodeImage={(code, codeType = 'Q') => generateCodeImage(code, codeType, QrandbarcodeDatas)}
imageTagBarcodeAndQR={imageTagBarcodeAndQR}
dropdownValue={dropdownValue}
barcodeTemplateDetails={barcodeTemplateDetails}

View File

@ -1,52 +1,63 @@
import { useSelector, useDispatch } from 'react-redux';
import {
ChangeTotalAmount,
globalExtraTotalAmount,
ChangeTotalAmount,
globalExtraTotalAmount,
} from '../Features/ExteraCharges/ExtraCharges';
export const useUtilsComponent = () => {
const dispatch = useDispatch();
const extraCharges = useSelector(globalExtraTotalAmount);
const dispatch = useDispatch();
const extraCharges = useSelector(globalExtraTotalAmount);
const removeExtraCharge = (item) => {
const filtered = extraCharges?.filter((e) => e?.localId !== item?.localId);
dispatch(ChangeTotalAmount(filtered));
};
const removeExtraCharge = (item) => {
const filtered = extraCharges?.filter((e) => e?.localId !== item?.localId);
dispatch(ChangeTotalAmount(filtered));
};
return {
removeExtraCharge,
};
return {
removeExtraCharge,
};
};
export const generateBarcode = (code) => {
try {
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
JsBarcode(svg, code, {
format: 'CODE128',
displayValue: false,
lineColor: '#030303',
width: 2,
height: 40,
});
const svgData = new XMLSerializer().serializeToString(svg);
return `data:image/svg+xml;base64,${btoa(svgData)}`;
} catch (error) {
return null;
}
try {
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
JsBarcode(svg, code, {
format: 'CODE128',
displayValue: false,
lineColor: '#030303',
width: 2,
height: 40,
});
const svgData = new XMLSerializer().serializeToString(svg);
return `data:image/svg+xml;base64,${btoa(svgData)}`;
} catch (error) {
return null;
}
};
export const generateQRCode = (QrandbarcodeDatas, code) => {
let Data = QrandbarcodeDatas?.find((e) => e?.key === code)?.url;
return Data;
let Data = QrandbarcodeDatas?.find((e) => e?.key === code)?.url;
return Data;
};
export const generateQRCodeCopy = (QrandbarcodeDatas, code) => {
const found = QrandbarcodeDatas?.find((e) => e?.key === code);
const found = QrandbarcodeDatas?.find((e) => e?.key === code);
const count = Number(found?.copiesCount);
return Number.isFinite(count) && count > 0 ? count : 0;
const count = Number(found?.copiesCount);
return Number.isFinite(count) && count > 0 ? count : 0;
};
export const generateCodeImage = (code, codeType = 'Q') => {
if (codeType === 'B') {
return generateBarcode(code);
} else {
return generateQRCode(QrandbarcodeDatas, code);
}
export const generateCodeImage = (code, codeType = 'Q', QrandbarcodeDatas) => {
if (codeType === 'B') {
return generateBarcode(code);
} else {
return generateQRCode(QrandbarcodeDatas, code);
}
};
export const formatDateForAPI = (date) => {
if (!date) return '';
const d = new Date(date);
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`; // YYYY-MM-DD
};