jsh77b 5 anni fa
parent
commit
81b9687a58

+ 11 - 1
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderChangeDao.java

@@ -18,7 +18,7 @@ import com.style24.persistence.domain.OrderChange;
 public interface TsaOrderChangeDao {
 	
 	/**
-	 * 주문상세 > 주문취소대상목록
+	 * 주문상세 > 주문취소신청 > 주문취소대상목록
 	 *
 	 * @param Order - 주문 정보
 	 * @return
@@ -27,6 +27,16 @@ public interface TsaOrderChangeDao {
 	 */
 	Collection<Order> getCancelRequestTargetList(Order order);
 	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문반품대상목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	Collection<Order> getReturnRequestTargetList(Order order);
+	
 	/**
 	 * 주문상세 > 주문취소신청 > 주문변경정보 등록
 	 *

+ 11 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -57,6 +57,17 @@ public class TsaOrderChangeService {
 		return orderChangeDao.getCancelRequestTargetList(order);
 	}
 	
+	/**
+	 * 주문상세 > 주문반품대상목록
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public Collection<Order> getReturnRequestTargetList(Order order) {
+		return orderChangeDao.getReturnRequestTargetList(order);
+	}
+	
 	/**
 	 * 주문상세 > 주문취소 환불 금액 계산
 	 * @param Order

+ 67 - 37
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -63,28 +63,21 @@ public class TsaOrderChangeController extends TsaBaseController {
 	 * @since 2020. 12. 22
 	 */
 	@GetMapping("/cancel/request/form")
-	public ModelAndView cancelRequestFrom(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "cncWait") String cncWait) {
+	public ModelAndView cancelRequestFrom(@RequestParam(value = "ordNo") int ordNo) {
 
 		Order order = new Order();
 		ModelAndView mav = new ModelAndView();
 		
 		order.setOrdNo(ordNo);
-		order.setCncWait(cncWait);
-		
-		//NicePay nicePay = new NicePay();
-		//nicePay.setMerchantId(env.getProperty("pg.nicepay.merchantId"));
-		//nicePay.setMerchantKey(env.getProperty("pg.nicepay.merchantKey"));
 		
 		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
 
 		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
 
-		//mav.addObject("nicePay", nicePay);
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 취소사유
 		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 취소요청대상 목록
 		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
 		mav.addObject("ordNo"						, ordNo);
-		mav.addObject("cncWait"						, cncWait);
 
 		mav.setViewName("order/CancelRequestForm");
 		
@@ -110,6 +103,11 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		List<Order> cancelReqList = cancelReq.getCancelReqList(); // 취소요청정보
 		
+		// To Do List
+		// @ 결품취소로직
+		// @ 주문취소 취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 
+		
 		// 1. 환불금액정보 계산 & 조회
 		mav = orderChangeService.orderCancelRefundAmt(cancelReqList);
 		
@@ -153,6 +151,60 @@ public class TsaOrderChangeController extends TsaBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 취소요청 화면
+	 * 
+	 * @param ordNo - 주문번호
+	 * @param cncWait - 취소대기요청 구분
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	@GetMapping("/return/request/form")
+	public ModelAndView returnRequestFrom(@RequestParam(value = "ordNo") int ordNo) {
+
+		Order order = new Order();
+		ModelAndView mav = new ModelAndView();
+		
+		order.setOrdNo(ordNo);
+		
+		Collection<Order> cancelRequestTargetList = orderChangeService.getReturnRequestTargetList(order);
+
+		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
+
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 반품사유
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 반품요청대상 목록
+		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
+		mav.addObject("ordNo"						, ordNo);
+		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));			// 배송정보
+
+		mav.setViewName("order/ReturnRequestForm");
+		
+		return mav;
+	}
+	
+	
+	
+	/**
+	 * 환불계좌목록
+	 *
+	 * @param ordNo - 주문번호
+	 * @param custNo - 고객고유번호
+	 * @return Collection<TsaOrder>
+	 * @author jsshin
+	 * @since 2020. 10. 16.
+	 */
+	@GetMapping("/refund/account/info/list")
+	@ResponseBody
+	public Collection<Order> getRefundAccountInfoList(@RequestParam(value = "ordNo") int ordNo) {
+		Order order = new Order();
+		order.setOrdNo(ordNo);
+
+		Collection<Order> orderRfAccountInfo = orderChangeService.getRefundAccount(order);
+
+		return orderRfAccountInfo;
+	}
+	
 	/**
 	 * 환불계좌등록 화면
 	 *
@@ -181,7 +233,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 	}
 	
 	/**
-	 * 환불계좌 저장
+	 * 환불계좌등록
 	 *
 	 * @param order - 환불계좌정보
 	 * @return GagaResponse
@@ -196,16 +248,12 @@ public class TsaOrderChangeController extends TsaBaseController {
 		order.setUpdNo(userNo);
 		order.setRegNo(userNo);
 		
-		/*
-		NicePay nicePay = new NicePay();
-		nicePay.setInAccount(order.getRaNo());
-		nicePay.setInBankCode(order.getRaBnk());
-		nicePay.setRaNm(order.getRaNm());
-		String accountCheck = nicepay.checkBankAccount(nicePay);
-		*/
-		
 		String accountCheck = "Y";
-
+		
+		// To Do List
+		// @ 환불계좌인증
+		
+		
 		if ("Y".equals(accountCheck)) {
 			orderChangeService.saveRefundAccount(order);
 		} else {
@@ -215,25 +263,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 	
-	/**
-	 * 환불계좌정보
-	 *
-	 * @param ordNo - 주문번호
-	 * @param custNo - 고객고유번호
-	 * @return Collection<TsaOrder>
-	 * @author jsshin
-	 * @since 2020. 10. 16.
-	 */
-	@GetMapping("/refund/account/info/list")
-	@ResponseBody
-	public Collection<Order> getRefundAccountInfoList(@RequestParam(value = "ordNo") int ordNo) {
-		Order order = new Order();
-		order.setOrdNo(ordNo);
-
-		Collection<Order> orderRfAccountInfo = orderChangeService.getRefundAccount(order);
-
-		return orderRfAccountInfo;
-	}
+	
 }
 
 

+ 1 - 2
style24.admin/src/main/java/com/style24/persistence/domain/Order.java

@@ -29,8 +29,7 @@ public class Order extends TscBaseDomain {
 	private int npayOrdNo;
 	private String frontGb;
 	private String frontGbNm;
-	
-	
+
 	// 주문상세
 	private int ordDtlNo;
 	private String ordExchGb;

+ 137 - 36
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.style24.admin.biz.dao.TsaOrderChangeDao">
 
-	<!-- 주문상세 > 주문취소대상목록 -->
+	<!-- 주문상세 > 주문취소 > 주문취소대상목록 -->
 	<select id="getCancelRequestTargetList" parameterType="Order" resultType="Order">
 		/* order.getCancelRequestTargetList */
 		SELECT OD.ORD_NO
@@ -101,7 +101,7 @@
 	         , OD.ORD_DTL_NO
 	</select>
 	
-	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
+	<!-- 주문상세 > 주문취소 > 주문변경정보 등록-->
 	<insert id="createOrderChange" parameterType="OrderChange" keyProperty="ordChgSq">
 		/* Order.createOrderChange */
 		INSERT INTO TB_ORDER_CHANGE (
@@ -144,7 +144,7 @@
 		WHERE  ORD_NO = #{ordNo}
 	</insert>
 	
-	<!-- 주문사은품취소 -->
+	<!-- 주문상세 > 주문취소 > 주문사은품취소 -->
 	<update id="updateOrdFreegiftDel" parameterType="Order">
 		/* Order.updateOrdFreegiftDel */
 		UPDATE TB_ORD_FREEGIFT_VAL
@@ -167,7 +167,7 @@
 		)
 	</update>
 	
-	<!-- 주문상세 > 주문취소신청 > 주문환불 금액 정보 등록 -->
+	<!-- 주문상세 > 주문취소 > 주문환불 금액 정보 등록 -->
 	<insert id="createRefund" parameterType="Order">
 		/* Order.createRefund */
 		INSERT INTO TB_REFUND (
@@ -209,7 +209,7 @@
 		)
 	</insert>
 	
-	<!-- 주문상세 > 주문취소신청 > 주문환불 결제 정보 등록 -->
+	<!-- 주문상세 > 주문취소 > 주문환불 결제 정보 등록 -->
 	<insert id="createPayment" parameterType="Order" keyProperty="paySq">
 		/* Order.createPayment */
 		INSERT INTO TB_PAYMENT (
@@ -279,7 +279,7 @@
 		AND    PAY_STAT = 'G016_30'
 	</insert>
 	
-	<!-- 주문상세 > 주문취소신청 > 주문 추가 배송 금액 등록-->
+	<!-- 주문상세 > 주문취소 > 주문추가배송금액등록-->
 	<insert id="createDeliveryFee" parameterType="Order">
 		/* Order.createDeliveryFee */
 		INSERT INTO TB_DELIVERY_FEE ( 
@@ -319,7 +319,135 @@
 		)
 	</insert>
 	
-	<!-- 고객환불계좌정보 체크 -->
+	<!-- 주문상세 > 주문반품 > 주문반품대상목록 -->
+	<select id="getReturnRequestTargetList" parameterType="Order" resultType="Order">
+		/* order.getReturnRequestTargetList */
+		SELECT OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+		     , CASE WHEN OD.ORD_DTL_STAT IN ('G013_20', 'G013_30', 'G013_40')
+		            THEN 'Y'
+		            ELSE 'N'
+		             END ALL_CAN_YN
+		     , G1.GOODS_CD
+		     , G1.GOODS_NM
+		     , G1.GOODS_TYPE
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
+		     , ODI.ORD_DTL_ITEM_SQ
+		     , G2.GOODS_CD AS ITEM_CD
+		     , G2.GOODS_NM AS ITEM_NM
+		     , ODI.OPT_CD
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , ODI.ITEM_QTY
+		     , OD.ORD_QTY
+             , OD.CNCL_RTN_QTY 
+		     , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL
+		            THEN 0
+		            ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
+		            END  ORD_REQ_CHG_QTY
+		     , ODI.ITEM_PRICE
+		     , ODI.OPT_ADD_PRICE
+		     , ODI.ORD_AMT
+		     , ODI.CNCL_RTN_AMT
+		     , ODI.CPN1_DC_AMT 
+		     , ODI.TMTB1_DC_AMT 
+		     , ODI.TMTB2_DC_AMT 
+		     , ODI.GOODS_CPN_DC_AMT 
+		     , ODI.CART_CPN_DC_AMT
+		     , ODI.PNT_DC_AMT 
+		     , ODI.PRE_PNT_DC_AMT 
+		     , ODI.GFCD_USE_AMT
+		     , ODI.REAL_ORD_AMT
+		     , DF.DELV_FEE
+		     , DF.SUPPLY_COMP_CD
+		     , DF.DELV_FEE_CD 
+		     , DFP.MIN_ORD_AMT 
+		     , DFP.DELV_FEE AS ORG_DELV_FEE
+		     , DFP.RTN_DELV_FEE
+		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE AS EXC_DELV_FEE
+		     , 0			AS ORD_CAN_CHG_QTY
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN TB_GOODS G1
+		ON     OD.GOODS_CD = G1.GOODS_CD
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		INNER  JOIN TB_GOODS G2
+		ON     ODI.ITEM_CD = G2.GOODS_CD
+		LEFT   OUTER JOIN (
+			SELECT OD.ORD_DTL_NO
+			     , SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+			FROM   TB_ORDER_CHANGE_DETAIL OCD
+			INNER  JOIN TB_ORDER_DETAIL OD
+			ON     OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+			WHERE  1=1
+			AND    OD.ORD_NO = #{ordNo}
+			AND    OCD.CHG_STAT IN (
+				'G685_20', 'G685_30', 'G685_40'
+			)
+			GROUP  BY OCD.ORD_DTL_NO
+		) OCD
+		ON     OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		INNER  JOIN (
+			SELECT X.SUPPLY_COMP_CD
+			     , X.DELV_FEE_CD
+			     , SUM(X.DELV_FEE) AS DELV_FEE
+			FROM   TB_DELIVERY_FEE X
+			WHERE  1=1
+			AND    X.ORD_NO = #{ordNo}
+			AND    X.DELV_FEE_GB = 'G018_10'
+			GROUP  BY X.SUPPLY_COMP_CD
+			        , X.DELV_FEE_CD
+		) DF
+		ON     OD.SUPPLY_COMP_CD = DF.SUPPLY_COMP_CD 
+		AND    OD.DELV_FEE_CD = DF.DELV_FEE_CD 
+		INNER  JOIN TB_DELV_FEE_POLICY DFP
+		ON     DF.SUPPLY_COMP_CD  = DFP.SUPPLY_COMP_CD 
+		AND    DF.DELV_FEE_CD = DFP.DELV_FEE_CD 
+		AND    DFP.USE_YN = 'Y'
+		WHERE  1=1
+		AND    OD.ORD_DTL_STAT IN (
+			'G013_50', 'G013_55', 'G013_60'
+		)
+		AND    OD.ORD_NO = #{ordNo}
+		GROUP  BY OD.ORD_NO
+		     , OD.ORD_DTL_NO
+	    ORDER  BY OD.ORD_NO
+	         , OD.ORD_DTL_NO
+	</select>
+	
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 조회 -->
+	<select id="getRefundAccount" parameterType="Order" resultType="Order">
+		/* Order.getRefundAccount */
+		SELECT Z.ACCOUNT_NO
+		     , Z.ACCOUNT_NM
+		     , Z.BANK_CD
+		     , FN_GET_CODE_NM('G940', Z.BANK_CD) AS BANK_NM
+		     , Z.DEFAULT_YN
+		     , Z.REG_DT
+		FROM   (
+			SELECT CA.ACCOUNT_NO
+			     , CA.ACCOUNT_NM 
+			     , CA.BANK_CD
+			     , CA.DEFAULT_YN
+			     , CA.REG_DT
+			FROM   TB_ORDER O
+			LEFT   OUTER JOIN TB_CUST_ACCOUNT CA 
+			ON     O.CUST_NO = CA.CUST_NO
+			WHERE  1=1
+			AND    O.CUST_NO = 0
+			GROUP  BY CA.ACCOUNT_NO
+			     , CA.ACCOUNT_NM 
+			     , CA.BANK_CD
+			     , CA.DEFAULT_YN
+			ORDER  BY CA.DEFAULT_YN DESC
+			     , CA.REG_DT DESC
+		) Z
+	</select>
+	
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 체크 -->
 	<select id="getRefundAccountCheck" parameterType="Order" resultType="int">
 		/* Order.getRefundAccountCheck */
 		SELECT COUNT(1)
@@ -331,7 +459,7 @@
 		AND    CA.DEL_YN = 'N'
 	</select>
 	
-	<!-- 고객환불계좌정보 등록 -->
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 등록 -->
 	<insert id="saveRefundAccount" parameterType="Order">
 		/* Order.saveRefundAccount */
 		INSERT INTO TB_CUST_ACCOUNT (
@@ -359,34 +487,7 @@
 		)
 	</insert>
 	
-	<!-- 고객환불계좌정보 조회 -->
-	<select id="getRefundAccount" parameterType="Order" resultType="Order">
-		/* Order.getRefundAccount */
-		SELECT Z.ACCOUNT_NO
-		     , Z.ACCOUNT_NM
-		     , Z.BANK_CD
-		     , FN_GET_CODE_NM('G940', Z.BANK_CD) AS BANK_NM
-		     , Z.DEFAULT_YN
-		     , Z.REG_DT
-		FROM   (
-			SELECT CA.ACCOUNT_NO
-			     , CA.ACCOUNT_NM 
-			     , CA.BANK_CD
-			     , CA.DEFAULT_YN
-			     , CA.REG_DT
-			FROM   TB_ORDER O
-			LEFT   OUTER JOIN TB_CUST_ACCOUNT CA 
-			ON     O.CUST_NO = CA.CUST_NO
-			WHERE  1=1
-			AND    O.CUST_NO = 0
-			GROUP  BY CA.ACCOUNT_NO
-			     , CA.ACCOUNT_NM 
-			     , CA.BANK_CD
-			     , CA.DEFAULT_YN
-			ORDER  BY CA.DEFAULT_YN DESC
-			     , CA.REG_DT DESC
-		) Z
-	</select>
+	
 	
 </mapper>
 

+ 10 - 18
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -36,12 +36,6 @@
 				<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="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
-					<label th:if="${sessionInfo.userId == 'jsh77b'}">
-						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
-					</label>
-					 -->
 					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
 				</div>
 				
@@ -117,13 +111,6 @@
 							<td><span id="spanTotDeliveryFee"></span>원 </td>
 						</tr>
 						
-						<tr>
-							<th>추가 반품배송 금액</th>
-							<td><span id="spanTotRtnDelvFee"></span>원</td>
-							<th>추가 교환배송 금액</th>
-							<td><span id="spanTotExcDelvFee"></span>원 </td>
-						</tr>
-						
 						<tr>
 							<th>환불 금액 합계</th>
 							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
@@ -153,7 +140,7 @@ var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var temp1 = true;
 var temp2 = false;
 
-// specify the columns
+// 1. 주문정보(반품대상)
 var columnCancelReqList = [
 	{
 		headerName	: "주문상세정보",
@@ -423,7 +410,7 @@ var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
 gridOptionsCancelReqList.suppressRowClickSelection = true;
 gridOptionsCancelReqList.rowSelection = 'multiple';
 
-//specify the columns
+// 2. 취소정보(환불정보)
 var columnCancelReqToBeList = [
 	{
 		headerName	: "주문상세정보",
@@ -672,7 +659,7 @@ var columnCancelReqToBeList = [
 ];
 var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
 
-//specify the columns
+// 3. 배송비정보(환불정보)
 var columnDelvCdList = [
 	{
 		headerName	: "배송코드기준금액",
@@ -778,7 +765,7 @@ var columnDelvCdList = [
 ];
 var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
 
-// 10. 무통장 환불정보
+// 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
 	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
 	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
@@ -848,6 +835,12 @@ var fnCalculateRefundAmt = function (obj) {
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
+	if (cancelRequestTargetList.length == 0) {
+		alert("요청 대상정보가 존재 하지 않습니다.");
+		uifnPopupClose('popupCancelRequestForm');
+		return false;
+	}
+	
 	// 환불금액계산호출
 	var jsonData = JSON.stringify(cancelRequestTargetList);
 	gagajf.ajaxJsonSubmit(
@@ -1030,7 +1023,6 @@ $(document).ready(function() {
 	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
 	
 	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
-	//gridOptionsRefundAccountInfo.api.setRowData(orderRfAccountInfo);
 	
 	// 취소정보계산
 	fnCalculateRefundAmt(null);

+ 415 - 413
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -555,7 +555,7 @@ var columnDefsDeliveryInfo = [
 		, width			: 200
 		, cellClass		: 'text-left'
 		, cellRenderer	: function (params) {
-			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"cfnOpenPostFindPopup('grid');\">우편번호찾기</button>";
+			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('grid');\">우편번호찾기</button>";
 		}
 	},
 	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 350, cellClass: 'text-left'},
@@ -934,28 +934,17 @@ $(document).ready(function () {
 	gridOptionsGoodsInfo.api.forEachNode(function (rowNode, index) {
 		
 		// 입금대기, 결제완료, 상품준비중, 배송준비중 일때 취소가능
-		if (rowNode.data.ordDtlStat == 'G013_10' 
-				|| rowNode.data.ordDtlStat == 'G013_20'
-				|| rowNode.data.ordDtlStat == 'G013_30'
-				|| rowNode.data.ordDtlStat == 'G013_40') {
+		if (rowNode.data.ordDtlStat == 'G013_10' || rowNode.data.ordDtlStat == 'G013_20' || rowNode.data.ordDtlStat == 'G013_30' || rowNode.data.ordDtlStat == 'G013_40') {
 			$("#btnCancel").removeClass("off");	//취소요청
 		}
 		
 		// 배송중, 출고완료, 배송완료 일때 반품, 교환 가능
-		if ((rowNode.data.ordDtlStat == 'G013_50' 
-				|| rowNode.data.ordDtlStat == 'G013_55' 
-				|| rowNode.data.ordDtlStat == 'G013_60'
-			) 
-			//&& rowNode.data.ordQty > rowNode.data.chgSumQty
-			) {
+		if ((rowNode.data.ordDtlStat == 'G013_50' || rowNode.data.ordDtlStat == 'G013_55' || rowNode.data.ordDtlStat == 'G013_60') && rowNode.data.ordQty > rowNode.data.ordReqChgQty) {
 			$("#btnReturn, #btnExchange").removeClass("off");
 		}
 		
 		// 입금대기, 결제완료, 상품준비중, 배송준비중 일때 취소가능
-		if (rowNode.data.ordDtlStat == 'G013_10' 
-				|| rowNode.data.ordDtlStat == 'G013_20'
-				|| rowNode.data.ordDtlStat == 'G013_30'
-				|| rowNode.data.ordDtlStat == 'G013_40') {
+		if (rowNode.data.ordDtlStat == 'G013_10' || rowNode.data.ordDtlStat == 'G013_20' || rowNode.data.ordDtlStat == 'G013_30' || rowNode.data.ordDtlStat == 'G013_40') {
 			addrBtnChkCnt++;
 		}
 	});
@@ -998,358 +987,400 @@ $(document).ready(function () {
 
 <!-- function -->
 <script>
-	var gridOrderChangeInfoSelectedIdx = '';
-	
-	// 배송지변경
-	var fnUpdateOrderAddr = function () {
-		gridOptionsDeliveryInfo.api.stopEditing();
-		
-		var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(0).data);
-		mcxDialog.confirm("주소를 변경하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				gagajf.ajaxJsonSubmit(
-					"/order/deliver/addr/update"
-					, jsonData
-					, function () {
-						
-					}
-				);
-			}
-		});
-	}
+var gridOrderChangeInfoSelectedIdx = '';
 
-	// 반품요청
-	var fnReturnRequest = function () {
-		var actionUrl = "/orderChange/return/request/form?ordNo=" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
-	};
+// 배송지변경
+var fnUpdateOrderAddr = function () {
+	gridOptionsDeliveryInfo.api.stopEditing();
+	
+	var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(0).data);
+	mcxDialog.confirm("주소를 변경하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			gagajf.ajaxJsonSubmit(
+				"/order/deliver/addr/update"
+				, jsonData
+				, function () {
+					
+				}
+			);
+		}
+	});
+}
 
-	// 교환요청
-	var fnExchangeRequest = function () {
-		var actionUrl = "/orderChange/exchange/request/form?ordNo=" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
-	};
+// 취소요청
+var fnCancelRequest = function () {
+	var actionUrl = "/orderChange/cancel/request/form?ordNo=" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
+};
+
+// 반품요청
+var fnReturnRequest = function () {
+	var actionUrl = "/orderChange/return/request/form?ordNo=" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+};
+
+// 교환요청
+var fnExchangeRequest = function () {
+	var actionUrl = "/orderChange/exchange/request/form?ordNo=" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+};
+
+// 취소승인
+var fnCancelConfirmRequest = function (ordChgSq) {
+	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 		= ordNo;	//전역변수
+			data.ordChgSq 	= ordChgSq;
+
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/orderChange/cancel/confirm'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
+		}
+	});
+};
+
+// 취소요청철회
+var fnCancelConfirmRequestCancel = function (ordChgSq) {
+	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/orderChange/cancel/wait/cancel'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+			});
+		}
+	});
+}
 
-	// 취소요청
-	var fnCancelRequest = function () {
-		var actionUrl = "/orderChange/cancel/request/form?ordNo=" + ordNo + "&cncWait=N";
-		cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
-	};
-
-	// 취소승인
-	var fnCancelConfirmRequest = function (ordChgSq) {
-		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo 		= ordNo;	//전역변수
-				data.ordChgSq 	= ordChgSq;
+// 주문상품 상세 변경 이력 팝업
+var fnOrderDetailChangeHst = function (ordDtlNo) {
+	var actionUrl = "/order/detail/change/hst/form/" + ordDtlNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailChangeHstForm');
+};
+
+// 쿠폰내역 팝업
+var fnOrderCouponHst = function (ordNo) {
+	var actionUrl = "/order/detail/coupon/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailCouponHstForm');
+};
+
+// 다다익선내역 팝업
+var fnOrderTmtbHst = function (ordNo) {
+	var actionUrl = "/order/detail/tmtb/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailTmtbHstForm');
+};
+
+// 포인트내역 팝업
+var fnOrderPointHst = function (ordNo) {
+	var actionUrl = "/order/detail/point/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailPointHstForm');
+};
+
+// 상품권내역 팝업
+var fnOrderGiftcardHst = function (ordNo) {
+	var actionUrl = "/order/detail/giftcard/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailGiftcardHstForm');
+};
+
+// 관리자메모 등록
+var fnCreateOrderMemo = function (ordNo, seq, mode) {
+	var actionUrl = "/order/memo/create/form?ordNo=" + ordNo + "&seq=" + seq + "&mode=" + mode;
+	cfnOpenModalPopup(actionUrl, 'popupCreateOrderMemo');
+};
+
+// 환불계좌 등록
+var fnCreateOrderRfAccount = function (ordNo, custNo) {
+	var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo + "&custNo="+custNo;
+	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
+};
+
+// 주문메모 삭제
+var fnDeleteOrderMemo = function (ordNo, orderMemoSq) {
+	mcxDialog.confirm('삭제하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 	= ordNo;
+			data.seq 	= orderMemoSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/memo/delete'
+				, jsonData
+				, function () {
+					fnBindOrderMemo();
+				}
+			);
+		}
+	});
+}
 
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/orderChange/cancel/confirm'
-					, jsonData
-					, function (result) {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-					}
-				);
-			}
-		});
-	};
+// 주문메모 바인딩
+var fnBindOrderMemo = function() {
+	gagaAgGrid.fetch(
+		"/order/admin/memo/list/" + ordNo
+		, gridOptionsOrderMemoInfo
+		, null
+		, function (result) {
+		}
+	);
+};
+
+// 주문 변경요청정보 바인딩
+var fnBindOrderChangeInfo = function() {
+	gagaAgGrid.fetch(
+		"/order/return/info/list/" + ordNo
+		, gridOptionsOrderChangeInfo
+		, null
+		, function (result) {
+			$('#gridOrderChangeInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
+		}
+	);
+};
+
+// 환불계좌 정보
+var fnBindOrderRfAccountInfo = function () {
+	gagaAgGrid.fetch(
+		"/order/refund/account/info/list?ordNo=" + ordNo+"&custNo="+custNo
+		, gridOptionsRefundAccountInfo
+		, null
+		, function (result) {
+			$('#gridOptionsRefundAccountInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
+		}
+	);
+};
+
+// 배송비 DATA 바인딩
+var fnBindDeliveryAddr = function(delvAddrSq) {
+	if (typeof (delvAddrSq) != 'undefined') {
+		var strLink = '/order/deliver/addr/info/' + delvAddrSq;
+		var jsonData = JSON.stringify([]);
+		gagajf.ajaxJsonSubmit(strLink, jsonData, fnBindDeliveryAddrCallBack);
+	}
+};
+
+// 배송정보
+var fnBindDeliveryAddrCallBack = function(result) {
+	gridOptionsDeliveryInfo.api.setRowData(result);
+};
+
+// 우편번호 찾기관련
+var fnSetPostValue = function(zipNo, baseRoadAddr1, baseRoadAddr2, etcAddr, postPosition) {
+	if (postPosition == 'grid') {
+		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipPostNo = zipNo;
+		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipBaseAddr = baseRoadAddr1;
+		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipDtlAddr = baseRoadAddr2;
+		gridOptionsDeliveryInfo.api.refreshCells();
+	} 
+	else if (postPosition == 'returnRequest') {
+		$("#returnRequestFrm input[name=chgerPostNo]").val(zipNo);
+		$("#returnRequestFrm input[name=chgerBaseAddr]").val(baseRoadAddr1);
+		$("#returnRequestFrm input[name=chgerDtlAddr]").val(baseRoadAddr2);
+	} 
+	else if (postPosition == 'updateOrderChangeAddr') {
+		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerPostNo = zipNo;
+		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerBaseAddr = baseRoadAddr1;
+		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerDtlAddr = baseRoadAddr2;
+		gridOptionsOrderChangeInfo.api.refreshCells();
 
-	// 취소요청철회
-	var fnCancelConfirmRequestCancel = function (ordChgSq) {
-		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordChgSq = ordChgSq;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/orderChange/cancel/wait/cancel'
-					, jsonData
-					, function (result) {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-				});
-			}
-		});
 	}
