浏览代码

Merge branch 'develop' of http://112.172.147.34:4936/style24/STYLE24.git into develop

gagamel 5 年之前
父节点
当前提交
a349472d2a

+ 30 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java

@@ -329,6 +329,36 @@ public interface TsaOrderDao {
 	 */
 	Collection<Order> getOrderTmtbHstList(Order order);
 	
+	/**
+	 * 주문상세상태를 변경
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int changedOrdDtlStat(Order order);
+	
+	/**
+	 * 주문정보조회
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	Order getOrderInfo(Order order);
+
+	/**
+	 * 주문상세 > 주문취소대상목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	Collection<Order> getCancelRequestTargetList(Order order);
+	
 	
 }
 

+ 36 - 2
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -550,9 +550,43 @@ public class TsaOrderService {
 		return orderDao.getOrderTmtbHstList(order);
 	}
 	
+	/**
+	 * 주문상세상태를 변경
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public void changedOrdDtlStat(Order order) {
+		// 1. 주문상세상태변경
+		int resultInt = orderDao.changedOrdDtlStat(order);
+		
+		// 2. 주문상세상태변경 성공 후 주문상세 이력을 등록
+		if (resultInt > 0) {
+			orderDao.createOrderDetailHst(order);
+		}
+	}
 	
+	/**
+	 * 주문정보조회
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public Order getOrderInfo(Order order) {
+		return orderDao.getOrderInfo(order);
+	}
 	
-	
-	
+	/**
+	 * 주문상세 > 주문취소대상목록
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public Collection<Order> getCancelRequestTargetList(Order order) {
+		return orderDao.getCancelRequestTargetList(order);
+	}
 	
 }

+ 57 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -592,6 +592,63 @@ public class TsaOrderController extends TsaBaseController {
 		mav.setViewName("order/OrderDetailTmtbHst");
 		return mav;
 	}
+	
+	/**
+	 * 주문상세상태를 변경
+	 *
+	 * @param order - 주문정보
+	 * @return GagaResponse
+	 * @author jsh77b
+	 * @since 2020. 12. 22.
+	 */
+	@PostMapping("/detail/ordDtlStat/changed")
+	@ResponseBody
+	public GagaResponse changedOrdDtlStat(@RequestBody Order order) {
+		int userNo = TsaSession.getInfo().getUserNo();
+		order.setUpdNo(userNo);
+		order.setRegNo(userNo);
+		
+		orderService.changedOrdDtlStat(order);
+		
+		return super.ok("성공");
+	}
+	
+	/**
+	 * 취소요청 화면
+	 * 
+	 * @param ordNo - 주문번호
+	 * @param cncWait - 취소대기요청 구분
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	@GetMapping("/cancel/request/form")
+	public ModelAndView cancelRequestFrom(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "cncWait") String cncWait) {
+
+		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 = orderService.getCancelRequestTargetList(order);
+
+		Order orderInfo = orderService.getOrderInfo(order);
+
+		//mav.addObject("nicePay", nicePay);
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 취소사유
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 취소요청대상 목록
+		mav.addObject("orderInfo"					, orderInfo);										// 주문정보
+		mav.addObject("ordNo"						, ordNo);
+		mav.addObject("cncWait"						, cncWait);
+
+		mav.setViewName("order/CancelRequestForm");
+		return mav;
+	}
 }
 
 

+ 19 - 3
style24.admin/src/main/java/com/style24/persistence/domain/Order.java

@@ -123,6 +123,7 @@ public class Order extends TscBaseDomain {
 	
 	// 상품정보
 	private String imgPath1;
+	private String sysImgNm;
 	private String brandCd;
 	private String optCd1;
 	private String optCd2;
@@ -222,9 +223,6 @@ public class Order extends TscBaseDomain {
 	private String itemNm;
 	private int gfcdUseAmt;
 	
-	private int itemOrdQty;
-	private int itemCnclRtnQty;
-	
 	// Pagination
 	private TsaPageRequest pageable;
 	private int pageNo = 1;
@@ -299,6 +297,24 @@ public class Order extends TscBaseDomain {
 	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;
 
 }
 

+ 195 - 12
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -192,7 +192,7 @@
 				     , G1.GOODS_NM
 				     , G1.GOODS_TYPE
 				     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
-				     , GI.IMG_PATH1
+				     , GI.SYS_IMG_NM
 				     , G2.BRAND_CD
 				     , (SELECT Z.BRAND_ENM
 				        FROM   TB_BRAND Z
@@ -203,8 +203,8 @@
 				     , ODI.OPT_CD2
 				     , OD.EXTMALL_ORDER_ID
 				     , OD.AGENT_ORDER_ID 
-				     , OD.ORD_QTY
-				     , OD.CNCL_RTN_QTY
+				     , ODI.ITEM_QTY * OD.ORD_QTY      AS ORD_QTY
+				     , ODI.ITEM_QTY * OD.CNCL_RTN_QTY AS CNCL_RTN_QTY
 				     , 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 AS TOT_DC_AMT
@@ -551,7 +551,7 @@
 		     , G1.GOODS_NM
 		     , G1.GOODS_TYPE
 		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
-		     , GI.IMG_PATH1
+		     , GI.SYS_IMG_NM
 		     , G2.BRAND_CD
 		     , (SELECT Z.BRAND_ENM
 		        FROM   TB_BRAND Z
@@ -562,9 +562,9 @@
 		     , ODI.OPT_CD2
 		     , ODI.ITEM_QTY
 		     , ODI.ITEM_PRICE
+		     , ODI.ITEM_QTY * OD.ORD_QTY      AS ORD_QTY
+		     , ODI.ITEM_QTY * OD.CNCL_RTN_QTY AS CNCL_RTN_QTY
 		     , ODI.OPT_ADD_PRICE 
-		     , ODI.ITEM_ORD_QTY 
-		     , ODI.ITEM_CNCL_RTN_QTY
 		     , ODI.CPN1_DC_AMT
 		     , ODI.GOODS_CPN_DC_AMT
 		     , ODI.CART_CPN_DC_AMT
@@ -577,12 +577,19 @@
 			 , ODI.ORD_AMT
 		     , ODI.REAL_ORD_AMT
 		     , ODI.CNCL_RTN_AMT
+		     , OD.ORD_DTL_STAT
 		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM 
 		     , OD.SOLDOUT_YN
 		     , OD.SOLDOUT_REG_NO
 		     , OD.SOLDOUT_MEMO
 		     , OD.INVOICE_NO
 		     , OD.DELV_LOC_CD 
+		     , X.G20
+		     , X.G30
+		     , X.G40
+		     , X.G50
+		     , X.G55
+		     , X.G60
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -601,6 +608,33 @@
 		AND    P.PAY_GB = 'O'
 		INNER  JOIN TB_DELIVERY_ADDR DA
 		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		LEFT   OUTER JOIN (
+			SELECT MAX(Z.G013_20) AS G20
+			     , MAX(Z.G013_30) AS G30
+			     , MAX(Z.G013_40) AS G40
+			     , MAX(Z.G013_50) AS G50
+			     , MAX(Z.G013_55) AS G55
+			     , MAX(Z.G013_60) AS G60
+			     , Z.ORD_NO
+			     , Z.ORD_DTL_NO
+			FROM (
+				SELECT CASE WHEN ODH.ORD_DTL_STAT = 'G013_20' THEN 'G013_20' END G013_20
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_30' THEN 'G013_30' END G013_30
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_40' THEN 'G013_40' END G013_40
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_50' THEN 'G013_50' END G013_50
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_55' THEN 'G013_55' END G013_55
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_60' THEN 'G013_60' END G013_60
+				     , ODH.ORD_NO
+				     , ODH.ORD_DTL_NO
+				FROM   TB_ORDER_DETAIL_HST ODH
+				INNER  JOIN TB_COMMON_CODE CC
+				ON     ODH.ORD_DTL_STAT = CC.CD
+				WHERE  ODH.ORD_NO = #{ordNo}
+				GROUP  BY ODH.ORD_DTL_STAT
+			) Z
+		) X
+		ON     OD.ORD_NO = X.ORD_NO
+		AND    OD.ORD_DTL_NO = X.ORD_DTL_NO
 		WHERE  1=1
 		AND    OD.ORD_NO = #{ordNo}
 	</select>
@@ -839,7 +873,6 @@
 		     , G2.GOODS_NM AS ITEM_NM
 		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2
-		     , ODI.ITEM_ORD_QTY 
 		     , ODI.ORD_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 AS TOT_DC_AMT
 		     , ODI.REAL_ORD_AMT 
@@ -1119,7 +1152,6 @@
 		     , G2.GOODS_NM AS ITEM_NM 
 		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2
-		     , ODI.ITEM_ORD_QTY 
 		     , ODI.ORD_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 AS TOT_DC_AMT
 		     , ODI.REAL_ORD_AMT 
@@ -1214,7 +1246,6 @@
 		     , ODI.ITEM_CD
 		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2 
-		     , ODI.ITEM_ORD_QTY
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -1471,8 +1502,7 @@
 		     , OD.ORD_NO
 		     , OD.ORD_DTL_NO
 	</select>
-	
-	
+
 	<!-- 주문상세 > 다다익선적용내역 -->
 	<select id="getOrderTmtbHstList" parameterType="Order" resultType="Order">
 		/* order.getOrderTmtbHstList */
@@ -1525,7 +1555,160 @@
 		ORDER  BY Z.DISP_ORD
 	</select>
 	
-	
+	<!-- 주문상세 > 주문상세상태변경 -->
+	<update id="changedOrdDtlStat" parameterType="Order">
+		/* order.changedOrdDtlStat */
+		UPDATE TB_ORDER_DETAIL 
+		SET    ORD_DTL_STAT = #{ordDtlStat}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP() 
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+		AND    ORD_DTL_NO = #{ordDtlNo}
+	</update>
+	
+	<!-- 주문정보 -->
+	<select id="getOrderInfo" parameterType="Order" resultType="Order">
+		SELECT O.ORD_NO
+		     , O.MALL_GB
+		     , FN_GET_CODE_NM('G011', O.MALL_GB) AS MALL_GB_NM
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , O.CUST_NO
+		     , O.ORD_NM
+		     , O.ORD_PHNNO
+		     , O.ORD_TELNO
+		     , O.ORD_EMAIL
+		     , O.SITE_CD
+		     , FN_GET_CODE_NM('G000', O.SITE_CD) AS SITE_NM
+		     , O.FRONT_GB
+		     , O.REG_NO
+		     , DATE_FORMAT(O.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		     , O.UPD_NO
+		     , DATE_FORMAT(O.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		     , P.PAY_MEANS
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , DATE_FORMAT(O.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT
+		     , P.PAY_AMT
+		     , P.PAY_SQ
+		     , P.PAY_STAT
+		     , P.PG_GB
+		     , P.PG_TID
+		     , P.ESCROW_YN
+		     , C.CUST_GB
+		     , C.CUST_GRADE
+		     , S.SUM_ORD_QTY
+		     , S.SUM_CNCL_RTN_QTY
+		     , S.SUM_REAL_ORD_AMT
+		     , S.SUM_CNCL_RTN_AMT
+		     , S.SUM_CART_CPN_DC_AMT
+		FROM   TB_ORDER O
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO
+		INNER  JOIN (
+			SELECT MAX(PAY_SQ) AS PAY_SQ 
+			FROM   TB_PAYMENT 
+			WHERE  ORD_NO = #{ordNo}
+		) PS
+		ON     P.PAY_SQ = PS.PAY_SQ
+		LEFT   OUTER JOIN TB_CUSTOMER C
+		ON     O.CUST_NO = C.CUST_NO
+		INNER  JOIN (
+			SELECT ORD_NO
+			     , NVL(MIN(CART_CPN_SQ),0) AS CART_CPN_SQ
+			     , SUM(OD.ORD_QTY)         AS SUM_ORD_QTY
+			     , SUM(OD.CNCL_RTN_QTY)    AS SUM_CNCL_RTN_QTY
+			     , SUM(OD.REAL_ORD_AMT)    AS SUM_REAL_ORD_AMT
+			     , SUM(OD.CNCL_RTN_AMT)    AS SUM_CNCL_RTN_AMT
+			     , SUM(OD.CART_CPN_DC_AMT) AS SUM_CART_CPN_DC_AMT
+			FROM  TB_ORDER_DETAIL OD
+			WHERE ORD_NO = #{ordNo}
+			GROUP BY ORD_NO
+		) S
+		ON    1=1
+		LEFT  OUTER JOIN TB_CUST_COUPON CC
+		ON    S.CART_CPN_SQ = CC.CUST_CPN_SQ 
+		WHERE O.ORD_NO = P.ORD_NO
+		AND   O.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 주문상세 > 주문취소대상목록 -->
+	<select id="getCancelRequestTargetList" parameterType="Order" resultType="Order">
+		SELECT OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , 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
+		     , 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 = 9
+			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 TB_DELIVERY_FEE 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 
+		WHERE  1=1
+		AND    OD.ORD_DTL_STAT IN (
+			'G013_10', 'G013_20', 'G013_30', 'G013_40'
+		)
+		AND    OD.ORD_NO = 9
+		GROUP  BY OD.ORD_NO
+		     , OD.ORD_DTL_NO
+	    ORDER  BY OD.ORD_NO
+	         , OD.ORD_DTL_NO
+	</select>
 </mapper>
 
 

+ 747 - 0
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -0,0 +1,747 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CancelRequestForm.html
+ * @desc    : 취소요청 화면
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.12   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1400" data-height="600">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>취소요청</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCancelRequestForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="cancelRequestFrm">
+				<h3>주문정보</h3>
+				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+
+				<h3>취소정보</h3>
+				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" 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 == 'jsshin'
+									|| sessionInfo.userId == 'dlffyd7942'
+									|| sessionInfo.userId == 'card007'
+									|| sessionInfo.userId == 'hrkim'
+									|| sessionInfo.userId =='666badboy'
+									|| sessionInfo.userId =='yjyy83'}">
+						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
+					</label>
+					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</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.cdDesc}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>귀책사유</th>
+							<td><span id="imputeReason"></span></td>
+						</tr>
+						<tr>
+							<th>요청메모</th>
+							<td colspan="3">
+								<textarea name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+
+				<h4>환불예정금액</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>총 결제 금액</th>
+							<td><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanDeliveryFee"></span>원) </td>
+							<th>취소 상품 금액</th>
+							<td><span id="spanCurrPrice"></span>원</td>
+						</tr>
+						<tr>
+							<th>취소 사용 포인트</th>
+							<td><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 즉시 사용 마일리지 : <span id="spanPrePntDcAmt"></span>원) </td>
+							<th>취소 사용 쿠폰금액</th>
+							<td><span id="spanTotCpnDcAmt"></span>원</td>
+						</tr>
+						<tr>
+							<th>취소 상품 실결제 금액</th>
+							<td><span id="spanCancelPayAmt"></span>원</td>
+							<th>환불 배송금액</th>
+							<td><span id="spanTotDeliveryFee"></span>원 </td>
+						</tr>
+						<tr>
+							<th>환불금액</th>
+							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
+						</tr>
+					</tbody>
+				</table>
+				
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var cancelRequestTargetList = [[${cancelRequestTargetList}]];
+
+var temp1 = true;
+var temp2 = true;
+
+// specify the columns
+var columnCancelReqList = [
+	/*
+	{	
+		width						: 40
+		, minWidth					: 40
+		, cellClass					: 'text-center'
+		, headerCheckboxSelection	: true
+		, checkboxSelection			: true
+		, filter					: false
+	},
+	*/
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{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: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "사이즈코드"		, 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			: "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' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
+					
+					for (i=0 ; i<=ordCanChgQty ; i++) {
+						//alert(i + " :::: " +params.data.ordCanChgQty);
+						if (i == params.data.ordCanChgQty) {
+							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
+						} else {
+							strVal += "	<option value='"+i+"'>"+i+"</option>";
+						}
+					}
+				
+					strVal += "</select>";
+					return strVal;
+				}
+				/*
+				, valueGetter	: function(params) {
+					return params.data.ordCanChgQty;
+				}
+				, valueSetter	: 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);
+					
+					if (params.data.ordCanChgQty != params.newValue) {
+						if (!isNaN(parseInt(params.newValue))) {
+							// 2020.12.24 외부몰 취소건에 대해서는 업무 협의
+							if (orderInfo.mallGb == '20') {
+								if (parseInt(params.newValue) != parseInt(params.data.ordQty)) {
+									mcxDialog.alert('외부몰주문건은 전체취소만 가능합니다.'); return false;
+								} else {
+									params.data.chgQty = parseInt(params.newValue);
+								}
+							} else {
+								if (parseInt(params.newValue) > ordCanChgQty) {
+									mcxDialog.alert('취소가능수량보다 큽니다!'); 
+									return false;
+								} else {
+									alert(parseInt(params.newValue));
+									params.data.ordCanChgQty = parseInt(params.newValue);
+								}
+							}
+						} else {
+							mcxDialog.alert('숫자만 입력이 가능합니다!'); return false;
+						}
+						return true;
+					} else {
+						return false;
+					}
+				}
+				*/
+			}
+		]
+	},
+	{
+		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
+			}
+		]
+	}
+];
+var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
+// Add on options
+gridOptionsCancelReqList.suppressRowClickSelection = true;
+gridOptionsCancelReqList.rowSelection = 'multiple';
+
+
+//specify the columns
+var columnCancelReqToBeList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{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: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "사이즈코드"		, 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			: "ordCanChgQty"			
+				, width			: 100		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		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();
+				}
+			}
+		]
+	}
+];
+var gridOptionsCancelReqLToBeist = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+</script>
+
+<!-- AgGrid 컬럼 세팅 -->
+<script>
+// 공통1. 주문상세 그리드 옵션 정보 적용
+var orderAgGrid = {
+	getGridOptions : function(colDefs) {
+		return {
+			columnDefs					: colDefs
+			, detailCellRendererParams	: {
+				detailGridOptions	: {
+					columnDefs				: []
+					, defaultColDef			: {
+						resizable: true
+					}
+					, suppressLoadingOverlay: false
+					, onGridReady			: function (params) {
+						params.api.setDomLayout('autoHeight');
+					}
+					, onFirstDataRendered	: function (params) {
+						params.api.sizeColumnsToFit();
+					}
+				}
+				, getDetailRowData: function (params) {
+					params.successCallback(params.data.orderDetailList);
+				}
+			}
+			, defaultColDef: {
+				resizable: true
+			}
+			, isRowMaster: function (dataItem) {
+				return dataItem ? dataItem.orderDetailList.length > 1 : false;
+			}
+			, suppressRowTransform: true
+			, enableRangeSelection: true
+		};
+	}
+}
+</script>
+
+<script>
+// 취소정보계산
+var fnCalculateRefundAmt = function (obj) {
+	//취소정보담은목록
+	var cancelRequestTargetToBeList = [];
+
+	if (obj != null) {
+		for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+			var orDtlNo 		= $(obj).attr("ordDtlNo");
+			var ordCanChgQty 	= $(obj).val();
+			
+			if (cancelRequestTargetList[i].ordDtlNo == orDtlNo) {
+				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
+			}
+		}
+		// 주문정보 다시 셋팅 (체크해봐야할문제)
+		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	}
+	
+	// 취소정보 초기화
+	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+		var obj = new Object();
+		
+		var itemQty 		= cancelRequestTargetList[i].itemQty;
+		var ordQty 			= cancelRequestTargetList[i].ordQty;
+		var cnclRtnQty 		= cancelRequestTargetList[i].cnclRtnQty;
+		var ordReqChgQty 	= cancelRequestTargetList[i].ordReqChgQty;
+		var ordCanChgQty 	= cancelRequestTargetList[i].ordCanChgQty;
+		var itemPrice 		= cancelRequestTargetList[i].itemPrice;
+		var optAddPrice 	= cancelRequestTargetList[i].optAddPrice;
+		var ordAmt 			= cancelRequestTargetList[i].ordAmt;
+		
+		var cnclRtnAmt 		= cancelRequestTargetList[i].cnclRtnAmt;
+		var cpn1DcAmt 		= cancelRequestTargetList[i].cpn1DcAmt;
+		var tmtb1DcAmt 		= cancelRequestTargetList[i].tmtb1DcAmt;
+		var tmtb2DcAmt 		= cancelRequestTargetList[i].tmtb2DcAmt;
+		var goodsCpnDcAmt 	= cancelRequestTargetList[i].goodsCpnDcAmt;
+		var cartCpnDcAmt 	= cancelRequestTargetList[i].cartCpnDcAmt;
+		var pntDcAmt 		= cancelRequestTargetList[i].pntDcAmt;
+		var prePntDcAmt 	= cancelRequestTargetList[i].prePntDcAmt;
+		var gfcdUseAmt 		= cancelRequestTargetList[i].gfcdUseAmt;
+		var realOrdAmt 		= cancelRequestTargetList[i].realOrdAmt;
+		
+		obj.ordNo			= cancelRequestTargetList[i].ordNo;
+		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
+		obj.goodsCd			= cancelRequestTargetList[i].goodsCd;
+		obj.goodsNm			= cancelRequestTargetList[i].goodsNm;
+		obj.itemCd			= cancelRequestTargetList[i].itemCd;
+		obj.itemNm			= cancelRequestTargetList[i].itemNm;
+		obj.optCd1			= cancelRequestTargetList[i].optCd1;
+		obj.optCd2			= cancelRequestTargetList[i].optCd2;
+		obj.itemQty			= itemQty;
+		obj.ordQty			= ordQty;
+		obj.cnclRtnQty		= cnclRtnQty;
+		obj.ordReqChgQty	= ordReqChgQty;
+		obj.ordCanChgQty	= ordCanChgQty;
+		obj.itemPrice		= itemPrice;
+		obj.optAddPrice		= optAddPrice;
+		obj.ordAmt			= ordAmt;
+		
+		obj.cnclRtnAmt 		= ((itemPrice + optAddPrice) * itemQty) * ordCanChgQty;
+		obj.cpn1DcAmt 		= cpn1DcAmt 		* (ordCanChgQty/ordQty);
+		obj.tmtb1DcAmt 		= tmtb1DcAmt 		* (ordCanChgQty/ordQty);
+		obj.tmtb2DcAmt 		= tmtb2DcAmt 		* (ordCanChgQty/ordQty);
+		obj.goodsCpnDcAmt 	= goodsCpnDcAmt 	* (ordCanChgQty/ordQty);
+		obj.cartCpnDcAmt 	= cartCpnDcAmt 		* (ordCanChgQty/ordQty);
+		obj.pntDcAmt 		= pntDcAmt 			* (ordCanChgQty/ordQty);
+		obj.prePntDcAmt 	= prePntDcAmt 		* (ordCanChgQty/ordQty);
+		obj.gfcdUseAmt 		= gfcdUseAmt 		* (ordCanChgQty/ordQty);
+		
+		obj.realOrdAmt 		= obj.cnclRtnAmt - (obj.cpn1DcAmt  + obj.tmtb1DcAmt + obj.tmtb2DcAmt + obj.goodsCpnDcAmt + obj.cartCpnDcAmt + obj.pntDcAmt + obj.prePntDcAmt + obj.gfcdUseAmt);
+		
+		cancelRequestTargetToBeList[i] = obj;
+	}
+
+	gridOptionsCancelReqLToBeist.api.setRowData(cancelRequestTargetToBeList);
+}
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderCancelRequestList', gridOptionsCancelReqList);			// as-is 정보
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList', gridOptionsCancelReqLToBeist);	// to-be 정보
+	
+	// 취소정보계산
+	fnCalculateRefundAmt(null);
+	
+	/*
+	// 그리드 클릭마다 환불금액 계산
+	gridOptionsCancelReqList.onRowSelected = function(event){
+		fnCalculateRefundAmt();		//환불예정금액 계산.
+	}
+	gridOptionsCancelReqList.onRowClicked = function(event){
+		fnCalculateRefundAmt();		//환불예정금액 계산.
+	}
+	gridOptionsCancelReqList.onCellValueChanged = function(event){
+		fnCalculateRefundAmt();		//환불예정금액 계산.
+	}
+	*/
+});
+</script>
+</html>
+
+
+
+
+

