From 912e2bc761d7d57bd33d68cb5050da43dea59636 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Fri, 24 Oct 2025 11:42:16 +0900 Subject: (김준회) ecc/mdg 테스트 페이지 수정 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/[lng]/admin/ecc/page.tsx | 474 +++++++++++++++++++++++++++++++++---------- app/[lng]/admin/mdg/page.tsx | 26 +-- 2 files changed, 378 insertions(+), 122 deletions(-) (limited to 'app') diff --git a/app/[lng]/admin/ecc/page.tsx b/app/[lng]/admin/ecc/page.tsx index 257ecfea..cd09e213 100644 --- a/app/[lng]/admin/ecc/page.tsx +++ b/app/[lng]/admin/ecc/page.tsx @@ -10,7 +10,7 @@ import { Label } from '@/components/ui/label' import { Badge } from '@/components/ui/badge' import { Separator } from '@/components/ui/separator' import { Alert, AlertDescription } from '@/components/ui/alert' -import { Loader2, Play, CheckCircle, XCircle, Send } from 'lucide-react' +import { Loader2, Play, CheckCircle, XCircle, Send, Plus, Minus } from 'lucide-react' import { toast } from 'sonner' // SOAP 송신 함수들 import @@ -125,36 +125,96 @@ export default function ECCSenderTestPage() { // PO 생성 테스트 const [poData, setPoData] = useState({ - // 헤더 정보 - ANFNR: 'TEST001', - LIFNR: '1000000001', - ZPROC_IND: 'A', - ANGNR: 'TEST001', - WAERS: 'KRW', - ZTERM: '0001', - INCO1: 'FOB', - INCO2: 'Seoul, Korea', - MWSKZ: 'V0', - LANDS: 'KR', - ZRCV_DT: '20241201', - ZATTEN_IND: 'Y', - IHRAN: '20241201', - TEXT: 'Test PO Creation', - // 아이템 정보 - ANFPS: '00001', - NETPR: '1000.00', - PEINH: '1', - BPRME: 'EA', - NETWR: '1000.00', - BRTWR: '1100.00', - LFDAT: '20241201', - // PR 반환 정보 - EBELN: 'PR001', - EBELP: '00001', - MSGTY: 'S', - MSGTXT: 'Test message' + header: { + ANFNR: 'TEST001', + LIFNR: '1000000001', + ZPROC_IND: 'A', + ANGNR: 'TEST001', + WAERS: 'KRW', + ZTERM: '0001', + INCO1: 'FOB', + INCO2: 'Seoul, Korea', + MWSKZ: 'V0', + LANDS: 'KR', + ZRCV_DT: '20241201', + ZATTEN_IND: 'Y', + IHRAN: '20241201', + TEXT: 'Test PO Creation', + LSTEL: '', + VSTEL: '', + ZDLV_CNTLR: '', + ZDLV_PRICE_NOTE: '', + ZDLV_PRICE_T: '' + }, + items: [{ + ANFNR: 'TEST001', + ANFPS: '00001', + LIFNR: '1000000001', + NETPR: '1000.00', + PEINH: '1', + BPRME: 'EA', + NETWR: '1000.00', + BRTWR: '1100.00', + LFDAT: '20241201', + EBELP: '', + ZCON_NO_PO: '' + }], + prReturn: [{ + ANFNR: 'TEST001', + ANFPS: '00001', + EBELN: 'PR001', + EBELP: '00001', + MSGTY: 'S', + MSGTXT: 'Test message' + }] }) + // PO 아이템 관리 함수들 + const addPoItem = () => { + const newItemIndex = poData.items.length + 1 + setPoData(prev => ({ + ...prev, + items: [...prev.items, { + ANFNR: prev.header.ANFNR, + ANFPS: String(newItemIndex).padStart(5, '0'), + LIFNR: prev.header.LIFNR, + NETPR: '0.00', + PEINH: '1', + BPRME: 'EA', + NETWR: '0.00', + BRTWR: '0.00', + LFDAT: prev.header.IHRAN, + EBELP: '', + ZCON_NO_PO: '' + }] + })) + } + + const removePoItem = (index: number) => { + if (poData.items.length > 1) { + setPoData(prev => ({ + ...prev, + items: prev.items.filter((_, i) => i !== index) + })) + } + } + + const updatePoItem = (index: number, field: string, value: string) => { + setPoData(prev => ({ + ...prev, + items: prev.items.map((item, i) => + i === index ? { ...item, [field]: value } : item + ) + })) + } + + const updatePoHeader = (field: string, value: string) => { + setPoData(prev => ({ + ...prev, + header: { ...prev.header, [field]: value } + })) + } + return (
@@ -513,87 +573,188 @@ export default function ECCSenderTestPage() { PO (Purchase Order) 생성 - 구매주문 생성 요청을 ECC로 전송합니다. (IF_ECC_EVCP_PO_CREATE) + 구매주문 생성 요청을 ECC로 전송합니다. (IF_ECC_EVCP_PO_CREATE) - 하나의 PO에 여러 PR 아이템들을 포함시키는 구조 - + + {/* PO 헤더 정보 */}
-

PO 헤더 정보

-
+
+

PO 헤더 정보

+ + {poData.items.length}개 아이템 + +
+
- + setPoData(prev => ({ ...prev, ANFNR: e.target.value }))} - placeholder="입찰번호" + value={poData.header.ANFNR} + onChange={(e) => updatePoHeader('ANFNR', e.target.value)} + placeholder="입찰번호 (ANFNR)" />
- + setPoData(prev => ({ ...prev, LIFNR: e.target.value }))} - placeholder="공급업체 계정번호" + value={poData.header.LIFNR} + onChange={(e) => updatePoHeader('LIFNR', e.target.value)} + placeholder="공급업체 계정 (LIFNR) : 벤더코드" />
- + setPoData(prev => ({ ...prev, ZPROC_IND: e.target.value }))} - placeholder="구매처리상태" + value={poData.header.ZPROC_IND} + onChange={(e) => updatePoHeader('ZPROC_IND', e.target.value)} + placeholder="처리상태 (ZPROC_IND)" />
- + + updatePoHeader('ANGNR', e.target.value)} + placeholder="협상번호 (ANGNR)" + /> +
+
+ setPoData(prev => ({ ...prev, WAERS: e.target.value }))} - placeholder="통화 코드" + value={poData.header.WAERS} + onChange={(e) => updatePoHeader('WAERS', e.target.value)} + placeholder="통화 (WAERS)" />
-
- -