+}
 
-	// 주문상품 상세 변경 이력 팝업
-	var fnOrderDetailChangeHst = function (ordDtlNo) {
-		var actionUrl = "/order/detail/change/hst/form/" + ordDtlNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailChangeHstForm');
-	};
-
-	// 쿠폰내역 팝업
-	var fnOrderCouponHst = function (ordNo) {
-		var actionUrl = "/order/detail/coupon/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailCouponHstForm');
-	};
+// 변경요청 > 우편번호찾기
+var fnOpenPostFindPopup = function (idx) {
+	gridOrderChangeInfoSelectedIdx = idx;
+	cfnOpenPostFindPopup('updateOrderChangeAddr');
+}
+
+// 변경요청 > 회수지정보 저장
+var fnSaveChgerAddr = function (rowIdx) {
+	gridOptionsOrderChangeInfo.api.stopEditing();
 	
-	// 다다익선내역 팝업
-	var fnOrderTmtbHst = function (ordNo) {
-		var actionUrl = "/order/detail/tmtb/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailTmtbHstForm');
-	};
-
-	// 포인트내역 팝업
-	var fnOrderPointHst = function (ordNo) {
-		var actionUrl = "/order/detail/point/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailPointHstForm');
-	};
+	var jsonData = JSON.stringify(gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data);
 	
-	// 상품권내역 팝업
-	var fnOrderGiftcardHst = function (ordNo) {
-		var actionUrl = "/order/detail/giftcard/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailGiftcardHstForm');
-	};
-
-	// 관리자메모 등록
-	var fnCreateOrderMemo = function (ordNo, seq, mode) {
-		var actionUrl = "/order/memo/create/form?ordNo=" + ordNo + "&seq=" + seq + "&mode=" + mode;
-		cfnOpenModalPopup(actionUrl, 'popupCreateOrderMemo');
-	};
+	mcxDialog.confirm("주소를 변경하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			gagajf.ajaxJsonSubmit(
+				"/order/change/info/addr/update"
+				, jsonData
+				, function () {
+					
+				}
+			);
+		}
+	});
+}
 
