sales bill edit print
This commit is contained in:
parent
1d64c7cd3b
commit
0340bd9e08
|
|
@ -1,518 +1,449 @@
|
|||
import { shallowEqual, useSelector } from 'react-redux';
|
||||
import {
|
||||
GlobalAccessForOthers,
|
||||
GlobalCardAccess,
|
||||
GlobalCombosearch,
|
||||
GlobalItemCard,
|
||||
GlobalProductCategorie,
|
||||
GlobalSelectedDatas,
|
||||
GlobalWithoutSubCatItemCard,
|
||||
triggerProductCard,
|
||||
} from '../../../../Features/BookingScreen/BookingData/BookingData';
|
||||
import { DefaultModal } from '../../../../Components/Modal/DefaultModal';
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { Tables } from '../../../../Components/Tables/Table';
|
||||
import { InputField } from '../../../../Components/Forms/InputField';
|
||||
import { Form, Pagination, Tooltip } from 'antd';
|
||||
import { getSession } from '../../../../Services/Others';
|
||||
import { Messages } from '../../../../Components/Notifications/Messages';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { PutStockPrice } from '../../../../Features/StockPriceUpdate/StockPriceUpdateMaster';
|
||||
import PriceChange from '../../../../Images/PayOptImgs/PriceChange.svg';
|
||||
import { shallowEqual, useSelector } from "react-redux";
|
||||
import { GlobalAccessForOthers, GlobalCardAccess, GlobalCombosearch, GlobalItemCard, GlobalProductCategorie, GlobalSelectedDatas, GlobalWithoutSubCatItemCard, triggerProductCard } from "../../../../Features/BookingScreen/BookingData/BookingData";
|
||||
import { DefaultModal } from "../../../../Components/Modal/DefaultModal";
|
||||
import { useCallback, useEffect, useRef, useState } from "react";
|
||||
import { Tables } from "../../../../Components/Tables/Table";
|
||||
import { InputField } from "../../../../Components/Forms/InputField";
|
||||
import { Form, Pagination, Tooltip } from "antd";
|
||||
import { getSession } from "../../../../Services/Others";
|
||||
import { Messages } from "../../../../Components/Notifications/Messages";
|
||||
import { useDispatch } from "react-redux";
|
||||
import { PutStockPrice } from "../../../../Features/StockPriceUpdate/StockPriceUpdateMaster";
|
||||
import PriceChange from "../../../../Images/PayOptImgs/PriceChange.svg"
|
||||
|
||||
const ProductPriceChange = ({
|
||||
showButton = true,
|
||||
priceChangeProduct = [],
|
||||
productPriceChange = false,
|
||||
setProductPriceChange = () => {},
|
||||
setPriceChangeProduct = () => {},
|
||||
}) => {
|
||||
const formRef = useRef(null);
|
||||
const dispatch = useDispatch();
|
||||
const ProductPriceChange = ({ showButton = true, priceChangeProduct = null, productPriceChange = false, setProductPriceChange = () => { }, setPriceChangeProduct = () => { } }) => {
|
||||
|
||||
const AppId = getSession('AppId');
|
||||
const CompId = getSession('CompId');
|
||||
const BranchId = getSession('BranchId');
|
||||
const UserId = getSession('UserId');
|
||||
const formRef = useRef(null);
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const [messageData, setMessageData] = useState(null);
|
||||
const [messageType, setMessageType] = useState(null);
|
||||
const [currentPage, setCurrentPage] = useState(1);
|
||||
const [pageSize] = useState(10);
|
||||
const AppId = getSession('AppId');
|
||||
const CompId = getSession('CompId');
|
||||
const BranchId = getSession('BranchId');
|
||||
const UserId = getSession('UserId');
|
||||
|
||||
const [noSubcatCardData, setNoSubcatCardData] = useState();
|
||||
const [priceChangeModal, setPriceChangeModal] = useState(false);
|
||||
const [messageData, setMessageData] = useState(null);
|
||||
const [messageType, setMessageType] = useState(null);
|
||||
const [currentPage, setCurrentPage] = useState(1);
|
||||
const [pageSize] = useState(10);
|
||||
|
||||
const comboSearch = useSelector(GlobalCombosearch);
|
||||
const ProdCat = useSelector(GlobalProductCategorie, shallowEqual);
|
||||
const ItemCard = useSelector(GlobalItemCard, shallowEqual);
|
||||
const withoutSubCatItemCard = useSelector(
|
||||
GlobalWithoutSubCatItemCard,
|
||||
shallowEqual
|
||||
);
|
||||
const CardAccess = useSelector(GlobalCardAccess, shallowEqual);
|
||||
const globalAccessForOthers = useSelector(
|
||||
GlobalAccessForOthers,
|
||||
shallowEqual
|
||||
);
|
||||
const SelectedDatas = useSelector(GlobalSelectedDatas, shallowEqual);
|
||||
const [tableData, setTableData] = useState([]);
|
||||
const [editingKey, setEditingKey] = useState(null);
|
||||
const [priceChangedProducts, setPriceChangedProducts] = useState([]);
|
||||
console.log(comboSearch, 'comboSearch');
|
||||
const [noSubcatCardData, setNoSubcatCardData] = useState();
|
||||
const [priceChangeModal, setPriceChangeModal] = useState(false);
|
||||
|
||||
// console.log(noSubcatCardData, "noSubcatCardData")
|
||||
const comboSearch = useSelector(GlobalCombosearch);
|
||||
const ProdCat = useSelector(GlobalProductCategorie, shallowEqual);
|
||||
const ItemCard = useSelector(GlobalItemCard, shallowEqual);
|
||||
const withoutSubCatItemCard = useSelector(GlobalWithoutSubCatItemCard, shallowEqual);
|
||||
const CardAccess = useSelector(GlobalCardAccess, shallowEqual);
|
||||
const globalAccessForOthers = useSelector(GlobalAccessForOthers, shallowEqual);
|
||||
const SelectedDatas = useSelector(GlobalSelectedDatas, shallowEqual);
|
||||
const [tableData, setTableData] = useState([]);
|
||||
const [editingKey, setEditingKey] = useState(null);
|
||||
const [priceChangedProducts, setPriceChangedProducts] = useState([]);
|
||||
console.log(comboSearch, "comboSearch")
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
ProdCat &&
|
||||
(ItemCard || withoutSubCatItemCard) &&
|
||||
(!noSubcatCardData || noSubcatCardData?.length === 0)
|
||||
) {
|
||||
setNoSubcatCardData(
|
||||
ItemCard?.length === 0 ? withoutSubCatItemCard : ItemCard
|
||||
);
|
||||
}
|
||||
}, [ProdCat, ItemCard, withoutSubCatItemCard, noSubcatCardData]);
|
||||
// console.log(noSubcatCardData, "noSubcatCardData")
|
||||
|
||||
const priceChangeColumns = [
|
||||
{
|
||||
title: 'S.No',
|
||||
dataIndex: 'SlNo',
|
||||
key: 'SlNo',
|
||||
width: '60px',
|
||||
align: 'center',
|
||||
render: (text, record, index) => (
|
||||
<div>{(currentPage - 1) * pageSize + index + 1}</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Product Name',
|
||||
dataIndex: 'ProdName',
|
||||
key: 'ProdName',
|
||||
},
|
||||
{
|
||||
title: 'Old MRP',
|
||||
dataIndex: 'MRP',
|
||||
key: 'MRP',
|
||||
width: '100px',
|
||||
align: 'right',
|
||||
},
|
||||
{
|
||||
title: 'New MRP (Optional)',
|
||||
dataIndex: 'NewMRP',
|
||||
key: 'NewMRP',
|
||||
width: '100px',
|
||||
align: 'right',
|
||||
render: (text, record, index) => {
|
||||
// if (index === editingKey) {
|
||||
useEffect(() => {
|
||||
if (ProdCat && (ItemCard || withoutSubCatItemCard) && (!noSubcatCardData || noSubcatCardData?.length === 0)) {
|
||||
setNoSubcatCardData(ItemCard?.length === 0 ? withoutSubCatItemCard : ItemCard);
|
||||
}
|
||||
}, [ProdCat, ItemCard, withoutSubCatItemCard, noSubcatCardData]);
|
||||
|
||||
// }
|
||||
// return <div>{text ? text : 'Enter New MRP'}</div>
|
||||
return (
|
||||
<Form.Item
|
||||
name={`NewMRP${index}`}
|
||||
rules={[
|
||||
{
|
||||
validator: async (_, value) => {
|
||||
if (value === '') {
|
||||
return Promise.resolve();
|
||||
} else if (parseFloat(value) < 1) {
|
||||
return Promise.reject(`MRP should be greater than 0`);
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
},
|
||||
]}
|
||||
>
|
||||
<InputField
|
||||
value={text}
|
||||
placeholder="Enter New MRP"
|
||||
onChange={(e) => handleNewMRPChange(e?.target?.value, index)}
|
||||
inputMode="decimal"
|
||||
onInput={(e) => {
|
||||
let cleanedValue = e.target.value.replace(/[^0-9.]/g, ''); // Remove invalid characters
|
||||
const parts = cleanedValue.split('.');
|
||||
const priceChangeColumns = [
|
||||
{
|
||||
title: 'S.No',
|
||||
dataIndex: 'SlNo',
|
||||
key: 'SlNo',
|
||||
width: '60px',
|
||||
align: 'center',
|
||||
render: (text, record, index) => <div>{(currentPage - 1) * pageSize + index + 1}</div>
|
||||
},
|
||||
{
|
||||
title: 'Product Name',
|
||||
dataIndex: 'ProdName',
|
||||
key: 'ProdName',
|
||||
},
|
||||
{
|
||||
title: 'Old MRP',
|
||||
dataIndex: 'MRP',
|
||||
key: 'MRP',
|
||||
width: '100px',
|
||||
align: 'right',
|
||||
},
|
||||
{
|
||||
title: 'New MRP (Optional)',
|
||||
dataIndex: 'NewMRP',
|
||||
key: 'NewMRP',
|
||||
width: '100px',
|
||||
align: 'right',
|
||||
render: (text, record, index) => {
|
||||
// if (index === editingKey) {
|
||||
|
||||
if (cleanedValue.startsWith('.')) {
|
||||
cleanedValue = '0' + cleanedValue;
|
||||
}
|
||||
// }
|
||||
// return <div>{text ? text : 'Enter New MRP'}</div>
|
||||
return (
|
||||
<Form.Item
|
||||
name={`NewMRP${index}`}
|
||||
rules={[
|
||||
{
|
||||
validator: async (_, value) => {
|
||||
if (value === '') {
|
||||
return Promise.resolve();
|
||||
} else if (parseFloat(value) < 1) {
|
||||
return Promise.reject(`MRP should be greater than 0`)
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
},
|
||||
]}>
|
||||
<InputField
|
||||
value={text}
|
||||
placeholder="Enter New MRP"
|
||||
onChange={(e) => handleNewMRPChange(e?.target?.value, index)}
|
||||
inputMode="decimal"
|
||||
onInput={(e) => {
|
||||
let cleanedValue = e.target.value.replace(
|
||||
/[^0-9.]/g,
|
||||
''
|
||||
); // Remove invalid characters
|
||||
const parts = cleanedValue.split('.');
|
||||
|
||||
e.target.value =
|
||||
parts.length > 2
|
||||
? `${parts[0]}.${parts.slice(1).join('')}`
|
||||
: cleanedValue;
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Old Sell Price',
|
||||
dataIndex: 'SellPrice',
|
||||
key: 'SellPrice',
|
||||
width: '120px',
|
||||
align: 'right',
|
||||
},
|
||||
{
|
||||
title: 'New Sell Price',
|
||||
dataIndex: 'NewSellPrice',
|
||||
key: 'NewSellPrice',
|
||||
width: '160px',
|
||||
align: 'right',
|
||||
render: (text, record, index) => {
|
||||
// if (index === editingKey) {
|
||||
if (cleanedValue.startsWith('.')) {
|
||||
cleanedValue = '0' + cleanedValue;
|
||||
}
|
||||
|
||||
// }
|
||||
// return <div>{text ? text : 'Enter New Sell Price'}</div>
|
||||
return (
|
||||
<Form.Item
|
||||
name={`NewSellPrice${index}`}
|
||||
rules={[
|
||||
{
|
||||
validator: async (_, value) => {
|
||||
if (value === '') {
|
||||
return Promise.resolve();
|
||||
} else if (parseFloat(value) < 1) {
|
||||
return Promise.reject(
|
||||
`Sell Price should be greater than 0`
|
||||
);
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
},
|
||||
]}
|
||||
>
|
||||
<InputField
|
||||
value={text}
|
||||
placeholder="Enter New Sell Price"
|
||||
onChange={(e) =>
|
||||
handleNewSellPriceChange(e?.target?.value, index)
|
||||
}
|
||||
inputMode="decimal"
|
||||
onInput={(e) => {
|
||||
let cleanedValue = e.target.value.replace(/[^0-9.]/g, ''); // Remove invalid characters
|
||||
const parts = cleanedValue.split('.');
|
||||
e.target.value =
|
||||
parts.length > 2
|
||||
? `${parts[0]}.${parts.slice(1).join('')}`
|
||||
: cleanedValue;
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Old Sell Price',
|
||||
dataIndex: 'SellPrice',
|
||||
key: 'SellPrice',
|
||||
width: '120px',
|
||||
align: 'right',
|
||||
},
|
||||
{
|
||||
title: 'New Sell Price',
|
||||
dataIndex: 'NewSellPrice',
|
||||
key: 'NewSellPrice',
|
||||
width: '160px',
|
||||
align: 'right',
|
||||
render: (text, record, index) => {
|
||||
// if (index === editingKey) {
|
||||
|
||||
if (cleanedValue.startsWith('.')) {
|
||||
cleanedValue = '0' + cleanedValue;
|
||||
}
|
||||
// }
|
||||
// return <div>{text ? text : 'Enter New Sell Price'}</div>
|
||||
return (
|
||||
<Form.Item
|
||||
name={`NewSellPrice${index}`}
|
||||
rules={[
|
||||
{
|
||||
validator: async (_, value) => {
|
||||
if (value === '') {
|
||||
return Promise.resolve();
|
||||
} else if (parseFloat(value) < 1) {
|
||||
return Promise.reject(`Sell Price should be greater than 0`)
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
},
|
||||
]}
|
||||
>
|
||||
<InputField
|
||||
value={text}
|
||||
placeholder="Enter New Sell Price"
|
||||
onChange={(e) => handleNewSellPriceChange(e?.target?.value, index)}
|
||||
inputMode="decimal"
|
||||
onInput={(e) => {
|
||||
let cleanedValue = e.target.value.replace(
|
||||
/[^0-9.]/g,
|
||||
''
|
||||
); // Remove invalid characters
|
||||
const parts = cleanedValue.split('.');
|
||||
|
||||
e.target.value =
|
||||
parts.length > 2
|
||||
? `${parts[0]}.${parts.slice(1).join('')}`
|
||||
: cleanedValue;
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
if (cleanedValue.startsWith('.')) {
|
||||
cleanedValue = '0' + cleanedValue;
|
||||
}
|
||||
|
||||
const cardData = !globalAccessForOthers
|
||||
? CardAccess
|
||||
? SelectedDatas?.length > 1
|
||||
? SelectedDatas
|
||||
: SelectedDatas?.[0]?.AppId === 0 && SelectedDatas?.[0]?.CompId === 0
|
||||
? []
|
||||
: SelectedDatas
|
||||
: ItemCard?.length === 0 ||
|
||||
(ItemCard?.[0]?.AppId === 0 && ItemCard?.[0]?.CompId === 0)
|
||||
? noSubcatCardData
|
||||
: ItemCard
|
||||
: [];
|
||||
e.target.value =
|
||||
parts.length > 2
|
||||
? `${parts[0]}.${parts.slice(1).join('')}`
|
||||
: cleanedValue;
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
console.log(cardData, 'noSubcatCardDatanoSubcatCardData', ItemCard);
|
||||
const cardData = !globalAccessForOthers
|
||||
? CardAccess
|
||||
? SelectedDatas?.length > 1
|
||||
? SelectedDatas
|
||||
: SelectedDatas?.[0]?.AppId === 0 && SelectedDatas?.[0]?.CompId === 0
|
||||
? []
|
||||
: SelectedDatas
|
||||
: ItemCard?.length === 0 || (ItemCard?.[0]?.AppId === 0 && ItemCard?.[0]?.CompId === 0)
|
||||
? noSubcatCardData
|
||||
: ItemCard
|
||||
: '';
|
||||
|
||||
useEffect(() => {
|
||||
if (priceChangeModal || productPriceChange) {
|
||||
const extractStockDtls = (data) => {
|
||||
if (data?.length === 0 || !data) return [];
|
||||
console.log(cardData, "noSubcatCardDatanoSubcatCardData", ItemCard)
|
||||
|
||||
let stockDtls = [];
|
||||
useEffect(() => {
|
||||
const extractStockDtls = (data) => {
|
||||
if (data?.length === 0) return [];
|
||||
|
||||
data?.forEach((item) => {
|
||||
let products = item?.ProductDetail?.flatMap((product) => product);
|
||||
let stockDtls = [];
|
||||
|
||||
let variants = products?.flatMap(
|
||||
(product) => product?.ProdVariantDetails
|
||||
);
|
||||
const filteredVariants = variants?.filter(
|
||||
(variant) => variant?.StockDetails?.length > 0
|
||||
);
|
||||
const stocks = filteredVariants?.flatMap((variant) =>
|
||||
variant?.StockDetails?.map((stock) => ({
|
||||
...stock,
|
||||
ProdName:
|
||||
products?.[0]?.ProdName +
|
||||
(variant?.ProdVariantName
|
||||
? ` (${variant?.ProdVariantName})`
|
||||
: ''),
|
||||
StockAvailable: products?.[0]?.StockAvailable,
|
||||
ProdVariantName: variant?.ProdVariantName,
|
||||
}))
|
||||
);
|
||||
data?.forEach(item => {
|
||||
let products = item?.ProductDetail?.flatMap(product => product);
|
||||
|
||||
stockDtls.push(
|
||||
...stocks?.filter((stock) =>
|
||||
stock?.StockAvailable === 'Y' ? stock?.BatchRef : true
|
||||
)
|
||||
);
|
||||
});
|
||||
console.log('extractStockDtls', stockDtls);
|
||||
return stockDtls;
|
||||
};
|
||||
setTableData(extractStockDtls(priceChangeProduct || cardData || []));
|
||||
setCurrentPage(1);
|
||||
}
|
||||
}, [cardData, priceChangeProduct, priceChangeModal, productPriceChange]);
|
||||
let variants = products?.flatMap(product => product?.ProdVariantDetails);
|
||||
const filteredVariants = variants?.filter(variant => variant?.StockDetails?.length > 0);
|
||||
const stocks = filteredVariants?.flatMap(variant =>
|
||||
variant?.StockDetails?.map(stock => ({
|
||||
...stock,
|
||||
ProdName: products?.[0]?.ProdName + (variant?.ProdVariantName ? ` (${variant?.ProdVariantName})` : ''),
|
||||
StockAvailable: products?.[0]?.StockAvailable,
|
||||
ProdVariantName: variant?.ProdVariantName
|
||||
}))
|
||||
);
|
||||
|
||||
const handleNewMRPChange = (value, index) => {
|
||||
const updatedTableData = [...tableData];
|
||||
updatedTableData[index].NewMRP = value;
|
||||
setTableData(updatedTableData);
|
||||
updatedTableData[index].NewSellPrice = null;
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewMRP${index}`]: value,
|
||||
[`NewSellPrice${index}`]: null,
|
||||
});
|
||||
stockDtls.push(...stocks?.filter(stock =>
|
||||
stock?.StockAvailable === 'Y'
|
||||
? stock?.BatchRef
|
||||
: true
|
||||
));
|
||||
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(
|
||||
(prod) => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId
|
||||
);
|
||||
if (prodIndex !== -1) {
|
||||
priceChangedProdList[prodIndex] = {
|
||||
...priceChangedProdList?.[prodIndex],
|
||||
NewMRP: value,
|
||||
NewSellPrice: null,
|
||||
};
|
||||
}
|
||||
setPriceChangedProducts(priceChangedProdList);
|
||||
};
|
||||
});
|
||||
console.log("extractStockDtls", stockDtls);
|
||||
return stockDtls;
|
||||
}
|
||||
setTableData(extractStockDtls(priceChangeProduct || cardData))
|
||||
setCurrentPage(1)
|
||||
}, [cardData, priceChangeProduct])
|
||||
|
||||
const handleNewSellPriceChange = (value, index) => {
|
||||
const updatedTableData = [...tableData];
|
||||
if (updatedTableData[index]?.NewMRP) {
|
||||
if (parseFloat(value) > parseFloat(updatedTableData[index]?.NewMRP)) {
|
||||
setMessageType('error');
|
||||
setMessageData('New Sell Price cannot be greater than New MRP');
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewSellPrice${index}`]: null,
|
||||
});
|
||||
updatedTableData[index].NewSellPrice = null;
|
||||
const handleNewMRPChange = (value, index) => {
|
||||
|
||||
const updatedTableData = [...tableData];
|
||||
updatedTableData[index].NewMRP = value;
|
||||
setTableData(updatedTableData);
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(
|
||||
(prod) => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId
|
||||
);
|
||||
updatedTableData[index].NewSellPrice = null;
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewMRP${index}`]: value,
|
||||
[`NewSellPrice${index}`]: null,
|
||||
});
|
||||
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(prod => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId);
|
||||
if (prodIndex !== -1) {
|
||||
priceChangedProdList.splice(prodIndex, 1);
|
||||
priceChangedProdList[prodIndex] = {
|
||||
...priceChangedProdList?.[prodIndex],
|
||||
NewMRP: value,
|
||||
NewSellPrice: null,
|
||||
};
|
||||
}
|
||||
setPriceChangedProducts(priceChangedProdList);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!updatedTableData[index]?.NewMRP && updatedTableData[index]?.MRP) {
|
||||
if (parseFloat(value) > parseFloat(updatedTableData[index]?.MRP)) {
|
||||
setMessageType('error');
|
||||
setMessageData('New Sell Price cannot be greater than MRP');
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewSellPrice${index}`]: null,
|
||||
});
|
||||
updatedTableData[index].NewSellPrice = null;
|
||||
setTableData(updatedTableData);
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(
|
||||
(prod) => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId
|
||||
);
|
||||
|
||||
if (prodIndex !== -1) {
|
||||
priceChangedProdList.splice(prodIndex, 1);
|
||||
}
|
||||
setPriceChangedProducts(priceChangedProdList);
|
||||
return;
|
||||
}
|
||||
}
|
||||
updatedTableData[index].NewSellPrice = value;
|
||||
setTableData(updatedTableData);
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewSellPrice${index}`]: value,
|
||||
});
|
||||
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(
|
||||
(prod) => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId
|
||||
);
|
||||
|
||||
if (prodIndex !== -1) {
|
||||
priceChangedProdList[prodIndex] = {
|
||||
...priceChangedProdList[prodIndex],
|
||||
SellPrice: String(value),
|
||||
};
|
||||
} else {
|
||||
priceChangedProdList.push({
|
||||
ProdId: updatedTableData[index]?.ProdId,
|
||||
ProdName: updatedTableData[index]?.ProdName,
|
||||
MRP: String(
|
||||
updatedTableData[index]?.NewMRP || updatedTableData[index]?.MRP
|
||||
),
|
||||
SellPrice: String(value),
|
||||
AdjComment: 'string',
|
||||
InwardDtlId: updatedTableData[index]?.InwardDtlId,
|
||||
});
|
||||
}
|
||||
|
||||
setPriceChangedProducts(priceChangedProdList);
|
||||
};
|
||||
const handleNewSellPriceChange = (value, index) => {
|
||||
const updatedTableData = [...tableData];
|
||||
if (updatedTableData[index]?.NewMRP) {
|
||||
if (parseFloat(value) > parseFloat(updatedTableData[index]?.NewMRP)) {
|
||||
setMessageType('error');
|
||||
setMessageData('New Sell Price cannot be greater than New MRP');
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewSellPrice${index}`]: null,
|
||||
});
|
||||
updatedTableData[index].NewSellPrice = null;
|
||||
setTableData(updatedTableData);
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(prod => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId);
|
||||
|
||||
const edit = (record, index) => {
|
||||
console.log('edit', record, index);
|
||||
setEditingKey(index);
|
||||
};
|
||||
|
||||
const handleSubmit = async () => {
|
||||
console.log('submit');
|
||||
|
||||
if (priceChangedProducts?.length > 0) {
|
||||
console.log('priceChangedProducts', priceChangedProducts);
|
||||
const validation = priceChangedProducts?.every((prod) => {
|
||||
if (parseFloat(prod?.MRP) < parseFloat(prod?.SellPrice)) {
|
||||
setMessageType('error');
|
||||
setMessageData(
|
||||
`${prod?.ProdName}: MRP cannot be less than Sell Price`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (!parseFloat(prod?.SellPrice) || !parseFloat(prod?.MRP)) {
|
||||
setMessageType('error');
|
||||
setMessageData(`${prod?.ProdName}: Please give Sell Price or MRP`);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
if (!validation) return;
|
||||
|
||||
const data = {
|
||||
AppId: AppId,
|
||||
CompId: CompId,
|
||||
BranchId: BranchId,
|
||||
ProductDetails: priceChangedProducts,
|
||||
UpdatedBy: UserId,
|
||||
};
|
||||
|
||||
const res = await dispatch(PutStockPrice(data))?.unwrap();
|
||||
if (res?.data?.statusCode === 1) {
|
||||
setMessageData('Price Changed Successfully');
|
||||
setMessageType('success');
|
||||
setPriceChangeModal(false);
|
||||
setProductPriceChange(false);
|
||||
setEditingKey(null);
|
||||
setPriceChangedProducts([]);
|
||||
setTableData([]);
|
||||
dispatch(triggerProductCard());
|
||||
setPriceChangeProduct(null);
|
||||
formRef.current.resetFields();
|
||||
} else {
|
||||
setMessageData('Error Updating Product Price');
|
||||
setMessageType('error');
|
||||
}
|
||||
} else {
|
||||
setMessageType('error');
|
||||
setMessageData('No changes made / No sell price entered');
|
||||
}
|
||||
};
|
||||
|
||||
const onComplete = useCallback(() => {
|
||||
setMessageData(null);
|
||||
setMessageType(null);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Messages
|
||||
messageData={messageData}
|
||||
messageType={messageType}
|
||||
onComplete={onComplete}
|
||||
/>
|
||||
{showButton ? (
|
||||
<Tooltip title="Price Change">
|
||||
<button
|
||||
className="price-change-btn"
|
||||
type="button"
|
||||
onClick={() => {
|
||||
if (comboSearch) {
|
||||
setMessageType('warning');
|
||||
setMessageData('Price change will not work for combo products');
|
||||
if (prodIndex !== -1) {
|
||||
priceChangedProdList.splice(prodIndex, 1);
|
||||
}
|
||||
setPriceChangedProducts(priceChangedProdList);
|
||||
return;
|
||||
}
|
||||
setPriceChangeModal(true);
|
||||
}}
|
||||
>
|
||||
{/* <FaIndianRupeeSign size={35}/> */}
|
||||
<img src={PriceChange} alt="" width={30} />
|
||||
</button>
|
||||
</Tooltip>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
<DefaultModal
|
||||
title="Price Change"
|
||||
className={'price-change-modal'}
|
||||
open={priceChangeModal || productPriceChange}
|
||||
footer={true}
|
||||
width={800}
|
||||
handleCancel={() => {
|
||||
setPriceChangeModal(false);
|
||||
setProductPriceChange(false);
|
||||
setEditingKey(null);
|
||||
setPriceChangedProducts([]);
|
||||
formRef?.current?.resetFields();
|
||||
setPriceChangeProduct(null);
|
||||
}}
|
||||
handleSubmit={handleSubmit}
|
||||
>
|
||||
<div className="price-change-table">
|
||||
{/* <div className="table-notes">Note : Click on a row to edit/modify</div> */}
|
||||
<Form ref={formRef}>
|
||||
<Tables
|
||||
columns={priceChangeColumns}
|
||||
data={tableData?.slice(
|
||||
(currentPage - 1) * pageSize,
|
||||
currentPage * pageSize
|
||||
)}
|
||||
onRow={(record, index) => ({
|
||||
onClick: () => {
|
||||
edit(record, index);
|
||||
},
|
||||
})}
|
||||
/>
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
margin: '20px 0',
|
||||
}}
|
||||
>
|
||||
<Pagination
|
||||
current={currentPage}
|
||||
pageSize={pageSize}
|
||||
total={tableData?.length}
|
||||
onChange={(page) => setCurrentPage(page)}
|
||||
showSizeChanger={false}
|
||||
showTotal={(total, range) =>
|
||||
`${range[0]}-${range[1]} of ${total} items`
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</Form>
|
||||
</div>
|
||||
</DefaultModal>
|
||||
</>
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
||||
if (!updatedTableData[index]?.NewMRP && updatedTableData[index]?.MRP) {
|
||||
if (parseFloat(value) > parseFloat(updatedTableData[index]?.MRP)) {
|
||||
setMessageType('error');
|
||||
setMessageData('New Sell Price cannot be greater than MRP');
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewSellPrice${index}`]: null,
|
||||
});
|
||||
updatedTableData[index].NewSellPrice = null;
|
||||
setTableData(updatedTableData);
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(prod => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId);
|
||||
|
||||
export default ProductPriceChange;
|
||||
if (prodIndex !== -1) {
|
||||
priceChangedProdList.splice(prodIndex, 1);
|
||||
}
|
||||
setPriceChangedProducts(priceChangedProdList);
|
||||
return;
|
||||
}
|
||||
}
|
||||
updatedTableData[index].NewSellPrice = value;
|
||||
setTableData(updatedTableData);
|
||||
formRef.current.setFieldsValue({
|
||||
[`NewSellPrice${index}`]: value,
|
||||
});
|
||||
|
||||
const priceChangedProdList = [...priceChangedProducts];
|
||||
const prodIndex = priceChangedProdList?.findIndex(prod => prod?.InwardDtlId === updatedTableData[index]?.InwardDtlId);
|
||||
|
||||
if (prodIndex !== -1) {
|
||||
priceChangedProdList[prodIndex] = {
|
||||
...priceChangedProdList[prodIndex],
|
||||
SellPrice: String(value)
|
||||
};
|
||||
} else {
|
||||
priceChangedProdList.push({
|
||||
ProdId: updatedTableData[index]?.ProdId,
|
||||
ProdName: updatedTableData[index]?.ProdName,
|
||||
MRP: String(updatedTableData[index]?.NewMRP || updatedTableData[index]?.MRP),
|
||||
SellPrice: String(value),
|
||||
AdjComment: "string",
|
||||
InwardDtlId: updatedTableData[index]?.InwardDtlId
|
||||
});
|
||||
}
|
||||
|
||||
setPriceChangedProducts(priceChangedProdList);
|
||||
}
|
||||
|
||||
const edit = (record, index) => {
|
||||
console.log("edit", record, index);
|
||||
setEditingKey(index);
|
||||
}
|
||||
|
||||
const handleSubmit = async () => {
|
||||
console.log("submit");
|
||||
|
||||
if (priceChangedProducts?.length > 0) {
|
||||
console.log("priceChangedProducts", priceChangedProducts);
|
||||
const validation = priceChangedProducts?.every((prod) => {
|
||||
if (parseFloat(prod?.MRP) < parseFloat(prod?.SellPrice)) {
|
||||
setMessageType('error');
|
||||
setMessageData(`${prod?.ProdName}: MRP cannot be less than Sell Price`);
|
||||
return false;
|
||||
}
|
||||
if (!parseFloat(prod?.SellPrice) || !parseFloat(prod?.MRP)) {
|
||||
setMessageType('error');
|
||||
setMessageData(`${prod?.ProdName}: Please give Sell Price or MRP`);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
if (!validation) return;
|
||||
|
||||
const data = {
|
||||
AppId: AppId,
|
||||
CompId: CompId,
|
||||
BranchId: BranchId,
|
||||
ProductDetails: priceChangedProducts,
|
||||
UpdatedBy: UserId,
|
||||
}
|
||||
|
||||
const res = await dispatch(PutStockPrice(data))?.unwrap();
|
||||
if (res?.data?.statusCode === 1) {
|
||||
setMessageData('Price Changed Successfully');
|
||||
setMessageType('success');
|
||||
setPriceChangeModal(false);
|
||||
setProductPriceChange(false);
|
||||
setEditingKey(null);
|
||||
setPriceChangedProducts([]);
|
||||
setTableData([]);
|
||||
dispatch(triggerProductCard())
|
||||
setPriceChangeProduct(null);
|
||||
formRef.current.resetFields();
|
||||
} else {
|
||||
setMessageData('Error Updating Product Price')
|
||||
setMessageType('error');
|
||||
}
|
||||
} else {
|
||||
setMessageType('error');
|
||||
setMessageData('No changes made / No sell price entered');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const onComplete = useCallback(() => {
|
||||
setMessageData(null);
|
||||
setMessageType(null);
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
<Messages messageData={messageData} messageType={messageType} onComplete={onComplete} />
|
||||
{showButton ? <Tooltip title="Price Change">
|
||||
<button className="price-change-btn" type="button" onClick={() => {
|
||||
if (comboSearch) {
|
||||
setMessageType('warning');
|
||||
setMessageData('Price change will not work for combo products');
|
||||
return
|
||||
}
|
||||
setPriceChangeModal(true)
|
||||
}}>
|
||||
{/* <FaIndianRupeeSign size={35}/> */}
|
||||
<img src={PriceChange} alt="" width={30} />
|
||||
</button>
|
||||
</Tooltip> : <></>}
|
||||
<DefaultModal
|
||||
title="Price Change"
|
||||
className={'price-change-modal'}
|
||||
open={priceChangeModal || productPriceChange}
|
||||
footer={true}
|
||||
width={800}
|
||||
handleCancel={() => {
|
||||
setPriceChangeModal(false);
|
||||
setProductPriceChange(false);
|
||||
setEditingKey(null);
|
||||
setPriceChangedProducts([]);
|
||||
formRef?.current?.resetFields();
|
||||
setPriceChangeProduct(null);
|
||||
}}
|
||||
handleSubmit={handleSubmit}
|
||||
>
|
||||
<div className="price-change-table">
|
||||
{/* <div className="table-notes">Note : Click on a row to edit/modify</div> */}
|
||||
<Form ref={formRef}>
|
||||
<Tables
|
||||
columns={priceChangeColumns}
|
||||
data={tableData?.slice((currentPage - 1) * pageSize, currentPage * pageSize)}
|
||||
onRow={(record, index) => ({
|
||||
onClick: () => {
|
||||
edit(record, index);
|
||||
},
|
||||
})}
|
||||
/>
|
||||
<div style={{ display: 'flex', justifyContent: 'center', margin: '20px 0' }}>
|
||||
<Pagination
|
||||
current={currentPage}
|
||||
pageSize={pageSize}
|
||||
total={tableData?.length}
|
||||
onChange={(page) => setCurrentPage(page)}
|
||||
showSizeChanger={false}
|
||||
showTotal={(total, range) => `${range[0]}-${range[1]} of ${total} items`}
|
||||
/>
|
||||
</div>
|
||||
</Form>
|
||||
</div>
|
||||
</DefaultModal>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default ProductPriceChange;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -103,6 +103,7 @@ const Printstyle6 = ({
|
|||
const GlobalLogo = useSelector(GlobalprintLogo);
|
||||
const GlobalCredit = useSelector(GlobalprintCredit);
|
||||
const SettingData = useSelector(PreferenceData);
|
||||
const SelectedHeaderColor = useSelector(GlobalSelectedPrintHeaderColor);
|
||||
console.log(CashierNameField, "GlobaldummyData")
|
||||
const estimatePrintHeader =
|
||||
SettingData?.[0]?.SettingDtlDetails?.find(
|
||||
|
|
@ -3267,7 +3268,7 @@ const Printstyle6 = ({
|
|||
/>
|
||||
) : null}
|
||||
</div>
|
||||
<div style={{ color: SelectedHeaderColor }}>
|
||||
<div style={{ color: SelectedHeaderColor }}>
|
||||
{GlobaldummyData ? 'XYZ Shop' : table2Data?.BrName}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue