diff options
| author | joonhoekim <26rote@gmail.com> | 2025-10-21 14:57:57 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-10-21 14:57:57 +0900 |
| commit | 261c45877f58af5779ef796c0c9186ed021e028e (patch) | |
| tree | 804ae05274268b6a6a3e3d5942def114422eb6c0 | |
| parent | 110919f19e1d42465e2438f668587293c66da733 (diff) | |
(김준회) SWP 'VDR List 관리' 기능 (도면리스트) DOC_CLASS 누락건 처리
| -rw-r--r-- | db/schema/vendorDocu.ts | 8 | ||||
| -rw-r--r-- | lib/vendor-document-list/plant/document-stage-dialogs.tsx | 31 | ||||
| -rw-r--r-- | lib/vendor-document-list/plant/document-stages-service.ts | 2 | ||||
| -rw-r--r-- | lib/vendor-document-list/plant/shi-buyer-system-api.ts | 12 |
4 files changed, 46 insertions, 7 deletions
diff --git a/db/schema/vendorDocu.ts b/db/schema/vendorDocu.ts index b7cef5e5..624ce11d 100644 --- a/db/schema/vendorDocu.ts +++ b/db/schema/vendorDocu.ts @@ -38,6 +38,7 @@ export const documents = pgTable( drawingKind: varchar("drawing_kind", { length: 10 }), // B3, B4, B5 drawingMoveGbn: varchar("drawing_move_gbn", { length: 50 }), // 도면입수, 도면제출, GTT Deliverable, SHI Input Information discipline: varchar("discipline", { length: 10 }), // DE, ME, etc. + docClass: varchar("doc_class", { length: 20 }), // 문서 분류 (B3, B4, B5, etc.) // ✅ 외부 시스템 연동 정보 externalDocumentId: varchar("external_document_id", { length: 100 }), // DOLCE 시스템의 문서 ID @@ -817,6 +818,7 @@ export const simplifiedDocumentsView = pgView("simplified_documents_view", { drawingKind: varchar("drawing_kind", { length: 10 }), drawingMoveGbn: varchar("drawing_move_gbn", { length: 50 }), discipline: varchar("discipline", { length: 10 }), + docClass: varchar("doc_class", { length: 20 }), // 문서 분류 vendorDocNumber: varchar("vendor_doc_number", { length: 100 }), title: varchar("title", { length: 255 }).notNull(), pic: varchar("pic", { length: 50 }), @@ -1077,6 +1079,7 @@ export const simplifiedDocumentsView = pgView("simplified_documents_view", { d.drawing_kind, d.drawing_move_gbn, d.discipline, + d.doc_class, d.vendor_doc_number, d.title, d.pic, @@ -1357,6 +1360,7 @@ export const stageDocuments = pgTable( // 선택적 문서 정보 vendorDocNumber: varchar("vendor_doc_number", { length: 100 }), issuedDate: date("issued_date"), + docClass: varchar("doc_class", { length: 20 }), // 문서 분류 (B3, B4, B5, etc.) // 직접 참조로 JOIN 최소화 projectId: integer("project_id") @@ -1417,6 +1421,7 @@ export const stageDocumentsView = pgView("stage_documents_view", { title: varchar("title", { length: 255 }).notNull(), status: varchar("status", { length: 50 }).notNull(), issuedDate: date("issued_date"), + docClass: varchar("doc_class", { length: 20 }), // 문서 분류 // 프로젝트 및 벤더 정보 projectId: integer("project_id").notNull(), @@ -1542,13 +1547,14 @@ export const stageDocumentsView = pgView("stage_documents_view", { GROUP BY ist.document_id ) - SELECT + SELECT sd.id as document_id, sd.doc_number, sd.vendor_doc_number, sd.title, sd.status, sd.issued_date, + sd.doc_class, -- 프로젝트 및 벤더 정보 sd.project_id, diff --git a/lib/vendor-document-list/plant/document-stage-dialogs.tsx b/lib/vendor-document-list/plant/document-stage-dialogs.tsx index d40af4c3..8a7dcbc4 100644 --- a/lib/vendor-document-list/plant/document-stage-dialogs.tsx +++ b/lib/vendor-document-list/plant/document-stage-dialogs.tsx @@ -92,6 +92,7 @@ const getStatusText = (status: string) => { // Form validation schema const documentFormSchema = z.object({ documentClassId: z.string().min(1, "Document class is required"), + docClass: z.string().min(1, "Document class is required"), title: z.string().min(1, "Document title is required"), shiFieldValues: z.record(z.string()).optional(), cpyFieldValues: z.record(z.string()).optional(), @@ -132,6 +133,7 @@ export function AddDocumentDialog({ resolver: zodResolver(documentFormSchema), defaultValues: { documentClassId: '', + docClass: '', title: '', shiFieldValues: {}, cpyFieldValues: {}, @@ -378,6 +380,7 @@ export function AddDocumentDialog({ const submitData = { contractId, documentClassId: Number(data.documentClassId), + docClass: data.docClass, title: data.title, docNumber: shiDocNumber, vendorDocNumber: cpyDocNumber, @@ -615,6 +618,34 @@ export function AddDocumentDialog({ )} </div> + {/* Document Class Selection (B3, B4, B5) */} + <div className="space-y-2"> + <Label htmlFor="docClass"> + Document Class <span className="text-red-500">*</span> + </Label> + <Controller + name="docClass" + control={form.control} + render={({ field }) => ( + <Select value={field.value} onValueChange={field.onChange}> + <SelectTrigger> + <SelectValue placeholder="Select document class (B3, B4, B5)" /> + </SelectTrigger> + <SelectContent> + <SelectItem value="B3">B3 - Basic Engineering Document</SelectItem> + <SelectItem value="B4">B4 - Detail Engineering Document</SelectItem> + <SelectItem value="B5">B5 - Vendor Document</SelectItem> + </SelectContent> + </Select> + )} + /> + {form.formState.errors.docClass && ( + <p className="text-xs text-red-500"> + {form.formState.errors.docClass.message} + </p> + )} + </div> + {/* Document Class Options with Plan Dates */} {documentClassOptions.length > 0 && ( <Card> diff --git a/lib/vendor-document-list/plant/document-stages-service.ts b/lib/vendor-document-list/plant/document-stages-service.ts index cff448d5..ae9ea314 100644 --- a/lib/vendor-document-list/plant/document-stages-service.ts +++ b/lib/vendor-document-list/plant/document-stages-service.ts @@ -869,6 +869,7 @@ interface CreateDocumentData { contractId: number documentNumberTypeId: number documentClassId: number + docClass: string title: string docNumber: string fieldValues: Record<string, string> @@ -915,6 +916,7 @@ export async function createDocument(data: CreateDocumentData) { contractId: data.contractId, docNumber: data.docNumber, title: data.title, + docClass: data.docClass, // 문서 분류 추가 status: "ACTIVE" as const, createdAt: new Date(), updatedAt: new Date(), diff --git a/lib/vendor-document-list/plant/shi-buyer-system-api.ts b/lib/vendor-document-list/plant/shi-buyer-system-api.ts index 9256eaf4..f82151cd 100644 --- a/lib/vendor-document-list/plant/shi-buyer-system-api.ts +++ b/lib/vendor-document-list/plant/shi-buyer-system-api.ts @@ -289,8 +289,8 @@ export class ShiBuyerSystemAPI { SHI_DOC_NO: doc.docNumber, CATEGORY: 'SHIP', // 김준식 프로 요청으로 RESPONSIBLE_CD / RESPONSIBLE 값 변경 (251002,김준회) - RESPONSIBLE_CD: 'C00001', - RESPONSIBLE: 'SHI', + RESPONSIBLE_CD: 'C00001', // 고정 + RESPONSIBLE: 'SHI', // 고정 VNDR_CD: doc.vendorCode || '', VNDR_NM: doc.vendorName || '', DSN_SKL: 'B3', @@ -300,13 +300,13 @@ export class ShiBuyerSystemAPI { CG_EMPNM1: '', OWN_DOC_NO: doc.vendorDocNumber || doc.docNumber, DSC: doc.title, - DOC_CLASS: 'B3', + DOC_CLASS: doc.docClass || '', // 선택한 DOC_CLASS 사용 COMMENT: doc.buyerSystemComment || '', // 실제 코멘트 전송 // 조민정 프로 요청으로 'ACTIVE' --> '생성요청' 값으로 변경 (251002,김준회) - STATUS: '생성요청', - CRTER: 'EVCP_SYSTEM', + STATUS: '생성요청', // 고정 + CRTER: 'EVCP_SYSTEM', // 고정 CRTE_DTM: new Date().toISOString(), - CHGR: 'EVCP_SYSTEM', + CHGR: 'EVCP_SYSTEM', // 고정 CHG_DTM: new Date().toISOString(), })); |
