فهرست منبع

Merge branch 'card007' into develop

card007 5 سال پیش
والد
کامیت
c9758ddd21

+ 0 - 2
src/main/java/com/style24/admin/biz/dao/TsaDeliveryDao.java

@@ -112,6 +112,4 @@ public interface TsaDeliveryDao {
 	 * @since 2020. 11. 11
 	 */	
 	Collection<Delivery> getDeliveryWithdrawDirectiveList(Delivery delivery);
-
-		
 }

+ 0 - 1
src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java

@@ -182,5 +182,4 @@ public class TsaDeliveryService {
 	public Collection<Delivery> getDeliveryWithdrawDirectiveList(Delivery delivery) {
 		return deliveryDao.getDeliveryWithdrawDirectiveList(delivery);
 	}
-	
 }

+ 2 - 1
src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -11,10 +11,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.web.parameter.GagaMap;
-import com.style24.admin.biz.dao.TsaOrderChangeDao;
 import com.style24.admin.biz.dao.TsaOrderDao;
+import com.style24.admin.biz.dao.TsaOrderChangeDao;
 import com.style24.admin.biz.dao.TsaRefundDao;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;

+ 9 - 4
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -16,6 +16,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
+import com.style24.admin.biz.service.TsaDeliveryService;
 import com.style24.admin.biz.service.TsaOrderChangeService;
 import com.style24.admin.biz.service.TsaOrderService;
 import com.style24.admin.biz.service.TsaRendererService;
