'use client'; /** * 거래명세서 보기 모달 * * 견적 데이터를 거래명세서 양식으로 표시 * - 공급자/공급받는자 정보 * - 품목내역 * - 금액 계산 (공급가액, 할인, 부가세, 합계) * - 증명 문구 + 인감 */ import { DocumentViewer } from '@/components/document-system'; import type { QuoteFormDataV2 } from './QuoteRegistrationV2'; interface QuoteTransactionModalProps { open: boolean; onOpenChange: (open: boolean) => void; quoteData: QuoteFormDataV2 | null; /** 할인율 (%) */ discountRate?: number; /** 할인금액 (원) */ discountAmount?: number; } export function QuoteTransactionModal({ open, onOpenChange, quoteData, discountRate = 0, discountAmount = 0, }: QuoteTransactionModalProps) { if (!quoteData) return null; // locations 배열 (undefined 방어) const locations = quoteData.locations || []; // 금액 계산 const subtotal = locations.reduce((sum, loc) => { const locationTotal = (loc.items || []).reduce((itemSum, item) => itemSum + (item.amount || 0), 0); return sum + locationTotal * (loc.quantity || 1); }, 0); const afterDiscount = subtotal - discountAmount; const vat = Math.round(afterDiscount * 0.1); const finalTotal = afterDiscount + vat; // 부가세 포함 여부 const vatIncluded = quoteData.vatType === 'included'; // 오늘 날짜 const today = new Date().toISOString().split('T')[0]; return (
{/* 문서 헤더 */}

거 래 명 세 서

견적번호: {quoteData.quoteNumber || '-'} | 발행일: {quoteData.receiptDate || today}

{/* 공급자/공급받는자 정보 */}
{/* 공급자 */}
공급자
상호 회사명
대표자 홍길동
사업자번호 123-12-12345
주소 주소명
{/* 공급받는자 */}
공급받는자
상호 {quoteData.clientName || '-'}
담당자 {quoteData.managerName || '-'}
연락처 {quoteData.contact || '-'}
현장명 {quoteData.siteName || '-'}
{/* 품목내역 */}
품목내역
{locations.length > 0 ? ( locations.map((location, index) => ( )) ) : ( )}
순번 품목코드 품명 규격 수량 단위 단가 공급가액
{index + 1} {location.productCode || '-'} {location.floor} / {location.symbol} {location.width}x{location.height} {location.quantity || 1} SET {(location.items || []).reduce((sum, item) => sum + (item.amount || 0), 0).toLocaleString()} {((location.items || []).reduce((sum, item) => sum + (item.amount || 0), 0) * (location.quantity || 1)).toLocaleString()}
등록된 품목이 없습니다
{/* 금액 계산 */}
{/* 할인 적용 시에만 표시 */} {(discountRate > 0 || discountAmount > 0) && ( <> )}
공급가액 {subtotal.toLocaleString()}원
할인율 {discountRate.toFixed(2)}%
할인액 -{discountAmount.toLocaleString()}원
할인 후 공급가액 {afterDiscount.toLocaleString()}원
부가세 (10%) {vat.toLocaleString()}원
합계 금액 ₩ {finalTotal.toLocaleString()}
{/* 증명 문구 */}

위 금액을 거래하였음을 증명합니다.

{quoteData.receiptDate || today}

); }