diff options
Diffstat (limited to 'lib/soap/ecc/send/rfq-info.ts')
| -rw-r--r-- | lib/soap/ecc/send/rfq-info.ts | 114 |
1 files changed, 3 insertions, 111 deletions
diff --git a/lib/soap/ecc/send/rfq-info.ts b/lib/soap/ecc/send/rfq-info.ts index d313a74b..777c1dfe 100644 --- a/lib/soap/ecc/send/rfq-info.ts +++ b/lib/soap/ecc/send/rfq-info.ts @@ -62,7 +62,7 @@ export interface RFQInfoResponse { // SOAP Body Content 생성 함수 function createRFQSoapBodyContent(rfqData: RFQInfoRequest): Record<string, unknown> { return { - 'ns0:MT_P2MM3014_S': { + 'p1:MT_P2MM3014_S': { // WSDL에서 사용하는 p1 접두사 적용 'T_RFQ_HEADER': rfqData.T_RFQ_HEADER, 'T_RFQ_ITEM': rfqData.T_RFQ_ITEM } @@ -146,7 +146,8 @@ async function sendRFQToECC(rfqData: RFQInfoRequest): Promise<SoapSendResult> { timeout: 60000, // RFQ 정보 전송은 60초 타임아웃 retryCount: 3, retryDelay: 2000, - namespace: 'http://shi.samsung.co.kr/P2_MM/MMM' // ECC MM 모듈 네임스페이스 + namespace: 'http://shi.samsung.co.kr/P2_MM/MMM', // ECC MM 모듈 네임스페이스 + prefix: 'p1' // WSDL에서 사용하는 p1 접두사 }; // 로그 정보 @@ -359,112 +360,3 @@ export async function checkRFQInformationStatus(rfqNumber: string): Promise<{ } } -// ======================================== -// 유틸리티 함수들 -// ======================================== - -// RFQ 데이터 생성 헬퍼 함수 -function createRFQData( - headers: RFQHeaderData[], - items: RFQItemData[] -): RFQInfoRequest { - return { - T_RFQ_HEADER: headers, - T_RFQ_ITEM: items - }; -} - -// RFQ 헤더 데이터 생성 헬퍼 함수 -function createRFQHeader( - rfqNumber: string, // ANFNR - CHAR(10) - vendorNumber: string, // LIFNR - CHAR(10) - currency: string = 'KRW', // WAERS - CUKY(5) - paymentTerms: string = '0001', // ZTERM - CHAR(4) - incoterms1: string = 'FOB', // INCO1 - CHAR(3) - incoterms2: string = 'Seoul, Korea', // INCO2 - CHAR(28) - taxCode: string = 'V0', // MWSKZ - CHAR(2) - countryForTax: string = 'KR', // LANDS - CHAR(3) (Country for Tax Return) - options?: { - shippingPlace?: string; // VSTEL - CHAR(3) (Place of Shipping) - destinationPlace?: string; // LSTEL - CHAR(3) (Place of Destination) - } -): RFQHeaderData { - return { - ANFNR: rfqNumber, - LIFNR: vendorNumber, - WAERS: currency, - ZTERM: paymentTerms, - INCO1: incoterms1, - INCO2: incoterms2, - MWSKZ: taxCode, - LANDS: countryForTax, - VSTEL: options?.shippingPlace, - LSTEL: options?.destinationPlace - }; -} - -// RFQ 아이템 데이터 생성 헬퍼 함수 -function createRFQItem( - rfqNumber: string, // ANFNR - CHAR(10) - itemNumber: string, // ANFPS - NUMC(5,0) - netPrice: string, // NETPR - CURR(11,2) Net Price in Purchasing Document (in Document Currency) - netOrderValue: string, // NETWR - CURR(13,2) Net Order Value in PO Currency - grossOrderValue: string, // BRTWR - CURR(13,2) Gross order value in PO currency - deliveryDate?: string // LFDAT - DATS(8) Item delivery date (선택) -): RFQItemData { - return { - ANFNR: rfqNumber, - ANFPS: itemNumber, - NETPR: netPrice, - NETWR: netOrderValue, - BRTWR: grossOrderValue, - LFDAT: deliveryDate - }; -} - -// RFQ 번호 기준으로 헤더와 아이템 매칭 검증 -function validateRFQMatching(headers: RFQHeaderData[], items: RFQItemData[]): { - isValid: boolean; - errors: string[]; - orphanItems: string[]; -} { - const errors: string[] = []; - const orphanItems: string[] = []; - - const headerRFQNumbers = new Set(headers.map(h => h.ANFNR)); - - for (const item of items) { - if (!headerRFQNumbers.has(item.ANFNR)) { - orphanItems.push(item.ANFNR); - errors.push(`RFQ 아이템 '${item.ANFNR}-${item.ANFPS}'에 해당하는 헤더가 없습니다.`); - } - } - - return { - isValid: errors.length === 0, - errors, - orphanItems - }; -} - -// RFQ 데이터 요약 정보 생성 -function getRFQDataSummary(rfqData: RFQInfoRequest): { - rfqNumbers: string[]; - totalHeaders: number; - totalItems: number; - itemsPerRFQ: Record<string, number>; -} { - const rfqNumbers = [...new Set(rfqData.T_RFQ_HEADER.map(h => h.ANFNR))]; - const itemsPerRFQ: Record<string, number> = {}; - - for (const rfqNumber of rfqNumbers) { - itemsPerRFQ[rfqNumber] = rfqData.T_RFQ_ITEM.filter(i => i.ANFNR === rfqNumber).length; - } - - return { - rfqNumbers, - totalHeaders: rfqData.T_RFQ_HEADER.length, - totalItems: rfqData.T_RFQ_ITEM.length, - itemsPerRFQ - }; -} |
