import { ClipboardList, Calendar, Hash, Building2, Truck, FileText, Package, DollarSign, } from "lucide-react" import { Card, CardContent, CardHeader, CardTitle, } from "@/shared/components/ui/card" import { Badge } from "@/shared/components/ui/badge" import { Separator } from "@/shared/components/ui/separator" import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell, } from "@/shared/components/ui/table" type PurchaseOrderPart = { id?: number purchase_order_id?: number part_id?: number quantity?: number rate?: string description?: string created_at?: string updated_at?: string part?: { id?: number title?: string } } type PurchaseOrderData = { id?: number job_card_id?: number vendor_id?: number vendor_name?: string job_card_name?: string department_name?: string title?: string order_number?: string order_date?: string delivery_date?: string department_id?: number notes?: string terms_and_conditions?: string created_at?: string updated_at?: string parts?: PurchaseOrderPart[] } type PurchaseOrderGeneralInfoProps = { purchaseOrder: PurchaseOrderData } function InfoItem({ icon: Icon, label, value, }: { icon: React.ComponentType<{ className?: string }> label: string value?: string | null }) { return (
{label} {value || }
) } function formatDate(dateStr?: string | null) { if (!dateStr) return null return new Date(dateStr).toLocaleDateString() } function formatCurrency(value?: string | number | null) { if (value == null) return "—" return `$${Number(value).toFixed(2)}` } export function PurchaseOrderGeneralInfo({ purchaseOrder }: PurchaseOrderGeneralInfoProps) { const parts = purchaseOrder.parts ?? [] const totalAmount = parts.reduce( (sum, p) => sum + (p.quantity ?? 0) * Number(p.rate ?? 0), 0, ) return (
{/* Top row: Order Info + Dates */}
{/* Order Information */} Order Information
{purchaseOrder.order_number && ( {purchaseOrder.order_number} )}
{/* Dates & Notes */} Dates & Notes
{purchaseOrder.notes && ( <>
Notes

{purchaseOrder.notes}

)} {purchaseOrder.terms_and_conditions && ( <>
Terms & Conditions

{purchaseOrder.terms_and_conditions}

)}
{/* Parts / Line Items */} Parts ({parts.length}) Total: {formatCurrency(totalAmount)} {parts.length > 0 ? (
# Part Description Qty Rate Amount {parts.map((item, index) => { const amount = (item.quantity ?? 0) * Number(item.rate ?? 0) return ( {index + 1} {item.part?.title ?? `Part #${item.part_id}`} {item.description || "—"} {item.quantity ?? 0} {formatCurrency(item.rate)} {formatCurrency(amount)} ) })} Total {formatCurrency(totalAmount)}
) : (

No parts added to this purchase order.

)}
) }