-	// 환불계좌 등록
-	var fnCreateOrderRfAccount = function (ordNo, custNo) {
-		var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo + "&custNo="+custNo;
-		cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
-	};
-
-	// 주문메모 삭제
-	var fnDeleteOrderMemo = function (ordNo, orderMemoSq) {
-		mcxDialog.confirm('삭제하시겠습니까?', {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo 	= ordNo;
-				data.seq 	= orderMemoSq;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/memo/delete'
-					, jsonData
-					, function () {
-						fnBindOrderMemo();
+// 반품요청 철회
+var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			data.ordDtlNo = ordDtlNo;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/return/request/cancel'
+				, jsonData
+				, function (result) {
+					if (result.message != '회수컨펌 된 내역이 있습니다.') {
+						var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
+						gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
 					}
-				);
-			}
-		});
-	}
-
-	// 주문메모 바인딩
-	var fnBindOrderMemo = function() {
-		gagaAgGrid.fetch(
-			"/order/admin/memo/list/" + ordNo
-			, gridOptionsOrderMemoInfo
-			, null
-			, function (result) {
-			}
-		);
-	};
-
-	// 주문 변경요청정보 바인딩
-	var fnBindOrderChangeInfo = function() {
-		gagaAgGrid.fetch(
-			"/order/return/info/list/" + ordNo
-			, gridOptionsOrderChangeInfo
-			, null
-			, function (result) {
-				$('#gridOrderChangeInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
-			}
-		);
-	};
-
-	// 환불계좌 정보
-	var fnBindOrderRfAccountInfo = function () {
-		gagaAgGrid.fetch(
-			"/order/refund/account/info/list?ordNo=" + ordNo+"&custNo="+custNo
-			, gridOptionsRefundAccountInfo
-			, null
-			, function (result) {
-				$('#gridOptionsRefundAccountInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
-			}
-		);
-	};
-
-	// 배송비 DATA 바인딩
-	var fnBindDeliveryAddr = function(delvAddrSq) {
-		if (typeof (delvAddrSq) != 'undefined') {
-			var strLink = '/order/deliver/addr/info/' + delvAddrSq;
-			var jsonData = JSON.stringify([]);
-			gagajf.ajaxJsonSubmit(strLink, jsonData, fnBindDeliveryAddrCallBack);
+				}
+			);
 		}
-	};
-
-	// 배송정보
-	var fnBindDeliveryAddrCallBack = function(result) {
-		gridOptionsDeliveryInfo.api.setRowData(result);
-	};
-
-	// 우편번호 찾기관련
-	var fnSetPostValue = function(zipNo, baseRoadAddr1, baseRoadAddr2, etcAddr, postPosition) {
-		if (postPosition == 'grid') {
-			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipPostNo = zipNo;
-			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipBaseAddr = baseRoadAddr1;
-			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipDtlAddr = baseRoadAddr2;
-			gridOptionsDeliveryInfo.api.refreshCells();
-		} 
-		else if (postPosition == 'returnRequest') {
-			$("#returnRequestFrm input[name=chgerPostNo]").val(zipNo);
-			$("#returnRequestFrm input[name=chgerBaseAddr]").val(baseRoadAddr1);
-			$("#returnRequestFrm input[name=chgerDtlAddr]").val(baseRoadAddr2);
-		} 
-		else if (postPosition == 'updateOrderChangeAddr') {
-			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerPostNo = zipNo;
-			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerBaseAddr = baseRoadAddr1;
-			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerDtlAddr = baseRoadAddr2;
-			gridOptionsOrderChangeInfo.api.refreshCells();
-
+	});
+};
+
+// 교환요청 철회
+var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 		= ordNo;
+			data.ordDtlNo 	= ordDtlNo;
+			data.ordChgSq 	= ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/exchange/request/cancel'
+				, jsonData, function () {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
 		}
