summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/dolce/dialogs/add-and-modify-detail-drawing-dialog.tsx32
-rw-r--r--lib/dolce/utils/code-translator.ts128
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 [];
}
-