From d7585b3f2ea941ee807c1e87bbc833265a193c78 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Mon, 15 Sep 2025 10:14:09 +0000 Subject: (최겸) 구매 일반계약 및 상세, PO 전달 구현 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/create-general-contract-dialog.tsx | 20 ++++---------- .../main/general-contract-update-sheet.tsx | 7 +++-- .../main/general-contracts-table-columns.tsx | 31 +++++++++++++--------- .../general-contracts-table-toolbar-actions.tsx | 10 +++---- 4 files changed, 34 insertions(+), 34 deletions(-) (limited to 'lib/general-contracts/main') diff --git a/lib/general-contracts/main/create-general-contract-dialog.tsx b/lib/general-contracts/main/create-general-contract-dialog.tsx index b2f538c3..3eb8b11c 100644 --- a/lib/general-contracts/main/create-general-contract-dialog.tsx +++ b/lib/general-contracts/main/create-general-contract-dialog.tsx @@ -2,7 +2,6 @@ import * as React from "react" import { useRouter } from "next/navigation" -import { useSession } from "next-auth/react" import { Plus } from "lucide-react" import { toast } from "sonner" import { Button } from "@/components/ui/button" @@ -29,9 +28,9 @@ import { createContract, getVendors } from "@/lib/general-contracts/service" import { GENERAL_CONTRACT_CATEGORIES, GENERAL_CONTRACT_TYPES, - GENERAL_EXECUTION_METHODS, - GENERAL_CONTRACT_SCOPES + GENERAL_EXECUTION_METHODS } from "@/lib/general-contracts/types" +import { useSession } from "next-auth/react" interface CreateContractForm { contractNumber: string @@ -91,15 +90,6 @@ export function CreateGeneralContractDialog() { fetchVendors() }, []) - const generateContractNumber = () => { - const now = new Date() - const year = now.getFullYear() - const month = String(now.getMonth() + 1).padStart(2, '0') - const day = String(now.getDate()).padStart(2, '0') - const time = String(now.getHours()).padStart(2, '0') + String(now.getMinutes()).padStart(2, '0') - return `CT${year}${month}${day}${time}` - } - const handleSubmit = async () => { // 필수 필드 검증 if (!form.name || !form.category || !form.type || !form.executionMethod || @@ -116,7 +106,7 @@ export function CreateGeneralContractDialog() { setIsLoading(true) const contractData = { - contractNumber: generateContractNumber(), + contractNumber: '', name: form.name, category: form.category, type: form.type, @@ -129,8 +119,8 @@ export function CreateGeneralContractDialog() { // contractScope: form.contractScope, // specificationType: form.specificationType, status: 'Draft', - registeredById: session?.user?.id ? parseInt(session.user.id) : 3, - lastUpdatedById: session?.user?.id ? parseInt(session.user.id) : 3, + registeredById: session?.user?.id || 1, + lastUpdatedById: session?.user?.id || 1, notes: form.notes, linkedRfqOrItb: form.linkedRfqOrItb, linkedBidNumber: form.linkedBidNumber, diff --git a/lib/general-contracts/main/general-contract-update-sheet.tsx b/lib/general-contracts/main/general-contract-update-sheet.tsx index 57e4fe16..064fded3 100644 --- a/lib/general-contracts/main/general-contract-update-sheet.tsx +++ b/lib/general-contracts/main/general-contract-update-sheet.tsx @@ -38,7 +38,7 @@ import { } from "@/lib/general-contracts/types" import { updateContract } from "../service" import { GeneralContractListItem } from "./general-contracts-table-columns" - +import { useSession } from "next-auth/react" const updateContractSchema = z.object({ category: z.string().min(1, "계약구분을 선택해주세요"), type: z.string().min(1, "계약종류를 선택해주세요"), @@ -70,7 +70,8 @@ export function GeneralContractUpdateSheet({ onSuccess, }: GeneralContractUpdateSheetProps) { const [isSubmitting, setIsSubmitting] = React.useState(false) - + const session = useSession() + const userId = session.data?.user?.id ? Number(session.data.user.id) : null const form = useForm({ resolver: zodResolver(updateContractSchema), defaultValues: { @@ -141,6 +142,8 @@ export function GeneralContractUpdateSheet({ linkedRfqOrItb: data.linkedRfqOrItb, linkedPoNumber: data.linkedPoNumber, linkedBidNumber: data.linkedBidNumber, + vendorId: contract.vendorId, + lastUpdatedById: userId, }) toast.success("계약 정보가 성공적으로 수정되었습니다.") diff --git a/lib/general-contracts/main/general-contracts-table-columns.tsx b/lib/general-contracts/main/general-contracts-table-columns.tsx index 394a2cf5..d7854ee6 100644 --- a/lib/general-contracts/main/general-contracts-table-columns.tsx +++ b/lib/general-contracts/main/general-contracts-table-columns.tsx @@ -46,6 +46,7 @@ export interface GeneralContractListItem { linkedBidNumber?: string lastUpdatedAt: string notes?: string + vendorId?: number vendorName?: string vendorCode?: string managerName?: string @@ -188,13 +189,16 @@ const getSelectionMethodText = (method?: string) => { // 금액 포맷팅 const formatCurrency = (amount: string | number | null | undefined, currency = 'KRW') => { if (!amount && amount !== 0) return '-' - + const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount if (isNaN(numAmount)) return '-' - + + // 통화 코드가 null이거나 유효하지 않은 경우 기본값 사용 + const safeCurrency = currency && typeof currency === 'string' ? currency : 'USD' + return new Intl.NumberFormat('ko-KR', { style: 'currency', - currency: currency, + currency: safeCurrency, minimumFractionDigits: 0, maximumFractionDigits: 0, }).format(numAmount) @@ -527,15 +531,18 @@ export function getGeneralContractsColumns({ setRowAction }: GetColumnsProps): C - setRowAction({ row, type: "view" })}> - - 상세보기 - - setRowAction({ row, type: "update" })}> - - 수정 - - + {row.original.status !== 'Contract Delete' && ( + <> + setRowAction({ row, type: "view" })}> + + 상세보기 + + setRowAction({ row, type: "update" })}> + + 수정 + + + )} ), diff --git a/lib/general-contracts/main/general-contracts-table-toolbar-actions.tsx b/lib/general-contracts/main/general-contracts-table-toolbar-actions.tsx index 28d64824..f16b759a 100644 --- a/lib/general-contracts/main/general-contracts-table-toolbar-actions.tsx +++ b/lib/general-contracts/main/general-contracts-table-toolbar-actions.tsx @@ -56,12 +56,12 @@ export function GeneralContractsTableToolbarActions({ table }: GeneralContractsT return } - // 계약폐기 확인 - const confirmed = window.confirm( - `선택한 ${selectedContracts.length}개 계약을 폐기하시겠습니까?\n계약폐기 후에는 복구할 수 없습니다.` - ) + // // 계약폐기 확인 + // const confirmed = window.confirm( + // `선택한 ${selectedContracts.length}개 계약을 폐기하시겠습니까?\n계약폐기 후에는 복구할 수 없습니다.` + // ) - if (!confirmed) return + // if (!confirmed) return try { // 선택된 모든 계약을 폐기 처리 -- cgit v1.2.3