"use client"; import React, { useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { OrderCustomerSearch } from "./OrderCustomerSearch"; import { OrderItemRepeaterTable } from "./OrderItemRepeaterTable"; import { toast } from "sonner"; import { apiClient } from "@/lib/api/client"; interface OrderRegistrationModalProps { open: boolean; onOpenChange: (open: boolean) => void; onSuccess?: () => void; } export function OrderRegistrationModal({ open, onOpenChange, onSuccess, }: OrderRegistrationModalProps) { // 입력 방식 const [inputMode, setInputMode] = useState("customer_first"); // 폼 데이터 const [formData, setFormData] = useState({ customerCode: "", customerName: "", deliveryDate: "", memo: "", }); // 선택된 품목 목록 const [selectedItems, setSelectedItems] = useState([]); // 저장 중 const [isSaving, setIsSaving] = useState(false); // 저장 처리 const handleSave = async () => { try { // 유효성 검사 if (!formData.customerCode) { toast.error("거래처를 선택해주세요"); return; } if (selectedItems.length === 0) { toast.error("품목을 추가해주세요"); return; } setIsSaving(true); // 수주 등록 API 호출 const response = await apiClient.post("/orders", { inputMode, customerCode: formData.customerCode, deliveryDate: formData.deliveryDate, items: selectedItems, memo: formData.memo, }); if (response.data.success) { toast.success("수주가 등록되었습니다"); onOpenChange(false); onSuccess?.(); // 폼 초기화 resetForm(); } else { toast.error(response.data.message || "수주 등록에 실패했습니다"); } } catch (error: any) { console.error("수주 등록 오류:", error); toast.error( error.response?.data?.message || "수주 등록 중 오류가 발생했습니다" ); } finally { setIsSaving(false); } }; // 취소 처리 const handleCancel = () => { onOpenChange(false); resetForm(); }; // 폼 초기화 const resetForm = () => { setInputMode("customer_first"); setFormData({ customerCode: "", customerName: "", deliveryDate: "", memo: "", }); setSelectedItems([]); }; // 전체 금액 계산 const totalAmount = selectedItems.reduce( (sum, item) => sum + (item.amount || 0), 0 ); return ( 수주 등록 새로운 수주를 등록합니다
{/* 입력 방식 선택 */}
{/* 입력 방식에 따른 동적 폼 */} {inputMode === "customer_first" && (
{/* 거래처 검색 */}
{ setFormData({ ...formData, customerCode: code || "", customerName: fullData?.customer_name || "", }); }} />
{/* 납품일 */}
setFormData({ ...formData, deliveryDate: e.target.value }) } className="h-8 text-xs sm:h-10 sm:text-sm" />
)} {inputMode === "quotation" && (
)} {inputMode === "unit_price" && (
)} {/* 추가된 품목 */}
{/* 전체 금액 표시 */} {selectedItems.length > 0 && (
전체 금액: {totalAmount.toLocaleString()}원
)} {/* 메모 */}