summaryrefslogtreecommitdiff
path: root/lib/vendor-document-list/ship
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-06-27 01:16:20 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-06-27 01:16:20 +0000
commite9897d416b3e7327bbd4d4aef887eee37751ae82 (patch)
treebd20ce6eadf9b21755bd7425492d2d31c7700a0e /lib/vendor-document-list/ship
parent3bf1952c1dad9d479bb8b22031b06a7434d37c37 (diff)
(대표님) 20250627 오전 10시 작업사항
Diffstat (limited to 'lib/vendor-document-list/ship')
-rw-r--r--lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx3
-rw-r--r--lib/vendor-document-list/ship/import-from-dolce-button.tsx82
2 files changed, 71 insertions, 14 deletions
diff --git a/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx b/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx
index ad184378..9c13573c 100644
--- a/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx
+++ b/lib/vendor-document-list/ship/enhanced-doc-table-columns.tsx
@@ -108,6 +108,7 @@ export function getSimplifiedDocumentColumns({
)
},
enableResizing: true,
+ maxSize:300,
meta: {
excelHeader: "문서명"
},
@@ -127,6 +128,8 @@ export function getSimplifiedDocumentColumns({
)
},
enableResizing: true,
+ maxSize:100,
+
meta: {
excelHeader: "프로젝트"
},
diff --git a/lib/vendor-document-list/ship/import-from-dolce-button.tsx b/lib/vendor-document-list/ship/import-from-dolce-button.tsx
index 23d80981..d4728d22 100644
--- a/lib/vendor-document-list/ship/import-from-dolce-button.tsx
+++ b/lib/vendor-document-list/ship/import-from-dolce-button.tsx
@@ -22,6 +22,8 @@ import { Progress } from "@/components/ui/progress"
import { Separator } from "@/components/ui/separator"
import { SimplifiedDocumentsView } from "@/db/schema"
import { ImportStatus } from "../import-service"
+import { useSession } from "next-auth/react"
+import { getContractIdsByVendor } from "../service" // 서버 액션 import
interface ImportFromDOLCEButtonProps {
allDocuments: SimplifiedDocumentsView[] // contractId 대신 문서 배열
@@ -37,31 +39,71 @@ export function ImportFromDOLCEButton({
const [isImporting, setIsImporting] = React.useState(false)
const [importStatusMap, setImportStatusMap] = React.useState<Map<number, ImportStatus>>(new Map())
const [statusLoading, setStatusLoading] = React.useState(false)
+ const [vendorContractIds, setVendorContractIds] = React.useState<number[]>([]) // 서버에서 가져온 contractIds
+ const [loadingVendorContracts, setLoadingVendorContracts] = React.useState(false)
+ const { data: session } = useSession()
- // 문서들에서 contractId들 추출
- const contractIds = React.useMemo(() => {
+ const vendorId = session?.user.companyId;
+
+ // allDocuments에서 추출한 contractIds
+ const documentsContractIds = React.useMemo(() => {
const uniqueIds = [...new Set(allDocuments.map(doc => doc.contractId).filter(Boolean))]
return uniqueIds.sort()
}, [allDocuments])
+ // 최종 사용할 contractIds (allDocuments가 있으면 문서에서, 없으면 vendor의 모든 contracts)
+ const contractIds = React.useMemo(() => {
+ if (documentsContractIds.length > 0) {
+ return documentsContractIds
+ }
+ return vendorContractIds
+ }, [documentsContractIds, vendorContractIds])
+
console.log(contractIds, "contractIds")
+ // vendorId로 contracts 가져오기
+ React.useEffect(() => {
+ const fetchVendorContracts = async () => {
+ // allDocuments가 비어있고 vendorId가 있을 때만 실행
+ if (allDocuments.length === 0 && vendorId) {
+ setLoadingVendorContracts(true)
+ try {
+ const contractIds = await getContractIdsByVendor(vendorId)
+ setVendorContractIds(contractIds)
+ } catch (error) {
+ console.error('Failed to fetch vendor contracts:', error)
+ toast.error('계약 정보를 가져오는데 실패했습니다.')
+ } finally {
+ setLoadingVendorContracts(false)
+ }
+ }
+ }
+
+ fetchVendorContracts()
+ }, [allDocuments.length, vendorId])
+
// 주요 contractId (가장 많이 나타나는 것)
const primaryContractId = React.useMemo(() => {
if (contractIds.length === 1) return contractIds[0]
- const counts = allDocuments.reduce((acc, doc) => {
- const id = doc.contractId || 0
- acc[id] = (acc[id] || 0) + 1
- return acc
- }, {} as Record<number, number>)
+ if (allDocuments.length > 0) {
+ const counts = allDocuments.reduce((acc, doc) => {
+ const id = doc.contractId || 0
+ acc[id] = (acc[id] || 0) + 1
+ return acc
+ }, {} as Record<number, number>)
+
+ return Number(Object.entries(counts)
+ .sort(([,a], [,b]) => b - a)[0]?.[0] || contractIds[0] || 0)
+ }
- return Number(Object.entries(counts)
- .sort(([,a], [,b]) => b - a)[0]?.[0] || contractIds[0] || 0)
+ return contractIds[0] || 0
}, [contractIds, allDocuments])
// 모든 contractId에 대한 상태 조회
const fetchAllImportStatus = async () => {
+ if (contractIds.length === 0) return
+
setStatusLoading(true)
const statusMap = new Map<number, ImportStatus>()
@@ -217,6 +259,10 @@ export function ImportFromDOLCEButton({
}
const getStatusBadge = () => {
+ if (loadingVendorContracts) {
+ return <Badge variant="secondary">계약 정보 로딩 중...</Badge>
+ }
+
if (statusLoading) {
return <Badge variant="secondary">DOLCE 연결 확인 중...</Badge>
}
@@ -231,7 +277,7 @@ export function ImportFromDOLCEButton({
if (totalStats.newDocuments > 0 || totalStats.updatedDocuments > 0) {
return (
- <Badge variant="default" className="gap-1 bg-blue-500 hover:bg-blue-600">
+ <Badge variant="samsung" className="gap-1">
<AlertTriangle className="w-3 h-3" />
업데이트 가능 ({contractIds.length}개 계약)
</Badge>
@@ -249,8 +295,9 @@ export function ImportFromDOLCEButton({
const canImport = totalStats.importEnabled &&
(totalStats.newDocuments > 0 || totalStats.updatedDocuments > 0)
- if (contractIds.length === 0) {
- return null // 계약이 없으면 버튼을 표시하지 않음
+ // 로딩 중이거나 contractIds가 없으면 버튼을 표시하지 않음
+ if (loadingVendorContracts || contractIds.length === 0) {
+ return null
}
return (
@@ -272,8 +319,8 @@ export function ImportFromDOLCEButton({
<span className="hidden sm:inline">DOLCE에서 가져오기</span>
{totalStats.newDocuments + totalStats.updatedDocuments > 0 && (
<Badge
- variant="default"
- className="h-5 w-5 p-0 text-xs flex items-center justify-center bg-blue-500"
+ variant="samsung"
+ className="h-5 w-5 p-0 text-xs flex items-center justify-center"
>
{totalStats.newDocuments + totalStats.updatedDocuments}
</Badge>
@@ -292,6 +339,13 @@ export function ImportFromDOLCEButton({
</div>
</div>
+ {/* 계약 소스 표시 */}
+ {allDocuments.length === 0 && vendorContractIds.length > 0 && (
+ <div className="text-xs text-blue-600 bg-blue-50 p-2 rounded">
+ 문서가 없어서 전체 계약에서 가져오기를 진행합니다.
+ </div>
+ )}
+
{/* 다중 계약 정보 표시 */}
{contractIds.length > 1 && (
<div className="text-sm">