import React, { useEffect, useState } from "react"; interface Invoice { invoice_id: number; invoice_number: string; customer_id: string; invoice_date: string; due_date: string; subtotal: number; tax_amount: number; total_amount: number; status: string; payment_terms: string | null; notes: string; created_at: string; updated_at: string; } export default function PrintInvoice() { const [invoiceList, setInvoiceList] = useState([]); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [selectedInvoice, setSelectedInvoice] = useState(null); useEffect(() => { const getInvoiceListData = async () => { try { const response = await fetch('http://localhost:2058/host-api/v1/invoice/invoice-info/', { method: 'GET', credentials: 'include', headers: { 'Accept': 'application/json' } }); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } const data = await response.json(); if (!data.success) { throw new Error(data.message || 'Session fetch failed'); } setInvoiceList(data.data); } catch (error: any) { console.error('Fetch error:', error); setError(error.message); } finally { setLoading(false); } }; getInvoiceListData(); }, []); const handlePrint = () => { window.print(); } const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); } const formatCurrency = (amount: number) => { return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(amount); } const viewInvoiceDetails = (invoice: Invoice) => { setSelectedInvoice(invoice); } const closeInvoiceDetails = () => { setSelectedInvoice(null); } if (error) { return
Error: {error}
; } if (loading) { return
Loading invoice data...
; } return (
{/* Invoice List */}

Invoices

{invoiceList.map((invoice) => ( ))}
Invoice # Date Due Date Amount Status Actions
{invoice.invoice_number} {formatDate(invoice.invoice_date)} {formatDate(invoice.due_date)} {formatCurrency(invoice.total_amount)} {invoice.status}
{/* Invoice Detail Modal */} {selectedInvoice && (
{/* Printable Invoice */}

INVOICE

{selectedInvoice.invoice_number}

Status: {selectedInvoice.status.toUpperCase()}

Date: {formatDate(selectedInvoice.invoice_date)}

Due: {formatDate(selectedInvoice.due_date)}

From

Your Company Name

123 Business Street

City, State 12345

contact@yourcompany.com

Bill To

Customer ID: {selectedInvoice.customer_id}

[Customer Name]

[Customer Address]

[Customer Email]

Description
Subtotal
Tax
Total
[Service/Product Description]
{formatCurrency(selectedInvoice.subtotal)}
{formatCurrency(selectedInvoice.tax_amount)}
{formatCurrency(selectedInvoice.total_amount)}
Subtotal: {formatCurrency(selectedInvoice.subtotal)}
Tax: {formatCurrency(selectedInvoice.tax_amount)}
Total: {formatCurrency(selectedInvoice.total_amount)}
{selectedInvoice.notes && (

Notes

{selectedInvoice.notes}

)}

Thank you for your business!

)} {/* Print Styles */}
); }