-	}
+	});
+};
 
-	// 변경요청 > 우편번호찾기
-	var fnOpenPostFindPopup = function (idx) {
-		gridOrderChangeInfoSelectedIdx = idx;
-		cfnOpenPostFindPopup('updateOrderChangeAddr');
+// LMS 전송
+var fnOpenLmsForm = function (orderPhnno, custNo) {
+	if (gagajf.isNull(custNo) && gagajf.isNull(orderPhnno)) {
+		mcxDialog.alert("정보가 올바르지 않습니다.");
+		return false;
 	}
 
-	// 변경요청 > 회수지정보 저장
-	var fnSaveChgerAddr = function (rowIdx) {
-		gridOptionsOrderChangeInfo.api.stopEditing();
-		
-		var jsonData = JSON.stringify(gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data);
-		
-		mcxDialog.confirm("주소를 변경하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				gagajf.ajaxJsonSubmit(
-					"/order/change/info/addr/update"
-					, jsonData
-					, function () {
-						
-					}
-				);
-			}
-		});
-	}
+	$('#orderDetailInfo input[name=orderPhnno]').val(orderPhnno);
+	$('#orderDetailInfo input[name=custNo]').val(custNo);
 
-	// 반품요청 철회
-	var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
-		mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordChgSq = ordChgSq;
-				data.ordDtlNo = ordDtlNo;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/return/request/cancel'
-					, jsonData
-					, function (result) {
-						if (result.message != '회수컨펌 된 내역이 있습니다.') {
-							var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
-							gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
-						}
-					}
-				);
-			}
-		});
-	};
+	var param = {};
+	param.elementCellPhnno = '#orderDetailInfo input[name=orderPhnno]';
+	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
+	cfnOpenLmsPopup(param);
+};
 
