From c5002d77087b256599b174ada611621657fcc523 Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Sun, 15 Jun 2025 04:40:22 +0000
Subject: (최겸) 기술영업 조선,해양RFQ 수정
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lib/techsales-rfq/table/rfq-table.tsx | 127 +++++++++++++---------------------
 1 file changed, 47 insertions(+), 80 deletions(-)

(limited to 'lib/techsales-rfq/table/rfq-table.tsx')

diff --git a/lib/techsales-rfq/table/rfq-table.tsx b/lib/techsales-rfq/table/rfq-table.tsx
index f1570577..424ca70e 100644
--- a/lib/techsales-rfq/table/rfq-table.tsx
+++ b/lib/techsales-rfq/table/rfq-table.tsx
@@ -23,24 +23,22 @@ import { RFQTableToolbarActions } from "./rfq-table-toolbar-actions"
 import { getTechSalesRfqsWithJoin, getTechSalesRfqAttachments } from "@/lib/techsales-rfq/service"
 import { toast } from "sonner"
 import { useTablePresets } from "@/components/data-table/use-table-presets"
-import { TablePresetManager } from "@/components/data-table/data-table-preset"
 import { RfqDetailTables } from "./detail-table/rfq-detail-table"
 import { cn } from "@/lib/utils"
 import { ProjectDetailDialog } from "./project-detail-dialog"
 import { RFQFilterSheet } from "./rfq-filter-sheet"
 import { TechSalesRfqAttachmentsSheet, ExistingTechSalesAttachment } from "./tech-sales-rfq-attachments-sheet"
