summaryrefslogtreecommitdiff
path: root/lib/soap/ecc/send/rfq-info.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/soap/ecc/send/rfq-info.ts')
-rw-r--r--lib/soap/ecc/send/rfq-info.ts114
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
- };
-}