@@ -25,6 +26,7 @@ import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 
@@ -60,6 +62,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 	private TscOrderRefundService coreOrderRefundService;
 	
 	/**
+	 * 취소요청 화면
 	 * 취소신청 (NAPY, 외부몰) (배치)
 	 * @param OrderChange - 주문취소신청정보
 	 * @return
@@ -400,13 +403,15 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
 
-		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 반품사유
-		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 반품요청대상 목록
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G689"));	// 교환사유
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 교환요청대상 목록
 		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
 		mav.addObject("ordNo"						, ordNo);
-		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));			// 배송정보
+		mav.addObject("orderDelvAddrInfo"			, orderService.getDeliveryAddrList(order));			// 배송정보
+		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));	// 전화번호국번
+		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));	// (휴대전화)번호국번
 
-		mav.setViewName("order/ReturnRequestForm");
+		mav.setViewName("order/ExchangeRequestForm");
 
 		return mav;
 	}

+ 13 - 0
src/main/java/com/style24/persistence/domain/Delivery.java

@@ -298,4 +298,17 @@ public class Delivery extends TscBaseDomain {
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiOrdDtlStat = null;
+	
+	// 출고처 정보
+	private String delvAssignGrade;
+	private String stockApplRate;
+	private String delvLocZipcode;
+	private String delvLocBaseAddr;
+	private String delvLocDtlAddr;
+	private String rtnLocZipcode;
+	private String rtnLocBaseAddr;
+	private String rtnLocDtlAddr;
+	private String rtnLocTelno;
+	private String rtnLocNm;
+	private String invoicePrintType;
 }

+ 403 - 0
src/main/java/com/style24/persistence/domain/Order.java

@@ -0,0 +1,403 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+
+import com.style24.persistence.TscPageRequest;
+import lombok.Data;
+
+/**
+ * 주문 Domain
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@SuppressWarnings("serial")
+@Data
+public class Order extends TscBaseDomain {
+	
+	// 주문마스터
+	private int ordNo;
+	private String mallGb;
+	private String mallGbNm;
+	private String ordDt;
+	private String payDt;
+	private int custNo;
+	private String ordNm;
+	private String ordTelno;
+	private String siteCd;
+	private String siteCdNm;
+	private int npayOrdNo;
+	private String frontGb;
+	private String frontGbNm;
+	private String extmallNm;
+
+	// 주문상세
+	private int ordDtlNo;
+	private String ordExchGb;
+	private String ordDtlStat;
+	private int orgOrdDtlNo;
+	private String supplyCompCd;
+	private String goodsCd;
+	private String formalGb;
+	private String formalGbNm;
+	private String goodsType;
+	private int listPrice;
+	private int currPrice;
+	private double dcRate;
+	private int optAddPrice;
+	private int ordQty;
+	private int ordAmt;
+	private int cnclRtnQty;
+	private int cnclRtnAmt;
+	private int cpn1CpnSq;
+	private int cpn1DcAmt;
+	private int tmtb1Sq;
+	private int tmtb1DcAmt;
+	private int tmtb2Sq;
+	private int tmtb2DcAmt;
+	private int goodsCpnSq;
+	private int goodsCpnDcAmt;
+	private int cartCpnSq;
+	private int cartCpnDcAmt;
+	
+	private int pntDcAmt;
+	private int prePntDcAmt;
+	private int savePntAmt;
+	
+	private int realOrdAmt;
+	private String venderId;
+	private String extmallId;
+	private String agentOrderId;
+	private String extmallOrderId;
+	private String changeableYn;
+	private String changeFeeFreeYn;
+	private String returnableYn;
+	private String returnFeeFreeYn;
+	
+	private String soldoutYn;
+	private String soldoutMemo;
+	private String soldoutRegNo;
+	private String soldoutRegDt;
+	private int delvAddrSq;
+	private String shotDelvYn;
+	private String giftPackYn;
+	
+	private String delvLocCd;
+	private String delvAssigngDt;
+	private String delvAddignStat;
+	private String dstrbtMemo;
+	private String delvStdt;
+	private String delvEddt;
+	
+	private String shipCompCd;
+	private String invoiceNo;
+	private String invoiceSendYn;
+	private String sellStoreCd;
+	private double sellFeeRate;
+	
+	private String afLinkCd;
+	private String ithrCd;
+	private String contentsLoc;
+	
+	private int planDtlsq;
+	private int socialSq;
+	
+	private String condition;
+	private String[] conditions = null;
+	
+	private String stDate;
+	private String edDate;
+	private String searchDateGb;
+	private String orderNm;
+	private int custId;
+	private String orderPhnno;
+	private String vendorId;
+	private String sizeCd;
+	private String goodsNm;
+	private String payMeans;
+	private String chgStat;
+	private String recipNm;
+	private String chgGb;
+	private String wdInvoiceSendYn;
+	
+	// 상품정보
+	private String imgPath1;
+	private String sysImgNm;
+	private String brandCd;
+	private String optCd1;
+	private String optCd2;
+	private String goodsTypeNm;
+	private String brandEnm;
+	private String itemCd;
+	private String goodsNum;
+	private String supplyGoodsCd;
+	private String optCd2s;
+	private int currStockQty;
+	private String currStockQtys;
+	
+	private int totDcAmt;
+	private String dateGbn;
+	private String mallCd;
+	private String search;
+	
+	/* Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdStat;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdDtlStat;
+	
+	private int sumOrdAmt;
+	private int sumOrdCnclAmt;
+	private int sumRealPayAmt;
+	private int ordNoCnt;
+	private int sumOrdQty;
+	private int sumOrdCnclQty;
+	
+	private String excelFileNm;
+	
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private int[] ordNoList;
+	
+	private String delYn;
+	private String recipPhnno;
+	private String recipTelno;
+	private String recipZipNo;
+	private String recipBaseAddr;
+	private String recipDtlAddr;
+	private String ordEmail;
+	private String delvMemo;
+	private String delvAddrEditYn;
+	private String exchGbNm;
+	
+	private String escrowYn;
+	private String payMeansNm;
+	private String cardNm;
+	private String vaBank;
+	private String pgTradeNo;
+	private String payStat;
+	private String payStatNm;
+	private int payAmt;
+	private String vaDeadLine;
+	
+	private String delvFeeGb;
+	private String delvFeeGbNm;
+	private int delvFee;
+	private String delvUsacYn;
+	private String delvUsacDt;
+	private int delvFeeSq;
+	
+	private String coundelClsf;
+	private String relGoodsCd;
+	private String questTitle;
+	private String questDt;
+	private String ansDt;
+	private int andNo;
+	
+	private int ordChgSq;
+	private String chgGbNm;
+	private String chgStatNm;
+	private String chgReason;
+	private String chgReasonNm;
+	private String chgMemo;
+	private String chgerNm;
+	private String chgerPhnno;
+	private String chgerZipNo;
+	private String chgerBaseAddr;
+	private String chgerDtlAddr;
+	private String wdInvoiceNo;
+	
+	private String supplyCompNm;
+	private String brandKnm;
+	private String ordDtlStatNm;	
+	private String ordPhnno;
+	
+	private String custGrade;
+	private String custGradeNm;
+	private String custGb;
+	private String custGbNm;
+	private String managedRsn;
+	private String managedRsnNm;
+	
+	private int itemQty;
+	private int itemPrice;
+	private String itemNm;
+	private int gfcdUseAmt;
+	
+	// Pagination
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
+	
+	// 주문문의 1:1 응답 칼럼
+	private String counselClsfNm;
+	private String ansNo;
+	private String ansNm;
+	private String regNm;
+	private String updNm;
+	
+	// 주문메모칼럼
+	private int orderMemoSq;
+	private String memo;
+	private String orgFileNm;
+	private String sysFileNm;
+	
+	// 사은품칼럼
+	private int ordFreegiftSq;
+	private int freegiftSq;
+	private String freegiftNm;
+	private int freegiftValSq;
+	private int usePoint;
+	private int seq;
+	private String userNm;
+	
+	// 환불계좌칼럼
+	private String raBank;
+	private String raBankNm;
+	private String raNo;
+	private String raNm;
+	private String defaultYn;
+	
+	// 주문상세변경내역칼럼
+	private String userId;
+	private String updId;
+	private String shipCompNm;
+	private String shipCompId;
+	
+	// 주문쿠폰
+	private int cpnSq;
+	private int cpnId;
+	private int cpnDcAmt;
+	private String cpnType;
+	private String targetCd1;
+	private String targetCd2;
+	private String cpnNm;
+	private String dcWay;
+	private int dcPval;
+	private int dcMval;
+	private int dcAval;
+	
+	// 주문포인트
+	private int pntPrate;
+	private int pntMrate;
+	private int pntAmt;
+	private String occurGb;
+	private String occurGbNm;
+	private String occurDtlDesc;
+	
+	// 주문상품권
+	private String gfcdNm;
+	private String gfcdNo;
+	private int gfcdAmt;
+	private int chgGfcdAmt;
+	private int usGfcdAmt;
+	private int rmGfcdAmt;
+	
+	// 다다익선
+	private int tmtbSq;
+	private String tmtbNm;
+	private int tmtbDcAmt;
+	
+	// 상태변경
+	private String g20;
+	private String g30;
+	private String g40;
+	private String g50;
+	private String g55;
+	private String g60;
+	
+	// 취소요청
+	private String cncWait;
+	private int ordReqChgQty;
+	private int itemReqChgQty;
+	private int itemOrdPrice;
+	private int minOrdAmt;
+	private int orgDelvFee;
+	private String delvFeeCd;
+	private int ordCanChgQty;
+	private String allCanYn;
+	
+	private String addDelvFeeYn;
+	private int addDelvFee;
+	private int ordDtlItemSq;
+	
+	private int paySq;
+	private int refundAmt;
+	private int rfCpn1Amt;
+	private int rfTmtb1Amt;
+	private int rfTmtb2Amt;
+	private int rfGoodsCpnAmt;
+	private int rfCartCpnAmt;
+	private int rfPntAmt;
+	private int rfPrePntAmt;
+	private int rfGfcdUseAmt;
+
+	private int pgCpnAmt;
+	private int npayPntAmt;
+	private String payGb;
+	private String pgGb;
+	private String pgTid;
+	private String cardType;
+	private String cardKind;
+	private String cardBank;
+	private String cardMips;
+	private String cardPcableYn;
+	private String vaNo;
+	private String vaNm;
+	private String vaDeadline;
+	private String telecom;
+
+	private String accountNo;
+	private String accountNm;
+	private String bankCd;
+	private String bankNm;
+
+	private int realDelvAmt;
+	private int delvCpnSq;
+	private int delvCpnDcAmt;
+
+	private int chgQty;
+	private int rtnDelvFee;
+	private int excDelvFee;
+
+	private String[] ordDtlStatArr;
+	
+	// 교환요청
+	private String ordChgOpt;
+	private String rtnLocZipcode;
+	private String rtnLocBaseAddr;
+	private String rtnLocDtlAddr;
+	private String rtnLocTelno;
+	private String rtnLocNm;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 0 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml

@@ -400,5 +400,4 @@
 		/* TsaDelivery.getDeliveryWithdrawDirectiveList */
 		SELECT '1' FROM DUAL
 	</select>
