2026-01-27 18:27:29 +05:30
|
|
|
|
import React, {
|
|
|
|
|
|
useEffect,
|
|
|
|
|
|
useRef,
|
|
|
|
|
|
useState,
|
|
|
|
|
|
useCallback,
|
|
|
|
|
|
forwardRef,
|
|
|
|
|
|
useImperativeHandle,
|
|
|
|
|
|
} from 'react';
|
|
|
|
|
|
import { useDispatch } from 'react-redux';
|
|
|
|
|
|
import {
|
|
|
|
|
|
Form,
|
|
|
|
|
|
Checkbox,
|
|
|
|
|
|
Row,
|
|
|
|
|
|
Space,
|
|
|
|
|
|
Radio,
|
|
|
|
|
|
Switch,
|
|
|
|
|
|
Tooltip,
|
|
|
|
|
|
Button,
|
|
|
|
|
|
Input,
|
|
|
|
|
|
Typography,
|
|
|
|
|
|
Upload,
|
|
|
|
|
|
message,
|
|
|
|
|
|
Modal,
|
|
|
|
|
|
Segmented,
|
|
|
|
|
|
} from 'antd';
|
|
|
|
|
|
import {
|
|
|
|
|
|
DeleteFilled,
|
|
|
|
|
|
EditFilled,
|
|
|
|
|
|
ArrowRightOutlined,
|
|
|
|
|
|
InfoCircleOutlined,
|
|
|
|
|
|
PlusOutlined,
|
|
|
|
|
|
MinusCircleOutlined,
|
|
|
|
|
|
UploadOutlined,
|
|
|
|
|
|
} from '@ant-design/icons';
|
|
|
|
|
|
import { DropDowns } from '../../../../Components/Forms/DropDown';
|
|
|
|
|
|
import { Messages } from '../../../../Components/Notifications/Messages';
|
|
|
|
|
|
import Buttons from '../../../../Components/Forms/Buttons';
|
|
|
|
|
|
import { Tables } from '../../../../Components/Tables/Table';
|
|
|
|
|
|
import { getSession } from '../../../../Services/Others';
|
|
|
|
|
|
import {
|
|
|
|
|
|
changeBreadCrumb,
|
|
|
|
|
|
getEmpAccess,
|
|
|
|
|
|
} from '../../../../Features/AppPage/CenterPage';
|
|
|
|
|
|
import { getConfigType } from '../../../../Features/BookingScreen/BookingData/BookingData.js';
|
|
|
|
|
|
import {
|
|
|
|
|
|
getPrintOptions,
|
|
|
|
|
|
postPrintSelectionComponentData,
|
|
|
|
|
|
getPrintSelectionComponentData,
|
|
|
|
|
|
putPrintSelectionComponentData,
|
|
|
|
|
|
changeSelectedprintSize,
|
|
|
|
|
|
changeSelectedprintStyle,
|
|
|
|
|
|
changeSelectedSlNo,
|
|
|
|
|
|
changeSelectedItem,
|
|
|
|
|
|
changeSelectedMRP,
|
|
|
|
|
|
changeSelectedDiscount,
|
|
|
|
|
|
changeSelectedQuantity,
|
|
|
|
|
|
changeSelectedRate,
|
|
|
|
|
|
changeSelectedAmount,
|
|
|
|
|
|
changeSelectedHsnCode,
|
|
|
|
|
|
changeSelectedQrcode,
|
|
|
|
|
|
changeSelectedSignature,
|
|
|
|
|
|
changeSelectedtermsAndConditions,
|
|
|
|
|
|
changethemeFormat,
|
|
|
|
|
|
changeNotes,
|
|
|
|
|
|
changeSignatureImage,
|
|
|
|
|
|
changeBillName,
|
|
|
|
|
|
changeSelectedCashierName,
|
|
|
|
|
|
changeSelectedLogo,
|
|
|
|
|
|
changeSelectedCredit,
|
|
|
|
|
|
changeSelectedTax,
|
|
|
|
|
|
} from '../../../../Features/ThemeChange/ThemeChange';
|
|
|
|
|
|
import '../../../../Styles/BookingScreen/Components/SelectionComponent/SelectionComponent.scss';
|
|
|
|
|
|
import { useAuth } from '../../../../AuthContext.jsx';
|
|
|
|
|
|
import { InputField } from '../../../../Components/Forms/InputField.jsx';
|
|
|
|
|
|
import ColorPicker from '../../../../Components/Forms/ColorPicker.jsx';
|
|
|
|
|
|
import { FaChevronDown, FaChevronUp } from 'react-icons/fa';
|
|
|
|
|
|
|
|
|
|
|
|
const subDirectory = import.meta.env.BASE_URL;
|
|
|
|
|
|
|
|
|
|
|
|
const SelectionComponent = forwardRef((props, ref) => {
|
|
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
|
const { SadminuserAccess } = useAuth();
|
|
|
|
|
|
const doSomething = (message, index) => {
|
|
|
|
|
|
handleStyle(message);
|
|
|
|
|
|
dispatch(changeSignatureImage(''));
|
|
|
|
|
|
setEdit(false);
|
|
|
|
|
|
if (index >= 4) {
|
|
|
|
|
|
setShowMore(true);
|
|
|
|
|
|
} else if (index <= 4) {
|
|
|
|
|
|
setShowMore(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
useImperativeHandle(ref, () => ({
|
|
|
|
|
|
doSomething,
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
|
|
let SAAccessCommonMaster = SadminuserAccess?.find(
|
2026-01-29 09:38:34 +05:30
|
|
|
|
(e) => e?.MenuName === 'Print Forms'
|
2026-01-27 18:27:29 +05:30
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
const formRef = useRef(null);
|
|
|
|
|
|
const { Title } = Typography;
|
|
|
|
|
|
|
|
|
|
|
|
const AppId = getSession('AppId');
|
|
|
|
|
|
const CompId = getSession('CompId');
|
|
|
|
|
|
const BranchId = getSession('BranchId');
|
|
|
|
|
|
const UserId = getSession('UserId');
|
|
|
|
|
|
const UserType = getSession('UserType');
|
|
|
|
|
|
const [segmentData, setSegmentData] = useState([]);
|
|
|
|
|
|
const [segmentValue, setSegmentValue] = useState();
|
|
|
|
|
|
const [edit, setEdit] = useState(false);
|
|
|
|
|
|
const [templateEdit, setTemplateEdit] = useState(false);
|
|
|
|
|
|
const [messageType, setMessageType] = useState(null);
|
|
|
|
|
|
const [messageData, setMessageData] = useState(null);
|
|
|
|
|
|
const [selectedStyleId, setSelectedStyleId] = useState(null);
|
|
|
|
|
|
const [SelectedStyleName, setSelectedStyleName] = useState(null);
|
|
|
|
|
|
const [sizeCheckList, setSizeCheckList] = useState([]);
|
|
|
|
|
|
const [selectedSizeCheckedValues, setSelectedSizeCheckedValues] = useState(
|
|
|
|
|
|
[]
|
|
|
|
|
|
);
|
|
|
|
|
|
const [selectedSizeCheckList, setSelectedSizeCheckList] = useState([]);
|
|
|
|
|
|
const [sizeOptionData, setSizeOptionData] = useState([]);
|
|
|
|
|
|
|
|
|
|
|
|
const [styleData, setStyleData] = useState([]);
|
|
|
|
|
|
|
|
|
|
|
|
const [checkedList, setCheckedList] = useState([]);
|
|
|
|
|
|
const checkAll = sizeCheckList?.length === checkedList?.length;
|
|
|
|
|
|
const [empData, setEmpData] = useState();
|
|
|
|
|
|
const selecetedConfigName = styleData?.filter(
|
|
|
|
|
|
(item) => item?.ConfigId == selectedStyleId
|
|
|
|
|
|
)?.[0]?.ConfigName;
|
|
|
|
|
|
const [PrintType, setPrintType] = useState(true);
|
|
|
|
|
|
const [PageSize, setPageSize] = useState('3inch');
|
|
|
|
|
|
const [isFooterChecking, setisFooterChecking] = useState(false);
|
|
|
|
|
|
const [isBillName, setisBillName] = useState(false);
|
|
|
|
|
|
const [isTermscondChecking, setisTermscondChecking] = useState(false);
|
|
|
|
|
|
const [isSignatureChecking, setisSignatureChecking] = useState(false);
|
|
|
|
|
|
const [isheadercolour, setisheadercolour] = useState(false);
|
|
|
|
|
|
const [showMore, setShowMore] = useState(false);
|
|
|
|
|
|
const visibleConfigs = showMore ? styleData : styleData.slice(0, 4);
|
|
|
|
|
|
const defaultImage =
|
|
|
|
|
|
'https://5.imimg.com/data5/SELLER/Default/2024/2/382660974/CB/FZ/CS/139657382/bill-book-printing-services.jpeg';
|
|
|
|
|
|
const [terms, setTerms] = useState(['']);
|
|
|
|
|
|
const [selectedColour, setSelectedColour] = useState('#000000');
|
|
|
|
|
|
const [fileList, setFileList] = useState([]);
|
|
|
|
|
|
const [previewOpen, setPreviewOpen] = useState(false);
|
|
|
|
|
|
const [previewImage, setPreviewImage] = useState('');
|
|
|
|
|
|
const [previewTitle, setPreviewTitle] = useState('');
|
|
|
|
|
|
const [Notes, setNote] = useState('');
|
|
|
|
|
|
const [BillName, setBillName] = useState('');
|
|
|
|
|
|
|
|
|
|
|
|
const items = [
|
|
|
|
|
|
{
|
|
|
|
|
|
name: 'Home',
|
|
|
|
|
|
link: `${subDirectory}app-page/home`,
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
// name: "PrintSetup",
|
|
|
|
|
|
// link: `${subDirectory}saleslayouts/print-selection`,
|
|
|
|
|
|
// },
|
|
|
|
|
|
];
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
configFooterfun(sizeCheckList, checkedList);
|
|
|
|
|
|
}, [checkedList, checkedList]);
|
|
|
|
|
|
|
|
|
|
|
|
const columns = [
|
|
|
|
|
|
{
|
|
|
|
|
|
title: 'Sl.No',
|
|
|
|
|
|
align: 'center',
|
|
|
|
|
|
key: 'sno',
|
|
|
|
|
|
width: '50px',
|
|
|
|
|
|
render: (text, object, index) => (
|
|
|
|
|
|
<a style={{ color: 'black' }}>{index + 1}</a>
|
|
|
|
|
|
),
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: 'Style',
|
|
|
|
|
|
dataIndex: 'StyleName',
|
|
|
|
|
|
key: 'StyleName',
|
|
|
|
|
|
width: '50px',
|
|
|
|
|
|
align: 'left',
|
|
|
|
|
|
render: (text, record) => (
|
|
|
|
|
|
<a
|
|
|
|
|
|
style={{ color: 'black' }}
|
|
|
|
|
|
>{`${text} (${segmentData?.find(({ value }) => value === record?.PrintTypeId)?.label})`}</a>
|
|
|
|
|
|
),
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: 'Options',
|
|
|
|
|
|
dataIndex: 'OptionDetails',
|
|
|
|
|
|
key: 'OptionDetails',
|
|
|
|
|
|
width: '100px',
|
|
|
|
|
|
align: 'left',
|
|
|
|
|
|
render: (OptionDetails) => (
|
|
|
|
|
|
<a style={{ color: 'black' }}>
|
|
|
|
|
|
{OptionDetails?.map((item) => item.ConfigName).join(',')}
|
|
|
|
|
|
</a>
|
|
|
|
|
|
),
|
|
|
|
|
|
ellipsis: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: 'Default Print',
|
|
|
|
|
|
dataIndex: 'SetasDefault',
|
|
|
|
|
|
key: 'SetasDefault',
|
|
|
|
|
|
width: '100px',
|
|
|
|
|
|
align: 'center',
|
|
|
|
|
|
render: (_, record, index) => (
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
checked={record.SetasDefault == 'Y'}
|
|
|
|
|
|
onClick={() => onCheckdefault(record, index)}
|
|
|
|
|
|
/>
|
|
|
|
|
|
),
|
|
|
|
|
|
ellipsis: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: 'Action',
|
|
|
|
|
|
dataIndex: 'Action',
|
|
|
|
|
|
width: '50px',
|
|
|
|
|
|
key: 'Action',
|
|
|
|
|
|
render: (_, record, index) =>
|
|
|
|
|
|
sizeOptionData?.length >= 1 ? (
|
|
|
|
|
|
<Space size="middle">
|
|
|
|
|
|
<a>
|
|
|
|
|
|
<EditFilled
|
|
|
|
|
|
style={{ color: '#1292EE' }}
|
|
|
|
|
|
onClick={() =>
|
|
|
|
|
|
UserType === 'Super Admin' ||
|
|
|
|
|
|
(UserType === 'Super Admin User' &&
|
|
|
|
|
|
SAAccessCommonMaster?.UpdateAccess === 'Y') ||
|
|
|
|
|
|
(UserType === 'Employee' && empData?.UpdateAccess === 'Y') ||
|
|
|
|
|
|
UserType === 'Admin'
|
|
|
|
|
|
? actionsFormatter(record, index)
|
|
|
|
|
|
: null
|
|
|
|
|
|
}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</a>
|
|
|
|
|
|
<a
|
|
|
|
|
|
onClick={() =>
|
|
|
|
|
|
!edit &&
|
|
|
|
|
|
(UserType === 'Super Admin' ||
|
|
|
|
|
|
(UserType === 'Super Admin User' &&
|
|
|
|
|
|
SAAccessCommonMaster?.DeleteAccess === 'Y') ||
|
|
|
|
|
|
(UserType === 'Employee' && empData?.DeleteAccess === 'Y') ||
|
|
|
|
|
|
UserType === 'Admin')
|
|
|
|
|
|
? statusFormatter(index)
|
|
|
|
|
|
: ''
|
|
|
|
|
|
}
|
|
|
|
|
|
>
|
|
|
|
|
|
<DeleteFilled
|
|
|
|
|
|
style={{
|
|
|
|
|
|
color: '#FF4D4F',
|
|
|
|
|
|
pointerEvents: edit ? 'none' : 'auto',
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</a>
|
|
|
|
|
|
</Space>
|
|
|
|
|
|
) : null,
|
|
|
|
|
|
},
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
const onCheckdefault = (record, index) => {
|
|
|
|
|
|
const { SetasDefault: currentValue, PrintTypeId } = record;
|
|
|
|
|
|
const isSamePrintTypeExist = sizeOptionData
|
|
|
|
|
|
?.filter((_, idx) => index !== idx)
|
|
|
|
|
|
?.some((some) => some.PrintTypeId === PrintTypeId);
|
|
|
|
|
|
|
|
|
|
|
|
if (isSamePrintTypeExist) {
|
|
|
|
|
|
if (currentValue === 'N') {
|
|
|
|
|
|
setSizeOptionData((prev) => {
|
|
|
|
|
|
const samePrintTypeIdAllUnchecked = prev.map((item) => {
|
|
|
|
|
|
if (item.PrintTypeId === PrintTypeId)
|
|
|
|
|
|
return {
|
|
|
|
|
|
...item,
|
|
|
|
|
|
SetasDefault: 'N',
|
|
|
|
|
|
};
|
|
|
|
|
|
return item;
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return samePrintTypeIdAllUnchecked.map((item, i) => {
|
|
|
|
|
|
if (i === index)
|
|
|
|
|
|
return {
|
|
|
|
|
|
...item,
|
|
|
|
|
|
SetasDefault: 'Y',
|
|
|
|
|
|
};
|
|
|
|
|
|
return item;
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setSizeOptionData((prev) =>
|
|
|
|
|
|
prev.map((item, i) => {
|
|
|
|
|
|
if (i === index)
|
|
|
|
|
|
return {
|
|
|
|
|
|
...item,
|
|
|
|
|
|
SetasDefault: 'N',
|
|
|
|
|
|
};
|
|
|
|
|
|
return item;
|
|
|
|
|
|
})
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// setSizeOptionData(prev => prev.map((item, i) => ({
|
|
|
|
|
|
// ...item,
|
|
|
|
|
|
// SetasDefault: i === index ? (currentValue == 'Y' ? 'N' : 'Y') : 'N',
|
|
|
|
|
|
// })));
|
|
|
|
|
|
setSizeOptionData((prev) =>
|
|
|
|
|
|
prev.map((item, i) => {
|
|
|
|
|
|
if (i === index)
|
|
|
|
|
|
return {
|
|
|
|
|
|
...item,
|
|
|
|
|
|
SetasDefault:
|
|
|
|
|
|
i === index ? (currentValue == 'Y' ? 'N' : 'Y') : 'N',
|
|
|
|
|
|
};
|
|
|
|
|
|
return item;
|
|
|
|
|
|
})
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
dispatch(changeBreadCrumb({ items: items }));
|
|
|
|
|
|
GetEditData();
|
|
|
|
|
|
getStyles();
|
|
|
|
|
|
fetchInitialData();
|
|
|
|
|
|
// if (UserType === "Employee") {
|
|
|
|
|
|
// fetchApi()
|
|
|
|
|
|
// }
|
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
if (UserType === 'Employee') {
|
|
|
|
|
|
fetchApi();
|
|
|
|
|
|
}
|
|
|
|
|
|
}, [UserType]);
|
|
|
|
|
|
|
|
|
|
|
|
let configFooterfun = async (sizeCheckList, checkedList) => {
|
|
|
|
|
|
let Checkfootername = sizeCheckList?.find(
|
|
|
|
|
|
(item) => item.ConfigName?.toLowerCase() == 'notes'
|
|
|
|
|
|
);
|
|
|
|
|
|
let CheckBillnamename = sizeCheckList?.find(
|
|
|
|
|
|
(item) => item.ConfigName?.toLowerCase() == 'billname'
|
|
|
|
|
|
);
|
|
|
|
|
|
let Checktermdcondition = sizeCheckList?.find(
|
|
|
|
|
|
(item) => item.ConfigName?.toLowerCase() == 'terms&conditions'
|
|
|
|
|
|
);
|
|
|
|
|
|
let CheckSignature = sizeCheckList?.find(
|
|
|
|
|
|
(item) => item.ConfigName?.toLowerCase() == 'signature'
|
|
|
|
|
|
);
|
|
|
|
|
|
let headerColour = sizeCheckList?.find(
|
|
|
|
|
|
(item) => item.ConfigName?.toLowerCase() == 'header colour'
|
|
|
|
|
|
);
|
|
|
|
|
|
setisFooterChecking(checkedList?.includes(Checkfootername?.ConfigId));
|
|
|
|
|
|
setisBillName(checkedList?.includes(CheckBillnamename?.ConfigId));
|
|
|
|
|
|
setisTermscondChecking(
|
|
|
|
|
|
checkedList?.includes(Checktermdcondition?.ConfigId)
|
|
|
|
|
|
);
|
|
|
|
|
|
setisSignatureChecking(checkedList?.includes(CheckSignature?.ConfigId));
|
|
|
|
|
|
setisheadercolour(checkedList?.includes(headerColour?.ConfigId));
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const fetchInitialData = async () => {
|
|
|
|
|
|
const GettingOptions = await dispatch(
|
|
|
|
|
|
getPrintOptions({ Data: 'printer options' })
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (GettingOptions?.data?.statusCode === 1) {
|
|
|
|
|
|
setSizeCheckList(GettingOptions?.data?.data);
|
|
|
|
|
|
let Data = GettingOptions?.data?.data?.map((item) => item.ConfigId);
|
|
|
|
|
|
setCheckedList(Data?.length);
|
|
|
|
|
|
SizeSelectlistonChange(Data);
|
|
|
|
|
|
}
|
|
|
|
|
|
const response = await dispatch(
|
|
|
|
|
|
getPrintOptions({ Data: 'Bill Print Type' })
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (response?.data?.statusCode === 1) {
|
|
|
|
|
|
setSegmentData(
|
|
|
|
|
|
response?.data?.data?.map(({ ConfigName, ConfigId, ActiveStatus }) => {
|
|
|
|
|
|
if (ActiveStatus === 'A')
|
|
|
|
|
|
return { label: ConfigName, value: ConfigId };
|
|
|
|
|
|
})
|
|
|
|
|
|
);
|
|
|
|
|
|
setSegmentValue(
|
|
|
|
|
|
response?.data?.data?.find(({ ConfigName }) => ConfigName === 'Sales')
|
|
|
|
|
|
?.ConfigId
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
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(
|
2026-01-29 09:38:34 +05:30
|
|
|
|
(item) => item.ConfigName === 'Print Forms'
|
2026-01-27 18:27:29 +05:30
|
|
|
|
);
|
|
|
|
|
|
setEmpData(datas?.[0]);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const GetEditData = async () => {
|
|
|
|
|
|
let Data = {
|
|
|
|
|
|
AppId: AppId,
|
|
|
|
|
|
CompId: CompId,
|
|
|
|
|
|
BranchId: BranchId,
|
|
|
|
|
|
};
|
|
|
|
|
|
const response = await dispatch(
|
|
|
|
|
|
getPrintSelectionComponentData(Data)
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (response?.data?.statusCode == 1) {
|
|
|
|
|
|
let TableData = response?.data?.data?.[0]?.ComponentDetails.map(
|
|
|
|
|
|
(item) => ({
|
|
|
|
|
|
ActiveStatus: 'A',
|
|
|
|
|
|
OptionDetails: item.FieldDetails,
|
|
|
|
|
|
StyleId: item.StyleId,
|
|
|
|
|
|
SetasDefault: item.SetasDefault,
|
|
|
|
|
|
SetasDefaultInvoice: item.SetasDefaultInvoice,
|
|
|
|
|
|
StyleName: item.StyleName,
|
|
|
|
|
|
Signature: item.Signature,
|
|
|
|
|
|
PrintType: item.PrintType,
|
|
|
|
|
|
PrintHdrName: item.PrintHdrName,
|
|
|
|
|
|
PrintHdrColor: item.PrintHdrColor,
|
|
|
|
|
|
Notes: item?.Notes,
|
|
|
|
|
|
PageSize: item?.PageSize?.trim() || '3inch',
|
|
|
|
|
|
PrintTypeId: item?.PrintTypeId,
|
|
|
|
|
|
TermsandConditions: (item?.TermsandConditions
|
|
|
|
|
|
? item?.TermsandConditions
|
|
|
|
|
|
: []
|
|
|
|
|
|
)?.map((tc) => tc?.TermsandConditions),
|
|
|
|
|
|
})
|
|
|
|
|
|
)?.sort((a, b) => {
|
|
|
|
|
|
if ((a.StyleName || '') === 'A4Standard') return 1;
|
|
|
|
|
|
if ((b.StyleName || '') === 'A4Standard') return -1;
|
|
|
|
|
|
const isA4orA5 = (name) => /A4|A5/i.test(name);
|
|
|
|
|
|
const nameA = a.StyleName || '';
|
|
|
|
|
|
const nameB = b.StyleName || '';
|
|
|
|
|
|
|
|
|
|
|
|
// Push A4/A5 to the bottom
|
|
|
|
|
|
if (isA4orA5(nameA) && !isA4orA5(nameB)) return 1;
|
|
|
|
|
|
if (!isA4orA5(nameA) && isA4orA5(nameB)) return -1;
|
|
|
|
|
|
|
|
|
|
|
|
// If both are A4/A5 or neither are, sort by natural number in name
|
|
|
|
|
|
const numA = parseInt(nameA.match(/\d+/)?.[0]) || 0;
|
|
|
|
|
|
const numB = parseInt(nameB.match(/\d+/)?.[0]) || 0;
|
|
|
|
|
|
return numA - numB;
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
response?.data?.data?.[0]?.ComponentDetails?.length > 0
|
|
|
|
|
|
? setTemplateEdit(true)
|
|
|
|
|
|
: setTemplateEdit(false);
|
|
|
|
|
|
setSizeOptionData(TableData);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const onComplete = useCallback(() => {
|
|
|
|
|
|
setMessageData(null);
|
|
|
|
|
|
setMessageType(null);
|
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
|
|
const actionsFormatter = async (row, index) => {
|
|
|
|
|
|
// StyleName
|
|
|
|
|
|
setSelectedStyleName(row?.StyleName);
|
|
|
|
|
|
const {
|
|
|
|
|
|
StyleId,
|
|
|
|
|
|
PrintType,
|
|
|
|
|
|
PageSize,
|
|
|
|
|
|
Notes,
|
|
|
|
|
|
PrintHdrName,
|
|
|
|
|
|
Signature,
|
|
|
|
|
|
TermsandConditions,
|
|
|
|
|
|
OptionDetails,
|
|
|
|
|
|
PrintTypeId,
|
|
|
|
|
|
PrintHdrColor,
|
|
|
|
|
|
} = row;
|
|
|
|
|
|
if (index >= 4) setShowMore(true);
|
|
|
|
|
|
if (index <= 4) setShowMore(false);
|
|
|
|
|
|
formRef.current?.setFieldsValue({ StyleId: StyleId });
|
|
|
|
|
|
setSegmentValue(PrintTypeId);
|
|
|
|
|
|
setCheckedList([]);
|
|
|
|
|
|
setFileList([]);
|
|
|
|
|
|
setTerms(['']);
|
|
|
|
|
|
setPrintType(PrintType === 'S' ? true : false);
|
|
|
|
|
|
setPageSize(PageSize);
|
|
|
|
|
|
setNote(Notes);
|
|
|
|
|
|
setBillName(PrintHdrName);
|
|
|
|
|
|
setEdit(true);
|
|
|
|
|
|
setSelectedColour(PrintHdrColor);
|
|
|
|
|
|
setSelectedStyleId(StyleId);
|
|
|
|
|
|
|
|
|
|
|
|
if (Signature) {
|
|
|
|
|
|
const existingFile = {
|
|
|
|
|
|
uid: '-1',
|
|
|
|
|
|
name: 'existing-image.png',
|
|
|
|
|
|
status: 'done',
|
|
|
|
|
|
url: Signature,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
setFileList([existingFile]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (TermsandConditions?.length) {
|
|
|
|
|
|
setTerms(TermsandConditions || '');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const GettingOptions = await dispatch(
|
|
|
|
|
|
getPrintOptions({ Data: 'printer options' })
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (GettingOptions?.data?.statusCode === 1) {
|
|
|
|
|
|
setSizeCheckList(GettingOptions?.data?.data);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const helperFunction = (param) => {
|
|
|
|
|
|
return OptionDetails.some((item) => item.ConfigName === param);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
setSelectedSizeCheckedValues(OptionDetails?.map((item) => item.ConfigId));
|
|
|
|
|
|
setSelectedSizeCheckList(
|
|
|
|
|
|
OptionDetails?.map(({ ConfigId }) => ({ ConfigId }))
|
|
|
|
|
|
);
|
|
|
|
|
|
SizeSelectlistonChange(OptionDetails?.map((item) => item.ConfigId));
|
|
|
|
|
|
dispatch(changeSelectedSlNo(helperFunction('Sl.No')));
|
|
|
|
|
|
dispatch(changeSelectedItem(helperFunction('Item')));
|
|
|
|
|
|
dispatch(changeSelectedMRP(helperFunction('MRP')));
|
|
|
|
|
|
dispatch(changeSelectedDiscount(helperFunction('Discount')));
|
|
|
|
|
|
dispatch(changeSelectedTax(helperFunction('Tax')));
|
|
|
|
|
|
dispatch(changeSelectedQuantity(helperFunction('Quantity')));
|
|
|
|
|
|
dispatch(changeSelectedRate(helperFunction('Rate')));
|
|
|
|
|
|
dispatch(changeSelectedAmount(helperFunction('Amount')));
|
|
|
|
|
|
dispatch(changeSelectedHsnCode(helperFunction('HsnCode')));
|
|
|
|
|
|
dispatch(changeSelectedQrcode(helperFunction('Qrcode')));
|
|
|
|
|
|
dispatch(changeSelectedSignature(helperFunction('Signature')));
|
|
|
|
|
|
dispatch(
|
|
|
|
|
|
changeSelectedtermsAndConditions(helperFunction('TermsandConditions'))
|
|
|
|
|
|
);
|
|
|
|
|
|
dispatch(changeNotes(helperFunction('Notes')));
|
|
|
|
|
|
dispatch(changeSignatureImage(Signature));
|
|
|
|
|
|
dispatch(changeBillName(PrintHdrName));
|
|
|
|
|
|
dispatch(
|
|
|
|
|
|
changeSelectedprintStyle({
|
|
|
|
|
|
ConfigId: StyleId,
|
|
|
|
|
|
ConfigName: styleData.find((item) => item.ConfigId === StyleId)
|
|
|
|
|
|
?.ConfigName,
|
|
|
|
|
|
})
|
|
|
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const statusFormatter = async (record) => {
|
|
|
|
|
|
await setSizeOptionData(
|
|
|
|
|
|
sizeOptionData.filter((_, index) => index !== record)
|
|
|
|
|
|
);
|
|
|
|
|
|
setEdit(false);
|
|
|
|
|
|
const GettingOptions = await dispatch(
|
|
|
|
|
|
getPrintOptions({ Data: 'printer options' })
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (GettingOptions?.data?.statusCode === 1) {
|
|
|
|
|
|
const selecetedName = styleData?.filter(
|
|
|
|
|
|
(item) => item?.ConfigId == e
|
|
|
|
|
|
)?.[0]?.ConfigName;
|
|
|
|
|
|
setSizeCheckList(GettingOptions?.data?.data);
|
|
|
|
|
|
let Data = sizeCheckList
|
|
|
|
|
|
?.filter((item) => item.ConfigName)
|
|
|
|
|
|
?.map((item) => item.ConfigId);
|
|
|
|
|
|
setCheckedList(sizeCheckList?.length);
|
|
|
|
|
|
SizeSelectlistonChange(Data);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const getStyles = async () => {
|
|
|
|
|
|
let Styles = await dispatch(
|
|
|
|
|
|
getConfigType({ TypeName: 'Print Style' })
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (Styles?.data?.statusCode === 1) {
|
|
|
|
|
|
setStyleData(Styles?.data?.data);
|
|
|
|
|
|
let configId = Styles?.data?.data?.[0].ConfigId;
|
|
|
|
|
|
let configData = Styles?.data?.data;
|
|
|
|
|
|
handleStyle(configId);
|
|
|
|
|
|
dispatch(
|
|
|
|
|
|
changeSelectedprintStyle({
|
|
|
|
|
|
ConfigId: configId,
|
|
|
|
|
|
ConfigName: configData.find((item) => item.ConfigId === configId)
|
|
|
|
|
|
?.ConfigName,
|
|
|
|
|
|
})
|
|
|
|
|
|
);
|
|
|
|
|
|
formRef.current?.setFieldsValue({
|
|
|
|
|
|
StyleId: Styles?.data?.data?.[0].ConfigId,
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
let Data = sizeCheckList
|
|
|
|
|
|
?.filter((item) => item.ConfigName)
|
|
|
|
|
|
?.map((item) => item.ConfigId);
|
|
|
|
|
|
|
|
|
|
|
|
SizeSelectlistonChange(Data);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setStyleData([]);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleStyle = async (e, index) => {
|
|
|
|
|
|
index && onCheckdefault('N', index);
|
|
|
|
|
|
dispatch(changeSignatureImage(null));
|
|
|
|
|
|
setCheckedList([]);
|
|
|
|
|
|
setFileList([]);
|
|
|
|
|
|
setTerms(['']);
|
|
|
|
|
|
setNote('');
|
|
|
|
|
|
setBillName('');
|
|
|
|
|
|
dispatch(changeBillName(''));
|
|
|
|
|
|
setEdit(false);
|
|
|
|
|
|
formRef.current?.setFieldsValue({ StyleId: e });
|
|
|
|
|
|
setSelectedStyleId(e);
|
|
|
|
|
|
setSelectedStyleName(
|
|
|
|
|
|
styleData.find((item) => item.ConfigId === e)?.ConfigName
|
|
|
|
|
|
);
|
|
|
|
|
|
dispatch(
|
|
|
|
|
|
changeSelectedprintStyle({
|
|
|
|
|
|
ConfigId: e,
|
|
|
|
|
|
ConfigName: styleData.find((item) => item.ConfigId === e)?.ConfigName,
|
|
|
|
|
|
})
|
|
|
|
|
|
);
|
|
|
|
|
|
const GettingOptions = await dispatch(
|
|
|
|
|
|
getPrintOptions({ Data: 'printer options' })
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (GettingOptions?.data?.statusCode === 1) {
|
|
|
|
|
|
const selecetedName = styleData?.filter(
|
|
|
|
|
|
(item) => item?.ConfigId == e
|
|
|
|
|
|
)?.[0]?.ConfigName;
|
|
|
|
|
|
let filteredData = GettingOptions?.data?.data;
|
|
|
|
|
|
setSizeCheckList(filteredData);
|
|
|
|
|
|
let Data = filteredData
|
|
|
|
|
|
?.filter((item) => item.ConfigName)
|
|
|
|
|
|
?.map((item) => item.ConfigId);
|
|
|
|
|
|
SizeSelectlistonChange(Data);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const SizeSelectlistonChange = async (checkedValues) => {
|
|
|
|
|
|
setCheckedList(checkedValues);
|
|
|
|
|
|
setSelectedSizeCheckedValues(checkedValues);
|
|
|
|
|
|
const obj = checkedValues?.map((d) => ({ ConfigId: d }));
|
|
|
|
|
|
setSelectedSizeCheckList(obj);
|
|
|
|
|
|
let sizeCheckList = [];
|
|
|
|
|
|
const GettingOptions = await dispatch(
|
|
|
|
|
|
getPrintOptions({ Data: 'printer options' })
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
if (GettingOptions?.data?.statusCode === 1) {
|
|
|
|
|
|
let filteredData = GettingOptions?.data?.data?.filter(
|
|
|
|
|
|
(item) => item.ConfigName
|
|
|
|
|
|
);
|
|
|
|
|
|
sizeCheckList = filteredData;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Sl.No')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedSlNo(true))
|
|
|
|
|
|
: dispatch(changeSelectedSlNo(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Item')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedItem(true))
|
|
|
|
|
|
: dispatch(changeSelectedItem(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'MRP')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedMRP(true))
|
|
|
|
|
|
: dispatch(changeSelectedMRP(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Discount')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedDiscount(true))
|
|
|
|
|
|
: dispatch(changeSelectedDiscount(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Tax')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedTax(true))
|
|
|
|
|
|
: dispatch(changeSelectedTax(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Quantity')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedQuantity(true))
|
|
|
|
|
|
: dispatch(changeSelectedQuantity(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Rate')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedRate(true))
|
|
|
|
|
|
: dispatch(changeSelectedRate(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Amount')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedAmount(true))
|
|
|
|
|
|
: dispatch(changeSelectedAmount(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'HsnCode')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedHsnCode(true))
|
|
|
|
|
|
: dispatch(changeSelectedHsnCode(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Qrcode')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedQrcode(true))
|
|
|
|
|
|
: dispatch(changeSelectedQrcode(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'signature')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedSignature(true))
|
|
|
|
|
|
: dispatch(changeSelectedSignature(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'CashierName')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedCashierName(true))
|
|
|
|
|
|
: dispatch(changeSelectedCashierName(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Logo')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedLogo(true))
|
|
|
|
|
|
: dispatch(changeSelectedLogo(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Credit details')
|
|
|
|
|
|
?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedCredit(true))
|
|
|
|
|
|
: dispatch(changeSelectedCredit(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'terms&conditions')
|
|
|
|
|
|
?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeSelectedtermsAndConditions(true))
|
|
|
|
|
|
: dispatch(changeSelectedtermsAndConditions(false));
|
|
|
|
|
|
checkedValues?.includes(
|
|
|
|
|
|
sizeCheckList.find((item) => item.ConfigName === 'Notes')?.ConfigId
|
|
|
|
|
|
)
|
|
|
|
|
|
? dispatch(changeNotes(true))
|
|
|
|
|
|
: dispatch(changeNotes(false));
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleOptions = async () => {
|
|
|
|
|
|
const { StyleId } = formRef.current?.getFieldsValue() ?? {};
|
|
|
|
|
|
|
|
|
|
|
|
const showError = (msg) => {
|
|
|
|
|
|
setMessageType('error');
|
|
|
|
|
|
setMessageData(msg);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const showSuccess = (msg) => {
|
|
|
|
|
|
setMessageType('success');
|
|
|
|
|
|
setMessageData(msg);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const getConcatenatedArray = () => {
|
|
|
|
|
|
return selectedSizeCheckList
|
|
|
|
|
|
.map((obj1) => {
|
|
|
|
|
|
const obj2 = sizeCheckList.find(
|
|
|
|
|
|
(item) => item.ConfigId === obj1.ConfigId
|
|
|
|
|
|
);
|
|
|
|
|
|
return obj2
|
|
|
|
|
|
? { ConfigId: obj1.ConfigId, ConfigName: obj2.ConfigName }
|
|
|
|
|
|
: null;
|
|
|
|
|
|
})
|
|
|
|
|
|
.filter(Boolean);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const buildOptionObject = () => ({
|
|
|
|
|
|
StyleId,
|
|
|
|
|
|
StyleName: styleData?.find(
|
|
|
|
|
|
(item) => parseInt(item?.ConfigId) === parseInt(StyleId)
|
|
|
|
|
|
)?.ConfigName,
|
|
|
|
|
|
SetasDefault: sizeOptionData?.find(
|
|
|
|
|
|
(item) => parseInt(item?.PrintTypeId) === parseInt(segmentValue)
|
|
|
|
|
|
)?.SetasDefault,
|
|
|
|
|
|
SetasDefaultInvoice: sizeOptionData?.find(
|
|
|
|
|
|
(item) => parseInt(item?.PrintTypeId) === parseInt(segmentValue)
|
|
|
|
|
|
)?.SetasDefaultInvoice,
|
|
|
|
|
|
OptionDetails: getConcatenatedArray(),
|
|
|
|
|
|
ActiveStatus: 'A',
|
|
|
|
|
|
Signature: fileList?.[0]?.url,
|
|
|
|
|
|
TermsandConditions: terms
|
|
|
|
|
|
?.filter((item) => item.trim() !== '')
|
|
|
|
|
|
.map((item) => item.trim()),
|
|
|
|
|
|
Notes: Notes,
|
|
|
|
|
|
PageSize: PageSize,
|
|
|
|
|
|
PrintHdrName: BillName,
|
|
|
|
|
|
PrintType: PrintType ? 'S' : 'C',
|
|
|
|
|
|
PrintTypeId: segmentValue,
|
|
|
|
|
|
PrintHdrColor: getConcatenatedArray().some(
|
|
|
|
|
|
(e) => e?.ConfigName?.toLowerCase() == 'header colour'
|
|
|
|
|
|
)
|
|
|
|
|
|
? selectedColour
|
|
|
|
|
|
: null,
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Validation
|
|
|
|
|
|
if (isSignatureChecking && fileList?.length === 0)
|
|
|
|
|
|
return message.warning('Please upload Signature');
|
|
|
|
|
|
if (isTermscondChecking && (!terms?.length || terms?.[0] === ''))
|
|
|
|
|
|
return message.warning('Please add at least 1 term');
|
|
|
|
|
|
if (!StyleId || !selectedSizeCheckList?.length)
|
|
|
|
|
|
return showError('Please Give Option Data');
|
|
|
|
|
|
|
|
|
|
|
|
const isStyleIdMatching = sizeOptionData?.some(
|
|
|
|
|
|
(item) => item.StyleId === StyleId
|
|
|
|
|
|
);
|
|
|
|
|
|
const allSameStyles = sizeOptionData?.filter(
|
|
|
|
|
|
(item) => item.StyleId === StyleId
|
|
|
|
|
|
);
|
|
|
|
|
|
const isPrintTypeIdMatches = allSameStyles?.some(
|
|
|
|
|
|
(item) => item.PrintTypeId === segmentValue
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
if (edit && isStyleIdMatching) {
|
|
|
|
|
|
// EDIT MODE
|
|
|
|
|
|
const updatedArray = sizeOptionData.map((item) => {
|
|
|
|
|
|
if (item.StyleId === StyleId && item.PrintTypeId === segmentValue) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
...buildOptionObject(),
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
return item;
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
setSizeOptionData(updatedArray);
|
|
|
|
|
|
setEdit(false);
|
|
|
|
|
|
showSuccess('Data Edited Successfully');
|
|
|
|
|
|
setSelectedColour('#00000');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ADD MODE
|
|
|
|
|
|
if (isStyleIdMatching && isPrintTypeIdMatches) {
|
|
|
|
|
|
return showError('Data Already Exists');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
setSizeOptionData([...sizeOptionData, buildOptionObject()]);
|
|
|
|
|
|
setEdit(false);
|
|
|
|
|
|
showSuccess('Data Added Successfully');
|
|
|
|
|
|
setSelectedColour('#000000');
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleCancel = () => {
|
|
|
|
|
|
// formRef?.current?.resetFields()
|
|
|
|
|
|
// setSelectedStyleId(null)
|
|
|
|
|
|
// setSelectedSizeCheckedValues([])
|
|
|
|
|
|
setEdit(false);
|
|
|
|
|
|
// dispatch(changeSelectedprintStyle({ 'ConfigId': null, 'ConfigName': null }));
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const onfinish = async (values) => {
|
|
|
|
|
|
if (!templateEdit && sizeOptionData?.length == 0) {
|
|
|
|
|
|
setMessageType('error');
|
|
|
|
|
|
setMessageData('Please Setup the Screen');
|
|
|
|
|
|
} else {
|
|
|
|
|
|
let TemplateDetails = [];
|
|
|
|
|
|
if (sizeOptionData?.length > 0) {
|
|
|
|
|
|
sizeOptionData?.map((item) =>
|
|
|
|
|
|
TemplateDetails.push({
|
|
|
|
|
|
SizeId: null,
|
|
|
|
|
|
StyleId: item.StyleId,
|
|
|
|
|
|
SetasDefault: item.SetasDefault,
|
|
|
|
|
|
SetasDefaultInvoice: item.SetasDefaultInvoice,
|
|
|
|
|
|
PrintHdrColor: item.PrintHdrColor,
|
|
|
|
|
|
PrintTypeId: item?.PrintTypeId,
|
|
|
|
|
|
SizeDetails: item.OptionDetails.map((item) => ({
|
|
|
|
|
|
OptionId: item.ConfigId,
|
|
|
|
|
|
})),
|
|
|
|
|
|
...(item?.TermsandConditions?.length > 0
|
|
|
|
|
|
? {
|
|
|
|
|
|
PrintTermsandConditions: (item?.TermsandConditions
|
|
|
|
|
|
? item?.TermsandConditions
|
|
|
|
|
|
: []
|
|
|
|
|
|
)?.map((item) => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
TermsandConditions: item,
|
|
|
|
|
|
};
|
|
|
|
|
|
}),
|
|
|
|
|
|
}
|
|
|
|
|
|
: {}),
|
|
|
|
|
|
...(item?.Notes ? { Notes: item.Notes } : {}),
|
|
|
|
|
|
...(item?.PageSize ? { PageSize: item.PageSize } : {}),
|
|
|
|
|
|
...(item?.PrintHdrName ? { PrintHdrName: item.PrintHdrName } : {}),
|
|
|
|
|
|
...(item?.Signature ? { Signature: item?.Signature } : {}),
|
|
|
|
|
|
PrintType: item?.PrintType,
|
|
|
|
|
|
})
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const Data = {
|
|
|
|
|
|
CompId: CompId,
|
|
|
|
|
|
BranchId: BranchId,
|
|
|
|
|
|
AppId: AppId,
|
|
|
|
|
|
TemplateDetails: TemplateDetails,
|
|
|
|
|
|
CreatedBy: UserId,
|
|
|
|
|
|
};
|
|
|
|
|
|
const response = await dispatch(
|
|
|
|
|
|
templateEdit
|
|
|
|
|
|
? putPrintSelectionComponentData(Data)
|
|
|
|
|
|
: postPrintSelectionComponentData(Data)
|
|
|
|
|
|
).unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
if (response?.data?.statusCode == 1) {
|
|
|
|
|
|
GetEditData();
|
|
|
|
|
|
setMessageType('success');
|
|
|
|
|
|
setMessageData(response?.data?.response);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const onCheckAllChange = (e) => {
|
|
|
|
|
|
let Data = sizeCheckList
|
|
|
|
|
|
?.filter((item) => item.ConfigName)
|
|
|
|
|
|
?.map((item) => item.ConfigId);
|
|
|
|
|
|
setCheckedList(e.target.checked ? sizeCheckList?.length : []);
|
|
|
|
|
|
e.target.checked
|
|
|
|
|
|
? SizeSelectlistonChange(Data)
|
|
|
|
|
|
: SizeSelectlistonChange([]);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const onChangeToggle = async (e) => {
|
|
|
|
|
|
if (e) {
|
|
|
|
|
|
setPrintType(true);
|
|
|
|
|
|
await dispatch(changethemeFormat(true));
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setPrintType(false);
|
|
|
|
|
|
await dispatch(changethemeFormat(false));
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const onChangepageSize = async (e) => {
|
|
|
|
|
|
console.log(e, 'pagesize');
|
|
|
|
|
|
// if (e) {
|
|
|
|
|
|
setPageSize(e);
|
|
|
|
|
|
// // await dispatch(changethemeFormat(true))
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// setPageSize(false);
|
|
|
|
|
|
// // await dispatch(changethemeFormat(false))
|
|
|
|
|
|
// }
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const showmoreFun = (e) => {
|
|
|
|
|
|
if (showMore) {
|
|
|
|
|
|
setShowMore(!showMore);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setShowMore(!showMore);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleCancelimg = () => setPreviewOpen(false);
|
|
|
|
|
|
|
|
|
|
|
|
const handleUploadChange = ({ fileList: newFileList }) => {
|
|
|
|
|
|
const updatedList = newFileList.map((file) => {
|
|
|
|
|
|
if (file.response?.image) {
|
|
|
|
|
|
file.url = file.response.image; // Set the returned URL for preview
|
|
|
|
|
|
dispatch(changeSignatureImage(file.response.image));
|
|
|
|
|
|
}
|
|
|
|
|
|
return file;
|
|
|
|
|
|
});
|
|
|
|
|
|
if (updatedList?.length == 0) {
|
|
|
|
|
|
dispatch(changeSignatureImage(null));
|
|
|
|
|
|
}
|
|
|
|
|
|
setFileList(updatedList);
|
|
|
|
|
|
};
|
|
|
|
|
|
const handlePreview = async (file) => {
|
|
|
|
|
|
setPreviewImage(file.url || file.thumbUrl);
|
|
|
|
|
|
setPreviewOpen(true);
|
|
|
|
|
|
setPreviewTitle(file.name || '');
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleChange = (index, value) => {
|
|
|
|
|
|
const newTerms = [...terms];
|
|
|
|
|
|
newTerms[index] = value;
|
|
|
|
|
|
setTerms(newTerms);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleAdd = () => {
|
|
|
|
|
|
const lastTerm = terms[terms.length - 1];
|
|
|
|
|
|
|
|
|
|
|
|
if (!lastTerm || typeof lastTerm !== 'string' || !lastTerm.trim()) {
|
|
|
|
|
|
message.warning('Please fill in the current term before adding another.');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
setTerms([...terms, '']);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleRemove = (index) => {
|
|
|
|
|
|
const newTerms = [...terms];
|
|
|
|
|
|
newTerms.splice(index, 1);
|
|
|
|
|
|
setTerms(newTerms);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const beforeUpload = (file) => {
|
|
|
|
|
|
const isImage = file.type.startsWith('image/');
|
|
|
|
|
|
if (!isImage) {
|
|
|
|
|
|
message.error('You can only upload image files!');
|
|
|
|
|
|
}
|
|
|
|
|
|
return isImage || Upload.LIST_IGNORE;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleOnChangeSegment = (params) => {
|
|
|
|
|
|
setSegmentValue(params);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// const filterCheckListBasedOnSegmentValue = (params) => {
|
|
|
|
|
|
// const checkList = params?.filter((item) => item.ConfigName);
|
|
|
|
|
|
// // Sl.No
|
|
|
|
|
|
// // Item
|
|
|
|
|
|
// // MRP
|
|
|
|
|
|
// // Discount
|
|
|
|
|
|
// // Quantity
|
|
|
|
|
|
// // Rate
|
|
|
|
|
|
// // Amount
|
|
|
|
|
|
// // HsnCode
|
|
|
|
|
|
// // Qrcode
|
|
|
|
|
|
// // signature
|
|
|
|
|
|
// // Notes
|
|
|
|
|
|
// // terms&conditions
|
|
|
|
|
|
|
|
|
|
|
|
// let filteredCheckList = checkList;
|
|
|
|
|
|
// // if (segmentValue === 'Sales Quotation') {
|
|
|
|
|
|
// // Sl.No
|
|
|
|
|
|
// // Item
|
|
|
|
|
|
// // MRP
|
|
|
|
|
|
// // Discount
|
|
|
|
|
|
// // Quantity
|
|
|
|
|
|
// // Rate
|
|
|
|
|
|
// // Amount
|
|
|
|
|
|
// // Qrcode
|
|
|
|
|
|
// // signature
|
|
|
|
|
|
// // Notes
|
|
|
|
|
|
// // terms&conditions
|
|
|
|
|
|
// // filteredCheckList = checkList.filter(item => );
|
|
|
|
|
|
// // } else if (segmentValue === 'Purchase Order') {
|
|
|
|
|
|
// // filteredCheckList = checkList.filter(item => );
|
|
|
|
|
|
// // } else if (segmentValue === 'Delevery Challan') {
|
|
|
|
|
|
// // filteredCheckList = checkList.filter(item => );
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// return filteredCheckList;
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<>
|
|
|
|
|
|
<Messages
|
|
|
|
|
|
messageType={messageType}
|
|
|
|
|
|
messageData={messageData}
|
|
|
|
|
|
onComplete={onComplete}
|
|
|
|
|
|
/>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<Form ref={formRef}>
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
flexDirection: 'row',
|
|
|
|
|
|
flexWrap: 'wrap',
|
|
|
|
|
|
columnGap: '1rem',
|
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
<div className="printSelectDefaultDIvs">
|
|
|
|
|
|
<br />
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="StyleId"
|
|
|
|
|
|
rules={[
|
|
|
|
|
|
{
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
message: 'Please Select Style',
|
|
|
|
|
|
},
|
|
|
|
|
|
]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
flexWrap: 'wrap',
|
|
|
|
|
|
gap: '1rem',
|
|
|
|
|
|
marginTop: '1rem',
|
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
{visibleConfigs?.map((item, index) => (
|
|
|
|
|
|
<div style={{ display: 'flex', flexDirection: 'column' }}>
|
|
|
|
|
|
<div
|
|
|
|
|
|
key={item.ConfigId}
|
|
|
|
|
|
style={{
|
|
|
|
|
|
width: '70px',
|
|
|
|
|
|
borderRadius: '8px',
|
|
|
|
|
|
textAlign: 'center',
|
|
|
|
|
|
boxShadow:
|
|
|
|
|
|
item.ConfigId == selectedStyleId
|
|
|
|
|
|
? '0 2px 6px rgba(0,0,0,0.1)'
|
|
|
|
|
|
: '',
|
|
|
|
|
|
border:
|
|
|
|
|
|
item.ConfigId == selectedStyleId
|
|
|
|
|
|
? '2px solid #0072c4ff'
|
|
|
|
|
|
: '1px solid #a7a7a7',
|
|
|
|
|
|
}}
|
|
|
|
|
|
onClick={() => handleStyle(item.ConfigId, index)}
|
|
|
|
|
|
>
|
|
|
|
|
|
<img
|
|
|
|
|
|
src={defaultImage}
|
|
|
|
|
|
alt={defaultImage}
|
|
|
|
|
|
style={{
|
|
|
|
|
|
height: '80px',
|
|
|
|
|
|
objectFit: 'cover',
|
|
|
|
|
|
borderRadius: '4px',
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
fontSize: '0.85rem',
|
|
|
|
|
|
color: '#333',
|
|
|
|
|
|
textAlign: 'center',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
{item.ConfigName}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
))}
|
|
|
|
|
|
{styleData.length > 4 && (
|
|
|
|
|
|
<div
|
|
|
|
|
|
onClick={showmoreFun}
|
|
|
|
|
|
style={{
|
|
|
|
|
|
marginBottom: '0.75rem',
|
|
|
|
|
|
color: showMore ? '#ee0000ff' : '#1890ff',
|
|
|
|
|
|
fontSize: '0.8rem',
|
|
|
|
|
|
cursor: 'pointer',
|
|
|
|
|
|
fontWeight: '500',
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
|
gap: '0.3rem',
|
|
|
|
|
|
textDecoration: 'underline',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
{showMore ? 'View Less' : 'View All...'}{' '}
|
|
|
|
|
|
<span>
|
|
|
|
|
|
{showMore ? (
|
|
|
|
|
|
<FaChevronUp size={12} />
|
|
|
|
|
|
) : (
|
|
|
|
|
|
<FaChevronDown size={12} />
|
|
|
|
|
|
)}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div className="customisedStandardA4A5">
|
|
|
|
|
|
{
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
|
gap: '1rem',
|
|
|
|
|
|
backgroundColor: '#ffffffff',
|
|
|
|
|
|
padding: '0.65rem 0.6rem',
|
|
|
|
|
|
borderRadius: '10px',
|
|
|
|
|
|
// boxShadow: '0 2px 8px #0000001a',
|
|
|
|
|
|
border: '1px solid #bdbdbdff',
|
|
|
|
|
|
maxWidth: 'fit-content',
|
|
|
|
|
|
margin: '10px 0 0 0',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
<span
|
|
|
|
|
|
style={{
|
|
|
|
|
|
fontWeight: '500',
|
|
|
|
|
|
color: '#555',
|
|
|
|
|
|
fontSize: '12px',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
Customized
|
|
|
|
|
|
<Tooltip title="Print will stop when the content finishes. It won’t waste paper.">
|
|
|
|
|
|
<InfoCircleOutlined
|
|
|
|
|
|
style={{
|
|
|
|
|
|
color: '#1890ff',
|
|
|
|
|
|
cursor: 'pointer',
|
|
|
|
|
|
marginLeft: '5px',
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Tooltip>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
<Switch checked={PrintType} onChange={onChangeToggle} />
|
|
|
|
|
|
<span
|
|
|
|
|
|
style={{
|
|
|
|
|
|
fontWeight: '500',
|
|
|
|
|
|
color: '#555',
|
|
|
|
|
|
fontSize: '12px',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
Standard
|
|
|
|
|
|
<Tooltip title=" Print will take full paper, even if there's less content.">
|
|
|
|
|
|
<InfoCircleOutlined
|
|
|
|
|
|
style={{
|
|
|
|
|
|
color: '#1890ff',
|
|
|
|
|
|
cursor: 'pointer',
|
|
|
|
|
|
marginLeft: '5px',
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Tooltip>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
}
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
|
gap: '1rem',
|
|
|
|
|
|
backgroundColor: '#f5f5f5',
|
|
|
|
|
|
padding: '0.75rem 1rem',
|
|
|
|
|
|
borderRadius: '12px',
|
|
|
|
|
|
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
|
|
|
|
|
|
maxWidth: 'fit-content',
|
|
|
|
|
|
margin: '1rem 0 0 0',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
{['3inch', '2inch', 'A4', 'A5'].map((size) => (
|
|
|
|
|
|
<span
|
|
|
|
|
|
key={size}
|
|
|
|
|
|
onClick={() => onChangepageSize(size)}
|
|
|
|
|
|
style={{
|
|
|
|
|
|
fontWeight: '500',
|
|
|
|
|
|
color: PageSize === size ? '#1890ff' : '#555',
|
|
|
|
|
|
cursor: 'pointer',
|
|
|
|
|
|
padding: '4px 10px',
|
|
|
|
|
|
borderRadius: '8px',
|
|
|
|
|
|
backgroundColor:
|
|
|
|
|
|
PageSize === size ? '#e6f4ff' : 'transparent',
|
|
|
|
|
|
transition: 'all 0.2s ease',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
{size}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div style={{ margin: '1rem 0', width: '100%' }}>
|
|
|
|
|
|
<Segmented
|
|
|
|
|
|
options={segmentData}
|
|
|
|
|
|
value={segmentValue}
|
|
|
|
|
|
onChange={handleOnChangeSegment}
|
|
|
|
|
|
block
|
|
|
|
|
|
className="segmentData-style"
|
|
|
|
|
|
disabled={edit}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div className="selectBillFiledPrint">
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
width: '305px',
|
|
|
|
|
|
justifyContent: 'center',
|
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
|
gap: '1rem',
|
|
|
|
|
|
justifyContent: 'flex-start',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
{selectedStyleId ? (
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
// indeterminate={indeterminate}
|
|
|
|
|
|
onChange={onCheckAllChange}
|
|
|
|
|
|
checked={checkAll}
|
|
|
|
|
|
>
|
|
|
|
|
|
Select All
|
|
|
|
|
|
</Checkbox>
|
|
|
|
|
|
) : (
|
|
|
|
|
|
''
|
|
|
|
|
|
)}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<Checkbox.Group
|
|
|
|
|
|
style={{
|
|
|
|
|
|
width: '100%',
|
|
|
|
|
|
}}
|
|
|
|
|
|
onChange={SizeSelectlistonChange}
|
|
|
|
|
|
value={selectedSizeCheckedValues}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
{sizeCheckList
|
|
|
|
|
|
?.filter(
|
|
|
|
|
|
(item) =>
|
|
|
|
|
|
item.ConfigName &&
|
|
|
|
|
|
(SelectedStyleName == 'TaxInvoice' ||
|
|
|
|
|
|
item.ConfigName != 'Header Colour')
|
|
|
|
|
|
)
|
|
|
|
|
|
?.map((value, key) => (
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
style={{ padding: '12px' }}
|
|
|
|
|
|
value={value?.ConfigId}
|
|
|
|
|
|
key={value?.ConfigId}
|
|
|
|
|
|
>
|
|
|
|
|
|
{value.ConfigName}
|
|
|
|
|
|
</Checkbox>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
</Checkbox.Group>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div className="selectBillFiledInput">
|
|
|
|
|
|
{isFooterChecking && (
|
|
|
|
|
|
<div style={{ marginTop: '1rem' }}>
|
|
|
|
|
|
<Title level={5} style={{ marginBottom: 12 }}>
|
|
|
|
|
|
Notes
|
|
|
|
|
|
</Title>
|
|
|
|
|
|
<InputField
|
|
|
|
|
|
isOnChange={Notes}
|
|
|
|
|
|
label={<label>notes Description</label>}
|
|
|
|
|
|
value={Notes}
|
|
|
|
|
|
onChange={(e) => {
|
|
|
|
|
|
setNote(e.target.value);
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
<div style={{ marginTop: '1rem' }}>
|
|
|
|
|
|
<Title level={5} style={{ marginBottom: 12 }}>
|
|
|
|
|
|
BillName
|
|
|
|
|
|
</Title>
|
|
|
|
|
|
<InputField
|
|
|
|
|
|
isOnChange={BillName}
|
|
|
|
|
|
label={<label>Bill Name</label>}
|
|
|
|
|
|
value={BillName}
|
|
|
|
|
|
onChange={(e) => {
|
|
|
|
|
|
setBillName(e.target.value);
|
|
|
|
|
|
dispatch(changeBillName(e.target.value));
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
{isSignatureChecking && (
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
marginTop: '1rem',
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
flexWrap: 'wrap',
|
|
|
|
|
|
gap: '10px',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Title level={5} style={{ marginBottom: 12 }}>
|
|
|
|
|
|
Upload Signature:
|
|
|
|
|
|
</Title>
|
|
|
|
|
|
<Upload
|
|
|
|
|
|
name="file"
|
|
|
|
|
|
action="https://api.pozo.app/pozo-common-image-api//upload"
|
|
|
|
|
|
listType="picture-card"
|
|
|
|
|
|
fileList={fileList}
|
|
|
|
|
|
onChange={handleUploadChange}
|
|
|
|
|
|
onPreview={handlePreview}
|
|
|
|
|
|
showUploadList={{ showRemoveIcon: true }}
|
|
|
|
|
|
maxCount={1}
|
|
|
|
|
|
accept="image/*"
|
|
|
|
|
|
beforeUpload={beforeUpload}
|
|
|
|
|
|
>
|
|
|
|
|
|
{fileList.length < 1 && (
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<UploadOutlined
|
|
|
|
|
|
style={{
|
|
|
|
|
|
fontSize: 20,
|
|
|
|
|
|
marginBottom: 0,
|
|
|
|
|
|
marginRight: 5,
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
Click to Upload
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</Upload>
|
|
|
|
|
|
|
|
|
|
|
|
<Modal
|
|
|
|
|
|
visible={previewOpen}
|
|
|
|
|
|
title={previewTitle}
|
|
|
|
|
|
footer={null}
|
|
|
|
|
|
onCancel={handleCancelimg}
|
|
|
|
|
|
>
|
|
|
|
|
|
<img
|
|
|
|
|
|
alt="Preview"
|
|
|
|
|
|
style={{ width: '100%' }}
|
|
|
|
|
|
src={previewImage}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Modal>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
{isheadercolour && SelectedStyleName == 'TaxInvoice' && (
|
|
|
|
|
|
<div style={{ marginTop: '1rem' }}>
|
|
|
|
|
|
<Title level={5} style={{ marginBottom: 12 }}>
|
|
|
|
|
|
Header Color
|
|
|
|
|
|
</Title>
|
|
|
|
|
|
<ColorPicker
|
|
|
|
|
|
value={selectedColour}
|
|
|
|
|
|
onChange={setSelectedColour}
|
|
|
|
|
|
placeholder="Select color"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
{isTermscondChecking && (
|
|
|
|
|
|
<div style={{ marginTop: '1rem' }}>
|
|
|
|
|
|
<Title level={5} style={{ marginBottom: 12 }}>
|
|
|
|
|
|
Terms and Conditions
|
|
|
|
|
|
</Title>
|
|
|
|
|
|
{terms.map((term, index) => (
|
|
|
|
|
|
<Space
|
|
|
|
|
|
key={index}
|
|
|
|
|
|
style={{ display: 'flex', marginBottom: 4 }}
|
|
|
|
|
|
align="center"
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input.TextArea
|
|
|
|
|
|
placeholder={`eg:- Amount not Refunded #${index + 1}`}
|
|
|
|
|
|
value={term}
|
|
|
|
|
|
onChange={(e) => handleChange(index, e.target.value)}
|
|
|
|
|
|
autoSize={{ minRows: 1, maxRows: 3 }}
|
|
|
|
|
|
style={{ width: 290 }}
|
|
|
|
|
|
/>
|
|
|
|
|
|
{terms.length > 1 && (
|
|
|
|
|
|
<MinusCircleOutlined
|
|
|
|
|
|
onClick={() => handleRemove(index)}
|
|
|
|
|
|
style={{ color: 'red', cursor: 'pointer' }}
|
|
|
|
|
|
/>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</Space>
|
|
|
|
|
|
))}
|
|
|
|
|
|
|
|
|
|
|
|
{/* <Button
|
|
|
|
|
|
type="dashed"
|
|
|
|
|
|
onClick={handleAdd}
|
|
|
|
|
|
icon={<PlusOutlined />}
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
style={{ marginTop: 8 }}
|
|
|
|
|
|
>
|
|
|
|
|
|
Add Term
|
|
|
|
|
|
</Button> */}
|
|
|
|
|
|
<button onClick={handleAdd} className="handleAddBTN">
|
|
|
|
|
|
<PlusOutlined /> Add Term
|
|
|
|
|
|
</button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
<div
|
|
|
|
|
|
style={{
|
|
|
|
|
|
width: '100%',
|
|
|
|
|
|
display: 'flex',
|
|
|
|
|
|
justifyContent: 'right',
|
|
|
|
|
|
gap: '1rem',
|
|
|
|
|
|
margin: '0.5rem 0rem',
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
<div
|
|
|
|
|
|
className="size-save-button"
|
|
|
|
|
|
style={{ color: '#fff' }}
|
|
|
|
|
|
onClick={handleOptions}
|
|
|
|
|
|
>
|
|
|
|
|
|
{edit ? 'Add' : 'Save'}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
{edit && (
|
|
|
|
|
|
<div
|
|
|
|
|
|
className="size-Cancel-button"
|
|
|
|
|
|
style={{ color: '#fff' }}
|
|
|
|
|
|
onClick={handleCancel}
|
|
|
|
|
|
>
|
|
|
|
|
|
{' '}
|
|
|
|
|
|
Cancel{' '}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
{sizeOptionData?.length > 0 && (
|
|
|
|
|
|
<div className="component-table">
|
|
|
|
|
|
<Tables
|
|
|
|
|
|
columns={columns}
|
|
|
|
|
|
data={sizeOptionData}
|
|
|
|
|
|
dataSource={sizeOptionData}
|
|
|
|
|
|
/>{' '}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</Form>
|
|
|
|
|
|
<div className="SelectComp-SubmitButton">
|
|
|
|
|
|
<Buttons
|
|
|
|
|
|
buttonText="Submit"
|
|
|
|
|
|
color="901D77"
|
|
|
|
|
|
icon={<ArrowRightOutlined />}
|
|
|
|
|
|
htmlType={true}
|
|
|
|
|
|
handleSubmit={onfinish}
|
|
|
|
|
|
disabled={
|
|
|
|
|
|
UserType === 'Super Admin' || UserType === 'Admin'
|
|
|
|
|
|
? false
|
|
|
|
|
|
: !(
|
|
|
|
|
|
empData?.AddAccess === 'Y' ||
|
|
|
|
|
|
SAAccessCommonMaster?.AddAccess === 'Y' ||
|
|
|
|
|
|
((empData?.UpdateAccess === 'Y' ||
|
|
|
|
|
|
SAAccessCommonMaster?.UpdateAccess === 'Y') &&
|
|
|
|
|
|
templateEdit)
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</>
|
|
|
|
|
|
);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
export default SelectionComponent;
|