import { Classes, Text } from '@blueprintjs/core'; import { PaperTemplate, PaperTemplateTotalBorder } from './PaperTemplate'; import { Box, Group, Stack } from '@/components'; import { DefaultPdfTemplateTerms, DefaultPdfTemplateItemDescription, DefaultPdfTemplateStatement, DefaultPdfTemplateItemName, DefaultPdfTemplateAddressBilledTo, DefaultPdfTemplateAddressBilledFrom, } from '@/constants/PdfTemplates'; interface PapaerLine { item?: string; description?: string; quantity?: string; rate?: string; total?: string; } interface PaperTax { label: string; amount: string; } export interface InvoicePaperTemplateProps { primaryColor?: string; secondaryColor?: string; showCompanyLogo?: boolean; companyLogoUri?: string; showInvoiceNumber?: boolean; invoiceNumber?: string; invoiceNumberLabel?: string; showDateIssue?: boolean; dateIssue?: string; dateIssueLabel?: string; showDueDate?: boolean; dueDate?: string; dueDateLabel?: string; companyName?: string; bigtitle?: string; // Address showCustomerAddress?: boolean; customerAddress?: string; showCompanyAddress?: boolean; companyAddress?: string; billedToLabel?: string; // Entries lineItemLabel?: string; lineQuantityLabel?: string; lineRateLabel?: string; lineTotalLabel?: string; // Totals showTotal?: boolean; totalLabel?: string; total?: string; showDiscount?: boolean; discountLabel?: string; discount?: string; showSubtotal?: boolean; subtotalLabel?: string; subtotal?: string; showPaymentMade?: boolean; paymentMadeLabel?: string; paymentMade?: string; showTaxes?: boolean; showDueAmount?: boolean; showBalanceDue?: boolean; balanceDueLabel?: string; balanceDue?: string; // Footer termsConditionsLabel?: string; showTermsConditions?: boolean; termsConditions?: string; statementLabel?: string; showStatement?: boolean; statement?: string; lines?: Array; taxes?: Array; } export function InvoicePaperTemplate({ primaryColor, secondaryColor, companyName = 'Bigcapital Technology, Inc.', showCompanyLogo = true, companyLogoUri = '', dueDate = 'September 3, 2024', dueDateLabel = 'Date due', showDueDate = true, dateIssue = 'September 3, 2024', dateIssueLabel = 'Date of issue', showDateIssue = true, // dateIssue, invoiceNumberLabel = 'Invoice number', invoiceNumber = '346D3D40-0001', showInvoiceNumber = true, // Address showCustomerAddress = true, customerAddress = DefaultPdfTemplateAddressBilledTo, showCompanyAddress = true, companyAddress = DefaultPdfTemplateAddressBilledFrom, billedToLabel = 'Billed To', // Entries lineItemLabel = 'Item', lineQuantityLabel = 'Qty', lineRateLabel = 'Rate', lineTotalLabel = 'Total', totalLabel = 'Total', subtotalLabel = 'Subtotal', discountLabel = 'Discount', paymentMadeLabel = 'Payment Made', balanceDueLabel = 'Balance Due', // Totals showTotal = true, showSubtotal = true, showDiscount = true, showTaxes = true, showPaymentMade = true, showDueAmount = true, showBalanceDue = true, total = '$662.75', subtotal = '630.00', discount = '0.00', paymentMade = '100.00', balanceDue = '$562.75', // Footer paragraphs. termsConditionsLabel = 'Terms & Conditions', showTermsConditions = true, termsConditions = DefaultPdfTemplateTerms, lines = [ { item: DefaultPdfTemplateItemName, description: DefaultPdfTemplateItemDescription, rate: '1', quantity: '1000', total: '$1000.00', }, ], taxes = [ { label: 'Sample Tax1 (4.70%)', amount: '11.75' }, { label: 'Sample Tax2 (7.00%)', amount: '21.74' }, ], statementLabel = 'Statement', showStatement = true, statement = DefaultPdfTemplateStatement, }: InvoicePaperTemplateProps) { return ( {showInvoiceNumber && ( {invoiceNumber} )} {showDateIssue && ( {dateIssue} )} {showDueDate && ( {dueDate} )} {companyLogoUri && showCompanyLogo && ( )} {showCompanyAddress && ( )} {showCustomerAddress && ( {billedToLabel} )} ( {data.item} {data.description} ), }, { label: lineQuantityLabel, accessor: 'quantity' }, { label: lineRateLabel, accessor: 'rate', align: 'right' }, { label: lineTotalLabel, accessor: 'total', align: 'right' }, ]} data={lines} /> {showSubtotal && ( )} {showDiscount && ( )} {showTaxes && ( <> {taxes.map((tax, index) => ( ))} )} {showTotal && ( )} {showPaymentMade && ( )} {showBalanceDue && ( )} {showTermsConditions && termsConditions && ( {termsConditions} )} {showStatement && statement && ( {statement} )} ); }