summaryrefslogtreecommitdiff
path: root/lib/avl/table/standard-avl-table.tsx
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-10-14 14:25:28 +0900
committerjoonhoekim <26rote@gmail.com>2025-10-14 14:25:28 +0900
commit40250c61031263606dd073ce7056a3e8e27f18d0 (patch)
tree0ea566507b3b341825e9825f9cee43f470957292 /lib/avl/table/standard-avl-table.tsx
parent6d3752d34dfdf2c3870b9f6ffe431cfa98e302c9 (diff)
(김준회) AVL 구매요구사항 수정
- AVL 상세 엑셀 익스포트 추가 - 레코드 이동 멀티선택 추가 - 최종확정처리 오류 수정 - 프로젝트 AVL에 H/T 구분 추가
Diffstat (limited to 'lib/avl/table/standard-avl-table.tsx')
-rw-r--r--lib/avl/table/standard-avl-table.tsx40
1 files changed, 24 insertions, 16 deletions
diff --git a/lib/avl/table/standard-avl-table.tsx b/lib/avl/table/standard-avl-table.tsx
index 06fa6931..c638bd7f 100644
--- a/lib/avl/table/standard-avl-table.tsx
+++ b/lib/avl/table/standard-avl-table.tsx
@@ -27,7 +27,7 @@ import { Search } from "lucide-react"
import { toast } from "sonner"
import { standardAvlColumns } from "./standard-avl-table-columns"
import { AvlVendorAddAndModifyDialog } from "./avl-vendor-add-and-modify-dialog"
-import { createAvlVendorInfo, updateAvlVendorInfo, deleteAvlVendorInfo, finalizeStandardAvl } from "../service"
+import { createAvlVendorInfo, updateAvlVendorInfo, deleteAvlVendorInfo, finalizeStandardAvl, getStandardAvlVendorInfoCount } from "../service"
import { AvlVendorInfoInput } from "../types"
import { useSession } from "next-auth/react"
import { ShipTypeSelector, ShipTypeItem } from "@/components/common/ship-type"
@@ -341,6 +341,7 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable
// 최종 확정 다이얼로그 상태
const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false)
+ const [totalVendorInfoCount, setTotalVendorInfoCount] = React.useState<number>(0)
// 최종 확정 핸들러 (표준 AVL)
const handleFinalizeStandardAvl = React.useCallback(async () => {
@@ -350,22 +351,31 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable
return
}
- if (data.length === 0) {
+ // 2. 실제 확정될 레코드 건수 조회
+ const standardAvlInfo = {
+ constructionSector: searchConstructionSector,
+ shipType: selectedShipType?.CD || "",
+ avlKind: searchAvlKind,
+ htDivision: searchHtDivision
+ }
+
+ const count = await getStandardAvlVendorInfoCount(standardAvlInfo)
+
+ if (count === 0) {
toast.error("확정할 표준 AVL 벤더 정보가 없습니다.")
return
}
- // 2. 확인 다이얼로그 열기
+ setTotalVendorInfoCount(count)
+
+ // 3. 확인 다이얼로그 열기
setIsConfirmDialogOpen(true)
- }, [isAllSearchConditionsSelected, data.length])
+ }, [isAllSearchConditionsSelected, searchConstructionSector, selectedShipType, searchAvlKind, searchHtDivision])
// 실제 최종 확정 실행 함수
const executeFinalizeStandardAvl = React.useCallback(async () => {
try {
- // 3. 현재 데이터의 모든 ID 수집 (전체 레코드 기준)
- const avlVendorInfoIds = data.map(item => item.id)
-
- // 4. 최종 확정 실행
+ // 최종 확정 실행 (서버에서 DB의 모든 레코드를 조회하여 확정)
const standardAvlInfo = {
constructionSector: searchConstructionSector,
shipType: selectedShipType?.CD || "",
@@ -375,17 +385,16 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable
const result = await finalizeStandardAvl(
standardAvlInfo,
- avlVendorInfoIds,
sessionData?.user?.name || ""
)
if (result.success) {
toast.success(result.message)
- // 5. 데이터 새로고침
+ // 데이터 새로고침
loadData({})
- // 6. 선택 해제
+ // 선택 해제
table.toggleAllPageRowsSelected(false)
} else {
toast.error(result.message)
@@ -396,7 +405,7 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable
} finally {
setIsConfirmDialogOpen(false)
}
- }, [searchConstructionSector, selectedShipType, searchAvlKind, searchHtDivision, data, table, loadData, sessionData?.user?.name])
+ }, [searchConstructionSector, selectedShipType, searchAvlKind, searchHtDivision, table, loadData, sessionData?.user?.name])
// 초기 데이터 로드 (검색 조건이 모두 입력되었을 때만)
React.useEffect(() => {
@@ -626,10 +635,9 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable
<div>• 선종: {selectedShipType?.CD || ""}</div>
<div>• AVL종류: {searchAvlKind}</div>
<div>• H/T 구분: {searchHtDivision}</div>
- <div>• 벤더 정보: {data.length}개 (전체 레코드)</div>
- {/* <div className="text-amber-600 font-medium mt-4">
- ⚠️ 확정 후 내용 수정을 필요로 하는 경우 동일 건을 다시 최종확정해 revision 처리로 수정해야 합니다.
- </div> */}
+ <div className="font-semibold text-primary mt-4">
+ • 확정될 벤더 정보: {totalVendorInfoCount}개
+ </div>
</div>
<DialogFooter>
<Button variant="outline" onClick={() => setIsConfirmDialogOpen(false)}>