import { permissions } from "@mrp/shared"; import type { PurchaseOrderDetailDto, PurchaseOrderStatus } from "@mrp/shared"; import { useEffect, useState } from "react"; import { Link, useParams } from "react-router-dom"; import { useAuth } from "../../auth/AuthProvider"; import { api, ApiError } from "../../lib/api"; import { purchaseStatusOptions } from "./config"; import { PurchaseStatusBadge } from "./PurchaseStatusBadge"; export function PurchaseDetailPage() { const { token, user } = useAuth(); const { orderId } = useParams(); const [document, setDocument] = useState(null); const [status, setStatus] = useState("Loading purchase order..."); const [isUpdatingStatus, setIsUpdatingStatus] = useState(false); const canManage = user?.permissions.includes("purchasing.write") ?? false; useEffect(() => { if (!token || !orderId) { return; } api.getPurchaseOrder(token, orderId) .then((nextDocument) => { setDocument(nextDocument); setStatus("Purchase order loaded."); }) .catch((error: unknown) => { const message = error instanceof ApiError ? error.message : "Unable to load purchase order."; setStatus(message); }); }, [orderId, token]); if (!document) { return
{status}
; } const activeDocument = document; async function handleStatusChange(nextStatus: PurchaseOrderStatus) { if (!token) { return; } setIsUpdatingStatus(true); setStatus("Updating purchase order status..."); try { const nextDocument = await api.updatePurchaseOrderStatus(token, activeDocument.id, nextStatus); setDocument(nextDocument); setStatus("Purchase order status updated."); } catch (error: unknown) { const message = error instanceof ApiError ? error.message : "Unable to update purchase order status."; setStatus(message); } finally { setIsUpdatingStatus(false); } } return (

Purchase Order

{activeDocument.documentNumber}

{activeDocument.vendorName}

Back to purchase orders {canManage ? ( Edit purchase order ) : null}
{canManage ? (

Quick Actions

Update purchase-order status without opening the full editor.

{purchaseStatusOptions.map((option) => ( ))}
) : null}

Issue Date

{new Date(activeDocument.issueDate).toLocaleDateString()}

Lines

{activeDocument.lineCount}

Subtotal

${activeDocument.subtotal.toFixed(2)}

Total

${activeDocument.total.toFixed(2)}

Tax

${activeDocument.taxAmount.toFixed(2)}
{activeDocument.taxPercent.toFixed(2)}%

Freight

${activeDocument.freightAmount.toFixed(2)}

Payment Terms

{activeDocument.paymentTerms || "N/A"}

Currency

{activeDocument.currencyCode || "USD"}

Vendor

Account
{activeDocument.vendorName}
Email
{activeDocument.vendorEmail}

Notes

{activeDocument.notes || "No notes recorded for this document."}

Line Items

{activeDocument.lines.length === 0 ? (
No line items have been added yet.
) : (
{activeDocument.lines.map((line: PurchaseOrderDetailDto["lines"][number]) => ( ))}
ItemDescriptionQtyUOMUnit CostTotal
{line.itemSku}
{line.itemName}
{line.description} {line.quantity} {line.unitOfMeasure} ${line.unitCost.toFixed(2)} ${line.lineTotal.toFixed(2)}
)}
{status}
); }