summaryrefslogtreecommitdiff
path: root/lib/general-contracts/main
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-15 10:14:09 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-15 10:14:09 +0000
commitd7585b3f2ea941ee807c1e87bbc833265a193c78 (patch)
tree70d659154ed5feeebc312a5bf850ceecc1c4c441 /lib/general-contracts/main
parentdd831478a3ab5ac7182903d41aa4b3e47f28224f (diff)
(최겸) 구매 일반계약 및 상세, PO 전달 구현
Diffstat (limited to 'lib/general-contracts/main')
-rw-r--r--lib/general-contracts/main/create-general-contract-dialog.tsx20
-rw-r--r--lib/general-contracts/main/general-contract-update-sheet.tsx7
-rw-r--r--lib/general-contracts/main/general-contracts-table-columns.tsx31
-rw-r--r--lib/general-contracts/main/general-contracts-table-toolbar-actions.tsx10
4 files changed, 34 insertions, 34 deletions
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<UpdateContractFormData>({
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
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
- <DropdownMenuItem onClick={() => setRowAction({ row, type: "view" })}>
- <Eye className="mr-2 h-4 w-4" />
- 상세보기
- </DropdownMenuItem>
- <DropdownMenuItem onClick={() => setRowAction({ row, type: "update" })}>
- <Edit className="mr-2 h-4 w-4" />
- 수정
- </DropdownMenuItem>
- <DropdownMenuSeparator />
+ {row.original.status !== 'Contract Delete' && (
+ <>
+ <DropdownMenuItem onClick={() => setRowAction({ row, type: "view" })}>
+ <Eye className="mr-2 h-4 w-4" />
+ 상세보기
+ </DropdownMenuItem>
+ <DropdownMenuItem onClick={() => setRowAction({ row, type: "update" })}>
+ <Edit className="mr-2 h-4 w-4" />
+ 수정
+ </DropdownMenuItem>
+ </>
+ )}
</DropdownMenuContent>
</DropdownMenu>
),
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 {
// 선택된 모든 계약을 폐기 처리