diff options
Diffstat (limited to 'lib/dolce')
| -rw-r--r-- | lib/dolce/dialogs/add-and-modify-detail-drawing-dialog.tsx | 32 | ||||
| -rw-r--r-- | lib/dolce/utils/code-translator.ts | 128 |
2 files changed, 101 insertions, 59 deletions
diff --git a/lib/dolce/dialogs/add-and-modify-detail-drawing-dialog.tsx b/lib/dolce/dialogs/add-and-modify-detail-drawing-dialog.tsx index 54ec79a7..d4318b90 100644 --- a/lib/dolce/dialogs/add-and-modify-detail-drawing-dialog.tsx +++ b/lib/dolce/dialogs/add-and-modify-detail-drawing-dialog.tsx @@ -23,7 +23,7 @@ import { Textarea } from "@/components/ui/textarea"; import { Upload, X, FileIcon, Info, Trash2 } from "lucide-react"; import { toast } from "sonner"; import { useTranslation } from "@/i18n/client"; -import { UnifiedDwgReceiptItem, DetailDwgReceiptItem, editDetailDwgReceipt } from "../actions"; +import { UnifiedDwgReceiptItem, DetailDwgReceiptItem, editDetailDwgReceipt, fetchDetailDwgReceiptList } from "../actions"; import { v4 as uuidv4 } from "uuid"; import { useFileUploadWithProgress } from "../hooks/use-file-upload-with-progress"; import { uploadFilesWithProgress } from "../utils/upload-with-progress"; @@ -32,7 +32,8 @@ import { getB3DrawingUsageOptions, getB3RegisterKindOptions, getB4DrawingUsageOptions, - getB4RegisterKindOptions + getB4RegisterKindOptions, + findRegisterKindCode } from "../utils/code-translator"; import { AlertDialog, @@ -92,7 +93,7 @@ export function AddAndModifyDetailDrawingDialog({ useEffect(() => { if (mode === "edit" && detailDrawing && open) { setDrawingUsage(detailDrawing.DrawingUsage || ""); - setRegisterKind(detailDrawing.RegisterKind || ""); + setRegisterKind(findRegisterKindCode(detailDrawing.RegisterKind || "", drawingKind)); setRevision(detailDrawing.DrawingRevNo || ""); setComment(detailDrawing.RegisterDesc || ""); } else if (mode === "add" && open) { @@ -227,6 +228,29 @@ export function AddAndModifyDetailDrawingDialog({ setIsSubmitting(true); if (mode === "add" && drawing) { + // 상세도면 리스트 조회하여 RegisterSerialNo 계산 + let nextSerialNo = 1; + try { + const detailList = await fetchDetailDwgReceiptList({ + project: drawing.ProjectNo, + drawingNo: drawing.DrawingNo, + discipline: drawing.Discipline, + drawingKind: drawing.DrawingKind, + userId: userId, + }); + + if (detailList && detailList.length > 0) { + // RegisterSerialNo의 최댓값을 찾아 +1 (기본값 0 처리) + const maxSerial = Math.max(...detailList.map(item => item.RegisterSerialNo || 0)); + nextSerialNo = maxSerial + 1; + } + console.log(`[AddDetail] RegisterSerialNo Calculated: ${nextSerialNo} (Max: ${nextSerialNo - 1})`); + } catch (error) { + console.error("상세도면 리스트 조회 실패 (SerialNo 계산 중):", error); + toast.error("Failed to calculate serial number"); + return; + } + // 파일 업로드 ID 생성 const uploadId = uuidv4(); @@ -243,7 +267,7 @@ export function AddAndModifyDetailDrawingDialog({ DrawingNo: drawing.DrawingNo, DrawingName: drawing.DrawingName, RegisterGroupId: drawing.RegisterGroupId, - RegisterSerialNo: 0, // 자동 증가 + RegisterSerialNo: nextSerialNo, // 자동 증가값 사용 RegisterKind: registerKind, DrawingRevNo: drawingUsage === "CMT" ? null : revision, Category: "TS", // To SHI (벤더가 SHI에게 제출) diff --git a/lib/dolce/utils/code-translator.ts b/lib/dolce/utils/code-translator.ts index efe2c3d9..0450c08e 100644 --- a/lib/dolce/utils/code-translator.ts +++ b/lib/dolce/utils/code-translator.ts @@ -4,6 +4,56 @@ * 코드 값을 다국어로 번역하고, 검색 시 번역된 텍스트도 매칭할 수 있도록 지원 */ +const B3_REGISTER_KIND_MAP: Record<string, Record<string, string>> = { + "APPR": { + ko: "승인 제출용 도면(Full)", + en: "For Approval(Full)", + }, + "APPR-P": { + ko: "승인 제출용 도면(Partial)", + en: "For Approval(Partial)", + }, + "WORK": { + ko: "작업용 입수도면(Full)", + en: "For Working(Full)", + }, + "WORK-P": { + ko: "작업용 입수도면(Partial)", + en: "For Working(Partial)", + }, + "CMTV": { + ko: "Comment", + en: "Comment", + }, +}; + +const B4_REGISTER_KIND_MAP: Record<string, Record<string, string>> = { + "RECW": { + ko: "Working 도면입수(GTT→SHI)", + en: "Working Dwg(GTT→SHI)", + }, + "RECP": { + ko: "Pre. 도면입수(GTT→SHI)", + en: "Pre. Dwg(GTT→SHI)", + }, + "SUBW": { + ko: "Working 제출용(SHI→GTT)", + en: "Working Submission(SHI→GTT)", + }, + "SUBP": { + ko: "Pre. 제출용(SHI→GTT)", + en: "Pre. Submission(SHI→GTT)", + }, + "CMTM": { + ko: "Mark-Up", + en: "Mark-Up", + }, + "CMTQ": { + ko: "TQ", + en: "TQ", + }, +}; + // B3 DrawingUsage 번역 export function translateB3DrawingUsage(code: string, lng: string): string { const translations: Record<string, Record<string, string>> = { @@ -34,30 +84,7 @@ export function translateB3DrawingUsage(code: string, lng: string): string { // B3 RegisterKind 번역 export function translateB3RegisterKind(code: string, lng: string): string { - const translations: Record<string, Record<string, string>> = { - "APPR": { - ko: "승인 제출용 도면(Full)", - en: "For Approval(Full)", - }, - "APPP": { - ko: "승인 제출용 도면(Partial)", - en: "For Approval(Partial)", - }, - "WORK": { - ko: "작업용 입수도면(Full)", - en: "For Working(Full)", - }, - "WORP": { - ko: "작업용 입수도면(Partial)", - en: "For Working(Partial)", - }, - "CMTV": { - ko: "Comment", - en: "Comment", - }, - }; - - return translations[code]?.[lng] || code; + return B3_REGISTER_KIND_MAP[code]?.[lng] || code; } // B4 DrawingUsage 번역 @@ -82,34 +109,7 @@ export function translateB4DrawingUsage(code: string, lng: string): string { // B4 RegisterKind 번역 export function translateB4RegisterKind(code: string, lng: string): string { - const translations: Record<string, Record<string, string>> = { - "RECW": { - ko: "Working 도면입수(GTT→SHI)", - en: "Working Dwg(GTT→SHI)", - }, - "RECP": { - ko: "Pre. 도면입수(GTT→SHI)", - en: "Pre. Dwg(GTT→SHI)", - }, - "SUBW": { - ko: "Working 제출용(SHI→GTT)", - en: "Working Submission(SHI→GTT)", - }, - "SUBP": { - ko: "Pre. 제출용(SHI→GTT)", - en: "Pre. Submission(SHI→GTT)", - }, - "CMTM": { - ko: "Mark-Up", - en: "Mark-Up", - }, - "CMTQ": { - ko: "TQ", - en: "TQ", - }, - }; - - return translations[code]?.[lng] || code; + return B4_REGISTER_KIND_MAP[code]?.[lng] || code; } // DrawingMoveGbn 번역 (B4 GTT) @@ -182,6 +182,25 @@ export function matchesTranslatedCode( return false; } +// 텍스트(ENM 등)로부터 코드를 찾는 함수 +export function findRegisterKindCode(text: string, drawingKind: "B3" | "B4"): string { + if (!text) return ""; + + const map = drawingKind === "B3" ? B3_REGISTER_KIND_MAP : B4_REGISTER_KIND_MAP; + + // 코드가 직접 들어온 경우 체크 + if (map[text]) return text; + + // 번역 텍스트와 매칭 + for (const [code, trans] of Object.entries(map)) { + if (trans.en === text || trans.ko === text) { + return code; + } + } + + return text; +} + // 옵션 목록 생성 (Select 컴포넌트용) export function getB3DrawingUsageOptions(lng: string) { return [ @@ -195,7 +214,7 @@ export function getB3RegisterKindOptions(drawingUsage: string, lng: string) { if (drawingUsage === "APP") { return [ { value: "APPR", label: translateB3RegisterKind("APPR", lng) }, - { value: "APPP", label: translateB3RegisterKind("APPP", lng) }, + { value: "APPR-P", label: translateB3RegisterKind("APPR-P", lng) }, ]; } else if (drawingUsage === "CMT") { return [ @@ -204,7 +223,7 @@ export function getB3RegisterKindOptions(drawingUsage: string, lng: string) { } else if (drawingUsage === "WOR") { return [ { value: "WORK", label: translateB3RegisterKind("WORK", lng) }, - { value: "WORP", label: translateB3RegisterKind("WORP", lng) }, + { value: "WORK-P", label: translateB3RegisterKind("WORK-P", lng) }, ]; } return []; @@ -237,4 +256,3 @@ export function getB4RegisterKindOptions(drawingUsage: string, lng: string) { } return []; } - |
