import React, { useCallback, useEffect, useRef, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useLocation, useNavigate } from 'react-router-dom'; import { Messages } from '../../../Components/Notifications/Messages'; import FormHeader from '../../PageComponents/FormHeader'; import { Col, Form, Row } from 'antd'; import { DropDowns } from '../../../Components/Forms/DropDown'; import Buttons from '../../../Components/Forms/Buttons'; import { getWholeSaleExtraCharges, getWholeSaleExtraChargesConfig, getWholeSaleProducts, postConfigMaster, postWholeSaleExtraCharges, putWholeSaleExtraCharges, } from '../../../Features/WholeSale/ProductEntry'; import { getSession, validateSafeInput } from '../../../Services/Others'; import { InputField } from '../../../Components/Forms/InputField'; import { Tables } from '../../../Components/Tables/Table'; import { PlusCircleOutlined, ArrowRightOutlined, EditFilled, DeleteFilled, InfoCircleOutlined, PlusOutlined, ReloadOutlined, } from '@ant-design/icons'; import { Tooltip, Table, Input, DatePicker, Collapse, Space } from 'antd'; import { DefaultModal } from '../../../Components/Modal/DefaultModal'; import { configTypeActiveDataSelector, configTypeDataSelector, getConfigurationType, postConfigurationType, putConfigurationType, } from '../../../Features/ConfigTypePage/ConfigTypePage'; import { RadioGrpButton } from '../../../Components/Forms/RadioGroup'; import { changeBreadCrumb } from '../../../Features/AppPage/CenterPage'; const subDirectory = import.meta.env.BASE_URL; const ItemEntry = () => { const formRef = useRef(null); const [configRef] = Form.useForm(); const dispatch = useDispatch(); const navigate = useNavigate(); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [ProductData, setProductData] = useState([]); const [selectedProductData, setselectedProductData] = useState(null); const [ConfigId, setConfigId] = useState(null); const [selectedProductName, setselectedProductName] = useState(null); const [CommonDataFilter, setCommonDataFilter] = useState([]); const [editState, seteditState] = useState([]); const [page, setpage] = useState(1); const [open, setOpen] = useState(false); const [PaymentType, setPaymentType] = useState('P'); const [configdatas, setconfigdatas] = useState([]); const [ConfigText, setConfigText] = useState([]); const location = useLocation()?.state; const [putState, setputState] = useState(false); console.log(CommonDataFilter?.[4], 'ProductDataProductDataj'); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const AppId = getSession('AppId'); const UserId = getSession('UserId'); const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, { name: 'ExtraCharges', link: `${subDirectory}setting/wholesale-extracharges`, }, ]; useEffect(() => { if (location !== null) { setCommonDataFilter(transformData(location)); setputState(true); } else { setputState(false); } }, [location]); const transformData = (data) => { return data?.ProductDetails?.flatMap((product) => product.ExtraChargeDetails.map((extraCharge) => ({ ProdName: product.ProdName, ConfigName: extraCharge.ExtraChargeName || 'Commission', ConfigId: extraCharge.ExtraChargeType, Payment: extraCharge.Amount.toString(), PaymentType: extraCharge.AmountType, ProdId: product.ProdId, ExtraChargeId: data?.ExtraChargeId, ActiveStatus: extraCharge.ActiveStatus ? extraCharge.ActiveStatus : '', })) ); }; useEffect(() => { dispatch(changeBreadCrumb({ items: items })); }, []); const columns = [ { title: 'Sl.No', key: 'sno', align: 'center', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), }, { title: 'Product', dataIndex: 'ProdName', key: 'ProdName', render: (text, row) => {row.ProdName}, }, { title: 'Extra Charge', dataIndex: 'ConfigName', key: 'ConfigName', render: (text, row) => {row.ConfigName}, }, { title: 'Amount', dataIndex: 'PaymentValue', key: 'PaymentValue', align: 'right', render: (text, row) => ( {row.Payment} {row.PaymentType == 'P' ? '%' : '₹'} ), }, { title: 'Edit', key: 'Edit', dataIndex: 'Edit', width: '100px', align: 'center', render: (_, record, index) => ( ActionsFormatter(record, index)} /> ), }, { title: 'Delete', key: 'Delete', dataIndex: 'Delete', width: '100px', align: 'center', render: (_, record, index) => { return putState ? ( {record?.ActiveStatus == 'D' ? ( StatusFormatter2(record, index)} /> ) : ( StatusFormatter2(record, index)} /> )} ) : ( StatusFormatter(record, index)} /> ); }, }, ]; useEffect(() => { fetchWholeSaleProducts(); }, []); useEffect(() => { onchangepaymentType(PaymentType); }, [PaymentType]); const ActionsFormatter = (record) => { console.log(record, 'fgfdggtrertret'); setselectedProductData(record?.ProdId); seteditState(record); onchangepaymentType(record?.PaymentType); setPaymentType(record?.PaymentType); setConfigId(record?.ConfigId); formRef.current?.setFieldsValue(record); // formRef.current?.setFieldsValue({ ConfigId: record?.ConfigId }) // formRef.current?.setFieldsValue({ PaymentType: record?.PaymentType }) }; const StatusFormatter = (record) => { setCommonDataFilter( CommonDataFilter?.filter( (item) => !(item.ProdId === record.ProdId && item.ConfigId === record?.ConfigId) ) ); }; const StatusFormatter2 = (record) => { console.log( { ...record, ActiveStatus: record?.ActiveStatus == 'A' ? 'D' : 'A' }, 'fgaggdddddddd8' ); setCommonDataFilter( CommonDataFilter?.map((item) => item.ProdId === record.ProdId && item.ConfigId === record?.ConfigId ? { ...item, ActiveStatus: record?.ActiveStatus === 'A' ? 'D' : 'A' } // Update the matching item : item ) ); }; const fetchWholeSaleProducts = async () => { dispatch(getConfigurationType()).unwrap(); let response = await dispatch( getWholeSaleProducts({ CompId: CompId, AppId: AppId, BranchId: BranchId }) ).unwrap(); if (response?.data?.statusCode == 1) { setProductData(response?.data?.data); } let res = await dispatch(getWholeSaleExtraChargesConfig()).unwrap(); if (res?.data?.statusCode == 1) { console.log(res, 'resjkshdgfg'); setconfigdatas(res?.data?.data); } console.log(await configRef.current.getFieldValue(), 'ihfshdfojs'); }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const onFinish = (values) => { console.log(values, 'sdgfgdgafdgfd45'); let exteraDatas = { ProdName: ProductData?.filter((item) => item.ProdId == values.ProdId)?.[0] ?.ProdName, ConfigName: configdatas?.filter( (item) => item.ConfigId == values.ConfigId )?.[0]?.ConfigName, ConfigId: values?.ConfigId, Payment: values?.Payment, PaymentType: values?.PaymentType ? values?.PaymentType : PaymentType, ProdId: values?.ProdId, ExtraChargeId: CommonDataFilter?.[0]?.ExtraChargeId, ActiveStatus: CommonDataFilter?.filter( (item) => item.ProdId == values.ProdId && item.ConfigId === values?.ConfigId )?.[0]?.ActiveStatus, }; let Data = values; console.log( CommonDataFilter.filter( (item) => !(item.ProdId === values.ProdId && item.ConfigId === values?.ConfigId) ), 'sdg456fgdg' ); setCommonDataFilter([ ...CommonDataFilter?.filter( (item) => !(item.ProdId === values.ProdId && item.ConfigId === values?.ConfigId) ), exteraDatas, ]); formRef.current?.resetFields(); setselectedProductData(); setselectedProductName(); setConfigId(); seteditState([]); setPaymentType('P'); }; const ProductDropDownChange = (e) => { // let alreadyexist = CommonDataFilter.some(item => item.ProdId === e) // if (!alreadyexist) { formRef.current?.setFieldsValue({ ProdId: e }); setselectedProductData(e); setselectedProductName( ProductData.filter((item) => item.ProdId == e)?.[0]?.ProdName ); // } // else { // setMessageData("Do not allow a single product multiple times."); // setMessageType("error"); // } }; const ConfigTypeChange = (e) => { let alreadyexist = CommonDataFilter.some( (item) => item.ProdId === selectedProductData && item.ConfigId === e ); if (alreadyexist) { setMessageType('error'); setMessageData("You can't add same Extracharges multiple time at a time"); } else { formRef.current?.setFieldsValue({ ConfigId: e }); setConfigId(e); } }; const handlePageChange = (current) => { setpage(current); }; const addConfig = () => { setOpen(true); }; const handleSubmit = async () => { const values = await configRef.validateFields(); const postData = { // ConfigName: values.ConfigName, // CreatedBy: getSession('UserId'), TypeId: configdatas?.[0]?.TypeId, ConfigName: ConfigText, CreatedBy: UserId, }; let response = {}; response = await dispatch(postConfigMaster(postData)).unwrap(); if (response?.data?.statusCode == 1) { let res = await dispatch(getWholeSaleExtraChargesConfig()).unwrap(); if (res?.data?.statusCode == 1) { setconfigdatas(res?.data?.data); } setMessageType('success'); setMessageData(response?.data?.response); handleCancel(); dispatch(getConfigurationType()).unwrap(); } else { setMessageType('error'); setMessageData(response?.data?.response); } }; const handleCancel = () => { setOpen(false); }; const PostValues = async () => { if (CommonDataFilter.length > 0) { let grouped = CommonDataFilter.reduce((acc, obj) => { if (!acc[obj.ProdName]) { acc[obj.ProdName] = []; } acc[obj.ProdName].push(obj); return acc; }, {}); // Convert grouped data to an array of arrays let result = Object.values(grouped); let response = []; if (putState) { // let postData = { // "AppId": AppId, // "CompId": CompId, // "BranchId": BranchId, // "ExtraChargeId": CommonDataFilter?.[0]?.ExtraChargeId, // "ProductDetails": CommonDataFilter.map((item) => ({ // "ProdId": item.ProdId, // "ExtraChargeDetails": [ // { // "ExtraChargeType": item.ConfigId, // "Amount": item.Payment, // "AmountType": item.PaymentType, // "ActiveStatus": item?.ActiveStatus, // }, // ], // })), // "UpdatedBy": UserId // } const postData = { AppId: AppId, CompId: CompId, BranchId: BranchId, ExtraChargeId: result[0]?.[0]?.ExtraChargeId, ProductDetails: result.map((group) => ({ ProdId: group[0].ProdId, ExtraChargeDetails: group.map((item) => ({ ExtraChargeType: item.ConfigId, Amount: item.Payment, AmountType: item.PaymentType, ActiveStatus: item?.ActiveStatus == ' ' || item?.ActiveStatus == '' || item?.ActiveStatus == undefined || item?.ActiveStatus == null ? 'A' : item?.ActiveStatus, })), })), UpdatedBy: UserId, }; response = await dispatch(putWholeSaleExtraCharges(postData)).unwrap(); } else { const postData = { AppId: AppId, CompId: CompId, BranchId: BranchId, ProductDetails: result.map((group) => ({ ProdId: group[0].ProdId, ExtraChargeDetails: group.map((item) => ({ ExtraChargeType: item.ConfigId, Amount: item.Payment, AmountType: item.PaymentType, })), })), CreatedBy: UserId, }; response = await dispatch(postWholeSaleExtraCharges(postData)).unwrap(); } if (response?.data?.statusCode === 1) { console.log(response, 'postValueskjhfdsd'); setMessageType('success'); setMessageData(response?.data?.response); navigate(`${subDirectory}setting/wholesale-extracharges`); } else { setMessageType('error'); setMessageData(response?.data?.response); } } else { setMessageData('Add all data'); setMessageType('error'); } }; const onchangepaymentType = (value) => { formRef.current?.setFieldsValue({ PaymentType: value }); setPaymentType(value); }; const readConfigname = (value) => { console.log(value.target.value, 'dfsfggfds'); setConfigText(value.target.value); }; return (
{/*
*/}
({ value: option.ProdId, label: option.ProdName, }))} label={'Product'} className="field-DropDown" onChangeFunction={(e) => ProductDropDownChange(e)} isOnChange={false} valueData={selectedProductData} defaultValue={selectedProductData} // disabled={putState ? true : false} />
({ value: option.ConfigId, label: option.ConfigName, }))} label={'Extra Charge'} className="field-DropDown" onChangeFunction={(e) => ConfigTypeChange(e)} isOnChange={false} valueData={ConfigId} defaultValue={ConfigId} // disabled={putState ? true : false} // disabled={editState?.ProdId ? true : false} />
onchangepaymentType(e)} /> { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > handleCommissionChange(e)} isOnChange={editState?.Payment ? true : false} />
{/*
*/}
} htmlType={true} />
} htmlType={true} />
{ await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > Extra Charge Name} autoComplete="off" // isOnChange={editState ? true : false} /> } handleCancel={handleCancel} handleSubmit={handleSubmit} />
); }; export default ItemEntry;