summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-03 19:40:47 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-03 19:40:47 +0900
commit16dcdfe67bd7488a9b2ee1e0389602ec9dd7976b (patch)
tree851ffccce5499bb0f9e46755f429d5601d13c637 /lib
parent6a1740b9f89efe724624e5acfd8588bf42f6c906 (diff)
(김준회) dolce: Document Type 옆 숫자: project 필터링 대응하도록 개선
Diffstat (limited to 'lib')
-rw-r--r--lib/vendor-document-list/enhanced-document-service.ts36
-rw-r--r--lib/vendor-document-list/ship/enhanced-documents-table.tsx32
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>