summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-12-09 04:40:34 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-12-09 04:40:34 +0000
commit3f11179b2c50d7ee56b0cea38778191e3259b941 (patch)
tree4e445e7ee9bf07a50cbe58c5b98a53b46a88d436
parentaedd7f919be958d1dec4e8621804e603d2de0dea (diff)
(임수민) 정규업체 등록관리 등록요청 버튼 수정
-rw-r--r--lib/vendor-regular-registrations/table/vendor-regular-registrations-table-toolbar-actions.tsx58
1 files changed, 50 insertions, 8 deletions
diff --git a/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-toolbar-actions.tsx b/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-toolbar-actions.tsx
index 20cd3427..79a5ae82 100644
--- a/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-toolbar-actions.tsx
+++ b/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-toolbar-actions.tsx
@@ -150,21 +150,22 @@ export function VendorRegularRegistrationsTableToolbarActions({
// 등록요청 핸들러 - Step 1: 정보 입력
const handleRegistrationRequest = () => {
- const approvalReadyRows = selectedRows.filter(row => row.status === "approval_ready");
+ // 모든 항목이 완료된 행 필터링
+ const eligibleRows = selectedRows.filter(row => isAllItemsComplete(row));
- if (approvalReadyRows.length === 0) {
- toast.error("조건충족 상태의 벤더를 선택해주세요.");
+ if (eligibleRows.length === 0) {
+ toast.error("모든 항목이 완료된 벤더를 선택해주세요.");
return;
}
- if (approvalReadyRows.length > 1) {
+ if (eligibleRows.length > 1) {
toast.error("정규업체 등록 요청은 한 번에 하나씩만 가능합니다.");
return;
}
setRegistrationRequestDialog({
open: true,
- registration: approvalReadyRows[0],
+ registration: eligibleRows[0],
});
};
@@ -241,8 +242,49 @@ export function VendorRegularRegistrationsTableToolbarActions({
// CP검토 상태인 선택된 행들 개수
const cpReviewCount = selectedRows.filter(row => row.status === "cp_review").length;
- // 조건충족 상태인 선택된 행들 개수
- const approvalReadyCount = selectedRows.filter(row => row.status === "approval_ready").length;
+ // 모든 항목 완료 여부 체크 함수 (table-columns.tsx의 진행현황 계산 로직과 동일)
+ const isAllItemsComplete = (registration: VendorRegularRegistration): boolean => {
+ // 문서 현황 계산 (국가별 요구사항 적용)
+ const isForeign = registration.country !== 'KR'
+ const requiredDocs = isForeign ? 4 : 3 // 외자: 4개(통장사본 포함), 내자: 3개(통장사본 제외)
+ const submittedDocs = Object.values(registration.documentSubmissions).filter(Boolean).length
+ const incompleteDocs = requiredDocs - submittedDocs
+
+ // 기본계약 현황 계산
+ const totalContracts = registration.basicContracts?.length || 0
+ const completedContracts = registration.basicContracts?.filter(c => c.status === "VENDOR_SIGNED" || c.status === "COMPLETED").length || 0
+ const incompleteContracts = totalContracts - completedContracts
+
+ // 추가정보 현황
+ const additionalInfoCompleted = registration.additionalInfo
+
+ // 전체 미완료 항목 계산 (table-columns.tsx와 동일한 로직)
+ const totalIncomplete =
+ (incompleteDocs > 0 ? 1 : 0) +
+ incompleteContracts +
+ (!additionalInfoCompleted ? 1 : 0)
+
+ const result = totalIncomplete === 0
+
+ // 디버깅 로그
+ if (selectedRows.some(r => r.id === registration.id)) {
+ console.log('등록요청 버튼 활성화 체크:', {
+ registrationId: registration.id,
+ companyName: registration.companyName,
+ status: registration.status,
+ incompleteDocs,
+ incompleteContracts,
+ additionalInfoCompleted,
+ totalIncomplete,
+ isAllComplete: result
+ })
+ }
+
+ return result
+ }
+
+ // 모든 항목이 완료된 선택된 행들 개수
+ const allItemsCompleteCount = selectedRows.filter(row => isAllItemsComplete(row)).length;
return (
<div className="flex items-center gap-2">
@@ -280,7 +322,7 @@ export function VendorRegularRegistrationsTableToolbarActions({
variant="default"
size="sm"
onClick={handleRegistrationRequest}
- disabled={syncLoading.registrationRequest || approvalReadyCount === 0}
+ disabled={syncLoading.registrationRequest || allItemsCompleteCount === 0}
>
<FileText className="mr-2 h-4 w-4" />
{syncLoading.registrationRequest ? "처리 중..." : "등록요청"}