import { forwardRef } from 'react'; import { useLanguage } from '@/contexts/LanguageContext'; import { format } from 'date-fns'; interface InvoiceItem { particular: string; bags: number; grossWeightPerBag: number; netWeight: number; rate: number; amount: number; } interface InvoiceCharges { bardhana: boolean; bardhanAmount: number; hamali: boolean; hamaliAmount: number; adhath: boolean; adhathPercent: number; adhathAmount: number; cess: number; cessAmount: number; gaadiBharni: number; } interface CustomerInvoiceProps { shopName: string; shopAddress: string; shopPhone: string; shopGST?: string; billNumber: string; date: string; partyName: string; partyAddress?: string; partyPhone?: string; items: InvoiceItem[]; charges: InvoiceCharges; itemTotal: number; grandTotal: number; } // This component is for customer-facing invoice // DOES NOT SHOW: Lot numbers, purchase rates, supplier info, margins export const CustomerInvoice = forwardRef( (props, ref) => { const { t, language } = useLanguage(); const { shopName, shopAddress, shopPhone, shopGST, billNumber, date, partyName, partyAddress, partyPhone, items, charges, itemTotal, grandTotal, } = props; const formatDate = (dateString: string) => { const d = new Date(dateString); return format(d, 'dd/MM/yyyy'); }; return (
{/* Header */}

{shopName}

{shopAddress}

{language === 'mr' ? 'फोन' : 'Phone'}: {shopPhone}

{shopGST && (

{language === 'mr' ? 'जीएसटी नंबर' : 'GST No'}: {shopGST}

)}
{/* Bill Info */}

{language === 'mr' ? 'बिल नंबर' : 'Bill No'}:

{billNumber}

{language === 'mr' ? 'तारीख' : 'Date'}:

{formatDate(date)}

{/* Party Details */}

{language === 'mr' ? 'पार्टीचे नाव' : 'Party Name'}:

{partyName}

{partyAddress && (

{partyAddress}

)} {partyPhone && (

{language === 'mr' ? 'फोन' : 'Phone'}: {partyPhone}

)}
{/* Items Table */} {items.map((item, index) => ( ))}
{language === 'mr' ? 'तपशील' : 'Particulars'} {language === 'mr' ? 'पोत्या' : 'Bags'} {language === 'mr' ? 'वजन (kg)' : 'Weight (kg)'} {language === 'mr' ? 'रेट' : 'Rate'} {language === 'mr' ? 'रक्कम' : 'Amount'}
{item.particular} {item.bags} {item.netWeight} ₹{item.rate.toFixed(2)} ₹{item.amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
{/* Charges Breakdown */}
{/* Item Total */}
{language === 'mr' ? 'माल एकूण' : 'Item Total'}: ₹{itemTotal.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
{/* Bardhana */} {charges.bardhana && charges.bardhanAmount > 0 && (
{language === 'mr' ? 'बर्डाणा' : 'Packing'} ({items.reduce((sum, item) => sum + item.bags, 0)} × ₹18): ₹{charges.bardhanAmount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
)} {/* Hamali */} {charges.hamali && charges.hamaliAmount > 0 && (
{language === 'mr' ? 'हमाली' : 'Labor'} ({items.reduce((sum, item) => sum + item.bags, 0)} × ₹6): ₹{charges.hamaliAmount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
)} {/* Commission */} {charges.adhath && charges.adhathAmount > 0 && (
{language === 'mr' ? 'अडत' : 'Commission'} ({charges.adhathPercent}%): ₹{charges.adhathAmount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
)} {/* Cess */} {charges.cessAmount > 0 && (
{language === 'mr' ? 'सेस' : 'Cess'} ({charges.cess}%): ₹{charges.cessAmount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
)} {/* Vehicle Loading */} {charges.gaadiBharni > 0 && (
{language === 'mr' ? 'गाडी भरणी' : 'Vehicle Loading'}: ₹{charges.gaadiBharni.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
)} {/* Grand Total */}
{language === 'mr' ? 'एकूण रक्कम' : 'Grand Total'}: ₹{grandTotal.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
{/* Footer */}

{language === 'mr' ? 'नोट: कृपया रक्कम वेळेवर भरावी' : 'Note: Please pay on time'}

{language === 'mr' ? 'अधिकृत स्वाक्षरी' : 'Authorized Sign'}

{/* Print/Share Watermark */}

{language === 'mr' ? 'मिर्ची ट्रेडिंग - व्यावसायिक सॉफ्टवेअर' : 'Mirchi Trading - Business Software'}

); } ); CustomerInvoice.displayName = 'CustomerInvoice';