import { useQuery } from '@tanstack/react-query'; import { api } from '../lib/api'; import type { ApiResponse } from '../lib/api'; import Modal from './ui/Modal'; import { formatDate, formatRial } from '../lib/utils'; interface InvoiceItem { uuid: string; title: string; quantity: number; total_rials: number; patient_rials: number } interface Invoice { uuid: string; status: string; issued_at: number; total_rials: number; base_insurance_rials: number; supplementary_rials: number; patient_rials: number; items: InvoiceItem[]; } const STATUS_LABEL: Record = { paid: 'پرداخت شده', finalized: 'بدهکار', draft: 'پیش‌نویس', void: 'باطل' }; /** A titled table block — mirrors tauri InvoiceSummary `SectionTable`. */ function SectionTable({ title, cols, rows }: { title: string; cols: string[]; rows: React.ReactNode[][] }) { return (
{title}
{cols.map((c, i) => ( ))} {rows.map((row, i) => ( {row.map((cell, j) => ( ))} ))}
{c}
{cell}
); } /** خلاصه فاکتور — invoice summary, ported pixel-for-pixel from tauri InvoiceSummary. */ export default function InvoiceSummaryModal({ invoiceUuid, onClose }: { invoiceUuid: string | null; onClose: () => void }) { const { data, isLoading } = useQuery>({ queryKey: ['invoice', invoiceUuid], queryFn: () => api.get(`/api/v1/billing/invoices/${invoiceUuid}`), enabled: !!invoiceUuid, }); // billing show wraps as { data: { data: invoice } } const inv = ((data?.data as any)?.data ?? data?.data ?? null) as Invoice | null; const paid = inv?.status === 'paid'; const remaining = inv ? (paid ? 0 : inv.patient_rials) : 0; const paidAmount = inv ? inv.total_rials - remaining : 0; return ( {isLoading || !inv ? (
در حال بارگذاری…
) : (
[it.title, it.quantity, formatRial(it.total_rials)]) : [['—', '—', '—']]} /> 0 ? '#d32f2f' : '#388e3c', fontWeight: 600 }}>{formatRial(remaining)}, ]]} />
)}
); }