diff --git a/src/app/[locale]/(protected)/sales/order-management-sales/new/page.tsx b/src/app/[locale]/(protected)/sales/order-management-sales/new/page.tsx
index 16819074..e36eec92 100644
--- a/src/app/[locale]/(protected)/sales/order-management-sales/new/page.tsx
+++ b/src/app/[locale]/(protected)/sales/order-management-sales/new/page.tsx
@@ -11,7 +11,7 @@
import { useRouter, useSearchParams } from "next/navigation";
import { useEffect, useState } from "react";
-import { OrderRegistration, OrderFormData, createOrder, getQuoteByIdForSelect } from "@/components/orders";
+import { OrderRegistration, OrderFormData, createOrder, createOrderFromQuote, getQuoteByIdForSelect } from "@/components/orders";
import type { QuotationForSelect, QuotationItem } from "@/components/orders/actions";
import { toast } from "sonner";
import { Loader2 } from "lucide-react";
@@ -56,6 +56,30 @@ export default function OrderNewPage() {
const handleSave = async (formData: OrderFormData) => {
try {
+ // quoteId가 있으면 견적→수주 변환 API 호출 (개소별 분리 포함)
+ if (quoteId) {
+ const result = await createOrderFromQuote(Number(quoteId), {
+ deliveryDate: formData.expectedShipDate,
+ memo: formData.remarks,
+ deliveryMethodCode: formData.deliveryMethod,
+ options: {
+ receiver: formData.receiver,
+ receiver_contact: formData.receiverContact,
+ shipping_address: formData.address,
+ shipping_address_detail: formData.addressDetail,
+ shipping_cost_code: formData.shippingCost,
+ },
+ });
+
+ if (result.success) {
+ toast.success("견적에서 수주가 생성되었습니다.");
+ router.push("/sales/order-management-sales");
+ } else {
+ toast.error(result.error || "수주 생성에 실패했습니다.");
+ }
+ return;
+ }
+
const result = await createOrder(formData);
if (result.success) {
diff --git a/src/components/orders/OrderRegistration.tsx b/src/components/orders/OrderRegistration.tsx
index a9ecbba1..110c74ce 100644
--- a/src/components/orders/OrderRegistration.tsx
+++ b/src/components/orders/OrderRegistration.tsx
@@ -833,17 +833,17 @@ export function OrderRegistration({
-
{
+ onChange={(value) => {
setForm((prev) => ({
...prev,
- receiverContact: e.target.value,
+ receiverContact: value,
}));
clearFieldError("receiverContact");
}}
- className={cn(fieldErrors.receiverContact && "border-red-500")}
+ error={!!fieldErrors.receiverContact}
/>
{fieldErrors.receiverContact && (
{fieldErrors.receiverContact}
diff --git a/src/components/orders/OrderSalesDetailView.tsx b/src/components/orders/OrderSalesDetailView.tsx
index ddef99aa..7e434117 100644
--- a/src/components/orders/OrderSalesDetailView.tsx
+++ b/src/components/orders/OrderSalesDetailView.tsx
@@ -149,7 +149,7 @@ function OrderNodeCard({ node, depth = 0 }: { node: OrderNode; depth?: number })
{statusConfig.label}
- {formatAmount(node.totalPrice)}원
+ {formatAmount(node.totalPrice)}
@@ -187,10 +187,10 @@ function OrderNodeCard({ node, depth = 0 }: { node: OrderNode; depth?: number })