From d55bc64eb42f3b3072a0df4697946e6399cb1e4e Mon Sep 17 00:00:00 2001
From: joonhoekim <26rote@gmail.com>
Date: Tue, 4 Nov 2025 13:39:00 +0900
Subject: (김준회) dolce: 이유란프로 B4 스테이지(일정) 관련 요구사항 반영
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ship/enhanced-doc-table-columns.tsx            | 84 ++++++++++++++++++++++
 1 file changed, 84 insertions(+)

(limited to 'lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx')

diff --git a/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx b/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx
index 882ef885..a2ac622d 100644
--- a/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx
+++ b/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx
@@ -33,6 +33,7 @@ import { DocumentSelectionContext } from "@/components/ship-vendor-document/user
 
 interface GetColumnsProps {
   setRowAction?: React.Dispatch<React.SetStateAction<DataTableRowAction<SimplifiedDocumentsView> | null>>
+  b4FilterType?: 'all' | 'gtt_deliverable' | 'shi_input'
 }
 
 // 날짜 표시 컴포넌트 (간단 버전)
@@ -51,6 +52,7 @@ const DateDisplay = ({ date, isSelected = false }: { date: string | null, isSele
 
 export function getSimplifiedDocumentColumns({
   setRowAction,
+  b4FilterType = 'all',
 }: GetColumnsProps): ColumnDef<SimplifiedDocumentsView>[] {
 
   const columns: ColumnDef<SimplifiedDocumentsView>[] = [
@@ -258,6 +260,49 @@ export function getSimplifiedDocumentColumns({
       ],
     },
 
+    // 3차 스테이지 그룹 (SHI → GTT)
+    {
+      id: "thirdStageGroup",
+      header: ({ table }) => {
+        // 첫 번째 행의 thirdStageName을 그룹 헤더로 사용
+        const firstRow = table.getRowModel().rows[0]?.original
+        const stageName = firstRow?.thirdStageName || "SHI → GTT"
+        return (
+          <div className="text-center font-medium text-foreground">
+            {stageName}
+          </div>
+        )
+      },
+      columns: [
+        {
+          accessorKey: "thirdStagePlanDate",
+          header: ({ column }) => (
+            <DataTableColumnHeaderSimple column={column} title="Planned Date" />
+          ),
+          cell: ({ row }) => {
+            return <ThirdStagePlanDateCell row={row} />
+          },
+          enableResizing: true,
+          meta: {
+            excelHeader: "Third Planned Date"
+          },
+        },
+        {
+          accessorKey: "thirdStageActualDate",
+          header: ({ column }) => (
+            <DataTableColumnHeaderSimple column={column} title="Actual Date" />
+          ),
+          cell: ({ row }) => {
+            return <ThirdStageActualDateCell row={row} />
+          },
+          enableResizing: true,
+          meta: {
+            excelHeader: "Third Actual Date"
+          },
+        },
+      ],
+    },
+
     // 첨부파일 수
     {
       accessorKey: "attachmentCount",
@@ -341,6 +386,22 @@ export function getSimplifiedDocumentColumns({
     // },
   ]
 
+  // b4FilterType에 따라 스테이지 컬럼 필터링
+  if (b4FilterType === 'gtt_deliverable') {
+    // GTT Deliverables: GTT → SHI 스테이지만 (firstStageGroup, secondStageGroup)
+    return columns.filter(col => {
+      const id = 'id' in col ? col.id : null
+      return id !== 'thirdStageGroup'
+    })
+  } else if (b4FilterType === 'shi_input') {
+    // SHI Input Document: SHI → GTT 스테이지만 (thirdStageGroup)
+    return columns.filter(col => {
+      const id = 'id' in col ? col.id : null
+      return id !== 'firstStageGroup' && id !== 'secondStageGroup'
+    })
+  }
+
+  // All: 모든 컬럼 표시
   return columns
 }
 
@@ -471,6 +532,29 @@ function SecondStageActualDateCell({ row }: { row: any }) {
   );
 }
 
+function ThirdStagePlanDateCell({ row }: { row: any }) {
+  const { selectedDocumentId } = React.useContext(DocumentSelectionContext);
+  const isSelected = selectedDocumentId === row.original.documentId;
+  
+  return <DateDisplay date={row.original.thirdStagePlanDate} isSelected={isSelected} />;
+}
+
+function ThirdStageActualDateCell({ row }: { row: any }) {
+  const { selectedDocumentId } = React.useContext(DocumentSelectionContext);
+  const isSelected = selectedDocumentId === row.original.documentId;
+  const date = row.original.thirdStageActualDate;
+  
+  return (
+    <div className={cn(
+      date ? "text-emerald-600 dark:text-emerald-400 font-medium" : "",
+      isSelected && date && "text-emerald-700 dark:text-emerald-300 font-bold"
+    )}>
+      <DateDisplay date={date} isSelected={isSelected && !date} />
+      {date && <span className="text-xs block">✓ 완료</span>}
+    </div>
+  );
+}
+
 function AttachmentCountCell({ count, documentId }: { count: number, documentId: number }) {
   const { selectedDocumentId } = React.useContext(DocumentSelectionContext);
   const isSelected = selectedDocumentId === documentId;
-- 
cgit v1.2.3