-	
 </mapper>

+ 53 - 17
src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml

@@ -51,6 +51,14 @@
 		     , DFP.RTN_DELV_FEE
 		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE AS EXC_DELV_FEE
 		     , 0			AS ORD_CAN_CHG_QTY
+		     , VS.OPT_CD2S
+		     , VS.CURR_STOCK_QTYS
+		     , DL.RTN_LOC_NM
+		     , DL.RTN_LOC_ZIPCODE
+		     , DL.RTN_LOC_BASE_ADDR
+		     , DL.RTN_LOC_DTL_ADDR
+		     , DL.RTN_LOC_TELNO
+		     , DL.SELF_YN
 		FROM   TB_ORDER_DETAIL OD
 		INNER  JOIN TB_GOODS G1
 		ON     OD.GOODS_CD = G1.GOODS_CD
@@ -90,6 +98,34 @@
 		ON     DF.SUPPLY_COMP_CD  = DFP.SUPPLY_COMP_CD 
 		AND    DF.DELV_FEE_CD = DFP.DELV_FEE_CD 
 		AND    DFP.USE_YN = 'Y'
+		INNER  JOIN (
+			SELECT TDL.DELV_LOC_CD
+			     , TDL.RTN_LOC_NM
+			     , TDL.RTN_LOC_TELNO
+			     , TDL.RTN_LOC_ZIPCODE
+			     , TDL.RTN_LOC_BASE_ADDR
+			     , TDL.RTN_LOC_DTL_ADDR
+			     , CASE WHEN TSC.DISTRIBUTION_GB IN ('G065_10', 'G065_11', 'G065_12')
+						THEN 'Y'
+						ELSE 'N'
+				   END AS SELF_YN
+			  FROM TB_DELIVERY_LOC TDL
+			 INNER JOIN TB_SUPPLY_COMPANY TSC
+			    ON TDL.SUPPLY_COMP_CD = TSC.SUPPLY_COMP_CD
+		) DL
+		ON     OD.DELV_LOC_CD = DL.DELV_LOC_CD
+		INNER  JOIN (
+			SELECT GOODS_CD
+			     , OPT_CD1
+			     , GROUP_CONCAT(OPT_CD2 ORDER BY DISP_ORD DESC, OPT_CD2 SEPARATOR ',')        AS OPT_CD2S
+			     , GROUP_CONCAT(CURR_STOCK_QTY ORDER BY DISP_ORD DESC, OPT_CD2 SEPARATOR ',') AS CURR_STOCK_QTYS
+			  FROM VW_STOCK
+			 WHERE GOODS_CD IN (SELECT ITEM_CD FROM TB_ORDER_DETAIL_ITEM WHERE ORD_NO = #{ordNo})
+			   AND (CURR_STOCK_QTY - BASE_STOCK_QTY) > 0
+			 GROUP BY GOODS_CD, OPT_CD1
+		) VS
+		ON     ODI.ITEM_CD = VS.GOODS_CD
+		AND    ODI.OPT_CD1 = VS.OPT_CD1
 		WHERE  1=1
 		<if test="ordDtlStatArr != null and ordDtlStatArr != ''">
         AND    OD.ORD_DTL_STAT IN
@@ -100,6 +136,7 @@
 		AND    OD.ORD_NO = #{ordNo}
 		GROUP  BY OD.ORD_NO
 		     , OD.ORD_DTL_NO
+		     , ODI.ORD_DTL_ITEM_SQ
 	    ORDER  BY OD.ORD_NO
 	         , OD.ORD_DTL_NO
 	</select>
@@ -140,9 +177,9 @@
 			 , #{addPayCost}
 			 , #{addPayAmt}
 			 , #{regNo}
-			 , SYSDATE()
+			 , NOW()
 			 , #{updNo}
-			 , SYSDATE()
+			 , NOW()
 		)
 	</insert>
 
