summaryrefslogtreecommitdiff
path: root/lib/swp/table/swp-upload-validation-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/swp/table/swp-upload-validation-dialog.tsx')
-rw-r--r--lib/swp/table/swp-upload-validation-dialog.tsx55
1 files changed, 44 insertions, 11 deletions
diff --git a/lib/swp/table/swp-upload-validation-dialog.tsx b/lib/swp/table/swp-upload-validation-dialog.tsx
index 8e786c8b..ef48f0c6 100644
--- a/lib/swp/table/swp-upload-validation-dialog.tsx
+++ b/lib/swp/table/swp-upload-validation-dialog.tsx
@@ -43,11 +43,15 @@ interface SwpUploadValidationDialogProps {
* @param fileName 검증할 파일명
* @param availableDocNos 업로드 가능한 문서번호 목록 (선택)
* @param isVendorMode 벤더 모드인지 여부 (true인 경우 문서번호 검증 필수)
+ * @param docNoToDocTypeMap 문서번호 → DOC_TYPE 매핑 (Stage 검증용)
+ * @param documentClassStages Document Class → 허용 Stage 목록 매핑
*/
export function validateFileName(
fileName: string,
availableDocNos?: string[],
- isVendorMode?: boolean
+ isVendorMode?: boolean,
+ docNoToDocTypeMap?: Record<string, string>,
+ documentClassStages?: Record<string, string[]>
): {
valid: boolean;
parsed?: {
@@ -134,12 +138,36 @@ export function validateFileName(
}
}
+ // Stage 검증 (DOC_TYPE별 허용 Stage 확인)
+ const trimmedDocNo = ownDocNo.trim();
+ const trimmedStage = stage.trim();
+
+ if (docNoToDocTypeMap && documentClassStages) {
+ const docType = docNoToDocTypeMap[trimmedDocNo];
+
+ if (docType) {
+ const allowedStages = documentClassStages[docType];
+
+ if (allowedStages && allowedStages.length > 0) {
+ // 허용된 Stage 목록이 있는 경우에만 검증
+ if (!allowedStages.includes(trimmedStage)) {
+ return {
+ valid: false,
+ error: `문서 '${trimmedDocNo}'의 Document Class '${docType}'에서 Stage '${trimmedStage}'는 허용되지 않습니다. 허용된 Stage: ${allowedStages.join(", ")}`,
+ };
+ }
+ }
+ // allowedStages가 비어있으면 Stage 검증을 스킵 (설정되지 않은 경우)
+ }
+ // docType이 없으면 Stage 검증을 스킵 (문서 정보가 없는 경우)
+ }
+
return {
valid: true,
parsed: {
- ownDocNo: ownDocNo.trim(),
+ ownDocNo: trimmedDocNo,
revNo: revNo.trim(),
- stage: stage.trim(),
+ stage: trimmedStage,
fileName: customFileName.trim(),
extension,
},
@@ -314,7 +342,7 @@ export function SwpUploadValidationDialog({
{/* 형식 안내 */}
<div className="rounded-lg bg-blue-50 dark:bg-blue-950/30 border border-blue-200 dark:border-blue-800 p-3">
<div className="text-sm font-medium text-blue-900 dark:text-blue-100 mb-1">
- 올바른 파일명 형식
+ 📋 올바른 파일명 형식
</div>
<code className="text-xs text-blue-700 dark:text-blue-300">
[OWN_DOC_NO]_[REV_NO]_[STAGE].[확장자]
@@ -329,13 +357,18 @@ export function SwpUploadValidationDialog({
※ 파일명에는 언더스코어(_)가 포함될 수 있습니다.
</div>
{isVendorMode && (
- <div className="text-xs text-blue-600 dark:text-blue-400 mt-2 pt-2 border-t border-blue-200 dark:border-blue-800">
- {availableDocNos.length > 0 ? (
- <>ℹ️ 업로드 가능한 문서: {availableDocNos.length}개</>
- ) : (
- <>⚠️ 할당된 문서가 없습니다</>
- )}
- </div>
+ <>
+ <div className="text-xs text-blue-600 dark:text-blue-400 mt-2 pt-2 border-t border-blue-200 dark:border-blue-800">
+ {availableDocNos.length > 0 ? (
+ <>ℹ️ 업로드 가능한 문서: {availableDocNos.length}개</>
+ ) : (
+ <>⚠️ 할당된 문서가 없습니다</>
+ )}
+ </div>
+ <div className="text-xs text-blue-600 dark:text-blue-400 mt-1">
+ ⚠️ 각 문서의 Document Class에 정의된 Stage만 사용할 수 있습니다.
+ </div>
+ </>
)}
</div>
</div>