diff options
| -rw-r--r-- | lib/vendor-document-list/enhanced-document-service.ts | 36 | ||||
| -rw-r--r-- | lib/vendor-document-list/ship/enhanced-documents-table.tsx | 32 |
2 files changed, 55 insertions, 13 deletions
diff --git a/lib/vendor-document-list/enhanced-document-service.ts b/lib/vendor-document-list/enhanced-document-service.ts index bafa61dc..6f9eda01 100644 --- a/lib/vendor-document-list/enhanced-document-service.ts +++ b/lib/vendor-document-list/enhanced-document-service.ts @@ -1187,14 +1187,34 @@ export async function getDocumentDetails(documentId: number) { // B4 세부 통계 계산 (GTT Deliverable vs SHI Input) const b4Stats = { - gttDeliverableCount: documents.filter(doc => + gttDeliverableCount: documents.filter(doc => doc.drawingKind === 'B4' && doc.drawingMoveGbn === '도면입수' ).length, - shiInputCount: documents.filter(doc => + shiInputCount: documents.filter(doc => doc.drawingKind === 'B4' && doc.drawingMoveGbn === '도면제출' ).length, } + // 🔥 프로젝트별 B4 통계 계산 (전체 개수를 기반으로) + const projectB4StatsMap = new Map<string, { gttDeliverableCount: number, shiInputCount: number }>() + documents.forEach(doc => { + if (doc.drawingKind === 'B4') { + const code = doc.projectCode || 'Unknown' + const current = projectB4StatsMap.get(code) || { gttDeliverableCount: 0, shiInputCount: 0 } + if (doc.drawingMoveGbn === '도면입수') { + current.gttDeliverableCount++ + } else if (doc.drawingMoveGbn === '도면제출') { + current.shiInputCount++ + } + projectB4StatsMap.set(code, current) + } + }) + + // 프로젝트별 B4 통계를 배열로 변환 + const projectB4Stats = Array.from(projectB4StatsMap.entries()) + .sort((a, b) => a[0].localeCompare(b[0])) + .map(([code, stats]) => ({ code, ...stats })) + // 🔥 프로젝트 코드별 통계 계산 const projectCodeMap = new Map<string, number>() documents.forEach(doc => { @@ -1217,15 +1237,17 @@ export async function getDocumentDetails(documentId: number) { primaryDrawingKind: primaryDrawingKind || null, b4Stats, // B4 세부 통계 추가 projectCodeStats, // 🔥 프로젝트 코드 통계 추가 + projectB4Stats, // 🔥 프로젝트별 B4 통계 추가 } } catch (err) { console.error("Error fetching user vendor document stats:", err) - return { - stats: {}, - totalDocuments: 0, - primaryDrawingKind: null, + return { + stats: {}, + totalDocuments: 0, + primaryDrawingKind: null, b4Stats: { gttDeliverableCount: 0, shiInputCount: 0 }, - projectCodeStats: [] + projectCodeStats: [], + projectB4Stats: [] } } } diff --git a/lib/vendor-document-list/ship/enhanced-documents-table.tsx b/lib/vendor-document-list/ship/enhanced-documents-table.tsx index 5b3b392d..13f8f8d4 100644 --- a/lib/vendor-document-list/ship/enhanced-documents-table.tsx +++ b/lib/vendor-document-list/ship/enhanced-documents-table.tsx @@ -69,7 +69,7 @@ export function SimplifiedDocumentsTable({ const statsData = React.useMemo(() => statsResult as Awaited<ReturnType<typeof getUserVendorDocumentStats>>, [statsResult]) const { data, pageCount, drawingKind } = documentData - const { primaryDrawingKind, b4Stats: serverB4Stats, projectCodeStats: serverProjectCodeStats } = statsData + const { primaryDrawingKind, projectCodeStats: serverProjectCodeStats, projectB4Stats: serverProjectB4Stats } = statsData // 🔥 URL searchParams를 통한 필터 상태 관리 const [{ b4FilterType, projectCode, page }, setQueryStates] = useQueryStates( @@ -282,11 +282,31 @@ export function SimplifiedDocumentsTable({ return activeDrawingKind ? DRAWING_KIND_INFO[activeDrawingKind] : null }, [activeDrawingKind]) - // 🔥 B4 문서 통계 - 서버에서 받아온 전체 통계 사용 + // 🔥 B4 문서 통계 - 프로젝트 필터링에 따라 동적으로 계산 (서버에서 받아온 전체 통계 기반) const b4Stats = React.useMemo(() => { - if (!hasB4Documents || !serverB4Stats) return null - return serverB4Stats - }, [hasB4Documents, serverB4Stats]) + if (!hasB4Documents || !serverProjectB4Stats) return null + + // 선택된 프로젝트에 따라 B4 통계 계산 + if (projectCode === 'all') { + // 전체 프로젝트의 B4 통계 + const totalGttDeliverable = serverProjectB4Stats.reduce((sum, stat) => sum + stat.gttDeliverableCount, 0) + const totalShiInput = serverProjectB4Stats.reduce((sum, stat) => sum + stat.shiInputCount, 0) + return { + gttDeliverableCount: totalGttDeliverable, + shiInputCount: totalShiInput, + } + } else { + // 특정 프로젝트의 B4 통계 + const projectStats = serverProjectB4Stats.find(stat => stat.code === projectCode) + return projectStats ? { + gttDeliverableCount: projectStats.gttDeliverableCount, + shiInputCount: projectStats.shiInputCount, + } : { + gttDeliverableCount: 0, + shiInputCount: 0, + } + } + }, [hasB4Documents, serverProjectB4Stats, projectCode]) return ( <div className="w-full space-y-4"> @@ -325,7 +345,7 @@ export function SimplifiedDocumentsTable({ <span>All Projects</span> </div> </SelectItem> - {projectCodeStats.filter(({ code }) => code !== 'Unknown').map(({ code, count }) => ( + {projectCodeStats.filter(({ code }) => code !== 'Unknown').map(({ code }) => ( <SelectItem key={code} value={code}> <div className="flex items-center justify-between w-full"> <span className="font-mono">{code}</span> |