-	// 교환요청 철회
-	var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
-		mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo 		= ordNo;
-				data.ordDtlNo 	= ordDtlNo;
-				data.ordChgSq 	= ordChgSq;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/exchange/request/cancel'
-					, jsonData, function () {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-					}
-				);
-			}
-		});
-	};
-	
-	// LMS 전송
-	var fnOpenLmsForm = function (orderPhnno, custNo) {
-		if (gagajf.isNull(custNo) && gagajf.isNull(orderPhnno)) {
-			mcxDialog.alert("정보가 올바르지 않습니다.");
-			return false;
+// EMAIL 전송
+var fnOpenEmailForm = function (orderEmail, orderNm, custNo) {
+	if (gagajf.isNull(orderEmail) && gagajf.isNull(orderNm) && gagajf.isNull(custNo)) {
+		mcxDialog.alert("정보가 올바르지 않습니다.");
+		return false;
+	}
+	$('#orderDetailInfo input[name=orderEmail]').val(orderEmail);
+	$('#orderDetailInfo input[name=orderNm]').val(orderNm);
+	$('#orderDetailInfo input[name=custNo]').val(custNo);
+
+	var param = {};
+	param.elementRecipEmail = '#orderDetailInfo input[name=orderEmail]';
+	param.elementCustNm = '#orderDetailInfo input[name=orderNm]';
+	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
+
+	cfnOpenEmailPopup(param);
+};
+
+// 송장조회
+var fnSearchDelivery = function (url, invoiceNo) {
+	var fullUrl = url + invoiceNo;
+	window.open(fullUrl, '_blank');
+};
+
+// 카드전표 영수증 조회
+var fnReceiptPage = function (tid) {
+	var fullUrl = "https://npg.nicepay.co.kr/issue/IssueLoader.do?TID=" + tid + "&type=0";
+	window.open(fullUrl, '_blank');
+};
+
+// 수동 회수 지시 
+var fnWdinvocieSend = function (ordChgSq) {
+	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 회수지시 처리 하시겠습니까? <br> 시스템에서 회수지시를 보내지는않습니다.", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/wdinvoice/send/save'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
 		}
+	});
+};
 