+ 196 - 34
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -31,17 +31,17 @@
 				<div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
 									
 				<h4>주문상품정보</h4>
-				<button type="button" class="btn btnRight btn-base btn-sm" id="btnExchange" style="margin-left:10px;" >교환요청</button>
-				<button type="button" class="btn btnRight btn-base btn-sm" id="btnReturn">반품요청</button>
-				<button type="button" class="btn btnRight btn-base btn-sm" id="btnCancel">취소요청</button>
+				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnExchange" style="margin-left:10px;" >교환요청</button>
+				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnReturn">반품요청</button>
+				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnCancel">취소요청</button>
 				<div id="gridOrderGoodsInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 				
 				<h4>주문사은품정보</h4>
-				<button type="button" class="btn btnRight btn-base btn-sm" id="btnFreeGiftCancel" style="margin-left:10px;" >사은품취소</button>
+				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnFreeGiftCancel" style="margin-left:10px;" >사은품취소</button>
 				<div id="gridOrderFreeGiftInfo" style="width:100%; height:120px;" class="ag-theme-balham"></div>
 				
 				<h4>배송정보</h4>
-				<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm" id="btnUpdateOrderAddr">수정</button>
+				<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm off" id="btnUpdateOrderAddr">수정</button>
 				<div id="gridDeliveryAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
 				
 				<table style="width:100%;">
