"use client" import { ResourcePage } from "@/shared/data-view/resource-page" import { ColumnHeader } from "@/shared/data-view/table-view" import FormDialog from "@/shared/components/form-dialog" import { PaymentReceivedForm } from "@/modules/payment-received/payment-received-form" import { PAYMENT_RECEIVED_ROUTES } from "@garage/api" import { BadgeDollarSignIcon, CalendarIcon, CreditCardIcon, HashIcon, Printer, UserIcon, ClipboardListIcon, } from "lucide-react" import { useRouter } from "next/navigation" import { useDocumentPrint } from "@/shared/hooks/use-document-print" import { getFullName } from "@/shared/utils/getFullName" import { RelationLink } from "@/shared/components/relation-link" type PaymentReceivedItem = { id: number payment_number?: string customer_name?: string job_card_name?: string job_card_number?: string payment_mode_name?: string amount_received?: string | number payment_date?: string note?: string status?: string created_at?: string } export default function PaymentReceivedPage() { const router = useRouter() const { print, isPrinting } = useDocumentPrint() return ( ; destroy(id: string): Promise }> routeKey={PAYMENT_RECEIVED_ROUTES.INDEX} searchable searchPlaceholder="Search payments..." getClient={(api) => ({ list: (query?: any) => api.paymentReceived.list(query), destroy: (id: string) => api.paymentReceived.destroy(id), })} onRowClick={(row) => router.push(`/sales/payment-received/${(row as any).id}`)} headerProps={({ invalidateQuery }) => ({ actions: ( {(resourceId) => ( )} ), })} columns={({ actionsColumn }) => [ { accessorKey: "payment_number", header: ({ column }) => , cell: ({ row }) => { const item = row.original as unknown as PaymentReceivedItem return (
{item.payment_number || "—"}
) }, }, { accessorKey: "customer", header: ({ column }) => , cell: ({ row }) => { const item: any = row.original as unknown as PaymentReceivedItem const customer = item.customer return ( ) }, }, { accessorKey: "job_card", header: ({ column }) => , cell: ({ row }) => { const item: any = row.original as unknown as PaymentReceivedItem const jobCard = item.job_card return ( ) }, }, { accessorKey: "amount_received", header: ({ column }) => , cell: ({ row }) => { const item = row.original as unknown as PaymentReceivedItem const amount = item.amount_received ? Number(item.amount_received).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, }) : "—" return (
{amount}
) }, }, { accessorKey: "payment_mode", header: ({ column }) => , cell: ({ row }) => { const item:any = row.original as unknown as PaymentReceivedItem return (
{item.payment_mode?.title || "—"}
) }, }, { accessorKey: "payment_date", header: ({ column }) => , cell: ({ row }) => { const item = row.original as unknown as PaymentReceivedItem const formatted = item.payment_date ? new Date(item.payment_date).toLocaleDateString(undefined, { year: "numeric", month: "short", day: "numeric", }) : "—" return (
{formatted}
) }, }, { accessorKey: "note", header: () => Note, enableSorting: false, cell: ({ row }) => { const item = row.original as unknown as PaymentReceivedItem const note = item.note if (!note) return return ( {note} ) }, }, actionsColumn({ extraItems: (row) => [ { label: isPrinting ? "Printing..." : "Print", icon: Printer, onClick: (r) => print("payment_received", String(r.id), "print"), }, ], }), ]} /> ) }