summaryrefslogtreecommitdiff
path: root/lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-11-21 06:04:56 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-11-21 06:04:56 +0000
commitb845ccde2910894911233cda273657d2b52e63f9 (patch)
treef12032484952225d099b3399f800d912bfdbda88 /lib/basic-contract/status-detail/basic-contract-detail-table-toolbar-actions.tsx
parenteacfa3f36274e495838a7114d68ff80a0f257a6a (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.tsx71
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"