-		$('#orderDetailInfo input[name=orderPhnno]').val(orderPhnno);
-		$('#orderDetailInfo input[name=custNo]').val(custNo);
-
-		var param = {};
-		param.elementCellPhnno = '#orderDetailInfo input[name=orderPhnno]';
-		param.elementCustNo = '#orderDetailInfo input[name=custNo]';
-		cfnOpenLmsPopup(param);
-	};
+// 구매확정철회
+var fnChangedCompleteDelivery = function (ordNo, ordDtlNo, ordDtlStat) {
+	if ('70' !== ordDtlStat) {
+		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
+		return false;
+	}
 	
-	// EMAIL 전송
-	var fnOpenEmailForm = function (orderEmail, orderNm, custNo) {
-		if (gagajf.isNull(orderEmail) && gagajf.isNull(orderNm) && gagajf.isNull(custNo)) {
-			mcxDialog.alert("정보가 올바르지 않습니다.");
-			return false;
-		}
-		$('#orderDetailInfo input[name=orderEmail]').val(orderEmail);
-		$('#orderDetailInfo input[name=orderNm]').val(orderNm);
-		$('#orderDetailInfo input[name=custNo]').val(custNo);
-
-		var param = {};
-		param.elementRecipEmail = '#orderDetailInfo input[name=orderEmail]';
-		param.elementCustNm = '#orderDetailInfo input[name=orderNm]';
-		param.elementCustNo = '#orderDetailInfo input[name=custNo]';
-
-		cfnOpenEmailPopup(param);
-	};
-
-	// 송장조회
-	var fnSearchDelivery = function (url, invoiceNo) {
-		var fullUrl = url + invoiceNo;
-		window.open(fullUrl, '_blank');
-	};
-
-	// 카드전표 영수증 조회
-	var fnReceiptPage = function (tid) {
-		var fullUrl = "https://npg.nicepay.co.kr/issue/IssueLoader.do?TID=" + tid + "&type=0";
-		window.open(fullUrl, '_blank');
-	};
+	var data = {};
+	data.ordDtlNo = ordDtlNo;
+	data.ordNo = ordNo;
+	var jsonData = JSON.stringify(data);
 	
-	// 수동 회수 지시 
-	var fnWdinvocieSend = function (ordChgSq) {
-		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 회수지시 처리 하시겠습니까? <br> 시스템에서 회수지시를 보내지는않습니다.", {
+	gagajf.ajaxJsonSubmit('/order/check/status', jsonData, fnChangedCompleteDeliveryCallback);
+};
+
+var fnChangedCompleteDeliveryCallback = function (result) {
+	// 구매확정 처리 가능 하지 않으면 얼럿 노출 끝
+	if (!result.isPossible) {
+		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
+		return false;
+	} else {
+		mcxDialog.confirm("구매확정 철회 하시겠습니까? <br> 지급된 포인트에 대한 처리는 별도로 하셔야 합니다. ", {
 			cancelBtnText	: "취소",
 			sureBtnText		: "확인",
 			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordChgSq = ordChgSq;
+				var data = {};
+				data.ordDtlNo = result.ordDtlNo;
+				data.ordNo = result.ordNo;
 				
 				var jsonData = JSON.stringify(data);
 				gagajf.ajaxJsonSubmit(
-					'/order/wdinvoice/send/save'
+					'/order/complete/delivery/changed'
 					, jsonData
 					, function (result) {
 						uifnPopupClose('popupOrderDetail');
@@ -1358,84 +1389,55 @@ $(document).ready(function () {
 				);
 			}
 		});
-	};
+	}
+};
+
+// 주문상세 상태값 변경
+var fnChangOrdDtlStat = function (obj) {
+	var ordNo 			= $(obj).attr("ordNo");
+	var ordDtlNo 		= $(obj).attr("ordDtlNo");
+	var ordDtlStat 		= $(obj).val();
+	var ordDtlStatNm 	= $(obj).children("option:selected").text();
+	var strConfirm		= "주문상태를 " + ordDtlStatNm + "(으)로 변경 하시겠습니까?"
 	
-	// 구매확정철회
-	var fnChangedCompleteDelivery = function (ordNo, ordDtlNo, ordDtlStat) {
-		if ('70' !== ordDtlStat) {
-			mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
-			return false;
-		}
-		
-		var data = {};
-		data.ordDtlNo = ordDtlNo;
-		data.ordNo = ordNo;
-		var jsonData = JSON.stringify(data);
-		
-		gagajf.ajaxJsonSubmit('/order/check/status', jsonData, fnChangedCompleteDeliveryCallback);
-	};
-
-	var fnChangedCompleteDeliveryCallback = function (result) {
-		// 구매확정 처리 가능 하지 않으면 얼럿 노출 끝
-		if (!result.isPossible) {
-			mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
-			return false;
-		} else {
-			mcxDialog.confirm("구매확정 철회 하시겠습니까? <br> 지급된 포인트에 대한 처리는 별도로 하셔야 합니다. ", {
-				cancelBtnText	: "취소",
-				sureBtnText		: "확인",
-				sureBtnClick	: function () {
-					var data = {};
-					data.ordDtlNo = result.ordDtlNo;
-					data.ordNo = result.ordNo;
-					
-					var jsonData = JSON.stringify(data);
-					gagajf.ajaxJsonSubmit(
-						'/order/complete/delivery/changed'
-						, jsonData
-						, function (result) {
-							uifnPopupClose('popupOrderDetail');
-							fnReOpenOrderDetailPopup();
-						}
-					);
+	mcxDialog.confirm(strConfirm, {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo			= ordNo;
+			data.ordDtlNo 		= ordDtlNo;
+			data.ordDtlStat 	= ordDtlStat;
+
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/detail/ordDtlStat/changed'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
 				}
-			});
+			);
 		}
-	};
-	
-	// 주문상세 상태값 변경
-	var fnChangOrdDtlStat = function (obj) {
-		var ordNo 			= $(obj).attr("ordNo");
-		var ordDtlNo 		= $(obj).attr("ordDtlNo");
-		var ordDtlStat 		= $(obj).val();
-		var ordDtlStatNm 	= $(obj).children("option:selected").text();
-		var strConfirm		= "주문상태를 " + ordDtlStatNm + "(으)로 변경 하시겠습니까?"
-		
-		mcxDialog.confirm(strConfirm, {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo			= ordNo;
-				data.ordDtlNo 		= ordDtlNo;
-				data.ordDtlStat 	= ordDtlStat;
-
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/detail/ordDtlStat/changed'
-					, jsonData
-					, function (result) {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-					}
-				);
-			}
-		});
-	};
-	
-	
-	
+	});
+};
+
+// DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function() {
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 우편번호와 주소 정보를 해당 필드에 넣는다.
+			$('#detailForm input[name=bizZipcode]').val(data.zonecode);
+			$('#detailForm input[name=bizBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#detailForm input[name=bizDtlAddr]').focus();
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
 	
+	cfnOpenDaumAddr(daumZip);
+}
 </script>
 
 </html>

+ 65 - 27
style24.admin/src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html

@@ -21,7 +21,7 @@
 		</div>
 			
 		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
+			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/orderChange/return" method="post" target="hdFrameForOrderCancel">
 				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
 				<input type="hidden" name="chgReason" value=""/>
 				<input type="hidden" name="chgReasonDesc" value=""/>
@@ -29,19 +29,17 @@
 				<h3>주문정보</h3>
 				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 
-				<h3>취소정보</h3>
+				<h3>반품정보</h3>
 				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 				
 				<h3>배송비정보</h3>
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				
+				<h3>회수지정보</h3>
+				<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm off" id="btnUpdateOrderAddr">수정</button>
+				<div id="gridDelvRtnAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<!-- 
-					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
-					<label th:if="${sessionInfo.userId == 'jsh77b'}">
-						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
-					</label>
-					 -->
 					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
 				</div>
 				
