'use client'; import { useState, useCallback } from 'react'; import { format } from 'date-fns'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { DatePicker } from '@/components/ui/date-picker'; import { Search } from 'lucide-react'; import { toast } from 'sonner'; import { TaxInvoiceItemTable } from './TaxInvoiceItemTable'; import { createEmptyItem, createEmptyBusinessEntity } from './types'; import type { BusinessEntity, TaxInvoiceItem, TaxInvoiceFormData } from './types'; interface TaxInvoiceFormProps { supplier: BusinessEntity; onSubmit: (data: TaxInvoiceFormData) => Promise; onCancel: () => void; onVendorSearch: () => void; selectedVendor: BusinessEntity | null; } export function TaxInvoiceForm({ supplier, onSubmit, onCancel, onVendorSearch, selectedVendor, }: TaxInvoiceFormProps) { const [writeDate, setWriteDate] = useState(format(new Date(), 'yyyy-MM-dd')); const [items, setItems] = useState([createEmptyItem()]); const [memo, setMemo] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const receiver = selectedVendor ?? createEmptyBusinessEntity(); const handleSubmit = useCallback(async () => { if (!selectedVendor) { toast.error('공급받는자를 선택하세요.'); return; } if (items.length === 0) { toast.error('품목을 하나 이상 추가하세요.'); return; } const hasEmptyItem = items.some((item) => !item.itemName.trim()); if (hasEmptyItem) { toast.error('품목명을 입력하세요.'); return; } setIsSubmitting(true); try { await onSubmit({ supplier, receiver, writeDate, items, memo, }); } finally { setIsSubmitting(false); } }, [supplier, receiver, writeDate, items, memo, selectedVendor, onSubmit]); const thClass = 'border border-gray-300 bg-gray-50 px-2 py-1.5 text-left font-medium whitespace-nowrap w-[70px] text-xs'; const tdClass = 'border border-gray-300 px-2 py-1.5 text-sm'; return ( {/* 공급자 / 공급받는자 테이블 */}
{/* 공급자 */} {/* 공급받는자 */} {/* Row 1: 등록번호 / 종사업장 */} {/* Row 2: 상호 / 대표자 */} {/* Row 3: 사업장주소 */} {/* Row 4: 업태 / 종목 */} {/* Row 5: 담당자 / 연락처 */} {/* Row 6: 이메일 */}
공급자
등록번호 {supplier.businessNumber || '-'} 종사업장
공급받는자
등록번호
{receiver.businessNumber || ''}
종사업장
상호 {supplier.companyName || ''} 대표자 {supplier.representativeName || ''} 상호 {receiver.companyName || ''} 대표자 {receiver.representativeName || ''}
사업장주소 {supplier.address || ''} 사업장주소 {receiver.address || ''}
업태 {supplier.businessType || ''} 종목 {supplier.businessItem || ''} 업태 {receiver.businessType || ''} 종목 {receiver.businessItem || ''}
담당자 {supplier.contactName || ''} 연락처 {supplier.contactPhone || ''} 담당자 {receiver.contactName || ''} 연락처 {receiver.contactPhone || ''}
이메일 {supplier.contactEmail || ''} 이메일 {receiver.contactEmail || 세금계산서 수신 이메일}
{/* 작성일자 */}
{/* 품목 테이블 */} {/* 비고 */}