@@ -168,7 +205,7 @@
 		     , ODI.REAL_ORD_AMT 	= ODI.REAL_ORD_AMT 			- #{realOrdAmt}
 		     , ODI.GFCD_USE_AMT 	= ODI.GFCD_USE_AMT 			- #{gfcdUseAmt}
 		     , ODI.UPD_NO 			= #{updNo}
-		     , ODI.UPD_DT 			= SYSDATE()
+		     , ODI.UPD_DT 			= NOW()
 		WHERE  1=1
 		AND    ODI.ORD_NO 			= #{ordNo} 
 		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
@@ -259,7 +296,7 @@
 		AND    OP.OPT_CD2 = ODI.OPT_CD2
 		SET    OP.CURR_STOCK_QTY = OP.CURR_STOCK_QTY + (ODI.ITEM_QTY * #{ordCanChgQty})
 		     , OP.UPD_NO = #{updNo}
-		     , OP.UPD_DT = SYSDATE()
+		     , OP.UPD_DT = NOW()
 		WHERE  1=1
 		AND    ODI.ORD_NO 			= #{ordNo} 
 		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
@@ -502,11 +539,11 @@
 			, #{ordDtlNo}
 			, #{chgQty}
 			, #{chgStat}
-			, SYSDATE()
+			, NOW()
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 			, #{updNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 	
@@ -545,7 +582,7 @@
 			, UPD_DT
 		) 
 		SELECT ORD_NO
-		 	 , SYSDATE()
+		 	 , NOW()
 			 , PAY_MEANS
 			 , #{payAmt}
 			 , #{pgCpnAmt}
@@ -570,9 +607,9 @@
 			 , ESCROW_YN
 			 , #{ordChgSq}
 			 , #{regNo}
-			 , SYSDATE()
+			 , NOW()
 			 , #{updNo}
-			 , SYSDATE()
+			 , NOW()
 		FROM   TB_PAYMENT 
 		WHERE  1=1
 		AND    ORD_NO = #{ordNo}
@@ -618,7 +655,7 @@
 			, #{rfPrePntAmt}
 			, #{rfGfcdUseAmt}
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 
@@ -656,9 +693,9 @@
 			, 'N'
 			, null
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 			, #{updNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 	
@@ -668,7 +705,7 @@
 		UPDATE TB_ORD_FREEGIFT_VAL
 		SET    DEL_YN= 'N'
 		     , UPD_NO = #{updNo}
