summaryrefslogtreecommitdiff
path: root/lib/avl/table/project-avl-table.tsx
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-09-22 18:59:13 +0900
committerjoonhoekim <26rote@gmail.com>2025-09-22 18:59:13 +0900
commitba35e67845f935c8ce0151c9ef1fefa0b0510faf (patch)
treed05eb27fab2acc54a839b2590c89e860d58fb747 /lib/avl/table/project-avl-table.tsx
parente4bd037d158513e45373ad9e1ef13f71af12162a (diff)
(김준회) AVL 피드백 반영 (이진용 프로 건)
Diffstat (limited to 'lib/avl/table/project-avl-table.tsx')
-rw-r--r--lib/avl/table/project-avl-table.tsx65
1 files changed, 51 insertions, 14 deletions
diff --git a/lib/avl/table/project-avl-table.tsx b/lib/avl/table/project-avl-table.tsx
index fc8f0f5e..7a0fda2e 100644
--- a/lib/avl/table/project-avl-table.tsx
+++ b/lib/avl/table/project-avl-table.tsx
@@ -4,6 +4,14 @@ import * as React from "react"
import { forwardRef, useImperativeHandle, useLayoutEffect, useMemo } from "react"
import { DataTable } from "@/components/data-table/data-table"
import { Button } from "@/components/ui/button"
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from "@/components/ui/dialog"
import { AvlVendorAddAndModifyDialog } from "./avl-vendor-add-and-modify-dialog"
import { getProjectAvlVendorInfo, createAvlVendorInfo, updateAvlVendorInfo, deleteAvlVendorInfo, finalizeProjectAvl } from "../service"
import { useReactTable, getCoreRowModel, getPaginationRowModel, getSortedRowModel, getFilteredRowModel } from "@tanstack/react-table"
@@ -384,6 +392,9 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro
}
}, [table, loadData])
+ // 최종 확정 다이얼로그 상태
+ const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false)
+
// 최종 확정 핸들러
const handleFinalizeAvl = React.useCallback(async () => {
// 1. 필수 조건 검증
@@ -402,27 +413,20 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro
return
}
- // 2. 사용자 확인
- const confirmed = window.confirm(
- `현재 프로젝트(${localProjectCode})의 AVL을 최종 확정하시겠습니까?\n\n` +
- `- 프로젝트명: ${projectInfo.projectName}\n` +
- `- 벤더 정보: ${data.length}개\n` +
- `- 공사부문: ${projectInfo.constructionSector}\n` +
- `- 선종: ${projectInfo.shipType}\n` +
- `- H/T 구분: ${projectInfo.htDivision}\n\n` +
- `확정 후에는 수정이 어려울 수 있습니다.`
- )
-
- if (!confirmed) return
+ // 2. 확인 다이얼로그 열기
+ setIsConfirmDialogOpen(true)
+ }, [localProjectCode, projectInfo, data.length])
+ // 실제 최종 확정 실행 함수
+ const executeFinalizeAvl = React.useCallback(async () => {
try {
- // 3. 현재 데이터의 모든 ID 수집
+ // 3. 현재 데이터의 모든 ID 수집 (전체 레코드 기준)
const avlVendorInfoIds = data.map(item => item.id)
// 4. 최종 확정 실행
const result = await finalizeProjectAvl(
localProjectCode,
- projectInfo,
+ projectInfo!,
avlVendorInfoIds,
sessionData?.user?.name || ""
)
@@ -441,6 +445,8 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro
} catch (error) {
console.error("AVL 최종 확정 실패:", error)
toast.error("AVL 최종 확정 중 오류가 발생했습니다.")
+ } finally {
+ setIsConfirmDialogOpen(false)
}
}, [localProjectCode, projectInfo, data, table, loadData, sessionData?.user?.name])
@@ -595,6 +601,37 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro
isTemplate={false} // 프로젝트 AVL 모드
initialProjectCode={localProjectCode}
/>
+
+ {/* 최종 확정 확인 다이얼로그 */}
+ <Dialog open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>
+ <DialogContent>
+ <DialogHeader>
+ <DialogTitle>프로젝트 AVL 최종 확정</DialogTitle>
+ <DialogDescription>
+ 현재 프로젝트의 AVL을 최종 확정하시겠습니까?
+ </DialogDescription>
+ </DialogHeader>
+ <div className="space-y-2 text-sm">
+ <div>• 프로젝트 코드: {localProjectCode}</div>
+ <div>• 프로젝트명: {projectInfo?.projectName || ""}</div>
+ <div>• 공사부문: {projectInfo?.constructionSector || ""}</div>
+ <div>• 선종: {projectInfo?.shipType || ""}</div>
+ <div>• H/T 구분: {projectInfo?.htDivision || ""}</div>
+ <div>• 벤더 정보: {data.length}개 (전체 레코드)</div>
+ {/* <div className="text-amber-600 font-medium mt-4">
+ ⚠️ 확정 후 내용 수정을 필요로 하는 경우 동일 건을 다시 최종확정해 revision 처리로 수정해야 합니다.
+ </div> */}
+ </div>
+ <DialogFooter>
+ <Button variant="outline" onClick={() => setIsConfirmDialogOpen(false)}>
+ 취소
+ </Button>
+ <Button onClick={executeFinalizeAvl}>
+ 최종 확정
+ </Button>
+ </DialogFooter>
+ </DialogContent>
+ </Dialog>
</div>
)
})