From 25749225689c3934bc10ad1e8285e13020b61282 Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Thu, 4 Dec 2025 09:04:09 +0000
Subject: (최겸)구매 입찰, 계약 수정
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../detail/general-contract-items-table.tsx        | 43 +++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

(limited to 'lib/general-contracts/detail/general-contract-items-table.tsx')

diff --git a/lib/general-contracts/detail/general-contract-items-table.tsx b/lib/general-contracts/detail/general-contract-items-table.tsx
index 15e5c926..e5fc6cf2 100644
--- a/lib/general-contracts/detail/general-contract-items-table.tsx
+++ b/lib/general-contracts/detail/general-contract-items-table.tsx
@@ -30,6 +30,8 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from
 import { ProjectSelector } from '@/components/ProjectSelector'
 import { MaterialGroupSelectorDialogSingle } from '@/components/common/material/material-group-selector-dialog-single'
 import { MaterialSearchItem } from '@/lib/material/material-group-service'
+import { ProcurementItemSelectorDialogSingle } from '@/components/common/selectors/procurement-item/procurement-item-selector-dialog-single'
+import { ProcurementSearchItem } from '@/components/common/selectors/procurement-item/procurement-item-service'
 
 interface ContractItem {
   id?: number
@@ -174,7 +176,7 @@ export function ContractItemsTable({
       const errors: string[] = []
       for (let index = 0; index < localItems.length; index++) {
         const item = localItems[index]
-        if (!item.itemCode) errors.push(`${index + 1}번째 품목의 품목코드`)
+        // if (!item.itemCode) errors.push(`${index + 1}번째 품목의 품목코드`)
         if (!item.itemInfo) errors.push(`${index + 1}번째 품목의 Item 정보`)
         if (!item.quantity || item.quantity <= 0) errors.push(`${index + 1}번째 품목의 수량`)
         if (!item.contractUnitPrice || item.contractUnitPrice <= 0) errors.push(`${index + 1}번째 품목의 단가`)
@@ -271,6 +273,34 @@ export function ContractItemsTable({
     onItemsChange(updatedItems)
   }
 
+  // 1회성 품목 선택 시 행 추가
+  const handleOneTimeItemSelect = (item: ProcurementSearchItem | null) => {
+    if (!item) return
+
+    const newItem: ContractItem = {
+      projectId: null,
+      itemCode: item.itemCode,
+      itemInfo: item.itemName,
+      materialGroupCode: '',
+      materialGroupDescription: '',
+      specification: item.specification || '',
+      quantity: 0,
+      quantityUnit: item.unit || 'EA',
+      totalWeight: 0,
+      weightUnit: 'KG',
+      contractDeliveryDate: '',
+      contractUnitPrice: 0,
+      contractAmount: 0,
+      contractCurrency: 'KRW',
+      isSelected: false
+    }
+    
+    const updatedItems = [...localItems, newItem]
+    setLocalItems(updatedItems)
+    onItemsChange(updatedItems)
+    toast.success('1회성 품목이 추가되었습니다.')
+  }
+
   // 일괄입력 적용
   const applyBatchInput = () => {
     if (localItems.length === 0) {
@@ -382,6 +412,17 @@ export function ContractItemsTable({
                       <Plus className="w-4 h-4" />
                       행 추가
                     </Button>
+                    <ProcurementItemSelectorDialogSingle
+                      triggerLabel="1회성 품목 추가"
+                      triggerVariant="outline"
+                      triggerSize="sm"
+                      selectedProcurementItem={null}
+                      onProcurementItemSelect={handleOneTimeItemSelect}
+                      title="1회성 품목 선택"
+                      description="추가할 1회성 품목을 선택해주세요."
+                      showConfirmButtons={false}
+                      disabled={!isEnabled || readOnly}
+                    />
                     <Dialog open={showBatchInputDialog} onOpenChange={setShowBatchInputDialog}>
                       <DialogTrigger asChild>
                         <Button
-- 
cgit v1.2.3