-
+import { RfqItemsViewDialog } from "./rfq-items-view-dialog"
 // 기본적인 RFQ 타입 정의 (repository selectTechSalesRfqsWithJoin 반환 타입에 맞춤)
 interface TechSalesRfq {
   id: number
   rfqCode: string | null
-  itemId: number
-  itemName: string | null
+  biddingProjectId: number | null
   materialCode: string | null
   dueDate: Date
   rfqSendDate: Date | null
   status: "RFQ Created" | "RFQ Vendor Assignned" | "RFQ Sent" | "Quotation Analysis" | "Closed"
-  picCode: string | null
+  description: string | null
   remark: string | null
   cancelReason: string | null
   createdAt: Date
@@ -51,40 +49,7 @@ interface TechSalesRfq {
   updatedByName: string
   sentBy: number | null
   sentByName: string | null
-  // 스키마와 일치하도록 타입 수정
-  projectSnapshot: {
-    pspid: string;
-    projNm?: string;
-    sector?: string;
-    projMsrm?: number;
-    kunnr?: string;
-    kunnrNm?: string;
-    cls1?: string;
-    cls1Nm?: string;
-    ptype?: string;
-    ptypeNm?: string;
-    pmodelCd?: string;
-    pmodelNm?: string;
-    pmodelSz?: string;
-    pmodelUom?: string;
-    txt04?: string;
-    txt30?: string;
-    estmPm?: string;
-    pspCreatedAt?: Date | string;
-    pspUpdatedAt?: Date | string;
-  } | Record<string, unknown> // legacy 호환성을 위해 유지
-  seriesSnapshot: Array<{
-    pspid: string;
-    sersNo: string;
-    scDt?: string;
-    klDt?: string;
-    lcDt?: string;
-    dlDt?: string;
-    dockNo?: string;
-    dockNm?: string;
-    projNo?: string;
-    post1?: string;
-  }> | Record<string, unknown> // legacy 호환성을 위해 유지
+  // 조인된 프로젝트 정보
   pspid: string
   projNm: string
   sector: string
@@ -100,12 +65,14 @@ interface RFQListTableProps {
   promises: Promise<[Awaited<ReturnType<typeof getTechSalesRfqsWithJoin>>]>
   className?: string;
   calculatedHeight?: string; // 계산된 높이 추가
+  rfqType: "SHIP" | "TOP" | "HULL";
 }
 
 export function RFQListTable({
   promises,
   className,
-  calculatedHeight
+  calculatedHeight,
+  rfqType
 }: RFQListTableProps) {
   const searchParams = useSearchParams()
   
@@ -124,6 +91,10 @@ export function RFQListTable({
   const [selectedRfqForAttachments, setSelectedRfqForAttachments] = React.useState<TechSalesRfq | null>(null)
   const [attachmentsDefault, setAttachmentsDefault] = React.useState<ExistingTechSalesAttachment[]>([])
   
+  // 아이템 다이얼로그 상태
+  const [itemsDialogOpen, setItemsDialogOpen] = React.useState(false)
+  const [selectedRfqForItems, setSelectedRfqForItems] = React.useState<TechSalesRfq | null>(null)
+  
   // 패널 collapse 상태
   const [panelHeight, setPanelHeight] = React.useState<number>(55)
   
@@ -164,23 +135,23 @@ export function RFQListTable({
     to: searchParams?.get('to') || undefined,
     columnVisibility: {},
     columnOrder: [],
-    pinnedColumns: { left: [], right: [] },
+    pinnedColumns: { left: [], right: ["items", "attachments"] },
     groupBy: [],
     expandedRows: []
   }), [searchParams])
   
   // DB 기반 프리셋 훅 사용
   const {
-    presets,
-    activePresetId,
-    hasUnsavedChanges,
-    isLoading: presetsLoading,
-    createPreset,
-    applyPreset,
-    updatePreset,
-    deletePreset,
-    setDefaultPreset,
-    renamePreset,
+    // presets,
+    // activePresetId,
+    // hasUnsavedChanges,
+    // isLoading: presetsLoading,
+    // createPreset,
+    // applyPreset,
+    // updatePreset,
+    // deletePreset,
+    // setDefaultPreset,
+    // renamePreset,
     getCurrentSettings,
   } = useTablePresets<TechSalesRfq>('rfq-list-table', initialSettings)
   
@@ -199,13 +170,12 @@ export function RFQListTable({
           setSelectedRfq({
             id: rfqData.id,
             rfqCode: rfqData.rfqCode,
-            itemId: rfqData.itemId,
-            itemName: rfqData.itemName,
+            biddingProjectId: rfqData.biddingProjectId,
             materialCode: rfqData.materialCode,
             dueDate: rfqData.dueDate,
             rfqSendDate: rfqData.rfqSendDate,
             status: rfqData.status,
-            picCode: rfqData.picCode,
+            description: rfqData.description,
             remark: rfqData.remark,
             cancelReason: rfqData.cancelReason,
             createdAt: rfqData.createdAt,
@@ -216,8 +186,6 @@ export function RFQListTable({
             updatedByName: rfqData.updatedByName,
             sentBy: rfqData.sentBy,
             sentByName: rfqData.sentByName,
-            projectSnapshot: rfqData.projectSnapshot,
-            seriesSnapshot: rfqData.seriesSnapshot,
             pspid: rfqData.pspid,
             projNm: rfqData.projNm,
             sector: rfqData.sector,
@@ -233,13 +201,12 @@ export function RFQListTable({
           setProjectDetailRfq({
             id: projectRfqData.id,
             rfqCode: projectRfqData.rfqCode,
-            itemId: projectRfqData.itemId,
-            itemName: projectRfqData.itemName,
+            biddingProjectId: projectRfqData.biddingProjectId,
             materialCode: projectRfqData.materialCode,
             dueDate: projectRfqData.dueDate,
             rfqSendDate: projectRfqData.rfqSendDate,
             status: projectRfqData.status,
-            picCode: projectRfqData.picCode,
+            description: projectRfqData.description,
             remark: projectRfqData.remark,
             cancelReason: projectRfqData.cancelReason,
             createdAt: projectRfqData.createdAt,
@@ -250,8 +217,6 @@ export function RFQListTable({
             updatedByName: projectRfqData.updatedByName,
             sentBy: projectRfqData.sentBy,
             sentByName: projectRfqData.sentByName,
-            projectSnapshot: projectRfqData.projectSnapshot || {},
-            seriesSnapshot: projectRfqData.seriesSnapshot || {},
             pspid: projectRfqData.pspid,
             projNm: projectRfqData.projNm,
             sector: projectRfqData.sector,
@@ -307,11 +272,7 @@ export function RFQListTable({
       }))
       
       setAttachmentsDefault(attachments)
-      setSelectedRfqForAttachments({
-        ...rfq,
-        projectSnapshot: rfq.projectSnapshot || {},
-        seriesSnapshot: Array.isArray(rfq.seriesSnapshot) ? rfq.seriesSnapshot : {},
-      })
+      setSelectedRfqForAttachments(rfq as unknown as TechSalesRfq)
       setAttachmentsOpen(true)
     } catch (error) {
       console.error("첨부파일 조회 오류:", error)
@@ -332,12 +293,20 @@ export function RFQListTable({
     }, 500)
   }, [])
 
+  // 아이템 다이얼로그 열기 함수
+  const openItemsDialog = React.useCallback((rfq: TechSalesRfq) => {
+    console.log("Opening items dialog for RFQ:", rfq.id, rfq)
+    setSelectedRfqForItems(rfq as unknown as TechSalesRfq)
+    setItemsDialogOpen(true)
+  }, [])
+
   const columns = React.useMemo(
     () => getColumns({ 
       setRowAction,
-      openAttachmentsSheet
+      openAttachmentsSheet,
+      openItemsDialog
     }),
-    [openAttachmentsSheet]
+    [openAttachmentsSheet, openItemsDialog]
   )
   
   // 고급 필터 필드 정의
@@ -348,13 +317,8 @@ export function RFQListTable({
       type: "text",
     },
     {
-      id: "materialCode",
-      label: "자재코드",
-      type: "text",
-    },
-    {
-      id: "itemName",
-      label: "자재명",
+      id: "description",
+      label: "설명",
       type: "text",
     },
     {
@@ -362,11 +326,6 @@ export function RFQListTable({
       label: "프로젝트명",
       type: "text",
     },
-    {
-      id: "ptypeNm",
-      label: "선종명",
-      type: "text",
-    },
     {
       id: "rfqSendDate",
       label: "RFQ 전송일",
@@ -563,6 +522,7 @@ export function RFQListTable({
                       <RFQTableToolbarActions 
                         selection={table}
                         onRefresh={() => {}}
+                        rfqType={rfqType}
                       />
                     </div>
                   </DataTableAdvancedToolbar>
@@ -603,6 +563,13 @@ export function RFQListTable({
         rfq={selectedRfqForAttachments}
         onAttachmentsUpdated={handleAttachmentsUpdated}
       />
+
+      {/* 아이템 보기 다이얼로그 */}
+      <RfqItemsViewDialog
+        open={itemsDialogOpen}
+        onOpenChange={setItemsDialogOpen}
+        rfq={selectedRfqForItems}
+      />
     </div>
   )
 }
\ No newline at end of file
-- 
cgit v1.2.3