PO 아이템 정보

-
- + setPoData(prev => ({ ...prev, ANFPS: e.target.value }))} - placeholder="입찰 아이템번호" + id="po-zterm" + value={poData.header.ZTERM} + onChange={(e) => updatePoHeader('ZTERM', e.target.value)} + placeholder="지급조건 (ZTERM)" />
- + setPoData(prev => ({ ...prev, NETPR: e.target.value }))} - placeholder="순가격" + id="po-inco1" + value={poData.header.INCO1} + onChange={(e) => updatePoHeader('INCO1', e.target.value)} + placeholder="인코텀즈1 (INCO1)" + /> +
+
+ + updatePoHeader('INCO2', e.target.value)} + placeholder="인코텀즈2 (INCO2)" + /> +
+
+ + updatePoHeader('MWSKZ', e.target.value)} + placeholder="세금코드 (MWSKZ)" />
- + setPoData(prev => ({ ...prev, BPRME: e.target.value }))} - placeholder="주문단위 (예: EA)" + id="po-lands" + value={poData.header.LANDS} + onChange={(e) => updatePoHeader('LANDS', e.target.value)} + placeholder="국가키 (LANDS)" />
- + setPoData(prev => ({ ...prev, LFDAT: e.target.value }))} - placeholder="YYYYMMDD 형식" + id="po-zrcv-dt" + value={poData.header.ZRCV_DT} + onChange={(e) => updatePoHeader('ZRCV_DT', e.target.value)} + placeholder="수령일 (ZRCV_DT)" + /> +
+
+ + updatePoHeader('ZATTEN_IND', e.target.value)} + placeholder="참석지시자 (ZATTEN_IND)" + /> +
+
+ + updatePoHeader('IHRAN', e.target.value)} + placeholder="입찰마감일 (IHRAN)" + /> +
+
+ + updatePoHeader('TEXT', e.target.value)} + placeholder="텍스트 (TEXT)" + /> +
+
+ + updatePoHeader('LSTEL', e.target.value)} + placeholder="배송지점 (LSTEL)" + /> +
+
+ + updatePoHeader('VSTEL', e.target.value)} + placeholder="출하지점 (VSTEL)" + /> +
+
+ + updatePoHeader('ZDLV_CNTLR', e.target.value)} + placeholder="납품담당자 (ZDLV_CNTLR)" + /> +
+
+ + updatePoHeader('ZDLV_PRICE_NOTE', e.target.value)} + placeholder="가격노트 (ZDLV_PRICE_NOTE)" + /> +
+
+ + updatePoHeader('ZDLV_PRICE_T', e.target.value)} + placeholder="가격유형 (ZDLV_PRICE_T)" />
@@ -601,6 +762,133 @@ export default function ECCSenderTestPage() { + {/* PO 아이템 정보 */} +
+
+

PO 아이템 정보

+ +
+ + {poData.items.map((item, index) => ( + +
+
아이템 #{index + 1}
+ {poData.items.length > 1 && ( + + )} +
+
+
+ + updatePoItem(index, 'ANFNR', e.target.value)} + placeholder="입찰번호 (ANFNR)" + /> +
+
+ + updatePoItem(index, 'ANFPS', e.target.value)} + placeholder="입찰 아이템번호 (ANFPS)" + /> +
+
+ + updatePoItem(index, 'LIFNR', e.target.value)} + placeholder="공급업체 계정 (LIFNR) : 벤더코드" + /> +
+
+ + updatePoItem(index, 'NETPR', e.target.value)} + placeholder="순가격 (NETPR)" + /> +
+
+ + updatePoItem(index, 'PEINH', e.target.value)} + placeholder="가격단위 (PEINH)" + /> +
+
+ + updatePoItem(index, 'BPRME', e.target.value)} + placeholder="주문단위 (BPRME)" + /> +
+
+ + updatePoItem(index, 'NETWR', e.target.value)} + placeholder="순금액 (NETWR)" + /> +
+
+ + updatePoItem(index, 'BRTWR', e.target.value)} + placeholder="총금액 (BRTWR)" + /> +
+
+ + updatePoItem(index, 'LFDAT', e.target.value)} + placeholder="납기일 (LFDAT)" + /> +
+
+ + updatePoItem(index, 'EBELP', e.target.value)} + placeholder="구매오더 품번 (EBELP)" + /> +
+
+ + updatePoItem(index, 'ZCON_NO_PO', e.target.value)} + placeholder="계약번호 (ZCON_NO_PO)" + /> +
+
+
+ ))} +
+ + +
diff --git a/app/[lng]/admin/mdg/page.tsx b/app/[lng]/admin/mdg/page.tsx index 1bf37667..1f4a1ee8 100644 --- a/app/[lng]/admin/mdg/page.tsx +++ b/app/[lng]/admin/mdg/page.tsx @@ -34,34 +34,34 @@ const parseCSV = (csv: string): VendorFieldDef[] => { // 기존 샘플 기본값 (필요 시 확장) const sampleDefaults: Record = { - BP_HEADER: 'TEST001', + BP_HEADER: 'TEST002', ZZSRMCD: 'EVCP', - SORT1: 'TEST VENDOR', + SORT1: '테스트 벤더 회사', NAME1: '테스트 벤더 회사', - KTOKK: 'Z001', + KTOKK: 'LIEF', J_1KFTBUS: '제조업', - J_1KFTIND: 'IT', - MASTERFLAG: 'X', - IBND_TYPE: 'U', - ZZREQID: 'TESTUSER01', + J_1KFTIND: '건설업외', + MASTERFLAG: 'V', + IBND_TYPE: 'I', + ZZREQID: 'HUIN84.KIM', ADDRNO: '', NATION: '', COUNTRY: 'KR', - LANGU: 'K', + LANGU: '', POST_CODE1: '06292', CITY1: '서울시', CITY2: '강남구', - REGION: '11', + REGION: '', STREET: '테헤란로 123', TEL_NUMBER: '02-1234-5678', FAX_NUMBER: '02-1234-5679', URI_ADDR: 'https://test.vendor.com', SMTP_ADDR: 'contact@test.vendor.com', - TAXTYPE: 'KR2', - TAXNUM: '123-45-67890', + TAXTYPE: '9501010000000', + TAXNUM: '1234567890', CONSNUMBER: '1', - BP_TX_TYP: 'KR2', - R3_USER: 'Y', + BP_TX_TYP: '9501010000000', + R3_USER: '0', }; export default function MDGTestPage() { -- cgit v1.2.3