import React, { useCallback, useEffect, useRef, useState, useContext, } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Divider, Form, Input, Segmented, Table } from 'antd'; import { Modal, Tooltip, DatePicker } from 'antd'; import { Messages } from '../../Components/Notifications/Messages'; import FormHeader from '../PageComponents/FormHeader'; import { InputField } from '../../Components/Forms/InputField'; import Buttons from '../../Components/Forms/Buttons'; import { ArrowRightOutlined } from '@ant-design/icons'; import { DropDowns } from '../../Components/Forms/DropDown'; import { RadioGrpButton } from '../../Components/Forms/RadioGroup.jsx'; import '../../Styles/CancelReschedule/ChangePaymentMode.scss'; import { ChangeSelectedCustDisable, GlobalSelCustId, GlobalpaymentOptionData, changeSelectedCustId, changeSelectedOption, getAllCustomer, getCancelReshRules, getCreditCustomer, getPaymentModeDetail, getPaymentOptions, putpaymentStatus, putpaymentModeChange, PostSalesCancellation, } from '../../Features/BookingScreen/BookingData/BookingData.js'; import { ExtractDateFormate, extractLastNumber, getSession, validateSafeInput, } from '../../Services/Others.js'; import PozoAddCustomerIcon from '../BookingScreen/Components/UtillComponents/Pozo retail icons/PozoAddCustomerIcon.jsx'; import BSCustomerSelect from '../BookingScreen/Components/UtillComponents/BSSelectCustomer.jsx'; import FeaturesFunctionalities from '../BookingScreen/Components/BookingFunctionality/FeaturesFunctionalities.jsx'; import { changeBreadCrumb, getEmpAccess, } from '../../Features/AppPage/CenterPage.js'; import { useAuth } from '../../AuthContext.jsx'; import dayjs from 'dayjs'; import { IoEye } from 'react-icons/io5'; import { ApplicationPreferences } from '../../Features/BrachLogin/BranchLogin.js'; const subDirectory = import.meta.env.BASE_URL; const containerStyle = { display: 'flex', flexDirection: 'column', overflow: 'scroll', }; const rowStyle = { display: 'flex', flexDirection: 'row', width: '90%', fontSize: '16px', }; const labelStyle = { display: 'flex', justifyContent: 'flex-start', width: '50%', }; const valueStyle = { display: 'flex', justifyContent: 'flex-end', width: '30%', }; const ChangePaymentmode = () => { const { SadminuserAccess } = useAuth(); let SAAccessCommonMaster = SadminuserAccess?.find( (e) => e?.MenuName === 'Payment Mode Change' ); const formRef = useRef(); const dispatch = useDispatch(); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const AppId = getSession('AppId'); const UserId = getSession('UserId'); const UserType = getSession('UserType'); const EditableContext = React.createContext(null); const PaymentOptions = useSelector(GlobalpaymentOptionData); const SelectCustId = useSelector(GlobalSelCustId); const appPreferences = useSelector(ApplicationPreferences); const commonModulePreference = appPreferences?.find( (preference) => preference?.PreferredCatName === "Common Module" )?.PreferenceCatDetails; const sportsAppPreference = commonModulePreference?.find( (preference) => preference?.PreferredSubCatName === "SportsApp" && preference?.PreferredStatus == 'Y' ); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [selCancelPay, setselCancelPay] = useState('CR'); const [selActivityType, setselActivityType] = useState('Cancel'); const [paybtns, setpaybtns] = useState([]); const [CanReason, setCanReason] = useState([]); const [SelCanReason, setSelCanReason] = useState([]); const [RescheduleReason, setRescheduleReason] = useState([]); // const [SelRescheduleReason, setSelRescheduleReason] = useState([]) const [SalesDetail, setSalesDetail] = useState([]); const [FullSalesDetail, setFullSalesDetail] = useState([]); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [SelectedOrderId, setSelectedOrderId] = useState(null); // const [SelPayMode, setSelPayMode] = useState() const [ApiPaymentName, setApiPaymentName] = useState(null); const [DropSelPaymentName, setDropSelPaymentName] = useState(null); const [SelectSalesId, setSelectSalesId] = useState(); const [SelCanPaymode, setSelCanPaymode] = useState(); const [SelCancelType, setSelCancelType] = useState('OverAll'); const [CancelModalOpen, setCancelModalOpen] = useState(false); const [CancellationCharge, setCancellationCharge] = useState(null); const [addcustomer, setAddCustomer] = useState(false); const [SelectCust, setSelectCust] = useState(false); const [CreditCustDetails, setCreditCustDetails] = useState([]); const [CreditCustomer, setCreditCustomer] = useState(false); const [NewCustomer, setNewCustomer] = useState([]); const [empData, setEmpData] = useState(); const [addnewAccess, setaddnewAccess] = useState(true); const [isdisabled, setisdisabled] = useState(true); const [segmentValue, setSegmentValue] = useState('Bill No'); const [selectedRowKey, setSelectedRowKey] = useState(null); const [selectedPayments, setSelectedPayments] = useState([]); const [viewProductDetails, setViewProductDetails] = useState({ view: false, productDetails: [], }); const [viewPaymentDetails, setViewPaymentDetails] = useState({ view: false, paymentDetails: [], }); const [isPosting, setIsPosting] = useState(false); const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, { name: ' Cancel/Payment Change', link: `${subDirectory}setting/cancel-paymentchange`, }, ]; useEffect(() => { dispatch(changeBreadCrumb({ items: items })); fetchPaymentOption(); GetCancellationReason(); }, []); useEffect(() => { if (UserType === 'Employee') { fetchApi(); } }, [UserType]); useEffect(() => { let hasAccess = false; if (UserType === 'Admin' || UserType === 'Super Admin') { hasAccess = true; } else if (UserType === 'Employee') { hasAccess = empData?.AddAccess === 'Y'; } else if (UserType === 'Super Admin User') { hasAccess = SAAccessCommonMaster?.AddAccess === 'Y'; } setaddnewAccess(!hasAccess); }, [empData, SAAccessCommonMaster, UserType]); useEffect(() => { getCreditcustDetail(); }, [SelectCustId, SelectCust]); useEffect(() => { if (UserType === 'Employee') { fetchApi(); } }, [UserType]); const fetchApi = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId, EmpId: UserId, }; let response = await dispatch(getEmpAccess(data)).unwrap(); let datas = response?.data?.data?.[0]?.EmpAccessDetails?.filter( (item) => item.ConfigName === 'Payment Mode Change' ); setEmpData(datas?.[0]); }; useEffect(() => { const withoutCustomer = PaymentOptions?.filter?.( (item) => item?.ConfigName?.toLowerCase() !== 'credit'?.toLowerCase() ); setpaybtns(withoutCustomer); }, [PaymentOptions]); const OverAllOrderCancel = (second) => { // third; }; const disabledDate = (current) => current && current > dayjs().endOf('day'); const disabledFeatureDate = (current) => current && current < dayjs().endOf('day'); const getCreditcustDetail = async () => { let Credata = { CompId: CompId, BranchId: BranchId, AppId: AppId, CustId: SelectCustId, }; let res = await dispatch(getCreditCustomer(Credata)).unwrap(); if (res?.data?.statusCode === 1) { setCreditCustDetails(res?.data?.data); } else { let res = await dispatch( getAllCustomer({ CompId: CompId, AppId: AppId, branchId: BranchId }) ).unwrap(); if (res?.data?.statusCode == 1) { let allcustomer = res?.data?.data; let SelectedCustomer = allcustomer?.filter( (item) => item?.CustId === SelectCustId ); setNewCustomer(SelectedCustomer); setCreditCustDetails([]); } else { setCreditCustDetails([]); setNewCustomer([]); } } }; const getSalesOrderDetail = async () => { let fromDate; let toDate; let date; const billormobile = formRef.current?.getFieldsValue()?.[ selCancelPay === 'CR' ? 'OrderId' : 'PaymodeOrderId' ]; if (segmentValue === 'Mobile') { if (selCancelPay === 'CR') { if (selActivityType === 'Cancel') { fromDate = formRef.current ?.getFieldsValue() ?.CancelFromDate?.format('YYYY-MM-DD'); toDate = formRef.current ?.getFieldsValue() ?.CancelToDate?.format('YYYY-MM-DD'); } else if (selActivityType === 'Reschedule') { fromDate = formRef.current ?.getFieldsValue() ?.ReschedulFromDate?.format('YYYY-MM-DD'); toDate = formRef.current ?.getFieldsValue() ?.ReschedulToDate?.format('YYYY-MM-DD'); } } else if (selCancelPay === 'CP') { fromDate = formRef.current ?.getFieldsValue() ?.['Change-PaymentFromDate']?.format('YYYY-MM-DD'); toDate = formRef.current ?.getFieldsValue() ?.['Change-PaymentToDate']?.format('YYYY-MM-DD'); } } if (segmentValue === 'Date') { const fieldname = selCancelPay === 'CR' ? selActivityType === 'Cancel' ? 'Canceldate' : 'RescheduleApidate' : 'Change-Paymentdate'; date = formRef.current ?.getFieldsValue() ?.[fieldname]?.format('YYYY-MM-DD'); } const data = { segmentValue, mobileNumber: billormobile, fromDate, toDate, date, AppId, CompId, BranchId, OrderId: 'O' + AppId + '-' + CompId + '-' + BranchId + '-' + UserId + '-' + billormobile, }; const res = await dispatch(getPaymentModeDetail(data)).unwrap(); if (res?.data?.statusCode === 1) { const data = res?.data?.data; setFullSalesDetail(data); setSelCancelType('OverAll'); const tempListData = data?.[0]?.productDetails?.map((item) => ({ key: item?.InwardDtlId, ...item, })); setSalesDetail(tempListData); } else { setSalesDetail([]); setFullSalesDetail([]); if (segmentValue == "Mobile" && billormobile && fromDate && toDate) { setMessageType('error'); setMessageData(res?.data?.response); } else { setMessageType('error'); setMessageData(res?.data?.response); } } setisdisabled(true); }; const fetchPaymentOption = async () => { await dispatch(getPaymentOptions()).unwrap(); }; const GetCancellationReason = async () => { let data = { AppId: AppId, CompId: CompId, BranchId: BranchId, }; let res = await dispatch(getCancelReshRules(data)).unwrap(); if (res?.data?.statusCode === 1) { let getActivedatas = res?.data?.data?.filter( (item) => item?.ActiveStatus === 'A' && item?.ActivityType === 'C' ); let getReschDatas = res?.data?.data?.filter( (item) => item?.ActiveStatus === 'A' && item?.ActivityType === 'R' ); setCanReason(getActivedatas); setRescheduleReason(getReschDatas); } else { setCanReason([]); setRescheduleReason([]); } }; const selectCancelOrPaymentType = (e) => { setisdisabled(true); setselCancelPay(e); formRef.current?.resetFields(); setSelectedOrderId(); // setSelPayMode() setSelectedRowKey(null); setFullSalesDetail([]); }; const selectActivityType = (e) => { setisdisabled(true); setselActivityType(e); formRef.current?.resetFields(); setSelectedOrderId(); setSelectedRowKey(null); setFullSalesDetail([]); }; // Debounce utility const debounce = (func, delay) => { let timer; return (...args) => { if (timer) clearTimeout(timer); timer = setTimeout(() => { func(...args); }, delay); }; }; const getSalesDetailapi = debounce(async (e) => { setSelectedOrderId(e); if (segmentValue === 'Bill No') { selActivityType === 'Cancel' ? getSalesOrderDetail() : getPaymentMode(); return; } let fromDate; let toDate; if (selCancelPay === 'CR') { if (selActivityType === 'Cancel') { fromDate = formRef.current?.getFieldsValue()?.CancelFromDate; toDate = formRef.current?.getFieldsValue()?.CancelToDate; } else if (selActivityType === 'Reschedule') { fromDate = formRef.current?.getFieldsValue()?.ReschedulFromDate; toDate = formRef.current?.getFieldsValue()?.ReschedulToDate; } } else if (selCancelPay === 'CP') { fromDate = formRef.current?.getFieldsValue()?.['Change-PaymentFromDate']; toDate = formRef.current?.getFieldsValue()?.['Change-PaymentToDate']; } if ( segmentValue === 'Mobile' && fromDate != undefined && toDate !== undefined ) { selActivityType === 'Cancel' ? getSalesOrderDetail() : getPaymentMode(); } else { setMessageType('error'); setMessageData('Please select From Date and To Date'); } }, 300); const selectCancelType = (e) => { setSelCancelType(e); }; const onOrderSelectChange = (newselectedRowKeys) => { setSelectedRowKeys(newselectedRowKeys); }; const getPaymentMode = async (e) => { let fromDate; let toDate; let date; const billormobile = formRef.current?.getFieldsValue()?.[ selCancelPay === 'CR' ? 'OrderId' : 'PaymodeOrderId' ]; if (segmentValue === 'Mobile') { if (selCancelPay === 'CR') { if (selActivityType === 'Cancel') { fromDate = formRef.current ?.getFieldsValue() ?.CancelFromDate?.format('YYYY-MM-DD'); toDate = formRef.current ?.getFieldsValue() ?.CancelToDate?.format('YYYY-MM-DD'); } else if (selActivityType === 'Reschedule') { fromDate = formRef.current ?.getFieldsValue() ?.ReschedulFromDate?.format('YYYY-MM-DD'); toDate = formRef.current ?.getFieldsValue() ?.ReschedulToDate?.format('YYYY-MM-DD'); } } else if (selCancelPay === 'CP') { fromDate = formRef.current ?.getFieldsValue() ?.['Change-PaymentFromDate']?.format('YYYY-MM-DD'); toDate = formRef.current ?.getFieldsValue() ?.['Change-PaymentToDate']?.format('YYYY-MM-DD'); } } if (segmentValue === 'Date') { const fieldname = selCancelPay === 'CR' ? selActivityType === 'Cancel' ? 'Canceldate' : 'RescheduleApidate' : 'Change-Paymentdate'; date = formRef.current ?.getFieldsValue() ?.[fieldname]?.format('YYYY-MM-DD'); } formRef.current?.setFieldsValue({ PaymodeOrderId: e }); let data = { segmentValue, mobileNumber: billormobile, fromDate, toDate, date, AppId, CompId, BranchId, passType: false, OrderId: 'O' + AppId + '-' + CompId + '-' + BranchId + '-' + UserId + '-' + billormobile, }; const res = await dispatch(getPaymentModeDetail(data)).unwrap(); if (res?.data?.statusCode === 1) { const sales = res?.data?.data; setFullSalesDetail(sales); if (segmentValue === 'Bill No') { const { PaymentType, PaymentTypeName, OrderId, CustSuppId } = sales?.[0]; // setSelPayMode(PaymentType) setApiPaymentName(PaymentTypeName); // formRef.current?.setFieldsValue({ CpPaymentMode: PaymentType }) const configName = PaymentOptions?.find( (item) => item.ConfigId === PaymentType )?.ConfigName; setSelectCust(configName === 'Credit'); setSelectSalesId(OrderId); dispatch(changeSelectedCustId(CustSuppId)); handleCustomerSelection(CustSuppId); } else { } } else if (res?.data?.statusCode === 0) { // setSelPayMode() // formRef.current?.setFieldsValue({ CpPaymentMode: "" }) setSelectSalesId(); setSelectedOrderId(); setMessageType('error'); setMessageData(res?.data?.response); } setisdisabled(true); }; // const onChangePaymentMode = (e) => { // setSelPayMode(e) // formRef.current?.setFieldsValue({ CpPaymentMode: e }); // const selPayment = PaymentOptions?.find(item => item.ConfigId === e) // setDropSelPaymentName(selPayment?.ConfigName) // setSelectCust(selPayment?.ConfigName === "Credit") // } const SelectCanPaymode = (e) => { setSelCanPaymode(e); formRef.current?.setFieldsValue({ PaymentMode: e }); selectedRowKey !== undefined && setisdisabled(false); }; const defaultColumns = [ { title: 'Sl.No', key: 'sno', align: 'center', width: '100px', render: (text, object, index) => ( {index + 1} ), }, { title: 'Product Name', dataIndex: 'ProdNameQty', key: 'ProdNameQty', width: '100px', }, { title: 'Quantity ', dataIndex: 'SalesQty', key: 'SalesQty', width: '100px', align: 'right', editable: true, }, { title: 'Total Amount', dataIndex: 'TotalAmt', key: 'TotalAmt', width: '100px', align: 'right', }, ]; 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 EditableRow = ({ index, ...props }) => { const [form] = Form.useForm(); return (
); }; const EditableCell = ({ title, editable, children, dataIndex, record, handleSave, ...restProps }) => { const [editing, setEditing] = useState(false); const inputRef = useRef(null); const form = useContext(EditableContext); useEffect(() => { if (editing) { inputRef?.current?.focus(); } }, [editing]); const toggleEdit = () => { setEditing(!editing); form.setFieldsValue({ [dataIndex]: record[dataIndex], }); }; const save = async () => { try { const values = await form.validateFields(); toggleEdit(); handleSave({ ...record, ...values, }); } catch (errInfo) { console.log('Save failed:', errInfo); } }; let childNode = children; if (editable) { childNode = editing ? ( ) : (
{children}
); } return {childNode}; }; const components = { body: { row: EditableRow, cell: EditableCell, }, }; const handleSave = (row) => { const newData = [...SalesDetail]; const index = newData.findIndex( (item) => row.InwardDtlId === item.InwardDtlId ); const item = newData[index]; if (item?.SalesQty > row?.SalesQty) { newData.splice(index, 1, { ...item, ...row, }); setSalesDetail(newData); } else { setMessageType('error'); setMessageData('only less or equal quantity applicable.'); } }; const onChangeCanReason = async (e) => { formRef.current?.setFieldsValue({ CalReason: e }); let selectedCanReason = CanReason?.filter((item) => item?.UniqueId === e); setSelCanReason(selectedCanReason); selectedRowKey !== undefined && setisdisabled(false); }; const onChangeRescheduleReason = async (e) => { formRef.current?.setFieldsValue({ RescheduleReason: e }); let selectedRescheduleReason = RescheduleReason?.filter( (item) => item?.UniqueId === e ); // setSelRescheduleReason(selectedRescheduleReason) }; const onFinish = async () => { const isCreditApi = ApiPaymentName?.toLowerCase() === 'credit'; const isCreditDrop = DropSelPaymentName?.toLowerCase() === 'credit'; if (selCancelPay === 'CP') { if (isCreditApi && isCreditDrop) { setMessageType('error'); setMessageData('Not Processable data'); return; } if (isCreditApi || (isCreditDrop && SelectCustId !== null)) { setCreditCustomer(true); return; } if (isCreditDrop && SelectCustId === null) { setMessageType('error'); setMessageData('Please Select Customer'); return; } const data = { AppId, CompId, BranchId, UpdatedBy: UserId, OrderId: SelectSalesId, CustSuppId: SelectCustId, PaymentModes: selectedPayments, }; try { const response = await dispatch(putpaymentModeChange(data)).unwrap(); if (response?.data?.statusCode === 1) { formRef.current?.resetFields(); setSelectSalesId(); // setSelPayMode(); setMessageType('success'); setMessageData('Payment Mode Updated Successfully'); setSelectSalesId(SelectSalesId); dispatch(changeSelectedCustId(SelectCustId)); setSelectedPayments([]); setSelectedRowKey(null); setSelectedRowKeys(null); setisdisabled(true); setSalesDetail([]); setFullSalesDetail([]); setSelectCust(false); dispatch(changeSelectedCustId(null)); dispatch(changeSelectedOption({})); dispatch(ChangeSelectedCustDisable(false)); SelectCanPaymode(null) } } catch (error) { console.error('Payment mode change failed:', error); } } if (selCancelPay === 'CR' && selActivityType === 'Cancel') { if (SelCancelType === 'OverAll') { const { NetAmount } = FullSalesDetail?.[0]; const { ChargeType, ChargesFixed } = SelCanReason?.[0]; if (ChargeType === 'P') { const temCanCharge = (NetAmount * ChargesFixed) / 100; setCancellationCharge(temCanCharge); } else if (ChargeType === 'F') { setCancellationCharge(ChargesFixed); } setIsPosting(true); try { const prodDtl = (FullSalesDetail || [])?.find( (f) => f.OrderId === selectedRowKey )?.productDetails const SalesId = prodDtl?.[0]?.SalesId; const ProductDetails = (prodDtl || []).map(({ ProdId, InwardDtlId, Type, SalesQty, Rate, TaxAmt, SinglePc }) => ({ ProdId, InwardDtlId, Type, Qty: SalesQty, Rate, TotalAmt: SalesQty * Rate, TaxAmt, SinglePc, })); if (ProductDetails?.length === 0) { throw new Error('No orders selected'); } const Amount = ProductDetails.reduce((acc, item) => acc + (item.TotalAmt || 0), 0); const payload = { AppId, CompId, BranchId, SalesId, ProductDetails, SalesType: "C", OrderId: selectedRowKey, CreatedBy: UserId, CreatedDate: dayjs()?.format('YYYY-MM-DD'), OrderPaymentDtl: [ { PaymentType: SelCanPaymode, Amount, PaymentStatus: "S" } ] }; const res = await dispatch(PostSalesCancellation(payload)).unwrap(); if (res?.data?.statusCode === 1) { setMessageType('success'); setMessageData(res?.data?.response || "Posted successfully"); setSelectedRowKey() formRef.current?.resetFields() setFullSalesDetail([]); SelectCanPaymode(null) setSegmentValue('Bill No') } else { setMessageType('success'); setMessageData(res?.data?.response || "Posted successfully"); } } catch (error) { setMessageType("error"); setMessageData(error?.message || "An error occurred"); } finally { setIsPosting(false); // enable button } } } }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const CancelModalClose = () => { setCancelModalOpen(false); }; const handleAddCustomer = () => { setAddCustomer(true); }; const handleAddCustomerCancel = () => { setAddCustomer(false); }; const handleOk = async () => { let data = { OrderId: SelectSalesId, PaymentType: 0, // SelPayMode shifayath this flow need to discuss UpdatedBy: getSession('UserId'), CustSuppId: SelectCustId, }; let response = await dispatch(putpaymentStatus(data)).unwrap(); if (response?.data?.statusCode == 1) { formRef.current?.resetFields(); setSelectSalesId(); // setSelPayMode() setMessageType('success'); setMessageData('Payment Mode Updated Succesfully'); setSelectCust(false); dispatch(changeSelectedCustId(null)); dispatch(changeSelectedOption({})); dispatch(ChangeSelectedCustDisable(false)); } setCreditCustomer(false); }; const handlemodalclose = () => { setCreditCustomer(false); }; const segmentOnChange = (value) => { setSegmentValue(value); setSelectedOrderId(); formRef.current?.resetFields(); setSelectedRowKey(null); setFullSalesDetail([]); setisdisabled(true); }; const onChangeDate = (date) => { if (date) { selActivityType === 'Cancel' ? getSalesOrderDetail() : getPaymentMode(); } }; const onChangeFromDate = (date) => { if (date) { const formatted = date?.format('YYYY-MM-DD'); const billormobile = formRef.current?.getFieldsValue()?.[ selCancelPay === 'CR' ? 'OrderId' : 'PaymodeOrderId' ]; let toDate; if (selCancelPay === 'CR') { if (selActivityType === 'Cancel') { toDate = formRef.current?.getFieldsValue()?.CancelToDate; } else if (selActivityType === 'Reschedule') { toDate = formRef.current?.getFieldsValue()?.ReschedulToDate; } } else if (selCancelPay === 'CP') { toDate = formRef.current?.getFieldsValue()?.["Change- PaymentToDate"]; } if ( segmentValue === 'Mobile' && formatted && toDate !== undefined ) { if (billormobile === undefined) { setMessageType('error'); setMessageData('Please enter the mobile number.'); } else { selActivityType === 'Cancel' ? getSalesOrderDetail() : getPaymentMode(); } } } }; const onChangeToDate = (date) => { if (date) { const formatted = date?.format('YYYY-MM-DD'); const billormobile = formRef.current?.getFieldsValue()?.[ selCancelPay === 'CR' ? 'OrderId' : 'PaymodeOrderId' ]; let fromDate; if (selCancelPay === 'CR') { if (selActivityType === 'Cancel') { fromDate = formRef.current?.getFieldsValue()?.CancelFromDate; } else if (selActivityType === 'Reschedule') { fromDate = formRef.current?.getFieldsValue()?.ReschedulFromDate; } } else if (selCancelPay === 'CP') { fromDate = formRef.current?.getFieldsValue()?.['Change-PaymentFromDate']; } if ( segmentValue === 'Mobile' && fromDate != undefined && formatted ) { if (billormobile === undefined) { setMessageType('error'); setMessageData('Please enter the mobile number.'); } else { selActivityType === 'Cancel' ? getSalesOrderDetail() : getPaymentMode(); } } } }; const viewOrderdetails = (prdDetls) => { setViewProductDetails({ view: true, productDetails: prdDetls, }); }; const viewPaymentdetails = (pymDetls) => { setViewPaymentDetails({ view: true, paymentDetails: pymDetls, }); }; const paymentModeOnChange = (newPaymentType, UniqueId) => { setisdisabled(false); setSelectedPayments((prev) => { if (!Array.isArray(prev)) { console.error('prev is not an array!', prev); return []; } const updated = [...prev]; const index = updated.findIndex((item) => item.UniqueId === UniqueId); const newItem = { PaymentType: newPaymentType, UniqueId: UniqueId, }; if (index !== -1) { updated[index] = newItem; // overwrite existing } else { updated.push(newItem); // add new } return updated; }); }; const paymentRowRadiocolumns = [ { title: 'PaymentType Name', dataIndex: 'PaymentTypeName', key: 'PaymentTypeName', width: '100px', render: (text) => {text ?? '-'}, }, { title: 'Order Date', dataIndex: 'CreatedDate', key: 'CreatedDate', width: '100px', render: (text) => {ExtractDateFormate(text)}, }, { title: 'Amount', dataIndex: 'Amount', key: 'Amount', width: '100px', }, { title: 'Change PaymentType', dataIndex: 'PaymentType', key: 'PaymentType', width: '100px', render: (text, record) => { const { UniqueId } = record; const selectedItem = PaymentOptions?.find( (item) => item.UniqueId === UniqueId )?.PaymentType; return ( Change Payment Mode} onChangeFunction={(e) => paymentModeOnChange(e, UniqueId)} options={PaymentOptions?.filter((f) => f.ConfigId !== text)?.map( (option) => ({ value: option.ConfigId, label: option.ConfigName, }) )} /> ); }, }, ]; const viewPaymentColumns = [ { title: 'PaymentType Name', dataIndex: 'PaymentTypeName', key: 'PaymentTypeName', width: '100px', }, { title: 'Order Date', dataIndex: 'CreatedDate', key: 'CreatedDate', width: '100px', render: (text) => {ExtractDateFormate(text)}, }, { title: 'Amount', dataIndex: 'Amount', key: 'Amount', width: '100px', }, ]; const productDetailscolumns = [ { title: appPreferences ? 'Slot' : 'Product Name', dataIndex: 'ProdName', key: 'ProdName', width: '100px', render: (text, record) => ( {record?.ProdName + (record?.Size ? ' - ' + record?.Size + (record?.UomName ? ' - ' + record?.UomName : '') : '')} ), }, { title: 'Variant Name', dataIndex: 'ProdVariantName', key: 'ProdVariantName', width: '100px', }, { title: 'Quantity', dataIndex: 'SalesQty', key: 'SalesQty', width: '100px', }, { title: 'Rate', dataIndex: 'Rate', key: 'Rate', width: '100px', }, { title: 'Total Amount', dataIndex: 'TotalAmt', key: 'TotalAmt', width: '100px', }, ]; const rowradiocolumns = [ { title: 'Order Id', dataIndex: 'OrderId', key: 'OrderId', width: '100px', render: (text) => {text.match(/\d+/g).pop()}, }, { title: 'Order Date', dataIndex: 'OrderDate', key: 'OrderDate', width: '100px', render: (text) => {ExtractDateFormate(text)}, }, { title: 'Net Amount', dataIndex: 'NetAmount', key: 'NetAmount', width: '100px', }, { title: 'Order Payment Details', dataIndex: 'OrderPaymentDtls', key: 'OrderPaymentDtls', width: '100px', render: (OrderPaymentDtls) => ( {OrderPaymentDtls?.length === 0 ? ( 'No Record Exist' ) : ( viewPaymentdetails(OrderPaymentDtls)} /> )} ), }, { title: 'Customer Details', dataIndex: 'CustomerDetails', key: 'CustomerDetails', width: '100px', render: (CustomerDetails) => (
{CustomerDetails?.[0]?.CustSuppName ? CustomerDetails?.[0]?.CustSuppName + ' / ' : ''} {CustomerDetails?.[0]?.MobileNo ? CustomerDetails?.[0]?.MobileNo : CustomerDetails?.[0]?.CustSuppName ? '-' : 'No Details Found'}
), }, // { // title: 'BookingType Name', // dataIndex: 'BookingTypeName', // key: 'BookingTypeName', // width: '100px', // }, ...(appPreferences ? [] : [ { title: 'BookingType Name', dataIndex: 'BookingTypeName', key: 'BookingTypeName', width: '100px', }, ]), { title: sportsAppPreference ? 'Slot Details' : 'Product Details', dataIndex: 'productDetails', key: 'productDetails', width: '100px', render: (ProductDetail) => ( viewOrderdetails(ProductDetail)} /> ), }, ]; const handleCustomerSelection = async (CustSuppId) => { if (CustSuppId) { // Get all customers const responseAllCustomer = await dispatch( getAllCustomer({ CompId, AppId, branchId: BranchId }) ).unwrap(); // Find the selected customer const selected = responseAllCustomer?.data?.data?.find( (item) => item.CustId === CustSuppId ); if (selected) { const { CustId, CustName, CustMobile } = selected; dispatch( changeSelectedOption({ CustId, CustName, label: CustName ? CustName : CustMobile, value: CustMobile, }) ); dispatch(ChangeSelectedCustDisable(true)); } // Get credit customer data const responseCreditCustomer = await dispatch( getCreditCustomer({ CompId, BranchId, AppId, CustId: CustSuppId, }) ).unwrap(); if (responseCreditCustomer?.data?.statusCode === 1) { setCreditCustDetails(responseCreditCustomer?.data?.data); } else { if (responseAllCustomer?.data?.statusCode === 1) { const selectedCustomer = responseAllCustomer?.data?.data?.filter( (item) => item?.CustId === CustSuppId ); setNewCustomer(selectedCustomer); } else { setNewCustomer([]); } setCreditCustDetails([]); } } else { dispatch(changeSelectedOption({})); dispatch(ChangeSelectedCustDisable(false)); } }; const rowSelection = { type: 'radio', selectedRowKeys: selectedRowKey !== null ? [selectedRowKey] : [], onChange: (selectedRowKeys, selectedRows) => { setisdisabled(selCancelPay === 'CR' ? false : true); setSelectedRowKey(selectedRowKeys[0]); const { OrderId, CustSuppId } = FullSalesDetail?.find( (f) => f.OrderId === selectedRowKeys[0] ); setSelectSalesId(OrderId); dispatch(changeSelectedCustId(CustSuppId)); setSelectedPayments([]); if (selCancelPay === 'CR') { handleCustomerSelection(CustSuppId); } }, }; return ( <>
Mode Type :
selectCancelOrPaymentType(value) } />
{/*
Search Bill Type :
*/}
{selCancelPay === 'CR' && (
{/*
  • Activity Type :
    selectActivityType(value) } />
  • */}
    {selActivityType === 'Cancel' && (
    segmentOnChange(e)} valueData={segmentValue} isOnChange={true} />
    {segmentValue === 'Date' ? ( ) : ( { await validateSafeInput(value); // Your existing input sanitization if (!value) { return Promise.reject(`Please enter ${segmentValue}`); } const digitOnlyRegex = /^[0-9]+$/; if (!digitOnlyRegex.test(value)) { return Promise.reject(`${segmentValue} should contain digits only`); } if (segmentValue === 'Bill No') { if (value.length > 30) { return Promise.reject('Bill No should not exceed 30 characters'); } } if (segmentValue === 'Mobile') { const mobileRegex = /^[6-9]\d{9}$/; if (!value || value.length !== 10) { return Promise.reject('Mobile Number must be exactly 10 digits'); } if (!mobileRegex.test(value)) { return Promise.reject('Mobile number must start with 6, 7, 8, or 9'); } await getSalesDetailapi(value); } await getSalesDetailapi(value); return Promise.resolve(); } } ]} > (e.target.value = e.target.value.replace(/[^0-9]/g, '')) } label={ } isOnChange={SelectedOrderId ? true : false} /> )} {segmentValue === 'Mobile' && (
    )}
    ({ value: option.UniqueId, label: option.Description, }))} label={ } className="field-DropDown" onChangeFunction={(e) => onChangeCanReason(e)} // valueData={seletedprodDropdown} isOnChange={ formRef.current?.getFieldsValue() ?.CalReason != undefined ? true : false } />
    ({ value: option.ConfigId, label: option.ConfigName, }))} label={ } className="field-DropDown" onChangeFunction={(e) => SelectCanPaymode(e)} valueData={SelCanPaymode} />
    {/* {SalesDetail?.length > 0 && selectedRowKey !== null && (
  • selectCancelType(value) } size="large" />
  • )} */} {/* {SelCancelType === 'ProdCancel' && SalesDetail && (
    'editable-row'} bordered data={SalesDetail} dataSource={SalesDetail} rowSelection={{ selectedRowKeys, onChange: onOrderSelectChange, }} /> )} */} )} {/* {selActivityType === 'Reschedule' && (
    segmentOnChange(e)} valueData={segmentValue} isOnChange={true} />
    {segmentValue === 'Date' ? ( ) : ( { await validateSafeInput(value); if ( segmentValue === 'Bill No' && value && value.length > 30 ) { return Promise.reject( 'Bill No should not exceed 30 characters' ); } if ( segmentValue === 'Mobile' && value && value.length > 10 ) { return Promise.reject( 'Mobile Number should not exceed 30 characters' ); } if ( segmentValue === 'Mobile' && value && value.length === 10 ) { getSalesDetailapi(value); } return Promise.resolve(); }, }, ]} > {segmentValue} } /> )} {segmentValue === 'Mobile' && (
    )}
    ({ value: option.UniqueId, label: option.Description, }))} label={ } className="field-DropDown" onChangeFunction={(e) => onChangeRescheduleReason(e) } isOnChange={ formRef.current?.getFieldsValue() ?.RescheduleReason != undefined ? true : false } />
    )} */} {FullSalesDetail?.length > 0 && (
    )} )} {selCancelPay === 'CP' && (
    segmentOnChange(e)} valueData={segmentValue} isOnChange={true} />
    {segmentValue === 'Date' ? ( ) : ( { await validateSafeInput(value); // Your existing input sanitization if (!value) { return Promise.reject(`Please enter ${segmentValue}`); } const digitOnlyRegex = /^[0-9]+$/; if (!digitOnlyRegex.test(value)) { return Promise.reject(`${segmentValue} should contain digits only`); } if (segmentValue === 'Bill No') { if (value.length > 30) { return Promise.reject('Bill No should not exceed 30 characters'); } } if (segmentValue === 'Mobile') { const mobileRegex = /^[6-9]\d{9}$/; if (!value || value.length !== 10) { return Promise.reject('Mobile Number must be exactly 10 digits'); } if (!mobileRegex.test(value)) { return Promise.reject('Mobile number must start with 6, 7, 8, or 9'); } await getSalesDetailapi(value); } await getSalesDetailapi(value); return Promise.resolve(); } } ]} > {segmentValue} } isOnChange={ formRef.current?.getFieldsValue() ?.PaymodeOrderId !== undefined } /> )} {segmentValue === 'Mobile' && (
    )} {/* f.ConfigId !== paymentSelectedRowKey) : PaymentOptions)?.map((option) => ({ value: option.ConfigId, label: option.ConfigName, }))} label={} className="field-DropDown" onChangeFunction={(e) => onChangePaymentMode(e)} valueData={SelPayMode} isOnChange={ SelPayMode ? true : false } /> */} {SelectCust && (
    {' '}
    )}
    {selectedRowKey !== null && (<>
    f.OrderId === selectedRowKey )?.OrderPaymentDtls } /> )} {FullSalesDetail?.length > 0 && (
    )} )}
    } disabled={addnewAccess} />
    } footer={false} width={900} onCancel={() => { setViewPaymentDetails({ view: false, paymentDetails: [], }); }} // onOk={() => { // setViewPaymentDetails({ // view: false, // paymentDetails: [], // }); // }} children={
    } /> } width={900} footer={false} onCancel={() => { setViewProductDetails({ view: false, productDetails: [], }); }} // onOk={() => { // setViewProductDetails({ // view: false, // productDetails: [], // }); // }} children={
    } /> } width={500} onCancel={CancelModalClose} onOk={OverAllOrderCancel} children={
    Your Bill Amount:
    {FullSalesDetail?.[0]?.NetAmount}
    Cancellation Charge :
    {CancellationCharge}
    Remain Amount :
    {FullSalesDetail?.[0]?.NetAmount - CancellationCharge}
    } /> } width={500} onOk={handleOk} onCancel={handlemodalclose} children={ <>
    Mobile Number :{' '} {CreditCustDetails?.length > 0 ? CreditCustDetails?.[0]?.MobileNo : NewCustomer?.[0]?.MobileNo}
    Customer Id :{' '} {CreditCustDetails?.length > 0 ? extractLastNumber(CreditCustDetails?.[0]?.CustId) : extractLastNumber(NewCustomer?.[0]?.CustId)}
    {CreditCustDetails?.length > 0 ? CreditCustDetails?.[0]?.CustName && (
    Name:{' '} {CreditCustDetails?.[0]?.CustName}{' '}
    ) : NewCustomer?.[0]?.CustName && (
    Name:{' '} {NewCustomer?.[0]?.CustName}
    )} {CreditCustDetails?.length > 0 ? CreditCustDetails?.[0]?.Address1 && (
    Address:{' '} {CreditCustDetails?.[0]?.Address1}, {CreditCustDetails?.[0]?.Dist}
    ) : NewCustomer?.[0]?.Address1 && (
    Address:{' '} {NewCustomer?.[0]?.Address1},{NewCustomer?.[0]?.Dist}
    )}

    Sales Details

    {CreditCustDetails?.length > 0 ? ( <>
    {Number(CreditCustDetails?.[0]?.OverAllBal) > 0 ? 'Advance Amount' : 'Outstanding Amount'}
    {CreditCustDetails?.[0]?.OverAllBal && Math.abs( Number(CreditCustDetails?.[0]?.OverAllBal) ).toFixed(2)}
    Bill Amount:
    {FullSalesDetail?.[0]?.NetAmount}
    {ApiPaymentName?.toLowerCase() === 'credit' && DropSelPaymentName?.toLowerCase() !== 'credit' ? (
    {CreditCustDetails?.[0]?.OverAllBal + FullSalesDetail?.[0]?.NetAmount > 0 ? 'Remaining Amount' : 'Payable Amount'}
    0 ? 'green' : 'red', fontSize: '16px', fontWeight: '600', }} > {Math.abs( CreditCustDetails?.[0]?.OverAllBal + FullSalesDetail?.[0]?.NetAmount ).toFixed(2)}
    ) : (
    {CreditCustDetails?.[0]?.OverAllBal - FullSalesDetail?.[0]?.NetAmount > 0 ? 'Remaining Amount' : 'Payable Amount'}
    0 ? 'green' : 'red', fontSize: '16px', fontWeight: '600', }} > {Math.abs( CreditCustDetails?.[0]?.OverAllBal - FullSalesDetail?.[0]?.NetAmount ).toFixed(2)}
    )} {CreditCustDetails?.[0]?.OverAllBal !== 0 && DropSelPaymentName?.toLowerCase() === 'credit' ? CreditCustDetails?.[0]?.OverAllBal - FullSalesDetail?.[0]?.NetAmount < 0 && (
    {CreditCustDetails?.[0]?.MobileNo ? CreditCustDetails?.[0]?.MobileNo : CreditCustDetails?.[0]?.CustName}{' '} customer already has an outstanding amount ( {CreditCustDetails?.[0]?.OverAllBal && Math.abs( Number(CreditCustDetails?.[0]?.OverAllBal) ).toFixed(2)} ) to pay. Therefore, should we proceed with the current bill amount?
    ) : ''} ) : (
    Bill Amount:
    {FullSalesDetail?.[0]?.NetAmount}
    )}
    } /> ); }; export default ChangePaymentmode;