summaryrefslogtreecommitdiff
path: root/lib/vendor-investigation/table/investigation-table-columns.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-10-30 10:44:47 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-10-30 10:44:47 +0000
commit871a6d46a769cbe9e87146434f4bcb2d6792ab81 (patch)
treeacc25b3645e2253625e68f3721a203131ff4f3c4 /lib/vendor-investigation/table/investigation-table-columns.tsx
parent17b9d2016be7c0ab6571de6aba36b3f4ea37bdb1 (diff)
(최겸) 구매 PQ/실사 재개발(테스트 필요), 정규업체등록 결재 개발, 실사 의뢰 결재 후처리 등
Diffstat (limited to 'lib/vendor-investigation/table/investigation-table-columns.tsx')
-rw-r--r--lib/vendor-investigation/table/investigation-table-columns.tsx60
1 files changed, 51 insertions, 9 deletions
diff --git a/lib/vendor-investigation/table/investigation-table-columns.tsx b/lib/vendor-investigation/table/investigation-table-columns.tsx
index 28ecc2ec..9f4944c3 100644
--- a/lib/vendor-investigation/table/investigation-table-columns.tsx
+++ b/lib/vendor-investigation/table/investigation-table-columns.tsx
@@ -5,7 +5,7 @@ import { ColumnDef } from "@tanstack/react-table"
import { Checkbox } from "@/components/ui/checkbox"
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
-import { Edit, Ellipsis, AlertTriangle } from "lucide-react"
+import { Edit, Ellipsis, AlertTriangle, FileEdit, Eye } from "lucide-react"
import {
DropdownMenu,
DropdownMenuContent,
@@ -22,7 +22,7 @@ import {
vendorInvestigationsColumnsConfig,
VendorInvestigationsViewWithContacts
} from "@/config/vendorInvestigationsColumnsConfig"
-
+import { useRouter } from "next/navigation"
// Props for the column generator function
interface GetVendorInvestigationsColumnsProps {
setRowAction?: React.Dispatch<
@@ -93,8 +93,11 @@ export function getColumns({
id: "actions",
enableHiding: false,
cell: ({ row }) => {
+ const router = useRouter()
const isCanceled = row.original.investigationStatus === "CANCELED"
const isCompleted = row.original.investigationStatus === "COMPLETED"
+ const canReviewPQ = !isCanceled && row.original.investigationStatus === "PLANNED" && !!row.original.pqSubmissionId
+ const reviewUrl = `/evcp/pq_new/${row.original.vendorId}/${row.original.pqSubmissionId}`
const canRequestSupplement = (row.original.investigationMethod === "PRODUCT_INSPECTION" ||
row.original.investigationMethod === "SITE_VISIT_EVAL") &&
row.original.investigationStatus === "COMPLETED" &&
@@ -116,23 +119,60 @@ export function getColumns({
<DropdownMenuContent align="end" className="w-48">
<DropdownMenuItem
onSelect={() => {
- if (!isCanceled && row.original.investigationStatus === "PLANNED") {
- setRowAction?.({ type: "update-progress", row })
+ if (!canReviewPQ) return
+ if (router) {
+ router.push(reviewUrl)
+ } else if (typeof window !== "undefined") {
+ window.location.href = reviewUrl
}
}}
- disabled={isCanceled || row.original.investigationStatus !== "PLANNED"}
+ disabled={!canReviewPQ}
+ >
+ <FileEdit className="mr-2 h-4 w-4" />
+ 검토
+ </DropdownMenuItem>
+ <DropdownMenuItem
+ onSelect={() => {
+ if (!isCanceled && row.original.investigationStatus === "QM_REVIEW_CONFIRMED") {
+ (setRowAction as any)?.({ type: "update-progress", row })
+ }
+ }}
+ disabled={isCanceled || row.original.investigationStatus !== "QM_REVIEW_CONFIRMED"}
>
<Edit className="mr-2 h-4 w-4" />
실사 진행 관리
</DropdownMenuItem>
<DropdownMenuItem
- onSelect={() => {
- if (!isCanceled && row.original.investigationStatus === "IN_PROGRESS") {
- setRowAction?.({ type: "update-result", row })
+ onSelect={async () => {
+ if (isCanceled || row.original.investigationStatus !== "IN_PROGRESS") return
+ // 구매자체평가일 경우 결과입력 비활성화
+ if (row.original.investigationMethod === "PURCHASE_SELF_EVAL") {
+ return
+ }
+ // 방문/제품 평가 시: 벤더 회신 여부 확인 후 열기 (없으면 토스트)
+ if (
+ row.original.investigationMethod === "PRODUCT_INSPECTION" ||
+ row.original.investigationMethod === "SITE_VISIT_EVAL"
+ ) {
+ try {
+ const { getSiteVisitRequestAction } = await import("@/lib/site-visit/service")
+ const req = await getSiteVisitRequestAction(row.original.investigationId)
+ const canProceed = req.success && req.data && req.data.status === "VENDOR_SUBMITTED"
+ if (!canProceed) {
+ const { toast } = await import("sonner")
+ toast.error("협력업체 방문실사 정보 회신 전에는 결과 입력이 불가합니다.")
+ return
+ }
+ } catch {}
}
+ ;(setRowAction as any)?.({ type: "update-result", row })
}}
- disabled={isCanceled || row.original.investigationStatus !== "IN_PROGRESS"}
+ disabled={
+ isCanceled ||
+ row.original.investigationStatus !== "IN_PROGRESS" ||
+ row.original.investigationMethod === "PURCHASE_SELF_EVAL"
+ }
>
<Edit className="mr-2 h-4 w-4" />
실사 결과 입력
@@ -377,6 +417,8 @@ function formatStatus(status: string): string {
switch (status) {
case "PLANNED":
return "계획됨"
+ case "QM_REVIEW_CONFIRMED":
+ return "QM 검토 확정"
case "IN_PROGRESS":
return "진행 중"
case "COMPLETED":