/** * 建立/編輯採購單頁面 */ import { ArrowLeft, Plus, Info } from "lucide-react"; import { Button } from "@/Components/ui/button"; import { Input } from "@/Components/ui/input"; import { Textarea } from "@/Components/ui/textarea"; import { Alert, AlertDescription } from "@/Components/ui/alert"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/Components/ui/select"; import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout"; import { Head, Link, router } from "@inertiajs/react"; import { PurchaseOrderItemsTable } from "@/Components/PurchaseOrder/PurchaseOrderItemsTable"; import type { PurchaseOrder, Supplier } from "@/types/purchase-order"; import type { Warehouse } from "@/types/requester"; import { usePurchaseOrderForm } from "@/hooks/usePurchaseOrderForm"; import { validatePurchaseOrder, filterValidItems, calculateTotalAmount, getTodayDate, formatCurrency, } from "@/utils/purchase-order"; import { STATUS_OPTIONS } from "@/constants/purchase-order"; import { toast } from "sonner"; interface Props { order?: PurchaseOrder; suppliers: Supplier[]; warehouses: Warehouse[]; } export default function CreatePurchaseOrder({ order, suppliers, warehouses, }: Props) { const { supplierId, expectedDate, items, notes, selectedSupplier, isOrderSent, warehouseId, setSupplierId, setExpectedDate, setNotes, setWarehouseId, addItem, removeItem, updateItem, status, setStatus, } = usePurchaseOrderForm({ order, suppliers }); const totalAmount = calculateTotalAmount(items); const isValid = validatePurchaseOrder(String(supplierId), expectedDate, items); const handleSave = () => { if (!isValid || !warehouseId) { toast.error("請填寫完整的表單資訊"); return; } const validItems = filterValidItems(items); if (validItems.length === 0) { toast.error("請至少新增一項採購商品"); return; } const data = { vendor_id: supplierId, warehouse_id: warehouseId, expected_delivery_date: expectedDate, remark: notes, status: status, items: validItems.map(item => ({ productId: item.productId, quantity: item.quantity, unitPrice: item.unitPrice, })), }; if (order) { // Edit not implemented yet but structure is ready router.put(`/purchase-orders/${order.id}`, data, { onSuccess: () => toast.success("採購單已更新") }); } else { router.post("/purchase-orders", data, { onSuccess: () => toast.success("採購單已成功建立") }); } }; const hasSupplier = !!supplierId; const canSave = isValid && !!warehouseId && items.length > 0; return (
{/* Header */}

{order ? "編輯採購單" : "建立採購單"}

{order ? `修改採購單 ${order.poNumber} 的詳細資訊` : "填寫新採購單的資訊以開始流程"}

{/* 步驟一:基本資訊 */}
1

基本資訊

setExpectedDate(e.target.value)} min={getTodayDate()} className="h-12 border-gray-200" />
{order && (
)}