diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-12 17:49:57 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-12 17:49:57 +0900 |
| commit | f4b1a770184e8647e0b3042a52a1bcc6f9cf00ce (patch) | |
| tree | d76700d8f52fa893afa816cf60bd3620f3032fe7 /lib/vendor-document-list | |
| parent | d3ff18a2320eeb400dc5d18588490c775bff4820 (diff) | |
(김준회) SWP: 파일 업로드시 Stage 검증 추가, DOC_CLASS 관리 단순화 (코드 제거), DOC_CLASS 추가시 검증(A-Z0-9) 처리
Diffstat (limited to 'lib/vendor-document-list')
3 files changed, 18 insertions, 15 deletions
diff --git a/lib/vendor-document-list/plant/document-stage-dialogs.tsx b/lib/vendor-document-list/plant/document-stage-dialogs.tsx index a738eba9..0c972658 100644 --- a/lib/vendor-document-list/plant/document-stage-dialogs.tsx +++ b/lib/vendor-document-list/plant/document-stage-dialogs.tsx @@ -374,9 +374,9 @@ export function AddDocumentDialog({ const shiDocNumber = shiType ? generateShiPreview() : '' const cpyDocNumber = cpyType ? generateCpyPreview() : '' - // 선택된 Document Class의 code 값을 가져오기 (SWP API의 DOC_CLASS로 사용) + // 선택된 Document Class의 value 값을 가져오기 (SWP API의 DOC_CLASS로 사용) const selectedDocClass = documentClasses.find(cls => String(cls.id) === data.documentClassId) - const docClassCode = selectedDocClass?.code || '' + const docClassValue = selectedDocClass?.value || '' // documentNumberTypeId는 SHI를 우선 사용, 없으면 CPY 사용 const documentNumberTypeId = shiType?.id || cpyType?.id @@ -391,7 +391,7 @@ export function AddDocumentDialog({ contractId, documentNumberTypeId, documentClassId: Number(data.documentClassId), - docClass: docClassCode, // 첫 번째 선택기의 code 값 사용 (A, B, C 등) + docClass: docClassValue, // Document Class의 value 값 사용 (A Class, B Class 등) title: data.title, docNumber: shiDocNumber, vendorDocNumber: cpyDocNumber, @@ -610,8 +610,10 @@ export function AddDocumentDialog({ <SelectContent> {documentClasses.map((cls) => ( <SelectItem key={cls.id} value={String(cls.id)}> - <span className="font-mono font-semibold">{cls.code}</span> - {cls.description && <span className="text-muted-foreground"> - {cls.description}</span>} + <span className="font-mono font-bold">{cls.value}</span> + {cls.description && cls.description.trim() !== '' && ( + <span className="text-muted-foreground"> - {cls.description}</span> + )} </SelectItem> ))} </SelectContent> diff --git a/lib/vendor-document-list/plant/document-stages-service.ts b/lib/vendor-document-list/plant/document-stages-service.ts index 30f57a23..1a7b1ab6 100644 --- a/lib/vendor-document-list/plant/document-stages-service.ts +++ b/lib/vendor-document-list/plant/document-stages-service.ts @@ -804,7 +804,8 @@ export async function getDocumentClassOptionsByContract(contractId: number) { .select({ id: documentClasses.id, code: documentClasses.code, - description: documentClasses.value, + value: documentClasses.value, + description: documentClasses.description, }) .from(documentClasses) .where( @@ -1374,18 +1375,18 @@ export async function uploadImportData(data: UploadData) { } - // 2. Document Class 매핑 가져오기 (트랜잭션 밖에서) - code 기반으로 통일 + // 2. Document Class 매핑 가져오기 (트랜잭션 밖에서) - value 기반으로 통일 const documentClassesData = await db .select({ id: documentClasses.id, - code: documentClasses.code, + value: documentClasses.value, description: documentClasses.description, }) .from(documentClasses) .where(and(eq(documentClasses.projectId, contract.projectId), eq(documentClasses.isActive, true))) const classMap = new Map( - documentClassesData.map(dc => [dc.code, dc.id]) + documentClassesData.map(dc => [dc.value, dc.id]) ) console.log(classMap) diff --git a/lib/vendor-document-list/plant/excel-import-stage.tsx b/lib/vendor-document-list/plant/excel-import-stage.tsx index 9bd9ed4c..24db6ea1 100644 --- a/lib/vendor-document-list/plant/excel-import-stage.tsx +++ b/lib/vendor-document-list/plant/excel-import-stage.tsx @@ -421,7 +421,7 @@ async function createImportTemplate(projectType: "ship" | "plant", contractId: n const res = await getDocumentClassOptionsByContract(contractId) if (!res.success) throw new Error(res.error || "데이터 로딩 실패") - const documentClasses = res.data.classes as Array<{ id: number; code: string; description: string }> + const documentClasses = res.data.classes as Array<{ id: number; value: string; description: string }> const options = res.data.options as Array<{ documentClassId: number; optionValue: string }> // 클래스별 옵션 맵 @@ -460,7 +460,7 @@ async function createImportTemplate(projectType: "ship" | "plant", contractId: n const sampleRow = [ projectType === "ship" ? "SH-2024-001" : "PL-2024-001", "샘플 문서명", - firstClass ? firstClass.code : "", + firstClass ? firstClass.value : "", // value 사용 (A Class, B Class 등) ...(projectType === "plant" ? ["V-001"] : []), ...allStageNames.map((s) => (firstClassStages.includes(s) ? "2024-03-01" : "")), ] @@ -648,8 +648,8 @@ if (projectType === "plant") { styleHeaderRow(matrixHeaderRow, "FF34495E") for (const docClass of documentClasses) { const validStages = new Set(optionsByClassId.get(docClass.id) ?? []) - // Code를 사용하고 설명을 괄호 안에 추가 - const row = [`${docClass.code}`, ...allStageNames.map((stage) => (validStages.has(stage) ? "✓" : ""))] + // Value를 사용 (A Class, B Class 등) + const row = [`${docClass.value}`, ...allStageNames.map((stage) => (validStages.has(stage) ? "✓" : ""))] const dataRow = matrixSheet.addRow(row) allStageNames.forEach((stage, idx) => { const cell = dataRow.getCell(idx + 2) @@ -712,8 +712,8 @@ if (projectType === "plant") { const referenceSheet = workbook.addWorksheet("ReferenceData", { state: "hidden" }) referenceSheet.getCell("A1").value = "DocumentClasses" documentClasses.forEach((dc, idx) => { - // 코드를 메인으로, 설명을 참고용으로 표시 - referenceSheet.getCell(`A${idx + 2}`).value = dc.code + // value를 메인으로 (A Class, B Class 등), 설명을 참고용으로 표시 + referenceSheet.getCell(`A${idx + 2}`).value = dc.value referenceSheet.getCell(`B${idx + 2}`).value = dc.description }) |
