From 72a34d729c70ca90a567e065358b27bde3589db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Wed, 18 Mar 2026 09:21:48 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[quotes]=20=EB=B6=80=EA=B0=80=EC=84=B8?= =?UTF-8?q?=20=ED=83=80=EC=9E=85(vatType)=20options=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=20+=20QuoteApiData=20=ED=83=80=EC=9E=85=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/quotes/types.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/quotes/types.ts b/src/components/quotes/types.ts index 353026aa..08000495 100644 --- a/src/components/quotes/types.ts +++ b/src/components/quotes/types.ts @@ -213,6 +213,8 @@ export interface QuoteApiData { updated_by: number | null; finalized_at: string | null; finalized_by: number | null; + // options JSON (부가세 타입 등) + options?: Record | null; // 연결된 수주 ID (수주전환 시 설정) order_id?: number | null; // 관계 데이터 (with 로드 시) @@ -734,6 +736,8 @@ export interface QuoteFormDataV2 { dueDate: string; remarks: string; status: 'draft' | 'temporary' | 'final' | 'converted'; // 작성중, 임시저장, 최종저장, 수주전환 + + vatType: 'included' | 'excluded'; // 부가세 포함/별도 discountRate: number; // 할인율 (%) discountAmount: number; // 할인 금액 locations: LocationItem[]; @@ -919,6 +923,9 @@ export function transformV2ToApi( status: data.status === 'final' ? 'finalized' : 'draft', is_final: data.status === 'final', calculation_inputs: calculationInputs, + options: { + vat_type: data.vatType || 'included', + }, items: items, }; } @@ -1042,6 +1049,9 @@ export function transformApiToV2(apiData: QuoteApiData): QuoteFormDataV2 { remarks: apiData.remarks || apiData.description || transformed.description || '', status: mapStatus(apiData.status), // raw API: discount_rate, transformed: discountRate + vatType: apiData.options?.vat_type as 'included' | 'excluded' + || (transformed as unknown as { vatType?: string })?.vatType as 'included' | 'excluded' + || 'included', discountRate: Number(apiData.discount_rate) || transformed.discountRate || 0, discountAmount: Number(apiData.discount_amount) || transformed.discountAmount || 0, locations: locations,