@@ -224,26 +224,37 @@ var gridOptionsOrderInfo = orderAgGrid.getGridOptions(columnDefsOrderInfo);
 
 // 2.상품별 상세정보
 var columnDefsGoodsInfo = [
+	{
+		headerName	: "주문상세",
+		children	: [
+			{headerName: "번호"		, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'}
+		],
+	},
 	{
 		headerName	: "상품정보",
 		children	: [
-			{headerName: "상품코드"	, field: "goodsCd"		, width: 110, cellClass: 'text-center'},
+			{headerName: "상품코드"	, field: "goodsCd"		, width: 80, cellClass: 'text-center'},
 			{
 				headerName		: "상품명"
 				, field			: "goodsNm"
-				, width			: 180
+				, width			: 200
 				, cellClass		: 'text-left'
 				, cellRenderer: function (params) {
 					return '<a href="javascript:void(0);" onclick="cfnOpenFrontGoodsPopup(\'' + params.data.goodsCd + '\',\'' + params.data.siteCd + '\');">' + params.value + '</a>';
 				}
 			},
 			{headerName: "상품타입"	, field: "goodsTypeNm"	, width: 100, cellClass: 'text-center'},
-			{headerName: "브랜드"		, field: "brandEnm"		, width: 100, cellClass: 'text-center'},
-			{headerName: "단품코드"	, field: "itemCd"		, width: 100, cellClass: 'text-center'},
+			{headerName: "브랜드"		, field: "brandEnm"		, width: 80, cellClass: 'text-center'}
+		]
+	},
+	{
+		headerName	: "단품정보",
+		children	: [
+			{headerName: "단품코드"	, field: "itemCd"		, width: 80, cellClass: 'text-center'},
 			{
 				headerName		: "단품명"
 				, field			: "itemNm"
-				, width			: 180
+				, width			: 200
 				, cellClass		: 'text-left'
 				, cellRenderer: function (params) {
 					return '<a href="javascript:void(0);" onclick="cfnOpenFrontGoodsPopup(\'' + params.data.itemCd + '\',\'' + params.data.siteCd + '\');">' + params.value + '</a>';
@@ -273,40 +284,92 @@ var columnDefsGoodsInfo = [
 		]
 	},
 	{
-		headerName	: "주문상세",
+		headerName	: "주문상세단품",
 		children	: [
-			{headerName: "주문상세번호"	, field: "ordDtlNo"		, width: 120, cellClass: 'text-center'},
+			{headerName: "주문수량"	, field: "ordQty"		, width: 80, cellClass: 'text-center'},
+			{headerName: "취소수량"	, field: "cnclRtnQty"	, width: 80, cellClass: 'text-center'},
+			{headerName: "상세상태"	, field: "ordDtlStat"	, width: 120, cellClass: 'text-center', hide: true},
 			{
-				headerName		: "주문상세상태"
+				headerName		: "상세상태"
 				, field			: "ordDtlStatNm"
 				, width			: 120
-				, cellClass		: 'text-left'
+				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					var retVal = "";
 					retVal += (params.data.cancelRequestQty > 0) ? " 취" + params.data.cancelRequestQty : "";
 					retVal += (params.data.returnRequestQty > 0) ? " 반" + params.data.returnRequestQty : "";
 					retVal += (params.data.exchangeRequestQty > 0) ? " 교" + params.data.exchangeRequestQty : "";
 					
-					if (!gagajf.isNull(retVal)) retVal = "-" + retVal;
-						return "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailChangeHst('" + params.data.ordDtlNo + "');\">" + params.value + retVal + "</a>";
+					if (!gagajf.isNull(retVal)) {
+						retVal = "-" + retVal;
+					}
+					
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailChangeHst('" + params.data.ordDtlNo + "');\">" + params.value + retVal + "</a>";
+				}
+			},
+			{
+				headerName		: "상태변경"
+				, field			: "ordDtlStatChg"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {				
+					var strVal 		= "";
+					var strCheck	= "";
+					
+					// 현재상태에 따라서 갈수 있는 상태 정리
+					// @ 자사 : 결제완료, 배송준비중, 배송중, 배송완료
+					// @ 입점 : 결제완료, 상품준비중, 출고완료
+					// @ 모든상태값 변경 기준 (상세내역의 상택값 이력으로만 이동가능)
+					// G013_00	주문접수
+					// G013_10	입금대기
+					// G013_18	발주대기-가격차이
+					// G013_19	발주대기-우편번호상이
+					// G013_20	결제완료
+					// G013_30	상품준비중
+					// G013_40	배송준비중
+					// G013_50	배송중
+					// G013_55	출고완료
+					// G013_60	배송완료
+					// G013_98	결제전주문취소
+					// G013_99	결제후주문취소
+					// 2020.12.22 추가적인 개발은 추후 물류개발이 완료된 후 추가할 예정
+					// @ 재고정보수정
+					// @ 정산정보수정
+					strVal += "<select class='ordDtlStatChg' name='ordDtlStatChg' ordDtlNo='"+params.data.ordDtlNo+"' ordNo='"+params.data.ordNo+"' onChange='fnChangOrdDtlStat(this);'>";
+					strVal += "	<option value=''>선택</option>";
+					
+					if (!gagajf.isNull(params.data.g20)) {
+						strVal += "	<option value='G013_20'>결제완료</option>";
+					}
+					if (!gagajf.isNull(params.data.g30)) {
+						strVal += "	<option value='G013_30'>상품준비중</option>";
+					}
+					if (!gagajf.isNull(params.data.g40)) {
+						strVal += "	<option value='G013_40'>배송준비중</option>";
+					}
+					if (!gagajf.isNull(params.data.g50)) {
+						strVal += "	<option value='G013_50'>배송중</option>";
+					}
+					if (!gagajf.isNull(params.data.g55)) {
+						strVal += "	<option value='G013_55'>출고완료</option>";
+					}
+					if (!gagajf.isNull(params.data.g60)) {
+						strVal += "	<option value='G013_60'>배송완료</option>";
+					}
+					strVal += "</select>";
+					
+					return strVal;
 				}
 			}
 		]
 	},
-	{
-		headerName	: "수량",
-		children	: [
-			{headerName: "주문"		, field: "itemOrdQty"		, width: 60, cellClass: 'text-center'},
-			{headerName: "취소"		, field: "itemCnclRtnQty"	, width: 60, cellClass: 'text-center'}
-		]
-	},
 	{
 		headerName	: "쿠폰",
 		children	: [
 			{
 				headerName		: "즉시할인"
 				, field			: "cpn1DcAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right' //goodsCpnDcAmtClass
 				, cellRenderer: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -315,7 +378,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "상품"
 				, field			: "goodsCpnDcAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right' //goodsCpnDcAmtClass
 				, cellRenderer: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -324,7 +387,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "장바구니"
 				, field			: "cartCpnDcAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right' //cartCpnDcAmtClass
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -338,7 +401,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "수량"
 				, field			: "tmtb1DcAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -347,7 +410,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "금액"
 				, field			: "tmtb2DcAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -361,7 +424,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "사용"
 				, field			: "pntDcAmt"
-				, width			: 60
+				, width			: 80
 				, cellClass		: 'text-right' //pntDcAmtClass
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -379,7 +442,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "적립"
 				, field			: "savePntAmt"
-				, width			: 60
+				, width			: 80
 				, cellClass		: 'text-right' //savePntAmtClass
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -405,9 +468,9 @@ var columnDefsGoodsInfo = [
 		headerName	: "금액(원/단위)",
 		children	: [
 			{
-				headerName		: "판매"
+				headerName		: "주문"
 				, field			: "ordAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right'
 				, valueFormatter: function (params) {
 					return params.value.addComma();
@@ -416,7 +479,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "실결제"
 				, field			: "realOrdAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right'
 				, valueFormatter: function (params) {
 					return params.value.addComma();
@@ -425,7 +488,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "취소"
 				, field			: "cnclRtnAmt"
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-right'
 				, valueFormatter: function (params) {
 					return params.value.addComma();
@@ -853,6 +916,72 @@ $(document).ready(function () {
 	
 	// 3. 그리드 높이 설정
 	fnSetGridHeightInit();
+	
+	// 4. 버튼처리
+	// G013_00	주문접수
+	// G013_10	입금대기
+	// G013_18	발주대기-가격차이
+	// G013_19	발주대기-우편번호상이
+	// G013_20	결제완료
+	// G013_30	상품준비중
+	// G013_40	배송준비중
+	// G013_50	배송중
+	// G013_55	출고완료
+	// G013_60	배송완료
+	// G013_98	결제전주문취소
+	// G013_99	결제후주문취소
+	
+	// G685_10	결제전취소
+	// G685_20	취소요청
+	// G685_21	취소완료
+	// G685_30	교환요청
+	// G685_31	교환요청취소
+	// G685_32	교환완료
+	// G685_40	반품요청
+	// G685_41	반품요청취소
+	// G685_42	반품완료
+
+	var addrBtnChkCnt = 0;
+	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') {
+			$("#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
+			) {
+			$("#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') {
+			addrBtnChkCnt++;
+		}
+		
+		//if (rowNode.data.ordDtlStat !== '10' 
+		//		&& rowNode.data.ordDtlStat !== '17' 
+		//		&& rowNode.data.ordDtlStat !== '20' 
+		//		&& rowNode.data.ordDtlStat !== '34') {
+		//	addrBtnChkCnt++;
+		//}
+	});
+
+	// 주소변경 버튼 히든처리
+	if (addrBtnChkCnt > 0) {
+		$("#btnUpdateOrderAddr").removeClass("off");
+	}
 });
 
 $(document).ready(function () {
@@ -1291,6 +1420,39 @@ $(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 + "(으)로 변경 하시겠습니까?"
+		
+		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();
+					}
+				);
+			}
+		});
+		
+		
+		
+	};
 </script>
 
 </html>

+ 19 - 31
style24.admin/src/main/webapp/WEB-INF/views/order/OrderListForm.html

@@ -285,7 +285,7 @@ var columnDefsOrderList = [
 			{
 				headerName		: "주문번호"
 				, field			: 'ordNo'
-				, width			: 70
+				, width			: 80
 				, cellClass		: 'text-center'
 				, sortable		: true
 				, cellRenderer	: function (params) {
@@ -300,7 +300,7 @@ var columnDefsOrderList = [
 			{
 				headerName		: "주문자"
 				, field			: "ordNm"
-				, width			: 120
+				, width			: 100
 				, cellClass		: 'text-left'
 				, sortable		: true
 				, cellRenderer	: function (params) {
@@ -363,7 +363,7 @@ var columnDefsOrderList = [
 			{
 				headerName		: "결제수단"
 				, field			: "payMeans"
-				, width			: 110
+				, width			: 100
 				, cellClass		: 'text-center'
 				, hide			: true
 				, valueGetter	: function (params) { 
@@ -382,7 +382,7 @@ var columnDefsOrderList = [
 			{
 				headerName		: "주문상세상태"
 				, field			: "ordDtlStat"
-				, width			: 140
+				, width			: 120
 				, cellClass		: 'text-center'
 				, sortable		: true
 				, valueGetter	: function (params) {
@@ -402,18 +402,20 @@ var columnDefsOrderList = [
 					return ordDtlStat;
 				}
 			},
-			{headerName: "출고처", field: "delvLocNm", width: 110, cellClass: 'text-center', sortable: true},
+			{headerName: "출고처", field: "delvLocNm", width: 110, cellClass: 'text-center', sortable: true, hide:true},
 		]
 	},
 	{
-		headerName	: "주문상품정보"
+		headerName	: "상품정보"
 		, cellClass	: 'text-center'
 		, children	: [
 			{headerName: "상품코드"	, field: "goodsCd"		, width: 100	, cellClass: 'text-center'	, sortable: true},
+			{headerName: "브랜드"		, field: "brandEnm"		, width: 100	, cellClass: 'text-center'	, sortable: true},
+			{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 100	, cellClass: 'text-center'	, sortable: true},
 			{
 				headerName		: "상품명"
 				, field			: 'goodsNm'
-				, width			: 75
+				, width			: 200
 				, cellClass		: 'text-center'
 				, sortable		: true
 				, cellRenderer	: function (params) {
@@ -428,36 +430,23 @@ var columnDefsOrderList = [
 		]
 	},
 	{
-		headerName	: "주문상품단품정보"
+		headerName	: "단품정보"
 		, cellClass	: 'text-center'
 		, children	: [
 			{
 				headerName		: "이미지"
-				, field			: "imgPath1"
-				, width			: 70
+				, field			: "sysImgNm"
+				, width			: 100
 				, height		: 60
 				, cellClass		: 'text-center'
-				, cellRenderer	: function(params) {
-					if (params.data.imgType == "A") {
-						if (!gagajf.isNull(params.data.imgPath6)) {
-							return '<img width="60" src="' + uploadGoodsUrl + params.data.imgPath6.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
-						} else {
-							return '<img width="60" src="' + uploadGoodsUrl + params.value.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
-						}
-					} else {
-						if (!gagajf.isNull(params.data.imgPath6)) {
-							return '<img width="60" src="' + params.data.imgPath1 + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
-						} else {
-							return '<img width="60" src="' + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
-						}
-					}
+				,cellRenderer	: function(params) {
+					return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
 				}
-			},
-			{headerName: "브랜드"		, field: "brandEnm"		, width: 130, cellClass: 'text-center', sortable: true},
+			},			
 			{
 				headerName		: "단품코드"
 				, field			: "itemCd"
-				, width			: 130
+				, width			: 100
 				, cellClass		: 'text-center'
 				, sortable		: true
 				, cellRenderer: function (params) {
@@ -469,10 +458,9 @@ var columnDefsOrderList = [
 					}
 				}
 			},
-			{headerName: "색상"		, field: "optCd1"		, width: 100	, cellClass: 'text-center'	, sortable: true},
+			{headerName: "색상"		, field: "optCd1"		, width: 60	, cellClass: 'text-center'	, sortable: true},
 			{headerName: "사이즈"		, field: "optCd2"		, width: 60		, cellClass: 'text-center'	, sortable: true},
 			{headerName: "단품명"		, field: "itemNm"		, width: 200	, cellClass: 'text-left'	, sortable: true},
-			{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 200	, cellClass: 'text-left'	, sortable: true},
 			{
 				headerName		: "외부몰벤더"
 				, field			: "vendorId"
@@ -627,7 +615,7 @@ var columnDefsOrderList = [
 			{
 				headerName		: "배송메모"
 				, field			: "delvMemo"
-				, width			: 500
+				, width			: 200
 				, cellClass		: 'left'
 				, valueGetter: function (params) {
 					var delvMemo = '';
@@ -637,7 +625,7 @@ var columnDefsOrderList = [
 					return delvMemo;
 				}
 			},
-			{headerName: "출고메모", field: "dstrbtNote", width: 300, cellClass: 'left'}
+			{headerName: "출고메모", field: "dstrbtNote", width: 200, cellClass: 'left'}
 		]
 	}
 ];