-		     , UPD_DT = SYSDATE()
+		     , UPD_DT = NOW()
 		WHERE  FREEGIFT_VAL_SQ IN (
 			SELECT OFRV.FREEGIFT_VAL_SQ 
 			FROM   TB_ORD_FREEGIFT OFR
@@ -750,14 +787,13 @@
 			, 'N'
 			, 'N'
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 			, #{updNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 	
 	
-	
 </mapper>
 
 

+ 877 - 0
src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html

@@ -0,0 +1,877 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ExchangeRequestForm.html
+ * @desc    : 교환요청 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.15   card007     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1400" data-height="600">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>교환요청</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupExchangeRequestForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="exchangeRequestFrm" name="exchangeRequestFrm" action="/orderChange/exchange" method="post" target="hdFrameForOrderExchange">
+				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="chgReason" value=""/>
+				<input type="hidden" name="chgReasonDesc" value=""/>
+				
+				<h4>주문정보</h4>
+				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+
+				<h4>배송비정보</h4>
+				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				
+				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
+					<button type="button" class="btn btn-success" id="fnExchangeRequestSubmit" onclick="fnExchangeRequestSubmit();">요청</button>
+				</div>
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>교환사유 <i class="star"></i></th>
+							<td>
+								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
+									<option value="">[선택하세요]</option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>귀책사유</th>
+							<td><span id="imputeReason"></span></td>
+						</tr>
+						<tr>
+							<th>회수방법</th>
+							<td>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="W" onCLick="fnChangeQty()" checked="checked"/>회수요청<span></span></label>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="D" onCLick="fnChangeQty()"/>직접발송<span></span></label>
+							</td>
+							<th>추가배송비</th>
+							<td id="addDelvFee"></td>
+						</tr>
+						<tr>
+							<th>요청메모</th>
+							<td colspan="3">
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="교환사유를 300자내외로 작성해 주세요"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<h4>회수지 정보</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>보내는사람 <i class="star"></i></th>
+							<td colspan="3"><input type="text" name ="chgerNm" class=""/></td>
+						</tr>
+						<tr>
+							<th>회수지주소 <i class="star"></i></th>
+							<td colspan="3">
+								<input type="text" name ="chgerZipNo" class="w100" readonly="readonly"/>
+								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
+								<input type="text" name ="chgerBaseAddr" class="w300"/>
+								<input type="text" name ="chgerDtlAddr" class="w300"/>
+							</td>
+						</tr>
+						<tr>
+							<th>일반전화</th>
+							<td>
+								<select name="chgerTelno1" class="w100">
+									<option value="">[선택하세요]</option>
+									<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+								</select>
+								- <input type="text" name ="chgerTelno2" class="w60" value="0000" />
+								- <input type="text" name ="chgerTelno3" class="w60" value="0000" />
+							</td>
+							<th>휴대전화 <i class="star"></i></th>
+							<td>
+								<select name="chgerPhnno1" class="w100">
+									<option value="">[선택하세요]</option>
+									<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+								</select>
+								- <input type="text" name ="chgerPhnno2" class="w60" value="0000" />
+								- <input type="text" name ="chgerPhnno3" class="w60" value="0000" />
+							</td>
+						</tr>
+					</tbody>
+				</table>
+
+				<h4>교환지 정보</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+					<tr>
+						<th>받는사람 <i class="star"></i></th>
+						<td colspan="3"><input type="text" name ="recipNm" class=""/></td>
+					</tr>
+					<tr>
+						<th>교환지주소 <i class="star"></i></th>
+						<td colspan="3">
+							<input type="text" name ="recipZipNo" class="w100" readonly="readonly"/>
+							<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
+							<input type="text" name ="recipBaseAddr" class="w300"/>
+							<input type="text" name ="recipDtlAddr" class="w300"/>
+						</td>
+					</tr>
+					<tr>
+						<th>일반전화</th>
+						<td>
+							<select name="recipTelno1" class="w100">
+								<option value="">[선택하세요]</option>
+								<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+							</select>
+							- <input type="text" name ="recipTelno2" class="w60" value="0000" />
+							- <input type="text" name ="recipTelno3" class="w60" value="0000" />
+						</td>
+						<th>휴대전화 <i class="star"></i></th>
+						<td>
+							<select name="recipPhnno1" class="w100">
+								<option value="">[선택하세요]</option>
+								<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+							</select>
+							- <input type="text" name ="recipPhnno2" class="w60" value="0000" />
+							- <input type="text" name ="recipPhnno3" class="w60" value="0000" />
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 교환대상목록
+var ordNo 					= [[${ordNo}]];									// 주문번호
+var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
+var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var orderDelvAddrInfo		= [[${orderDelvAddrInfo}]];						// 회수지정보
+var addDelvFee				= 0;											// 추가배송비
+var addDelvFeeList			= [];											// 추가배송비정보
+
+var temp1 = true;
+var temp2 = false;
+
+// 1. 주문정보(교환대상)
+var columnExchangeReqList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "단품수량"		
+				, field			: "itemQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{headerName: "교환가능옵션"	, field: "optCd2s"			, width: 200		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "교환옵션"
+				, field			: "ordChgOpt"
+				, width			: 100
+				, cellClass		: "text-center"
+				, cellRenderer	: function (params) {
+					var optArr			= params.data.optCd2s.split(',');
+					var ordChgOpt = params.data.ordChgOpt;
+
+					var strVal			= '';
+					strVal += '<select class="ordChgOpt" name="ordChgOpt" ordDtlNo="' + params.data.ordDtlNo + '" ordDtlItemSq="' + params.data.ordDtlItemSq + '" onchange="fnChangeOption(this)">';
+					
+					if (gagajf.isNull(ordChgOpt)) {
+						strVal += '<option value="">선택</option>'
+					} else {
+						strVal += '<option value="" selected>선택</option>'
+					}
+
+					$.each(optArr, function(idx,item){
+						if (ordChgOpt == item) {
+							strVal += '<option value="' + item + '" selected>' + item + '</option>';
+						} else {
+							strVal += '<option value="' + item + '">' + item + '</option>';
+						}
+					});
+
+					return strVal;
+				}
+			},
+			{headerName: "재고수량"	, field: "currStockQty"			, width: 100			, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "교환신청수량"
+				, field			: "ordCanChgQty"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var ordQty 			= parseInt(params.data.ordQty);
+					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
+					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
+					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+					
+					var strVal 			= "";
+					strVal += '<select class="ordCanChgQty ' + params.data.ordDtlNo + '" name="ordCanChgQty" ordDtlNo="'+params.data.ordDtlNo+'" onchange="fnChangeQty(this)">';
+					
+					for (i=0 ; i<=ordCanChgQty ; i++) {
+						if (i == params.data.ordCanChgQty) {
+							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
+						} else {
+							strVal += "	<option value='"+i+"'>"+i+"</option>";
+						}
+					}
+				
+					strVal += "</select>";
+					return strVal;
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsExchangeReqList = gagaAgGrid.getGridOptions(columnExchangeReqList);
+
+// Add on options
+gridOptionsExchangeReqList.suppressRowClickSelection = true;
+gridOptionsExchangeReqList.rowSelection = 'multiple';
+
+// 3. 배송비정보(환불정보)
+var columnDelvCdList = [
+	{headerName: "업체"			, field: "supplyCompNm"		, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+	{
+		headerName		: "추가배송비"
+		, field			: "addDelvFee"
+		, width			: 100
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp2
+	},
+	{headerName: "반품지명"		, field: "rtnLocNm"			, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지전화번호"	, field: "rtnLocTelno"		, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지우편번호"	, field: "rtnLocZipcode"	, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지기본주소"	, field: "rtnLocBaseAddr"	, width: 300	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지상세주소"	, field: "rtnLocDtlAddr"	, width: 300	, cellClass: 'text-center', hide: temp2},
+];
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
+</script>
+
+<script>
+//현재 사유는 고객 입니다.
+var isCustomer = false;
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrReasonCd = reasonCd.split(":");
+	var customerReasonArr = ['G689_10', 'G689_30'];
+	
+	isCustomer = false;
+
+	// 취소, 반품, 교환 사유 판단
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == arrReasonCd[0]) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유설정 회사, 고객
+	if (isCustomer) {
+		$("#imputeReason").text("고객");
+	} else {
+		$("#imputeReason").text("회사");
+	}
+
+	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
+	
+	// 추가배송비 설정
+	fnChangeQty();
+}
+
+// 교환요청
+var fnExchangeRequestSubmit = function () {
+	var temp 		= false;
+	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
+	var allCanYn 	= "N";
+
+	// 1. 교환수량 체크
+	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+		if (cancelRequestTargetList[i].ordCanChgQty > 0) {
+			temp = true;
+		}
+	}
+
+	if (temp == false) {
+		mcxDialog.alert('취소 할 수량을 입력하세요.');
+		return;
+	}
+
+	// 3. 교환사유 체크
+	var chgReason = $("#exchangeRequestFrm select[name=selectChgReason]").val();
+
+	if (gagajf.isNull(chgReason)) {
+		mcxDialog.alert("취소사유를 입력하세요."); 
+		return ;
+	}
+
+	// 5. 회수지정보설정
+	var chgerNm			= $("#exchangeRequestFrm input[name=chgerNm]").val();
+	var chgerZipNo		= $("#exchangeRequestFrm input[name=chgerZipNo]").val();
+	var chgerBaseAddr	= $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
+	var chgerDtlAddr	= $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
+	
+	var chgerPhnno1		= $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
+	var chgerPhnno2		= $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
+	var chgerPhnno3		= $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
+	
+	var chgerTelno1		= $("#exchangeRequestFrm select[name=chgerTelno1]").val();
+	var chgerTelno2		= $("#exchangeRequestFrm input[name=chgerTelno2]").val();
+	var chgerTelno3		= $("#exchangeRequestFrm input[name=chgerTelno3]").val();
+
+	if (gagajf.isNull(chgerZipNo)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerBaseAddr)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerDtlAddr)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	
+	if (gagajf.isNull(chgerPhnno1)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerPhnno2)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerPhnno3)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+
+	var chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
+	var chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
+	var chgerEmail 		= orderInfoList[0].ordEmail;
+
+	// 교환지정보 설정
+	var recipNm			= $("#exchangeRequestFrm input[name=chgerNm]").val();
+	var recipZipNo		= $("#exchangeRequestFrm input[name=chgerZipNo]").val();
+	var recipBaseAddr	= $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
+	var recipDtlAddr	= $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
+
+	var recipPhnno1		= $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
+	var recipPhnno2		= $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
+	var recipPhnno3		= $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
+
+	var recipTelno1		= $("#exchangeRequestFrm select[name=chgerTelno1]").val();
+	var recipTelno2		= $("#exchangeRequestFrm input[name=chgerTelno2]").val();
+	var recipTelno3		= $("#exchangeRequestFrm input[name=chgerTelno3]").val();
+	
+	if (gagajf.isNull(recipZipNo)) {
+		mcxDialog.alert("교환지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipBaseAddr)) {
+		mcxDialog.alert("교환지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipDtlAddr)) {
+		mcxDialog.alert("교환지주소를 입력하세요."); return;
+	}
+	
+	if (gagajf.isNull(recipPhnno1)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipPhnno2)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipPhnno3)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	
+	var recipPhnno 		= recipPhnno1 + recipPhnno2 + recipPhnno3;
+	var recipTelno 		= recipTelno1 + recipTelno2 + recipTelno3;
+	var recipEmail 		= orderInfoList[0].ordEmail;
+	
+	var jsonObj = {
+		"ordNo"				: $('#exchangeRequestFrm input[name=ordNo]').val()
+		,"chgReason" 		: $('#exchangeRequestFrm input[name=chgReason]').val()
+		,"chgMemo"			: $('#chgMemo').val()
+		,"exchangeReqList" 	: cancelRequestTargetList
+		,"isCustomer"		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipNo"		: chgerZipNo
+		,"chgerBaseAddr"	: chgerBaseAddr
+		,"chgerDtlAddr"		: chgerDtlAddr
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
+		,"recipNm"			: recipNm
+		,"recipEmail"		: recipEmail
+		,"recipZipNo"		: recipZipNo
+		,"recipBaseAddr"	: recipBaseAddr
+		,"recipDtlAddr"		: recipDtlAddr
+		,"recipPhnno"		: recipPhnno
+		,"recipTelno"		: recipTelno
+	}
+
+	// 주문번호, 교환사유, 교환메모, (취소, 반품, 교환 신청 정보 목록)
+	var jsonData = JSON.stringify(jsonObj);
+	
+	mcxDialog.confirm('교환요청하시겠습니까?', {
+		cancelBtnText		: "반품",
+		sureBtnClick		: function(){
+			// 교환 실행
+			gagajf.ajaxJsonSubmit(
+				'/orderChange/exchangeRequest/'
+				, jsonData
+				, function() {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+					uifnPopupClose('popupReturnRequestForm');
+				}
+			);
+		}
+	});
+}
+
+// 우편번호 DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function(loc) {
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 우편번호와 주소 정보를 해당 필드에 넣는다.
+			if (loc == 'withdraw') {
+				$('#exchangeRequestFrm input[name=chgerZipNo]').val(data.zonecode);
+				$('#exchangeRequestFrm input[name=chgerBaseAddr]').val(cfnGetDaumRoadAddr(data));
+				$('#exchangeRequestFrm input[name=chgerDtlAddr]').focus();
+			} else if (loc == 'exchange') {
+				$('#exchangeRequestFrm input[name=recipZipNo]').val(data.zonecode);
+				$('#exchangeRequestFrm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
+				$('#exchangeRequestFrm input[name=recipDtlAddr]').focus();
+			}
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
+	
+	cfnOpenDaumAddr(daumZip);
+}
+
+// 회수지정보 설정
+var fnSetChger = function(){
+	var data = orderDelvAddrInfo[0];
+	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
+	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
+	
+	$("#exchangeRequestFrm input[name=chgerNm]").val(data.recipNm);
+	$("#exchangeRequestFrm input[name=chgerZipNo]").val(data.recipZipNo);
+	$("#exchangeRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
+	$("#exchangeRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
+	
+	if (spRecipPhnno) {
+		$("#exchangeRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
+		$("#exchangeRequestFrm input[name=chgerPhnno2]").val(spRecipPhnno[1]);
+		$("#exchangeRequestFrm input[name=chgerPhnno3]").val(spRecipPhnno[2]);
+	}
+	
+	if (spRecipTelno) {
+		$("#exchangeRequestFrm select[name=chgerTelno1]").val(spRecipTelno[0]);
+		$("#exchangeRequestFrm input[name=chgerTelno2]").val(spRecipTelno[1]);
+		$("#exchangeRequestFrm input[name=chgerTelno3]").val(spRecipTelno[2]);
+	}
+}
+
+// 교환지정보 설정
+var fnSetExchangeAddr = function(){
+	var data = orderDelvAddrInfo[0];
+	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
+	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
+	
+	$("#exchangeRequestFrm input[name=recipNm]").val(data.recipNm);
+	$("#exchangeRequestFrm input[name=recipZipNo]").val(data.recipZipNo);
+	$("#exchangeRequestFrm input[name=recipBaseAddr]").val(data.recipBaseAddr);
+	$("#exchangeRequestFrm input[name=recipDtlAddr]").val(data.recipDtlAddr);
+	
+	if (spRecipPhnno) {
+		$("#exchangeRequestFrm select[name=recipPhnno1]").val(spRecipPhnno[0]);
+		$("#exchangeRequestFrm input[name=recipPhnno2]").val(spRecipPhnno[1]);
+		$("#exchangeRequestFrm input[name=recipPhnno3]").val(spRecipPhnno[2]);
+	}
+	
+	if (spRecipTelno) {
+		$("#exchangeRequestFrm select[name=recipTelno1]").val(spRecipTelno[0]);
+		$("#exchangeRequestFrm input[name=recipTelno2]").val(spRecipTelno[1]);
+		$("#exchangeRequestFrm input[name=recipTelno3]").val(spRecipTelno[2]);
+	}
+}
+
+// 교환옵션 변경 이벤트
+var fnChangeOption = function(param) {
+	var optCd2 = $(param).val();
+	var ordDtlNo = $(param).attr('ordDtlNo');
+	var ordDtlItemSq = $(param).attr('ordDtlItemSq');
+
+	$.each(cancelRequestTargetList, function(idx, item){
+		if (item.ordDtlNo == ordDtlNo && item.ordDtlItemSq == ordDtlItemSq) {
+			var stockQtyArr = item.currStockQtys.split(',');
+			var sizeCdArr = item.optCd2s.split(',');
+			var stockIdx = sizeCdArr.indexOf(optCd2);
+			var stockQty = stockQtyArr[stockIdx];
+			item.currStockQty = stockQty;
+			item.ordChgOpt = optCd2;
+		}
+	});
+	
+	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+}
+
+// 교환수량 변경 이벤트
+var fnChangeQty = function(param) {
+	var ordCanChgQty = $(param).val();
+	var ordDtlNo = $(param).attr('ordDtlNo');
+	var exchangeRequestTargetList = [];
+
+	$.each(cancelRequestTargetList, function(idx, item){
+		if (item.ordDtlNo == ordDtlNo) {
+			if (gagajf.isNull(item.ordChgOpt)) {
+				mcxDialog.alert('교환옵션을 선택해주세요.');
+				return false;
+			}
+			
+			//var optCd2 = item.ordChgOpt;
+			//var stockQtyArr = item.currStockQtys.split(',');
+			//var sizeCdArr = item.optCd2s.split(',');
+			//var stockIdx = sizeCdArr.indexOf(optCd2);
+			//var stockQty = stockQtyArr[stockIdx];
+
+			//if (stockQty < ordCanChgQty) {
+			//	mcxDialog.alert(item.itemNm + ' ' + optCd2 + '의 재고수량이 부족합니다.');
+			//} else {
+			//	item.ordCanChgQty = ordCanChgQty;
+			//}
+			
+			item.ordCanChgQty = ordCanChgQty;
+			
+			if (ordCanChgQty > 0) {
+				exchangeRequestTargetList.push(item);
+			}
+		} else if (item.ordCanChgQty > 0) {
+			exchangeRequestTargetList.push(item);
+		}
+	});
+
+	// 추가배송비 설정
+	fnAddDelvFee(exchangeRequestTargetList);
+
+	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+}
+
+// 추가배송비 설정
+var fnAddDelvFee = function (exchangeRequestTargetList) {
+	var delvCdList = [];
+	var delvFeeList = [];
+	var delvFee = 0;
+
+	// 고객 귀책사유에 한하여 추가배송비 설정
+	$.each(exchangeRequestTargetList, function (idx, item) {
+		if (!delvCdList.includes(item.delvFeeCd)) {
+			if (isCustomer) {
+				var delvFeeTmp = $('#wdGb:checked').val() == 'W' ? item.excDelvFee : item.rtnDelvFee;
+				delvFee += delvFeeTmp;
+				item.addDelvFeeYn = 'Y';
+				item.addDelvFee = delvFeeTmp;
+			} else {
+				item.addDelvFeeYn = 'N';
+				item.addDelvFee = 0;
+			}
+
+			delvCdList.push(item.delvFeeCd);
+			delvFeeList.push(item);
+		}
+	});
+
+	addDelvFee = delvFee;
+	addDelvFeeList = delvFeeList;
+
+	// 회수방법 > 직접발송일 경우 그리드 표시
+	if ($('#wdGb:checked').val() == 'D') {
+		gridOptionsDelvCdList.api.setRowData(addDelvFeeList);
+	} else {
+		gridOptionsDelvCdList.api.setRowData();
+	}
+	
+	$('#addDelvFee').text(addDelvFee + '원');
+}
+
+$(document).ready(function() {
+	// 1. 그리드생성
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsExchangeReqList);			// 주문정보
+	//gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsExchangeReqToBeList);		// 취소정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
+	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
+	gagaAgGrid.hideStatusBar('gridDelvCdList');
+	
+	// 3. 회수지정보설정
+	fnSetChger();
+	
+	// 4. 교환지정보설정
+	fnSetExchangeAddr();
+});
+</script>
+</html>
+
+
+
+
+