diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-21 06:04:56 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-21 06:04:56 +0000 |
| commit | b845ccde2910894911233cda273657d2b52e63f9 (patch) | |
| tree | f12032484952225d099b3399f800d912bfdbda88 /lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx | |
| parent | eacfa3f36274e495838a7114d68ff80a0f257a6a (diff) | |
(임수민) 준법 Red Flag 수정
Diffstat (limited to 'lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx')
| -rw-r--r-- | lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx | 71 |
1 files changed, 69 insertions, 2 deletions
diff --git a/lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx b/lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx index 3e965fac..daa410f0 100644 --- a/lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx +++ b/lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx @@ -2,7 +2,7 @@ import * as React from "react" import { type Table } from "@tanstack/react-table" -import { Download, FileDown, Mail, CheckCircle, AlertTriangle, Send, Check, FileSignature, FileText, ExternalLink, Globe } from "lucide-react" +import { Download, FileDown, Mail, CheckCircle, AlertTriangle, Send, Check, FileSignature, FileText, ExternalLink, Globe, Flag } from "lucide-react" import { exportTableToExcel } from "@/lib/export" import { downloadFile } from "@/lib/file-download" @@ -21,13 +21,21 @@ import { Badge } from "@/components/ui/badge" import { prepareFinalApprovalAction, quickFinalApprovalAction, resendContractsAction, updateLegalReviewStatusFromSSLVW } from "../service" import { BasicContractSignDialog } from "../vendor-table/basic-contract-sign-dialog" import { SSLVWPurInqReqDialog } from "@/components/common/legal/sslvw-pur-inq-req-dialog" +import { requestRedFlagResolution } from "@/lib/compliance/red-flag-resolution" interface BasicContractDetailTableToolbarActionsProps { table: Table<BasicContractView> gtcData?: Record<number, { gtcDocumentId: number | null; hasComments: boolean }> + redFlagData?: Record<number, boolean> + isComplianceTemplate?: boolean } -export function BasicContractDetailTableToolbarActions({ table, gtcData = {} }: BasicContractDetailTableToolbarActionsProps) { +export function BasicContractDetailTableToolbarActions({ + table, + gtcData = {}, + redFlagData = {}, + isComplianceTemplate = false +}: BasicContractDetailTableToolbarActionsProps) { // 선택된 행들 가져오기 const selectedRows = table.getSelectedRowModel().rows const hasSelectedRows = selectedRows.length > 0 @@ -383,6 +391,43 @@ export function BasicContractDetailTableToolbarActions({ table, gtcData = {} }: } } + // RED FLAG 해소요청 가능 여부 + const canRequestRedFlagResolution = hasSelectedRows && isComplianceTemplate && selectedRows.some(row => { + const contract = row.original + return redFlagData[contract.id] === true + }) + + // RED FLAG 해소요청 가능한 계약서들 + const redFlagResolutionContracts = selectedRows + .map(row => row.original) + .filter(contract => redFlagData[contract.id] === true) + + // RED FLAG 해소요청 + const handleRequestRedFlagResolution = async () => { + if (!canRequestRedFlagResolution) { + toast.error("RED FLAG가 있는 계약서를 선택해주세요") + return + } + + setLoading(true) + try { + const contractIds = redFlagResolutionContracts.map(c => c.id) + const result = await requestRedFlagResolution(contractIds) + + if (result.success) { + toast.success(result.message) + table.toggleAllPageRowsSelected(false) + } else { + toast.error(result.message) + } + } catch (error) { + console.error("RED FLAG 해소요청 오류:", error) + toast.error("RED FLAG 해소요청 중 오류가 발생했습니다") + } finally { + setLoading(false) + } + } + // 법무검토 요청 링크 목록 const legalReviewLinks = [ { @@ -445,6 +490,28 @@ export function BasicContractDetailTableToolbarActions({ table, gtcData = {} }: </span> </Button> + {/* RED FLAG 해소요청 버튼 (준법서약 템플릿만) */} + {isComplianceTemplate && ( + <Button + variant="outline" + size="sm" + onClick={handleRequestRedFlagResolution} + disabled={!canRequestRedFlagResolution || loading} + className="gap-2" + title={!hasSelectedRows + ? "계약서를 선택해주세요" + : !canRequestRedFlagResolution + ? "RED FLAG가 있는 계약서를 선택해주세요" + : `${redFlagResolutionContracts.length}건 RED FLAG 해소요청` + } + > + <Flag className="size-4" aria-hidden="true" /> + <span className="hidden sm:inline"> + RED FLAG 해소요청 {hasSelectedRows ? `(${redFlagResolutionContracts.length})` : ''} + </span> + </Button> + )} + {/* 재요청 버튼 */} <Button variant="outline" |