@@ -54,7 +52,7 @@
 					</colgroup>
 					<tbody>
 						<tr>
-							<th>취소사유 <i class="star"></i></th>
+							<th>반품사유 <i class="star"></i></th>
 							<td>
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
@@ -149,11 +147,12 @@ var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상
 var ordNo 					= [[${ordNo}]];									// 주문번호
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var orderDelvRtnAddrInfo	= [[${orderDelvRtnAddrInfo}]];					// 주문배송정보
 
 var temp1 = true;
 var temp2 = false;
 
-// specify the columns
+// 1. 주문정보(반품대상)
 var columnCancelReqList = [
 	{
 		headerName	: "주문상세정보",
@@ -227,7 +226,7 @@ var columnCancelReqList = [
 				}
 			},
 			{
-				headerName		: "취소"		
+				headerName		: "반품"		
 				, field			: "ordCanChgQty"			
 				, width			: 100		
 				, cellClass		: 'text-center'
@@ -423,7 +422,7 @@ var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
 gridOptionsCancelReqList.suppressRowClickSelection = true;
 gridOptionsCancelReqList.rowSelection = 'multiple';
 
-//specify the columns
+// 2. 반품정보(환불정보)
 var columnCancelReqToBeList = [
 	{
 		headerName	: "주문상세정보",
@@ -672,7 +671,7 @@ var columnCancelReqToBeList = [
 ];
 var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
 
-//specify the columns
+// 3. 배송비정보(환불정보)
 var columnDelvCdList = [
 	{
 		headerName	: "배송코드기준금액",
@@ -778,7 +777,7 @@ var columnDelvCdList = [
 ];
 var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
 
-// 10. 무통장 환불정보
+// 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
 	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
 	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
@@ -789,6 +788,27 @@ var columnDefsRefundAccountInfo = [
 ];
 
 var gridOptionsRefundAccountInfo = orderAgGrid.getGridOptions(columnDefsRefundAccountInfo);
+
+// 5 .배송정보(회수지)
+var columnDefsDeliveryInfo = [
+	{headerName: "배송지번호"		, field: "delvAddrSq"	, width: 100, cellClass: 'text-center'},
+	{headerName: "받는분"			, field: "recipNm"		, width: 80, cellClass: 'text-left', editable: true},
+	{headerName: "핸드폰번호"		, field: "recipPhnno"	, width: 120, cellClass: 'text-left', editable: true},
+	{headerName: "전화번호"		, field: "recipTelno"	, width: 120, cellClass: 'text-left', editable: true},
+	{
+		headerName		: "우편번호"		
+		, field			: "recipZipNo"
+		, width			: 200
+		, cellClass		: 'text-left'
+		, cellRenderer	: function (params) {
+			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('grid');\">우편번호찾기</button>";
+		}
+	},
+	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 350, cellClass: 'text-left'},
+	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 200, cellClass: 'text-left', editable: true},
+	{headerName: "배송메모"		, field: "delvMemo"			, width: 280, cellClass: 'text-left', editable: true, hide: true}
+];
+var gridOptionsDelvRtnInfo = orderAgGrid.getGridOptions(columnDefsDeliveryInfo);
 </script>
 
 <!-- AgGrid 컬럼 세팅 -->
@@ -848,10 +868,16 @@ var fnCalculateRefundAmt = function (obj) {
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
+	if (cancelRequestTargetList.length == 0) {
+		alert("요청 대상정보가 존재 하지 않습니다.");
+		uifnPopupClose('popupReturnRequestForm');
+		return false;
+	}
+	
 	// 환불금액계산호출
 	var jsonData = JSON.stringify(cancelRequestTargetList);
 	gagajf.ajaxJsonSubmit(
-		'/order/cancel/refundAmt'
+		'/orderChange/cancel/refundAmt'
 		, jsonData
 		, function(result) {
 			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
@@ -963,14 +989,6 @@ var fnCancelRequestPartOk = function () {
 		accountNm 	= refundAccount[0].accountNm;
 		bankCd 		= refundAccount[0].bankCd;
 	}
-
-	// 5. PG 전송 여부
-	var pgStat = "N";
-	if ($('#cancelRequestFrm input:checkbox[name=pgStats]').is(":checked")) {
-		pgStat = "Y";
-	}
-	
-	$("#cancelRequestFrm input[name=pgStat]").val(pgStat);
 	
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
@@ -991,7 +1009,7 @@ var fnCancelRequestPartOk = function () {
 		sureBtnClick		: function(){
 			// 취소 실행
 			gagajf.ajaxJsonSubmit(
-				'/order/cancel/'
+				'/orderChange/cancel/'
 				, jsonData
 				, function() {
 					uifnPopupClose('popupOrderDetail');
@@ -1005,14 +1023,14 @@ var fnCancelRequestPartOk = function () {
 
 // 환불계좌 등록
 var fnCreateOrderRfAccount = function () {	
-	var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo ;
+	var actionUrl = "/orderChange/refund/account/create/form?ordNo=" + ordNo ;
 	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
 };
 
 // 환불계좌 정보
 var fnBindOrderRfAccountInfo = function () {
 	gagaAgGrid.fetch(
-		"/order/refund/account/info/list?ordNo=" + ordNo
+		"/orderChange/refund/account/info/list?ordNo=" + ordNo
 		, gridOptionsRefundAccountInfo
 		, null
 		, function (result) {
@@ -1020,6 +1038,24 @@ var fnBindOrderRfAccountInfo = function () {
 	)
 };
 
+
+// DAUM을 이용한 우편번호 팝업 레이어 
+var fnOpenDaumAddr = function() {
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 우편번호와 주소 정보를 해당 필드에 넣는다.
+			$('#detailForm input[name=bizZipcode]').val(data.zonecode);
+			$('#detailForm input[name=bizBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#detailForm input[name=bizDtlAddr]').focus();
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
+	
+	cfnOpenDaumAddr(daumZip);
+}
+
 $(document).ready(function() {
 	// 1. Create a agGrid
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
@@ -1030,7 +1066,9 @@ $(document).ready(function() {
 	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
 	
 	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
-	//gridOptionsRefundAccountInfo.api.setRowData(orderRfAccountInfo);
+	
+	gagaAgGrid.createGrid('gridDelvRtnAddrInfo'				, gridOptionsDelvRtnInfo);				// 배송지정보
+	gridOptionsDelvRtnInfo.api.setRowData(orderDelvRtnAddrInfo);
 	
 	// 취소정보계산
 	fnCalculateRefundAmt(null);