summaryrefslogtreecommitdiff
path: root/lib/soap/ecc/send/create-po.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-18 18:34:52 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-18 18:34:52 +0900
commit76a6606def50caa4df28014b869a06e5da30ab18 (patch)
treed1dd318b959c91dad3be22c7a60383da434a4ad7 /lib/soap/ecc/send/create-po.ts
parentc7d76d044531aab65dde9ba1007f3b2d86da6326 (diff)
(김준회) 견적: PO 생성 요청부 개선, 에러처리
Diffstat (limited to 'lib/soap/ecc/send/create-po.ts')
-rw-r--r--lib/soap/ecc/send/create-po.ts49
1 files changed, 7 insertions, 42 deletions
diff --git a/lib/soap/ecc/send/create-po.ts b/lib/soap/ecc/send/create-po.ts
index 0984a208..1e21d39c 100644
--- a/lib/soap/ecc/send/create-po.ts
+++ b/lib/soap/ecc/send/create-po.ts
@@ -44,23 +44,11 @@ export interface POItemData {
EBELP?: string; // Series PO Item Seq
}
-// PR 반환 데이터 타입
-export interface PRReturnData {
- ANFNR: string; // PR Request Number (M)
- ANFPS: string; // Item Number of PR Request (M)
- EBELN: string; // Purchase Requisition Number (M)
- EBELP: string; // Item Number of Purchase Requisition (M)
- MSGTY: string; // Message Type (M)
- MSGTXT?: string; // Message Text
-}
-
// PO 생성 요청 데이터 타입
+// 참고: T_PR_RETURN, EV_ERDAT, EV_ERZET는 응답용 필드이므로 요청에 포함하지 않음
export interface POCreateRequest {
T_Bidding_HEADER: POHeaderData[];
T_Bidding_ITEM: POItemData[];
- T_PR_RETURN: PRReturnData[];
- EV_ERDAT?: string; // Extract Date
- EV_ERZET?: string; // Extract Time
}
@@ -72,10 +60,8 @@ function createPOSoapBodyContent(poData: POCreateRequest): Record<string, unknow
return {
'p1:MT_P2MM3015_S': { // WSDL에서 사용하는 p1 접두사 적용
'T_Bidding_HEADER': poData.T_Bidding_HEADER,
- 'T_Bidding_ITEM': poData.T_Bidding_ITEM,
- 'T_PR_RETURN': poData.T_PR_RETURN,
- ...(poData.EV_ERDAT && { 'EV_ERDAT': poData.EV_ERDAT }),
- ...(poData.EV_ERZET && { 'EV_ERZET': poData.EV_ERZET })
+ 'T_Bidding_ITEM': poData.T_Bidding_ITEM
+ // T_PR_RETURN, EV_ERDAT, EV_ERZET는 응답용 필드이므로 요청에 포함하지 않음
}
};
}
@@ -112,19 +98,7 @@ function validatePOData(poData: POCreateRequest): { isValid: boolean; errors: st
});
}
- // PR 반환 데이터 검증
- if (!poData.T_PR_RETURN || poData.T_PR_RETURN.length === 0) {
- errors.push('T_PR_RETURN은 필수입니다.');
- } else {
- poData.T_PR_RETURN.forEach((prReturn, index) => {
- const requiredFields = ['ANFNR', 'ANFPS', 'EBELN', 'EBELP', 'MSGTY'];
- requiredFields.forEach(field => {
- if (!prReturn[field as keyof PRReturnData]) {
- errors.push(`T_PR_RETURN[${index}].${field}는 필수입니다.`);
- }
- });
- });
- }
+ // T_PR_RETURN은 응답용 필드이므로 검증하지 않음
return {
isValid: errors.length === 0,
@@ -165,7 +139,7 @@ async function sendPOToECC(poData: POCreateRequest): Promise<SoapSendResult> {
};
console.log(`📤 PO 생성 요청 전송 시작 - ANFNR: ${poData.T_Bidding_HEADER[0]?.ANFNR}`);
- console.log(`🔍 헤더 ${poData.T_Bidding_HEADER.length}개, 아이템 ${poData.T_Bidding_ITEM.length}개, PR 반환 ${poData.T_PR_RETURN.length}개`);
+ console.log(`🔍 헤더 ${poData.T_Bidding_HEADER.length}개, 아이템 ${poData.T_Bidding_ITEM.length}개`);
// SOAP XML 전송
const result = await sendSoapXml(config, logInfo);
@@ -341,17 +315,8 @@ export async function createTestPurchaseOrder(): Promise<{
LFDAT: getCurrentSAPDate(),
ZCON_NO_PO: 'CON001',
EBELP: '00001'
- }],
- T_PR_RETURN: [{
- ANFNR: 'TEST001',
- ANFPS: '00001',
- EBELN: 'PR001',
- EBELP: '00001',
- MSGTY: 'S',
- MSGTXT: 'Test message'
- }],
- EV_ERDAT: getCurrentSAPDate(),
- EV_ERZET: getCurrentSAPTime()
+ }]
+ // T_PR_RETURN, EV_ERDAT, EV_ERZET는 응답용 필드이므로 요청에 포함하지 않음
};
const result = await sendPOToECC(testPOData);