import { useSelector } from 'react-redux'; import { GlobalPritdummyData, GlobalSelectedPrintHeaderFontColor, GlobalSelectedTableHeaderColor, GlobalSelectedTableHeaderFontColor, GlobalSelectedTableBodyColor, GlobalSelectedTableBodyFontColor, GlobalRowType, GlobalSelectedFooterColor, GlobalSelectedFooterFontColor, GlobalSelectedNetAmountColor, GlobalSelectedNetAmountFontColor, GlobalSelectedPrintHeaderColor, } from '../../../Features/ThemeChange/ThemeChange'; import { isMobile } from 'react-device-detect'; import { extractLastNumberOrderId } from '../../../Services/Others'; import moment from 'moment'; const PurPrintstyleInvoice = ({ index, table2Data, Date1, totalQuantity, OrderDetailGST, OrderDetailIGST, PaymentStatus, printDatas, BankDetails }) => { const GlobaldummyData = useSelector(GlobalPritdummyData); const SelectedHeaderColor = useSelector(GlobalSelectedPrintHeaderColor); const SelectedHeaderFontColor = useSelector(GlobalSelectedPrintHeaderFontColor); const SelectedTableHeaderColor = useSelector(GlobalSelectedTableHeaderColor); const SelectedTableHeaderFontColor = useSelector(GlobalSelectedTableHeaderFontColor); const SelectedTableBodyColor = useSelector(GlobalSelectedTableBodyColor); const SelectedTableBodyFontColor = useSelector(GlobalSelectedTableBodyFontColor); const SelectedRowType = useSelector(GlobalRowType); const SelectedTableFooterColor = useSelector(GlobalSelectedFooterColor); const SelectedTableFooterFontColor = useSelector(GlobalSelectedFooterFontColor); const SelectedNetAmountColor = useSelector(GlobalSelectedNetAmountColor); const SelectedNetAmountFontColor = useSelector(GlobalSelectedNetAmountFontColor); let BillName = printDatas?.PrintHdrName // Function to convert number to words const numberToWords = (num) => { const a = [ "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" ]; const b = ["", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]; if (num === 0) return "Zero"; if (num < 20) return a[num]; if (num < 100) return b[Math.floor(num / 10)] + (num % 10 ? " " + a[num % 10] : ""); if (num < 1000) return a[Math.floor(num / 100)] + " Hundred" + (num % 100 ? " and " + numberToWords(num % 100) : ""); if (num < 100000) return numberToWords(Math.floor(num / 1000)) + " Thousand" + (num % 1000 ? " " + numberToWords(num % 1000) : ""); if (num < 10000000) return numberToWords(Math.floor(num / 100000)) + " Lakh" + (num % 100000 ? " " + numberToWords(num % 100000) : ""); if (num < 1000000000) return numberToWords(Math.floor(num / 10000000)) + " Crore" + (num % 10000000 ? " " + numberToWords(num % 10000000) : ""); return "Number too large"; }; const invoiceData = { // Company Details - mapped from A4Standard companyName: table2Data?.CompName || table2Data?.BranchName || "", companyspecname: table2Data?.AppSpecificName || "", companyAddress: { address1: table2Data?.AddressDetails?.[0]?.Address1 || "", address2: table2Data?.AddressDetails?.[0]?.Address2 || "", city: table2Data?.AddressDetails?.[0]?.City || "", state: table2Data?.AddressDetails?.[0]?.State || "", zip: table2Data?.AddressDetails?.[0]?.Zip || "" }, companyGSTIN: table2Data?.CompGSTIN || table2Data?.GSTIN || "", companyEmail: table2Data?.CompanyEmail || table2Data?.BrEmail || "", companyMobile: table2Data?.BrMobile || "", companyMobile2: table2Data?.BrMobile2 || "", // Invoice Details - mapped from A4Standard invoiceNo: table2Data?.QuotationNo ? extractLastNumberOrderId( table2Data?.QuotationNo, ) : "", invoiceDate: moment(Date1).format('DD-MM-YYYY') || "", // Customer Details - mapped from A4Standard CustomerDetails array customerName: table2Data?.CustomerDetails?.[0]?.CustSuppName || table2Data?.CustName || "", customerMobile: table2Data?.CustomerDetails?.[0]?.MobileNo || table2Data?.CustMobile || "", customerGSTIN: table2Data?.CustomerDetails?.[0]?.CustGSTNo || table2Data?.CustGSTIN || "", customerAddress: { address1: table2Data?.CustomerDetails?.[0]?.Address1 || "", address2: table2Data?.CustomerDetails?.[0]?.Address2 || "", state: table2Data?.CustomerDetails?.[0]?.State || "" }, // Product Details - mapped from A4Standard productDetails productDetails: table2Data?.ProductDetails || [], // Totals - mapped from A4Standard totalAmount: Number(table2Data?.BillAmount || table2Data?.TotalAmt), taxAmount: Number(OrderDetailGST), grandTotal: Number(table2Data?.NetAmount || table2Data?.GrandTotal), totalBillAmount: Number(table2Data?.BillAmount || table2Data?.NetAmount || 0), // Bank Details - mapped from A4Standard bankDetails: BankDetails?.[0] || null }; console.log(table2Data, "Date1Date1", invoiceData,) let PageSize = printDatas?.PageSize let printColors = printDatas?.PrintColors; const headerColor = printColors?.find(obj => obj.headerColor)?.headerColor; const tableHeaderColor = printColors?.find(obj => obj.tableHeaderColor)?.tableHeaderColor; const tableBodyColor = printColors?.find(obj => obj.tableBodyColor)?.tableBodyColor; const footerColor = printColors?.find(obj => obj.footerColor)?.footerColor; const netAmtColor = printColors?.find(obj => obj.netAmtColor)?.netAmtColor; const cgstTotal = OrderDetailGST && OrderDetailGST.length > 0 ? Number(OrderDetailGST.reduce((sum, item) => sum + (item.CGST || 0), 0))?.toFixed(2) : 0; const sgstTotal = OrderDetailGST && OrderDetailGST.length > 0 ? Number(OrderDetailGST.reduce((sum, item) => sum + (item.SGST || 0), 0))?.toFixed(2) : 0; const igstTotal = OrderDetailIGST && OrderDetailIGST.length > 0 ? Number(OrderDetailIGST.reduce((sum, item) => sum + (item.IGST || 0), 0))?.toFixed(2) : 0; // Calculate round off value const roundOffValue = Number(invoiceData.grandTotal) - ( Number(invoiceData.totalBillAmount) + Number(cgstTotal) + Number(sgstTotal) + Number(igstTotal) ); console.log(Number(invoiceData.totalBillAmount), cgstTotal, sgstTotal, igstTotal, "roundoff vaules") function RoundOffFun(amount) { const roundedAmount = Math.round(amount); const roundOffValue = parseFloat((roundedAmount - amount).toFixed(2)); // const symbol = roundOffValue > 0 ? '+' : ''; // Add "+" symbol for positive values ${symbol} console.log("Rounded Amount:", roundedAmount, "Round Off Value:", roundOffValue); return `${roundOffValue.toFixed(2)}`; } // Allow up to 10 items per page const chunkSize = isMobile ? 7 : PageSize == "A5" ? 9 : 8; let dataSource = []; // Simplified data source logic - always use all product details dataSource = table2Data?.ProductDetails || []; // Ensure dataSource is always an array if (!Array.isArray(dataSource)) { dataSource = []; } console.log("Final DataSource:", table2Data,); const paginatedChunks = []; // Always create at least one chunk, even if empty if (dataSource.length === 0) { paginatedChunks.push([]); } else { // Split data into chunks for (let i = 0; i < dataSource.length; i += chunkSize) { const chunk = dataSource.slice(i, i + chunkSize); paginatedChunks.push(chunk); } } const lastChunkRows = paginatedChunks.length > 0 ? paginatedChunks[paginatedChunks.length - 1].length : 0; // If last page has more than 6 items, move footer to new page const shouldFooterBeOnNewPage = lastChunkRows === chunkSize; // If footer should be on new page, add an empty chunk for footer-only page if (shouldFooterBeOnNewPage && paginatedChunks.length > 0) { paginatedChunks.push([]); // Empty chunk for footer-only page } const headerStyle = { backgroundColor: GlobaldummyData ? SelectedHeaderColor : headerColor?.background, color: GlobaldummyData ? SelectedHeaderFontColor : headerColor?.font, } const tableHeaderStyle = { backgroundColor: GlobaldummyData ? SelectedTableHeaderColor : tableHeaderColor?.background, color: GlobaldummyData ? SelectedTableHeaderFontColor : tableHeaderColor?.font, } const tableBodyStyle = { backgroundColor: GlobaldummyData ? SelectedTableBodyColor : tableBodyColor?.background, color: GlobaldummyData ? SelectedTableBodyFontColor : tableBodyColor?.font, } const rowtypeStyle = GlobaldummyData ? SelectedRowType : tableBodyColor?.rowType; const footerColorStyle = { backgroundColor: GlobaldummyData ? SelectedTableFooterColor : footerColor?.background, color: GlobaldummyData ? SelectedTableFooterFontColor : footerColor?.font, } const netAmountStyle = { backgroundColor: GlobaldummyData ? SelectedNetAmountColor : netAmtColor?.background, color: GlobaldummyData ? SelectedNetAmountFontColor : netAmtColor?.font, } return (
E. & O.E