summaryrefslogtreecommitdiff
path: root/lib/vendor-document-list/ship
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-04 13:39:00 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-04 13:39:00 +0900
commitd55bc64eb42f3b3072a0df4697946e6399cb1e4e (patch)
tree5045d070aacee74fcc752933246a8c448fce15f5 /lib/vendor-document-list/ship
parent637ed74a18cda35d745375244e45fe6911bf83f4 (diff)
(김준회) dolce: 이유란프로 B4 스테이지(일정) 관련 요구사항 반영
Diffstat (limited to 'lib/vendor-document-list/ship')
-rw-r--r--lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx84
-rw-r--r--lib/vendor-document-list/ship/enhanced-documents-table.tsx8
2 files changed, 88 insertions, 4 deletions
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;
diff --git a/lib/vendor-document-list/ship/enhanced-documents-table.tsx b/lib/vendor-document-list/ship/enhanced-documents-table.tsx
index 13f8f8d4..d92f16dd 100644
--- a/lib/vendor-document-list/ship/enhanced-documents-table.tsx
+++ b/lib/vendor-document-list/ship/enhanced-documents-table.tsx
@@ -100,10 +100,10 @@ export function SimplifiedDocumentsTable({
}
}, [data, onDataLoaded])
- // 🔥 컬럼 메모이제이션 최적화
+ // 🔥 컬럼 메모이제이션 최적화 (b4FilterType에 따라 동적 변경)
const columns = React.useMemo(
- () => getSimplifiedDocumentColumns({}),
- []
+ () => getSimplifiedDocumentColumns({ b4FilterType }),
+ [b4FilterType]
)
// 🔥 필터 필드들을 메모이제이션
@@ -391,7 +391,7 @@ export function SimplifiedDocumentsTable({
className="gap-2"
>
<FileInput className="h-4 w-4" />
- GTT Deliverable
+ GTT Deliverables
<Badge variant="secondary" className="ml-1">
{b4Stats.gttDeliverableCount}
</Badge>