Преглед изворни кода

Merge branch 'develop' into bin2107

bin2107 пре 5 година
родитељ
комит
2f8564b2f7
25 измењених фајлова са 7744 додато и 110 уклоњено
  1. 28 0
      src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java
  2. 2 2
      src/main/java/com/style24/admin/biz/service/TsaFreegiftPromotionService.java
  3. 75 0
      src/main/java/com/style24/admin/biz/service/TsaPlanService.java
  4. 21 0
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  5. 1 1
      src/main/java/com/style24/persistence/domain/FreeGoodsPromotion.java
  6. 16 5
      src/main/java/com/style24/persistence/domain/Plan.java
  7. 5 5
      src/main/java/com/style24/persistence/mybatis/shop/TsaFreegiftPromotion.xml
  8. 130 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml
  9. 286 91
      src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html
  10. 1092 0
      src/main/webapp/WEB-INF/views/order/CancelRequestFormBack01.html
  11. 1054 0
      src/main/webapp/WEB-INF/views/order/CancelRequestFormBack02.html
  12. 1114 0
      src/main/webapp/WEB-INF/views/order/CnclReqForm.html
  13. 145 0
      src/main/webapp/WEB-INF/views/order/CnclReqViewForm.html
  14. 110 0
      src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html
  15. 96 0
      src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html
  16. 8 6
      src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  17. 1397 0
      src/main/webapp/WEB-INF/views/order/OrderDetailFormBack20210122.html
  18. 106 0
      src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html
  19. 97 0
      src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html
  20. 78 0
      src/main/webapp/WEB-INF/views/order/OrderDetailTmtbHst.html
  21. 766 0
      src/main/webapp/WEB-INF/views/order/OrderListFormBack.html
  22. 183 0
      src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html
  23. 437 0
      src/main/webapp/WEB-INF/views/order/OrderSamplePopupForm.html
  24. 370 0
      src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html
  25. 127 0
      src/main/webapp/WEB-INF/views/order/RefundAccountRegistForm.html

+ 28 - 0
src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java

@@ -101,6 +101,34 @@ public interface TsaPlanDao {
 	 * @since 2021. 2. 8
 	 */
 	void updatePlanWebInfo(Plan param);
+	
+	/**
+	 * 기획전 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	void createPlanCopy(Plan param);
+	
+	/**
+	 * 기획전 브랜드 등록
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	void createPlanBrand(Plan param);
+	
+	/**
+	 * 기획전 브랜드 목록
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	Collection<Plan> getPlanBrandList(Plan param);
 
 
 }

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

@@ -230,7 +230,7 @@ public class TsaFreegiftPromotionService {
 
 			// 지급 사은품 리스트1 반복
 			for (int i = 0 ; i < param.getFreeGoods1().size() ; i++) {
-				freegoodsGiveInfo.setItemCd(param.getFreeGoods1().get(i).getProductNo() + "");		// 사은품 번호
+				freegoodsGiveInfo.setProductNo(param.getFreeGoods1().get(i).getProductNo());		// 사은품 번호
 				freegoodsGiveInfo.setUsePoint(param.getFreeGoods1().get(i).getUsePoint());			// 사은품 포인트액
 				freegoodsGiveInfo.setItemQty(param.getFreeGoods1().get(i).getItemQty());			// 주문시 지급 수량
 				freegoodsGiveInfo.setLimitQty(param.getFreeGoods1().get(i).getLimitQty());			// 한정 수량
@@ -253,7 +253,7 @@ public class TsaFreegiftPromotionService {
 
 			// 지급 사은품 리스트2 반복
 			for (int i = 0 ; i < param.getFreeGoods2().size() ; i++) {
-				freegoodsGiveInfo.setItemCd(param.getFreeGoods2().get(i).getProductNo() + "");		// 사은품 번호
+				freegoodsGiveInfo.setProductNo(param.getFreeGoods2().get(i).getProductNo());		// 사은품 번호
 				freegoodsGiveInfo.setUsePoint(param.getFreeGoods2().get(i).getUsePoint());			// 사은품 포인트액
 				freegoodsGiveInfo.setItemQty(param.getFreeGoods2().get(i).getItemQty());			// 주문시 지급 수량
 				freegoodsGiveInfo.setLimitQty(param.getFreeGoods2().get(i).getLimitQty());			// 한정 수량

+ 75 - 0
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -15,6 +15,7 @@ import com.style24.admin.biz.dao.TsaPlanDao;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.session.TscSession;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.MoreBetterGoods;
 import com.style24.persistence.domain.Plan;
 
 import lombok.extern.slf4j.Slf4j;
@@ -57,9 +58,21 @@ public class TsaPlanService {
 	 */
 	@Transactional("shopTxnManager")
 	public void createPlanWebInfo(Plan param) {
+		Plan plan = new Plan();
 		param.setRegNo(TsaSession.getInfo().getUserNo());
 		param.setUpdNo(TsaSession.getInfo().getUserNo());
 		planDao.createPlanWebInfo(param);
+		
+		String[] brand = param.getMultiBrand();
+		// 기획전 브랜드 insert
+		for (int j = 0; j < brand.length; j++) {
+			plan.setBrandCd(brand[j]);
+			plan.setPlanSq(param.getPlanSq());
+			plan.setRegNo(TsaSession.getInfo().getUserNo());
+			plan.setUpdNo(TsaSession.getInfo().getUserNo());
+			planDao.createPlanBrand(plan);
+		}
+		    
 
 		log.debug("planSq : {}", param.getPlanSq());
 
@@ -383,6 +396,56 @@ public class TsaPlanService {
 //		}
 	}
 	
+	/**
+	 * 기획전 복사
+	 *
+	 * @param 복사대상 기획전 번호
+	 * @return 복사된 기획전 번호
+	 * @author rladbwnd5
+	 * @since 2021. 02. 09
+	 */
+	@Transactional("shopTxnManager")
+	public Plan copyPlan(Plan param) {
+		Plan plan = new Plan();
+		int userNo = TsaSession.getInfo().getUserNo();
+		// 01. 기획전 복사
+		param.setRegNo(userNo);
+		param.setUpdNo(userNo);
+		planDao.createPlanCopy(param);
+		
+
+		// 02. 기획전 코너 목록 조회
+//		Plan serchCorner = new Plan();
+//		serchCorner.setPlanSq(param.getCopyPlanSq());
+//		Collection<TsaPlan> cornerList = marketingDao.getPlanCornerList(serchCorner);
+//
+//		for (TsaPlan cornerInfo : cornerList) {
+//			// 03. 기획전 코너 복사
+//			TsaPlan copyCorner = new TsaPlan();
+//			copyCorner.setPlanSq(plan.getPlanSq());
+//			copyCorner.setCopyPlanDtlSq(cornerInfo.getPlanDtlSq());
+//			copyCorner.setRegId(userId);
+//			copyCorner.setUpdId(userId);
+//			marketingDao.createPlanCornerCopy(copyCorner);
+//			plan.setPlanDtlSq(copyCorner.getPlanDtlSq());
+//
+//			// 04. 상품 조회
+//			TsaPlan searchGoods = new TsaPlan();
+//			searchGoods.setPlanDtlSq(cornerInfo.getPlanDtlSq());
+//			Collection<TsaPlan> goodsList = marketingDao.getPlanGoodsList(searchGoods);
+//
+//			// 05. 상품 복사
+//			for (TsaPlan goodsInfo : goodsList) {
+//				goodsInfo.setPlanDtlSq(plan.getPlanDtlSq());
+//				goodsInfo.setRegId(userId);
+//				goodsInfo.setUpdId(userId);
+//				marketingDao.createPlanGoodsCopy(goodsInfo);
+//			}
+//		}
+
+		return plan;
+	}
+	
 	/**
 	 * 파일 삭제
 	 *
@@ -399,5 +462,17 @@ public class TsaPlanService {
 			// Nothing Do
 		}
 	}
+	
+	/**
+	 * 기획전 브랜드 목록
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	public Collection<Plan> getPlanBrandList(Plan param){
+		return planDao.getPlanBrandList(param);
+	}
 
 }

+ 21 - 0
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1329,6 +1329,9 @@ public class TsaMarketingController extends TsaBaseController {
 		if (param.getMode().equals("N")) { // 신규 일 때
 			// 기획전 전체 목록
 			mav.addObject("planList", planService.getPlanAllList(param));
+			
+			// 브랜드 목록
+			mav.addObject("brandList", rendererService.getSupplyCompanyBrandList(""));
 
 		} else if(param.getMode().equals("U")){ // 상세 일 때
 			mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
@@ -1336,6 +1339,10 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("fsrcPc", planService.getPlanFsrcPcList(param));
 
 			mav.addObject("fsrcMobile", planService.getPlanFsrcMobileList(param));
+			
+			mav.addObject("planBrandList", planService.getPlanBrandList(param));
+			
+			mav.addObject("brandList", rendererService.getSupplyCompanyBrandList(""));
 
 			//mav.addObject("planQuestionList", planService.getPlanQuestionList(param));
 
@@ -1434,5 +1441,19 @@ public class TsaMarketingController extends TsaBaseController {
 		planService.updatePlanWebInfo(param);
 		return super.ok(message.getMessage("SUCC_0002"));
 	}
+	
+	/**
+	 * 기획전 등록 화면 기획전 복사
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	@PostMapping("/planning/copy")
+	@ResponseBody
+	public Plan copyPlan(@RequestBody Plan param) {
+		System.out.println("컨트롤러 :" + param);
+		return planService.copyPlan(param);
+	}
 
 }

+ 1 - 1
src/main/java/com/style24/persistence/domain/FreeGoodsPromotion.java

@@ -62,7 +62,7 @@ public class FreeGoodsPromotion extends TscBaseDomain {
 
 
 	// 사은품 프로모션 사은품 조건
-	private String itemCd;				// 사은품 번호
+	private int productNo;				// 사은품 번호
 	private int usePoint;				// 포인트액
 	private int limitQty;				// 한정수량
 	private int itemQty;				// 지급수량

+ 16 - 5
src/main/java/com/style24/persistence/domain/Plan.java

@@ -69,20 +69,29 @@ public class Plan extends TscBaseDomain{
 		private String privacyPolicy;		//개인정보수집동의정책
 
 		// 기획전 소스
-		private long seq;					//일련번호
+		private Integer seq;					//일련번호
 		private String fsrc;				//프론트소스
 		private String fsrcPc;				//프론트소스(pc)	/ 화면용
 		private String fsrcMobile;			//프론트소스(모바일)	/ 화면용
 
 		// 기획전 상세
-		private long planDtlSq;				//기획전상세일련번호(SEQ_PLAN_DTL sequence)
-		private long copyPlanDtlSq;			//복사할 상세 일련번호
-		private long copyPlanSq;			//복사할 일련번호
+		private Integer planDtlSq;				//기획전상세일련번호(SEQ_PLAN_DTL sequence)
+		private Integer copyPlanDtlSq;			//복사할 상세 일련번호
+		private Integer copyPlanSq;			//복사할 일련번호
 		private String copyMode;			//복사 선택(CORNER:코너복사, PLAN:기획전복사)
 		private String cornerDispType;		//코너노출유형(공통코드G045) (2:2컷 , 3:3컷, 4:4컷)
 		private String cornerNm;			//코너 명
 		private String planDtlStat;			//기획전상세상태(공통코드G044)
-
+		
+		// 기획전 브랜드
+		private String brandCd;		//기획전브랜드코드
+		private String DispYn;      	//표시여부           
+		private String brandKnm;    // 브랜드명(한글)
+		private String brandEnm;    // 브랜드명(영문)
+		/* Multi CheckBox 항목*/
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] multiBrand;
+		
 		// 기획전 응모
 		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 		private String[] planQtitle;
@@ -146,4 +155,6 @@ public class Plan extends TscBaseDomain{
 		private String search; // 검색어
 		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 		private String[] conditionList;
+		
+		
 }

+ 5 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsaFreegiftPromotion.xml

@@ -212,20 +212,20 @@
 	<select id="getFreegiftFreegoodsList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsSectionVal">
 		/* TsaMarketing.getFreegiftFreegoodsList : 사은품 프로모션 등록 사은품 리스트 조회 */
 		SELECT FV.FREEGIFT_SECTION_SQ
+		     , FV.PRODUCT_NO
 		     , FV.USE_POINT
 		     , FV.ITEM_QTY
 		     , FV.LIMIT_QTY
 			 , FV.LEFT_QTY
-		     , FV.ITEM_CD
 			 , FG.PRODUCT_NO
 			 , FG.GOODS_NM
 		  FROM TB_FREEGIFT_VAL FV
 		 INNER JOIN TB_FREE_GOODS FG
-		    ON FV.ITEM_CD = FG.PRODUCT_NO
+		    ON FV.PRODUCT_NO = FG.PRODUCT_NO
 		 WHERE FV.DEL_YN = 'N'
 		   AND FV.FREEGIFT_SQ = #{freegiftSq}					/* 사은품 프로모션 번호 */
 		   AND FV.FREEGIFT_SECTION_SQ = #{freegiftSectionSq}	/* 사은품 프로모션 섹션 번호 */
-		 ORDER BY FV.FREEGIFT_SECTION_SQ, FV.ITEM_CD
+		 ORDER BY FV.FREEGIFT_SECTION_SQ, FV.PRODUCT_NO
 	</select>
 
 	<!-- 사은품 프로모션 마스터 정보 저장 -->
@@ -336,9 +336,9 @@
 		INSERT INTO TB_FREEGIFT_VAL (
 			  FREEGIFT_SQ
 			, FREEGIFT_SECTION_SQ
+			, PRODUCT_NO
 			, USE_POINT
 			, ITEM_QTY
-			, ITEM_CD
 			, LIMIT_QTY
 			, LEFT_QTY
 			, REG_NO
@@ -348,9 +348,9 @@
 		) VALUES (
 			  #{freegiftSq}
 			, #{freegiftSectionSq}
+			, #{productNo}
 			, #{usePoint}
 			, #{itemQty}
-			, #{itemCd}
 			, #{limitQty}
 			, #{leftQty}
 			, #{regNo}

+ 130 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -385,6 +385,136 @@
 		ORDER  BY PLAN_SQ DESC
 	</select>
 
+	<!-- 기획전 복사 -->
+	<insert id="createPlanCopy" parameterType="Plan">
+		/* TsaMarketing.createPlanCopy */
+		<selectKey keyProperty="planSq" resultType="Integer" order="AFTER">
+			SELECT LAST_INSERT_ID()	/* 기획전 일련번호  */
+		</selectKey>
+
+		INSERT INTO TB_PLAN (
+		            PLAN_SQ
+		          , PLAN_NM
+		          , PLAN_GB
+		          <!-- , CUST_GB -->
+		          <!-- , CUST_GRADE -->
+		          <!-- , PLAN_SNM -->
+		          , TEMPLATE_TYPE
+		          , SITE_CD
+		          , FRONT_GB
+		          , DISP_STDT
+		          , DISP_EDDT
+		          , MAIN_PIMG
+		          , MAIN_MIMG
+		          , DTL_PIMG
+		          , DTL_MIMG
+		          , DTL_TITLE1        
+		          <!-- , CATE_CD -->
+		          <!-- , CATE_DISP_YN -->
+		          , REPLY_YN
+		          , REPLY_LOC
+		          , REPLY_IMG
+		          , REPLY_TITLE1
+		          , REPLY_TITLE2
+		          , POLL_SQ
+		          <!-- , PRIVACY_POLICY -->
+		          , DEV_URL
+		          , CORNER_NM_DISP_YN
+		          , GOODS_LIMIT_YN
+		          , GOODS_LIMIT_QTY
+		          , DEL_YN
+		          , OPEN_YN
+		          , DISP_ORD
+		          , READ_CNT
+		          , BADGE_NM
+		          , BADGE_FCOLOR
+		          , BADGE_BCOLOR
+		          , REG_NO
+		          , REG_DT
+		          , UPD_NO
+		          , UPD_DT
+		      ) SELECT #{planSq}
+		             , PLAN_NM
+		             , PLAN_GB
+		             <!-- , CUST_GB -->
+		             <!-- , CUST_GRADE -->
+		             <!-- , PLAN_SNM -->
+		             , TEMPLATE_TYPE
+		             , SITE_CD
+		             , FRONT_GB
+		             , DISP_STDT
+		             , DISP_EDDT
+		             , MAIN_PIMG
+		             , MAIN_MIMG
+		             , DTL_PIMG
+		             , DTL_MIMG
+		             , DTL_TITLE1
+		             <!-- , CATE_CD -->
+		             <!-- , CATE_DISP_YN -->
+		             , REPLY_YN
+		             , REPLY_LOC
+		             , REPLY_IMG
+		             , REPLY_TITLE1
+		             , REPLY_TITLE2
+		             , POLL_SQ
+		             <!-- , PRIVACY_POLICY -->
+		             , DEV_URL
+		             , CORNER_NM_DISP_YN
+		             , GOODS_LIMIT_YN
+		             , GOODS_LIMIT_QTY
+		             , 'N'
+		             , OPEN_YN
+		             , DISP_ORD
+		             , 0
+		             , BADGE_NM
+		             , BADGE_FCOLOR
+		             , BADGE_BCOLOR
+		             , #{regNo}
+		             , now()
+		             , #{updNo}
+		             , now()
+		        FROM   TB_PLAN
+		        WHERE  PLAN_SQ = #{copyPlanSq}
+	</insert>
+	
+	<insert id="createPlanBrand" parameterType="Plan">
+		INSERT INTO TB_PLAN_BRAND
+			(
+				BRAND_CD
+			  , PLAN_SQ
+			  , DISP_YN
+			  , REG_NO
+			  , REG_DT
+			  , UPD_NO
+			  , UPD_DT
+			)
+		VALUES
+		   (
+			  #{brandCd}
+			, #{planSq}
+			,'Y'
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		   )
+	</insert>
+	
+	<select id="getPlanBrandList" parameterType="Plan" resultType="Plan">
+		SELECT TP.PLAN_NM AS PLAN_NM
+		     , TP.PLAN_SQ AS PLAN_SQ
+		     , TB.BRAND_ENM AS BRAND_ENM
+		     , TB.BRAND_CD AS BRAND_CD
+		     , TB.BRAND_KNM AS BRAND_KNM
+		FROM TB_PLAN TP  LEFT OUTER JOIN TB_PLAN_BRAND TPB 
+							   ON TP.PLAN_SQ = TPB.PLAN_SQ 
+		            	 LEFT OUTER JOIN  TB_BRAND TB 
+		   					   ON TPB.BRAND_CD = TB.BRAND_CD 
+		WHERE 1=1
+		 	AND TP.PLAN_SQ = TPB.PLAN_SQ 
+		 	AND TP.PLAN_SQ = #{planSq}
+		    AND TP.DEL_YN = 'N'
+	</select>
 </mapper>
 
 

+ 286 - 91
src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html

@@ -47,7 +47,6 @@
 						<th class="dashR">기획전탬플릿유형<i class="star"></i></th>
 						<td class="dashR" colspan="3">
 							<select name="templateType" th:field="*{templateType}">
-								<option value="">선택</option>
 								<option value="H">HTML</option>
 								<option value="T">TEXT</option>
 							</select>
@@ -72,7 +71,6 @@
 						<th class="dashR">프론트 구분<i class="star"></i></th>
 						<td class="dashR">
 							<select name="frontGb" id="frontGb" th:field="*{frontGb}">
-								<option value="">선택</option>
 								<option value="A">전체</option>
 								<option value="P">웹</option>
 								<option value="M">모바일</option>
@@ -309,6 +307,66 @@
 						</td>
 					</tr>
 				</table>
+									<div class="panelStyle" style="margin: unset;">
+						<!-- TITLE -->
+						<div class="panelTitle">
+							<h2>카테고리 / 브랜드 등록</h2>
+							<span class="panelControl"> <i
+								class="fa inner-fa-chevron-up"></i> <!-- 열림/닫힘 화살표 -->
+							</span>
+						</div>
+						<!-- //TITLE -->
+						<div class="inner-panelContent">
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%" />
+										<col width="90%" />
+									</colgroup>
+									<tr>
+										<th>카테고리/브랜드</th>
+										<td>
+											<!-- 수정시 프로모션명 입력 : before -->
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>공급업체 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnAddCompany">업체 추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteCompany">선택삭제</button>
+													</span> <br />
+													<div id="gridFGPromotionCompanyList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>브랜드 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드
+															추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteBrand">선택삭제</button>
+													</span> <br />
+													<div id="gridFGBrandList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+					</div>
 			</div>
 			<div style='margin: 13px;'>
 			<ul class="panelBar">
@@ -332,8 +390,8 @@
 						<col/>
 					</colgroup>
 					<tr>
-						<th>기존 기획전</th>
-						<td>
+						<th class="dashR">기존 기획전</th>
+						<td class="dashR">
 							<select name="planSq" id="planSq">
 								<option value="">선택</option>
 								<option th:if="${planList}" th:each="oneData, status : ${planList}" th:value="${oneData.planSq}" th:text="|[${oneData.planSq}]  ${oneData.planNm}|"></option>
@@ -356,7 +414,6 @@
 						<th class="dashR">기획전구분<i class="star"></i></th>
 						<td class="dashR">
 							<select name="planGb" required="required" data-valid-name="기획전구분" onchange="fnChangePlanGb(this);">
-								<option value="">선택</option>
 								<option value="P">기획전</option>
 								<option value="E">이벤트</option>
 							</select>
@@ -364,7 +421,6 @@
 						<th class="dashR">기획전탬플릿유형<i class="star"></i></th>
 						<td class="dashR" colspan="3">
 							<select name="templateType" required="required" data-valid-name="기획전탬플릿유형">
-								<option value="">선택</option>
 								<option value="H">HTML</option>
 								<option value="T">TEXT</option>
 							</select>
@@ -389,7 +445,6 @@
 						<th class="dashR">프론트 구분<i class="star"></i></th>
 						<td class="dashR">
 							<select name="frontGb" id="frontGb" required="required" data-valid-name="프론트 구분">
-								<option value="">선택</option>
 								<option value="A">전체</option>
 								<option value="P">웹</option>
 								<option value="M">모바일</option>
@@ -578,14 +633,73 @@
 						</td>
 					</tr>
 				</table>
-			</div>
-				<div style='margin: 13px;'>
-					<ul class="panelBar">
-						<li class="right" th:if="${mode == 'N'}">
-							<button type="button" class="btn btn-info btn-lg" onclick="fnPlanSave('#planWebRegisterForm');">저장</button>
-						</li>
-					</ul>
+					<div class="panelStyle" style="margin: unset;">
+						<!-- TITLE -->
+						<div class="panelTitle">
+							<h2>카테고리 / 브랜드 등록</h2>
+							<span class="panelControl"> <i
+								class="fa inner-fa-chevron-up"></i> <!-- 열림/닫힘 화살표 -->
+							</span>
+						</div>
+						<!-- //TITLE -->
+						<div class="inner-panelContent">
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%" />
+										<col width="90%" />
+									</colgroup>
+									<tr>
+										<th>카테고리/브랜드</th>
+										<td>
+											<!-- 수정시 프로모션명 입력 : before -->
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>공급업체 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnAddCompany">업체 추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteCompany">선택삭제</button>
+													</span> <br />
+													<div id="gridFGPromotionCompanyList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>브랜드 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드
+															추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteBrand">선택삭제</button>
+													</span> <br />
+													<!-- 브랜드 선택 팝업(단수 선택 팝업... 복수를 새로 만들어야하는지 ? 아니면 변수처리해야하는지 ? -->
+													<div id="gridFGBrandList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+					</div>
 				</div>
+				<ul class="panelBar">
+					<li class="right" th:if="${mode == 'N'}">
+						<button type="button" class="btn btn-info btn-lg" onclick="fnPlanSave('#planWebRegisterForm');">저장</button>
+					</li>
+				</ul>
 			</form>
 		</div>
 	</div>
@@ -596,81 +710,13 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 
-	// 스마트에디터
-	//var seOptions = gagaSe.getEditorOptions();
 	var mode = [[${mode}]];
 	var planInfo = [[${planInfo}]];
 	var fsrcPc = [[${fsrcPc}]];
 	var fsrcMobile = [[${fsrcMobile}]];
+	var planBrandList = [[${planBrandList}]];
 	var snOptions;
 
-	$(document).ready(function() {
-		snOptions = gagaSn.getToolbarOptions('media');
-		gagaSn.createSummernote(snOptions, '#fsrcPcDetail');
-		gagaSn.createSummernote(snOptions, '#fsrcMobileDetail');
-		
-		 if (mode =='U') {
-			/* $('#planWebDetailForm input[name=badgeFcolor]').spectrum({
-				preferredFormat: "hex",
-				showInput: true,
-				allowEmpty: true
-			});
-
-			$('#planWebDetailForm input[name=badgeBcolor]').spectrum({
-				preferredFormat: "hex",
-				showInput: true,
-				allowEmpty: true
-			}); */
-
-			if (planInfo.goodsLimitYn == 'N') {
-				$('#planWebDetailForm input[name=goodsLimitQty]').hide();
-			} else {
-				$('#planWebDetailForm input[name=goodsLimitQty]').show();
-			}
-
-			// 스마트에디터
-			//gagaSe.createSmartEditor(seOptions, 'fsrcPcDetail');
-			//gagaSe.createSmartEditor(seOptions, 'fsrcMobileDetail');
-
-			// 썸머노트 값 설정
-			$('#fsrcPcDetail').summernote('code', fsrcPc.fsrc);
-			$('#fsrcMobileDetail').summernote('code', fsrcMobile.fsrc);
-			//gagaSn.setContents('#fsrcPcDetail', fsrcPc.fsrc);
-			//gagaSn.setContents('#fsrcMobileDetail', fsrcMobile.fsrc);
-
-			if($("#planGb").val()!='E'){
-				$("#questionEventInsert").hide();
-				$("#questionEventUpdate").hide();
-			}else{
-				gagaSn.createSummernote(snOptions, '#privacyPolicyRegister');
-			}
-
-		} else {
-			/* $('#planWebRegisterForm input[name=badgeFcolor]').spectrum({
-				preferredFormat: "hex",
-				showInput: true,
-				allowEmpty: true
-			});
-
-			$('#planWebRegisterForm input[name=badgeBcolor]').spectrum({
-				preferredFormat: "hex",
-				showInput: true,
-				allowEmpty: true
-			}); */
-
-			$("#viewStartDtNew").val(_today);
-			$("#viewEndDtNew").val(_today);
-
-			// 스마트에디터
-			//gagaSe.createSmartEditor(seOptions, 'fsrcPcRegister');
-			//gagaSe.createSmartEditor(seOptions, 'fsrcMobileRegister');
-
-			$("#questionEventInsert").hide();
-			$("#questionEventUpdate").hide();
-		} 
-		$('#frontGb').trigger('change');
-	});
-
 	// 카테고리 전시 여부
 	var fnCataCheck = function(is, formId) {
 		if (is.checked) {
@@ -694,6 +740,7 @@
 		}
 	}
 
+	// 기획전 복사
 	var fnPlanCopyPopup = function() {
 		var planSq = $('#planWebRegisterForm select[name=planSq]').val();
 
@@ -706,7 +753,7 @@
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
-				var actionUrl = '/marketing/plan/copy';
+				var actionUrl = '/marketing/planning/copy';
 				var data = {copyPlanSq : planSq};
 				var jsonData = JSON.stringify(data);
 
@@ -715,9 +762,10 @@
 		});
 	}
 
+	// 기획전 복사 callback
 	var fnCopyCallback = function(result) {
-		fnPlanWebDetailClose();
-		//fnSearch();
+		uifnPopupClose('planWebRegisterFormDiv');
+		fnPlanListSearch();
 
 		var actionUrl = "/marketing/planning/webdetail/form?mode=U&planSq=" + result.planSq;
 		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
@@ -776,12 +824,10 @@
 		var privacyPolicy = '';
 		var frontGb = $('#frontGb').val();
 		if (mode =='U') {
-			//gagaSn.getContents('fsrcPcDetail');
-			//gagaSn.getContents('fsrcMobileDetail');
 			//if($("#planGb").val()=='E'){
 			//	privacyPolicy = gagaSn.getContents('privacyPolicyDetail');
 			//}
-
+			
 			// 이미지 처리
 			if ((!$('input[name=orgMainPimgDelYn]').is(':checked') ? true : false) &&
 				(gagajf.isNull($(formId + ' input[name=mainPimg]').val()) == true)   ) {
@@ -820,18 +866,57 @@
 			return;
 		}
 
+		//var jsonData = JSON.stringify($("#planWebRegisterForm").serializeObject());
+		
+		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
+		var multiBrand = [];
+		$.each(allBrandData, function(idx, item) {
+			multiBrand.push(item.brandCd);
+		});
+		
+		let data = {
+				 multiBrand : multiBrand
+				,brandList : allBrandData
+			    ,mode : $('#planWebRegisterForm input[name=mode]').val()
+			    ,planSq : $('#planWebRegisterForm input[name=planSq]').val()
+				,planGb	: $('#planWebRegisterForm select[name=planGb]').val()
+				,templateType :	$('#planWebRegisterForm select[name=templateType]').val()
+				,frontGb : $('#planWebRegisterForm select[name=frontGb]').val()
+				,planNm : $('#planWebRegisterForm input[name=planNm]').val()
+				,startSearchDate : $('#planWebRegisterForm input[name=startSearchDate]').val()
+				,startSearchHour : $('#planWebRegisterForm input[name=startSearchHour]').val()
+				,startSearchMin : $('#planWebRegisterForm input[name=startSearchMin]').val()
+				,endSearchDate : $('#planWebRegisterForm input[name=endSearchDate]').val()
+				,endSearchHour : $('#planWebRegisterForm input[name=endSearchHour]').val()
+				,endSearchMin : $('#planWebRegisterForm input[name=endSearchMin]').val()
+				,dispStdt : $('#planWebRegisterForm input[name=dispStdt]').val()
+				,dispEddt : $('#planWebRegisterForm input[name=dispEddt]').val()
+				,dtlTitle1 : $('#planWebRegisterForm input[name=dtlTitle1]').val()
+				,cornerNmDispYn :  $('#planWebRegisterForm select[name=cornerNmDispYn]').val()
+				,openYn :  $('#planWebRegisterForm select[name=openYn]').val()
+				,siteCd :$('#planWebRegisterForm select[name=siteCd]').val()
+				,dispOrd : $('#planWebRegisterForm input[name=dispOrd]').val()
+				,replyYn : $('#planWebRegisterForm select[name=replyYn]').val()
+				,mainPimg :$('#planWebRegisterForm input[name=mainPimg]').val()
+				,mainMimg : $('#planWebRegisterForm input[name=mainMimg]').val()
+				,fsrcPc :  $('#planWebRegisterForm input[name=fsrcPc]').val()
+				,fsrcMobile : $('#planWebRegisterForm input[name=fsrcMobile]').val()
+			}	
+		
+		// 기획전 등록
 		if (formId == '#planWebRegisterForm') {
 			mcxDialog.confirm('등록 하시겠습니까?', {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function() {
-					gagajf.ajaxFormSubmit("/marketing/planning/webdetail/create", "#planWebRegisterForm", fnPlanWebDetailCallBack); 
+					var jsonData =  JSON.stringify(data);
+					gagajf.ajaxJsonSubmit("/marketing/planning/webdetail/create", jsonData, fnPlanWebDetailCallBack); 
 					uifnPopupClose('planWebRegisterFormDiv');
 					fnPlanListSearch();
 					//fnPlanWebDetailClose();
 				}
 			});
-		} else {
+		} else { // 기획전 수정
 			mcxDialog.confirm('저장 하시겠습니까?', {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
@@ -923,6 +1008,116 @@
 		fnPlanListSearch();
 		
 	}
+	
+	// 브랜드 리스트 설정
+	var columnBrandList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "브랜드ID", field: "brandCd", width: 110, cellClass: 'text-center'},
+		{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
+		{headerName: "", field: "brandKnm", width: 150, cellClass: 'text-center'},
+		/* {headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}  */
+	];
+	
+	// 브랜드 그리드 설정
+	var gridOptionsFGBrandList = gagaAgGrid.getGridOptions(columnBrandList);
+	gridOptionsFGBrandList.rowSelection = "multiple";
+	gridOptionsFGBrandList.suppressRowClickSelection = true;
+	
+	// 브랜드 추가 버튼 클릭시 (복수 브랜드때 수정 필요)
+	$('#btnAddBrand').on('click', function() {
+		cfnOpenBrandListPopup("fnSetPopupBrandInfo", "M");
+	});
+	
+	 // 브랜드 설정 선택삭제 버튼 클릭시
+    $('#btnDeleteBrand').on('click', function() {
+        gridOptionsFGBrandList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGBrandList)});
+    });
+	
+	// 브랜드 설정 / 브랜드 추가 콜백함수 (단수로 가져오므로 복수일 경우에 수정 확인 필요)
+	var fnSetPopupBrandInfo = function(result) {
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				if(gridListValue[j].brandCd == result[i].brandCd) {	addChk = false;	}					// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(gridOptionsFGBrandList, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "brandKnm" : result[i].brandKnm});
+			}
+		}
+	};
+	
+
+	$(document).ready(function() {
+		
+		snOptions = gagaSn.getToolbarOptions('media');
+		
+		// 썸머노트 그리기
+		gagaSn.createSummernote(snOptions, '#fsrcPcDetail');
+		gagaSn.createSummernote(snOptions, '#fsrcMobileDetail');
+		
+		// 그리드 그리기
+		gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
+		
+		 if (mode =='U') {
+			/* $('#planWebDetailForm input[name=badgeFcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			});
+
+			$('#planWebDetailForm input[name=badgeBcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			}); */
+			
+			gridOptionsFGBrandList.api.setRowData(planBrandList);
+
+			if (planInfo.goodsLimitYn == 'N') {
+				$('#planWebDetailForm input[name=goodsLimitQty]').hide();
+			} else {
+				$('#planWebDetailForm input[name=goodsLimitQty]').show();
+			}
+
+			// 썸머노트 값 설정
+			$('#fsrcPcDetail').summernote('code', fsrcPc.fsrc);
+			$('#fsrcMobileDetail').summernote('code', fsrcMobile.fsrc);
+
+			if($("#planGb").val()!='E'){
+				$("#questionEventInsert").hide();
+				$("#questionEventUpdate").hide();
+			}else{
+				gagaSn.createSummernote(snOptions, '#privacyPolicyRegister');
+			}
+
+		} else {
+			/* $('#planWebRegisterForm input[name=badgeFcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			});
+
+			$('#planWebRegisterForm input[name=badgeBcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			}); */
+
+			$("#viewStartDtNew").val(_today);
+			$("#viewEndDtNew").val(_today);
+
+			$("#questionEventInsert").hide();
+			$("#questionEventUpdate").hide();
+		} 
+		$('#frontGb').trigger('change');
+	});
+
 /*]]>*/
 </script>
 

+ 1092 - 0
src/main/webapp/WEB-INF/views/order/CancelRequestFormBack01.html

@@ -0,0 +1,1092 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CancelRequestForm.html
+ * @desc    : 취소요청 화면
+ *============================================================================
+ * STYLE24
+ * 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" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="chgGb" 		value="30" />
+				<input type="hidden" name="ordDtlNos" 	value="" />
+				<input type="hidden" name="chgQtys" 	value="" />
+				<input type="hidden" name="ordNo" 	 	th:value="${ordNo}" />
+				<input type="hidden" name="mallGb" 		th:value="${orderInfo.mallGb}" />
+				<input type="hidden" name="delvFee" 	value="0" />
+				<input type="hidden" name="pgStat"	 	value="" />
+				<input type="hidden" name="chgReason"	value="" />
+				<input type="hidden" name="chgReasonDesc" value="" />
+				<input type="hidden" name="cncWait" 	th:value="${cncWait}" />
+		
+				<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>
+				
+				<h3>배송비정보</h3>
+				<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 == '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.cdNm}|" 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 colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
+						</tr>
+						<tr>
+							<th>주문 상품 금액</th>
+							<td><span id="spanOrdAmt"></span>원</td>
+							<th>취소 상품 금액</th>
+							<td><span id="spanCnclRtnAmt"></span>원</td>
+						</tr>
+						<tr>
+							<th>취소 사용 포인트</th>
+							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
+						</tr>
+						<tr>
+							<th>취소 사용 쿠폰금액</th>
+							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
+						</tr>
+						<tr>
+							<th>취소 다다익선 금액</th>
+							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
+						</tr>
+						
+						<tr>
+							<th>취소 고객 상품권 금액</th>
+							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
+						</tr>
+						
+						<tr>
+							<th>취소 상품 실결제 금액</th>
+							<td><span id="spanRealCnclRtnAmt"></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 = false;
+
+// specify the columns
+var columnCancelReqList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품코드"		, field: "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++) {
+						if (i == params.data.ordCanChgQty) {
+							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
+						} else {
+							strVal += "	<option value='"+i+"'>"+i+"</option>";
+						}
+					}
+				
+					strVal += "</select>";
+					return strVal;
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', 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: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품코드"		, field: "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();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+
+//specify the columns
+var columnDelvCdList = [
+	{
+		headerName	: "배송코드기준금액",
+		children	: [
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불"		
+				, field			: "realOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "추가배송비"		
+				, field			: "addDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
+</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);
+	}
+	
+	/*
+	// 취소 후 발생되는 배송정보 설정
+	var delvFeeList 		= [];
+	var delvObj				= new Object();
+	var k					= 0;
+	
+	// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+	delvObj.ordAmt 			= 0;
+	delvObj.cnclRtnAmt 		= 0;
+	delvObj.realOrdAmt 		= 0;
+	delvObj.delvFee 		= cancelRequestTargetList[k].delvFee;
+	delvObj.minOrdAmt 		= cancelRequestTargetList[k].minOrdAmt;
+	delvObj.orgDelvFee 		= cancelRequestTargetList[k].orgDelvFee;
+	delvObj.supplyCompCd 	= cancelRequestTargetList[k].supplyCompCd;
+	delvObj.delvFeeCd 		= cancelRequestTargetList[k].delvFeeCd;
+	delvObj.allCanYn		= cancelRequestTargetList[k].allCanYn;
+
+	delvFeeList[k] 			= delvObj;
+	
+	var spanPayAmt			= 0; // 총 결제 금액
+	var spanSumRealOrdAmt	= 0; // 상품 실결제 금액
+	var spanSumDeliveryFee	= 0; // 배송금액
+	var spanOrdAmt			= 0; // 주문 상품 금액
+	var spanCnclRtnAmt		= 0; // 취소 상품 금액
+	var spanTotPntDcAmt		= 0; // 취소 사용 포인트
+	var spanPntDcAmt		= 0; // 고객 포인트
+	var spanPrePntDcAmt		= 0; // 상품 선포인트
+	var spanCpnDcAmt		= 0; // 취소 사용 쿠폰금액
+	var spanCpn1DcAmt		= 0; // 즉시할인쿠폰
+	var spanGoodsCpnDcAmt	= 0; // 상품쿠폰
+	var spanCartCpnDcAmt	= 0; // 장바구니쿠폰
+	var spanTmtbDcAmt		= 0; // 취소 다다익선 금액
+	var spanTmtb1DcAmt		= 0; // 수량할인
+	var spanTmtb2DcAmt		= 0; // 금액할인
+	var spanGfcdUseAmt		= 0; // 취소 고객 상품권 금액
+	var spanRealCnclRtnAmt	= 0; // 취소 상품 실결제 금액
+	var spanTotDeliveryFee	= 0; // 환불 배송 금액
+	var spanRefundAmt		= 0; // 환불 금액 합계
+
+	// 취소정보 설정
+	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);
+		
+		// 배송관련 설정		
+		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
+		obj.goodsTypeNm		= cancelRequestTargetList[i].goodsTypeNm;
+		obj.delvFee			= cancelRequestTargetList[i].delvFee;
+		obj.supplyCompCd	= cancelRequestTargetList[i].supplyCompCd;
+		obj.delvFeeCd		= cancelRequestTargetList[i].delvFeeCd;
+		obj.minOrdAmt		= cancelRequestTargetList[i].minOrdAmt;
+		obj.orgDelvFee		= cancelRequestTargetList[i].orgDelvFee;
+		
+		// 주문상세상태
+		obj.ordDtlStat		= cancelRequestTargetList[i].ordDtlSat;
+		obj.ordDtlSatNm		= cancelRequestTargetList[i].ordDtlSatNm;
+		obj.allCanYn		= cancelRequestTargetList[i].allCanYn;
+		
+		cancelRequestTargetToBeList[i] = obj;
+
+		// 배송비 정책 기준으로 조건 처리
+		if (delvFeeList[k].supplyCompCd == obj.supplyCompCd && delvFeeList[k].delvFeeCd == obj.delvFeeCd) {
+			// 공급업체 와 배송정책코드가 같으면 주문금액, 취소금액 SUM
+			delvFeeList[k].ordAmt 		+= obj.ordAmt;
+			delvFeeList[k].cnclRtnAmt 	+= obj.cnclRtnAmt;
+			delvFeeList[k].realOrdAmt 	+= obj.realOrdAmt;
+			
+			if (obj.allCanYn == "N") {
+				delvFeeList[k].allCanYn = "N";
+			}
+		} else {			
+			k++;
+			
+			var delvObj					= new Object();
+			
+			// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+			delvObj.ordAmt 				= obj.ordAmt;
+			delvObj.cnclRtnAmt 			= obj.cnclRtnAmt;
+			delvObj.realOrdAmt 			= obj.realOrdAmt;
+			
+			delvObj.delvFee 			= obj.delvFee;
+			delvObj.minOrdAmt 			= obj.minOrdAmt;			
+			delvObj.orgDelvFee 			= obj.orgDelvFee;
+			delvObj.supplyCompCd 		= obj.supplyCompCd;
+			delvObj.delvFeeCd 			= obj.delvFeeCd;
+			delvObj.allCanYn			= obj.allCanYn;
+			
+			delvFeeList[k] 				= delvObj;
+		}
+		
+		spanSumRealOrdAmt	+= realOrdAmt;
+		spanPntDcAmt		+= obj.pntDcAmt;
+		spanPrePntDcAmt		+= obj.prePntDcAmt;
+		spanCpn1DcAmt		+= obj.cpn1DcAmt;
+		spanGoodsCpnDcAmt	+= obj.goodsCpnDcAmt;
+		spanCartCpnDcAmt	+= obj.cartCpnDcAmt;
+		spanTmtb1DcAmt		+= obj.tmtb1DcAmt;
+		spanTmtb2DcAmt		+= obj.tmtb2DcAmt;
+		spanGfcdUseAmt		+= obj.gfcdUseAmt;
+		spanRealCnclRtnAmt	+= obj.realOrdAmt;
+	}
+	
+	// 추가배송비 발생여부 , 추가배송비, 배송비정책단위 전체취소 여부
+	for (i=0 ; i<delvFeeList.length ; i++) {
+		var obj = delvFeeList[i];
+		
+		// 무료배송비용 > (주문금액 - 취소금액)
+		if (obj.minOrdAmt > (obj.ordAmt - obj.cnclRtnAmt)) {
+			// 2020.12.28 
+			// case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
+			if ((obj.ordAmt - obj.cnclRtnAmt) == 0) {
+				if (obj.allCanYn == "N") {
+					obj.addDelvFeeYn 	= "Y";
+					obj.addDelvFee 		= obj.orgDelvFee;
+				} else {
+					// 전체취소의 경우에 해당
+					obj.addDelvFeeYn 	= "N";
+					obj.addDelvFee 		= 0;
+				}
+			} else {
+				// 취소신청화면에서 대부분 아래의 조건에 해당
+				obj.addDelvFeeYn 	= "Y";
+				obj.addDelvFee 		= obj.orgDelvFee;
+			}
+			
+			//obj.addDelvFeeYn 	= "Y";
+			//obj.addDelvFee 		= obj.orgDelvFee;
+		} else {
+			obj.addDelvFeeYn 	= "N";
+			obj.addDelvFee 		= 0;
+		}
+		
+		spanSumDeliveryFee	+= obj.delvFee;
+		spanOrdAmt			+= obj.ordAmt;
+		spanCnclRtnAmt		+= obj.cnclRtnAmt;
+		spanTotDeliveryFee  += obj.addDelvFee;
+				
+		delvFeeList[i] = obj;
+	}
+
+	gridOptionsCancelReqToBeList.api.setRowData(cancelRequestTargetToBeList);
+	gridOptionsDelvCdList.api.setRowData(delvFeeList);
+	
+	// 환불금액표시
+	spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee;
+	spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
+	spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
+	spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
+	spanRefundAmt 		= spanRealCnclRtnAmt - spanTotDeliveryFee;
+	
+	$("#spanPayAmt").text(spanPayAmt.addComma());					//총 결제 금액
+	$("#spanSumRealOrdAmt").text(spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+	$("#spanSumDeliveryFee").text(spanSumDeliveryFee.addComma());	//배송금액
+	
+	$("#spanOrdAmt").text(spanOrdAmt.addComma());					//주문 상품 금액
+	$("#spanCnclRtnAmt").text(spanCnclRtnAmt.addComma());			//취소 상품 금액
+	
+	$("#spanTotPntDcAmt").text(spanTotPntDcAmt.addComma());			//취소 사용 포인트
+	$("#spanPntDcAmt").text(spanPntDcAmt.addComma());				//고객 포인트
+	$("#spanPrePntDcAmt").text(spanPrePntDcAmt.addComma());			//상품 선포인트
+	
+	$("#spanCpnDcAmt").text(spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+	$("#spanCpn1DcAmt").text(spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+	$("#spanGoodsCpnDcAmt").text(spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+	$("#spanCartCpnDcAmt").text(spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+	
+	$("#spanTmtbDcAmt").text(spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+	$("#spanTmtb1DcAmt").text(spanTmtb1DcAmt.addComma());			//수량할인
+	$("#spanTmtb2DcAmt").text(spanTmtb2DcAmt.addComma());			//금액할인
+	
+	$("#spanGfcdUseAmt").text(spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+	
+	$("#spanRealCnclRtnAmt").text(spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+	$("#spanTotDeliveryFee").text(spanTotDeliveryFee.addComma());	//환불 배송 금액
+	
+	$("#spanRefundAmt").text(spanRefundAmt.addComma());				//환불 금액 합계
+	*/
+	
+	// 환불금액계산호출
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/refundAmt'
+		, jsonData
+		, function(result) {
+			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
+			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			
+			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
+			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
+			
+			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
+			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
+			
+			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
+			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
+			
+			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+			
+			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
+			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
+			
+			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+			
+			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
+			
+			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
+			
+			//alert("a");
+			//$('#btnSearch').trigger('click');
+		}
+	);
+}
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrREasonCd = reasonCd.split(":");
+	
+	// 취소, 반품, 교환 사유 판단
+	if (arrREasonCd[0] == 'G686_10') {
+		$("#imputeReason").text("고객");
+		isImputationCustomers = true;
+	} else {
+		$("#imputeReason").text("회사");
+		isImputationCustomers = false;
+	}
+
+	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+
+	//fnCalculateRefundAmt();			//환불예정금액 계산.
+}
+
+// 에스크로 전체취소, 부분취소 요청
+var fnCancelRequestPartOk = function () {
+	// 취소, 반품, 교환 신청 정보 목록
+	//cancelRequestTargetList;
+	
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/'
+		, jsonData
+		, function() {
+			$('#btnSearch').trigger('click');
+		}
+	);
+	
+}
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
+	
+	// 취소정보계산
+	fnCalculateRefundAmt(null);
+});
+</script>
+</html>
+
+
+
+
+

+ 1054 - 0
src/main/webapp/WEB-INF/views/order/CancelRequestFormBack02.html

@@ -0,0 +1,1054 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CancelRequestForm.html
+ * @desc    : 취소요청 화면
+ *============================================================================
+ * STYLE24
+ * 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" name="cancelRequestFrm" action="/orderChange/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="chgReason" value=""/>
+				<input type="hidden" name="chgReasonDesc" value=""/>
+				
+				<h4>주문정보</h4>
+				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+
+				<h4>취소정보</h4>
+				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+				
+				<h4>배송비정보</h4>
+				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				
+				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
+					<button type="button" class="btn btn-success" onclick="fnCnclReq('req');">취소신청</button>
+					<button type="button" class="btn btn-success" onclick="fnCnclReq('complete');">취소완료</button>
+				</div>
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>취소사유 <i class="star"></i></th>
+							<td>
+								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
+									<option value="">[선택하세요]</option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>귀책사유</th>
+							<td><span id="imputeReason"></span></td>
+						</tr>
+						<tr>
+							<th>요청메모</th>
+							<td colspan="3">
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<h4>환불예정금액</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>총 결제 금액</th>
+							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
+						</tr>
+						<tr>
+							<th>주문 상품 금액</th>
+							<td><span id="spanOrdAmt"></span>원</td>
+							<th>취소 상품 금액</th>
+							<td><span id="spanCnclRtnAmt"></span>원</td>
+						</tr>
+						<tr>
+							<th>취소 사용 포인트</th>
+							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
+						</tr>
+						<tr>
+							<th>취소 사용 쿠폰금액</th>
+							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
+						</tr>
+						<tr>
+							<th>취소 다다익선 금액</th>
+							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
+						</tr>
+						
+						<tr>
+							<th>취소 고객 상품권 금액</th>
+							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
+						</tr>
+						
+						<tr>
+							<th>취소 상품 실결제 금액</th>
+							<td><span id="spanRealCnclRtnAmt"></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>
+				
+				<div id="wrapRefundAccount" style="width:50%;">
+					<h4>환불계좌정보</h4>
+					<button type="button" id="btnSaveAccount" class="btn btnRight btn-base btn-sm" style="margin-left:10px;" onclick="fnCreateOrderRfAccount();">등록</button>
+					<div id="gridRefundAccountInfo" style="height: 150px;" class="ag-theme-balham"></div>
+				</div>
+				
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상목록
+var ordNo 					= [[${ordNo}]];									// 주문번호
+var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
+var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+
+var temp1 = true;
+var temp2 = false;
+
+// 1. 주문정보(반품대상)
+var columnCancelReqList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "단품수량"		
+				, field			: "itemQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{
+				headerName		: "취소/반품"		
+				, field			: "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++) {
+						if (i == params.data.ordCanChgQty) {
+							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
+						} else {
+							strVal += "	<option value='"+i+"'>"+i+"</option>";
+						}
+					}
+				
+					strVal += "</select>";
+					return strVal;
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
+
+// Add on options
+gridOptionsCancelReqList.suppressRowClickSelection = true;
+gridOptionsCancelReqList.rowSelection = 'multiple';
+
+// 2. 취소정보(환불정보)
+var columnCancelReqToBeList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, 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();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
+
+// 3. 배송비정보(환불정보)
+var columnDelvCdList = [
+	{
+		headerName	: "배송코드기준금액",
+		children	: [
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불"		
+				, field			: "realOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "추가배송비"		
+				, field			: "addDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
+
+// 4. 무통장 계좌정보
+var columnDefsRefundAccountInfo = [
+	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
+	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
+	{headerName: "은행코드"	, field: "bankCd"		, width: 120	, cellClass: 'text-center', hidden:true},
+	{headerName: "계좌번호"	, field: "accountNo"	, width: 150	, cellClass: 'text-center'},
+	{headerName: "예금주"		, field: "accountNm"	, width: 120	, cellClass: 'text-center'},
+	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
+];
+
+var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
+</script>
+
+<script>
+// 현재 사유는 고객 입니다.
+var isCustomer = true;
+
+// 취소정보계산
+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);
+	}
+	
+	if (cancelRequestTargetList.length == 0) {
+		alert("요청 대상정보가 존재 하지 않습니다.");
+		uifnPopupClose('popupCancelRequestForm');
+		return false;
+	}
+	
+	// 환불금액계산호출
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	gagajf.ajaxJsonSubmit(
+		'/orderChange/cancel/refundAmt'
+		, jsonData
+		, function(result) {
+			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
+			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			
+			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
+			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
+			
+			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
+			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
+			
+			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
+			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
+			
+			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+			
+			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
+			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
+			
+			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+			
+			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//취소 환불 배송 금액
+			
+			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//반품 환불 배송 금액
+			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
+			
+			if (result.spanRealCnclRtnAmt > 0) {
+				// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+				if (isCustomer) {
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee;
+				} 
+				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+				else {
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
+				}
+			}
+			
+			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
+		}
+	);
+}
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrReasonCd = reasonCd.split(":");
+	var customerReasonArr = ['G686_10'];
+
+	isCustomer = false;
+	
+	// 취소, 반품, 교환 사유 판단
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == arrReasonCd[0]) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유설정 회사, 고객
+	if (isCustomer) {
+		$("#imputeReason").text("고객");
+	} else {
+		$("#imputeReason").text("회사");
+	}
+
+	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
+
+	fnCalculateRefundAmt();			//환불예정금액 계산.
+}
+
+// 취소신청/완료
+var fnCnclReq = function (reqGbn) {
+	
+	var temp 		= false;
+	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
+	var allCanYn 	= "N";
+	
+	// 1. 취소수량 체크
+	for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
+		if (cancelRequestTargetList[i].ordCanChgQty > 0) {
+			temp = true;
+		}
+	}
+	
+	if (temp == false) {
+		mcxDialog.alert('취소신청수량을 입력하세요.');
+		return;
+	}
+	
+	// 2. 입금대기건 & 전체취소 체크
+	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
+		alert("입금대기건은 전체 취소만 가능합니다.");
+		return;
+	}
+	
+	// 2.1 전체취소 여부 적용
+	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
+		allCanYn = "Y";	
+	}
+	
+	// 3. 취소사유 체크
+	var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
+	
+	if (gagajf.isNull(chgReason)) {
+		mcxDialog.alert("취소사유를 입력하세요."); 
+		return ;
+	}
+	
+	// 4. 환불계좌 체크
+	var accountNo 	= "";
+	var accountNm 	= "";
+	var bankCd 		= "";
+	
+	// 결제타입 무통장입금시 환불계좌 등록
+	if (payMeans == 'G014_20') {
+		var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
+		
+		if (refundAccount.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		
+		accountNo 	= refundAccount[0].accountNo;
+		accountNm 	= refundAccount[0].accountNm;
+		bankCd 		= refundAccount[0].bankCd;
+	}
+	
+	// 5. 추가정보설정
+	var chgerNm 	= orderInfoList[0].ordNm;
+	var chgerEmail 	= orderInfoList[0].ordEmail;
+	var chgerPhnno 	= orderInfoList[0].ordPhnno;
+	var chgerTelno 	= orderInfoList[0].ordTelno;
+	
+	var jsonObj = {
+		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
+		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
+		,"chgMemo"			: $('#chgMemo').val()
+		,"cancelReqList" 	: cancelRequestTargetList
+		,"accountNo" 		: accountNo
+		,"accountNm" 		: accountNm
+		,"bankCd" 			: bankCd
+		,"allCanYn" 		: allCanYn
+		,"isCustomer" 		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipcode"		: ""
+		,"chgerBaseAddr"	: ""
+		,"chgerDtlAddr"		: ""
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
+	}
+	
+	// 6. 취소신청, 취소완료 여부 체크
+	// 취소완료
+	if (reqGbn == "complete") {
+		cnclUrl = '/orderChange/cnclComplete/';
+	}
+	// 취소신청
+	else if (reqGbn == "req") {
+		cnclUrl = '/orderChange/cnclReq/';
+	}
+	// 취소신청 완료
+	else if (reqGbn == "reqComplete"){
+		cnclUrl = '/orderChange/cnclReqComplete/';
+	}
+
+	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
+	var jsonData = JSON.stringify(jsonObj);
+	
+	mcxDialog.confirm('취소요청하시겠습니까?', {
+		cancelBtnText		: "취소",
+		sureBtnClick		: function(){
+			// 취소 실행
+			gagajf.ajaxJsonSubmit(
+				cnclUrl
+				, jsonData
+				, function() {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+					uifnPopupClose('popupCancelRequestForm');
+				}
+			);
+		}
+	});
+}
+
+// 환불계좌 등록
+var fnCreateOrderRfAccount = function () {	
+	var actionUrl = "/orderChange/refund/account/create/form?ordNo=" + ordNo ;
+	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
+};
+
+// 환불계좌 정보
+var fnBindOrderRfAccountInfo = function () {
+	gagaAgGrid.fetch(
+		"/orderChange/refund/account/info/list?ordNo=" + ordNo
+		, gridOptionsRefundAccountInfo
+		, null
+		, function (result) {
+		}
+	)
+};
+
+$(document).ready(function() {
+	// 1. 그리드생성
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
+	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
+	
+	// 2. 그리드 데이타 싱크작업
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);								// 주문정보
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
+	gagaAgGrid.hideStatusBar('gridDelvCdList');
+	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
+	
+	// 3. 환불정보계산
+	fnCalculateRefundAmt(null);
+	
+	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
+	if (payMeans !== 'G014_20') {
+		$('#wrapRefundAccount').addClass("off");
+		fnBindOrderRfAccountInfo();
+	}
+});
+</script>
+</html>
+
+
+
+
+

+ 1114 - 0
src/main/webapp/WEB-INF/views/order/CnclReqForm.html

@@ -0,0 +1,1114 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CancelRequestForm.html
+ * @desc    : 취소요청 화면
+ *============================================================================
+ * STYLE24
+ * 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" name="cancelRequestFrm" action="/orderChange/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="ordChgSq" th:value="${ordChgSq}"/>
+				<input type="hidden" name="chgReason" value=""/>
+				<input type="hidden" name="chgReasonDesc" value=""/>
+				
+				<h4>주문정보</h4>
+				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+
+				<h4 id="h4OrderCancelRequestToBeList">취소정보</h4>
+				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+				
+				<h4 id="h4DelvCdList">배송비정보</h4>
+				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				
+				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
+					<button type="button" class="btn btn-success" id="cnclReqBtn" onclick="fnCnclReq('cnclReq');">취소신청</button>
+					<button type="button" class="btn btn-success" id="cnclCompleteBtn" onclick="fnCnclReq('cnclComplete');">취소완료</button>
+					<button type="button" class="btn btn-success" id="cnclReqCancelBtn" onclick="fnCnclReq('cnclReqCancel');">취소철회</button>
+					<button type="button" class="btn btn-success" id="cnclReqCompleteBtn" onclick="fnCnclReq('cnclReqComplete');">취소승인</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}|" th:text="|${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>귀책사유</th>
+							<td><span id="imputeReason"></span></td>
+						</tr>
+						<tr>
+							<th>요청메모</th>
+							<td colspan="3">
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<h4>환불예정금액</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>총 결제 금액</th>
+							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
+						</tr>
+						<tr>
+							<th>주문 상품 금액</th>
+							<td><span id="spanOrdAmt"></span>원</td>
+							<th>취소 상품 금액</th>
+							<td><span id="spanCnclRtnAmt"></span>원</td>
+						</tr>
+						<tr>
+							<th>취소 사용 포인트</th>
+							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
+						</tr>
+						<tr>
+							<th>취소 사용 쿠폰금액</th>
+							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
+						</tr>
+						<tr>
+							<th>취소 다다익선 금액</th>
+							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
+						</tr>
+						
+						<tr>
+							<th>취소 고객 상품권 금액</th>
+							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
+						</tr>
+						
+						<tr>
+							<th>취소 상품 실결제 금액</th>
+							<td><span id="spanRealCnclRtnAmt"></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>
+				
+				<div id="wrapRefundAccount" style="width:50%;">
+					<h4>환불계좌정보</h4>
+					<button type="button" id="btnSaveAccount" class="btn btnRight btn-base btn-sm" style="margin-left:10px;" onclick="fnCreateOrderRfAccount();">등록</button>
+					<div id="gridRefundAccountInfo" style="height: 150px;" class="ag-theme-balham"></div>
+				</div>
+				
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상목록
+var ordNo 					= [[${ordNo}]];									// 주문번호
+var ordChgSq 				= [[${ordChgSq}]];								// 주문변경번호
+var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
+var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/교환요청 정보
+var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var chgReason				= "";											// 변경사유코드
+var chgMemo					= "";											// 변경사유메모
+
+// 변경요청정보 승인, 철회
+if (ordChgSq > 0) {
+	chgReason				= orderChangeDetailList[0].chgReason;			// 변경사유코드
+	chgMemo					= orderChangeDetailList[0].chgMemo;				// 변경사유메모
+}
+
+var temp1 = true;
+var temp2 = true;
+
+// 1. 주문정보(변경요청가능대상)
+var columnCancelReqList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "단품수량"		
+				, field			: "itemQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{
+				headerName		: "취소/반품"		
+				, field			: "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 	= parseInt(params.value);
+					var rtnStr 			= "";
+					
+					// 취소신청가능수량있으면 수량만 표시 (취소,반품,교환 신청정보 처리)
+					if (ordChgSq > 0) {
+						rtnStr = ordCanChgQty;
+					} else {
+						ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+						
+						rtnStr += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
+						
+						for (i=0 ; i<=ordCanChgQty ; i++) {
+							if (i == params.data.ordCanChgQty) {
+								rtnStr += "	<option value='"+i+"' selected>"+i+"</option>";
+							} else {
+								rtnStr += "	<option value='"+i+"'>"+i+"</option>";
+							}
+						}
+					
+						rtnStr += "</select>";
+					}
+					
+					return rtnStr;
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
+
+// Add on options
+gridOptionsCancelReqList.suppressRowClickSelection = true;
+gridOptionsCancelReqList.rowSelection = 'multiple';
+
+// 2. 취소정보(환불정보)
+var columnCancelReqToBeList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, 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();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
+
+// 3. 배송비정보(환불정보)
+var columnDelvCdList = [
+	{
+		headerName	: "배송코드기준금액",
+		children	: [
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불"		
+				, field			: "realOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "추가배송비"		
+				, field			: "addDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
+
+// 4. 무통장 계좌정보
+var columnDefsRefundAccountInfo = [
+	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
+	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
+	{headerName: "은행코드"	, field: "bankCd"		, width: 120	, cellClass: 'text-center', hidden:true},
+	{headerName: "계좌번호"	, field: "accountNo"	, width: 150	, cellClass: 'text-center'},
+	{headerName: "예금주"		, field: "accountNm"	, width: 120	, cellClass: 'text-center'},
+	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
+];
+
+var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
+</script>
+
+<script>
+// 현재 사유는 고객 입니다.
+var isCustomer = true;
+
+// 취소정보계산
+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);
+	}
+	
+	if (cancelRequestTargetList.length == 0) {
+		alert("요청 대상정보가 존재 하지 않습니다.");
+		uifnPopupClose('popupCancelRequestForm');
+		return false;
+	}
+	
+	// 환불금액계산호출
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	gagajf.ajaxJsonSubmit(
+		'/orderChange/cancel/refundAmt'
+		, jsonData
+		, function(result) {
+			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
+			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			
+			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
+			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
+			
+			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
+			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
+			
+			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
+			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
+			
+			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+			
+			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
+			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
+			
+			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+			
+			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//취소 환불 배송 금액
+			
+			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//반품 환불 배송 금액
+			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
+			
+			if (result.spanRealCnclRtnAmt > 0) {
+				// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+				if (isCustomer) {
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee;
+				} 
+				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+				else {
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
+				}
+			}
+			
+			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
+		}
+	);
+}
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var customerReasonArr = ['G686_10'];
+
+	isCustomer = false;
+	
+	// 귀책사유체크(취소,반품,교환)
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == reasonCd) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유체크(회사,고객)
+	if (isCustomer) {
+		$("#imputeReason").text("고객");
+	} else {
+		$("#imputeReason").text("회사");
+	}
+
+	$('#cancelRequestFrm input[name=chgReason]').val(reasonCd);
+	
+	//환불예정금액 계산
+	fnCalculateRefundAmt();
+}
+
+// 취소신청/완료
+var fnCnclReq = function (reqGbn) {
+	var temp 		= false;
+	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat;
+	var allCanYn 	= "N";
+	
+	var accountNo 	= "";
+	var accountNm 	= "";
+	var bankCd 		= "";
+	
+	if (reqGbn == "cnclReq" || reqGbn == "cnclComplete") {
+		// 1. 취소수량 체크
+		for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
+			if (cancelRequestTargetList[i].ordCanChgQty > 0) {
+				temp = true;
+			}
+		}
+		
+		if (temp == false) {
+			mcxDialog.alert('취소신청수량을 입력하세요.');
+			return;
+		}
+		
+		// 2. 입금대기건 & 전체취소 체크
+		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
+			alert("입금대기건은 전체 취소만 가능합니다.");
+			return;
+		}
+		
+		// 2.1 전체취소 여부 적용
+		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
+			allCanYn = "Y";	
+		}
+		
+		// 3. 취소사유 체크
+		var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
+		
+		if (gagajf.isNull(chgReason)) {
+			mcxDialog.alert("취소사유를 입력하세요."); 
+			return ;
+		}
+		
+		// 4. 환불계좌 체크
+		// 결제타입 무통장입금시 환불계좌 등록
+		if (payMeans == 'G014_20') {
+			var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
+			
+			if (refundAccount.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			
+			accountNo 	= refundAccount[0].accountNo;
+			accountNm 	= refundAccount[0].accountNm;
+			bankCd 		= refundAccount[0].bankCd;
+		}
+	} else {
+		
+	}
+	
+	// 5. 추가정보설정
+	var chgerNm 	= orderInfoList[0].ordNm;
+	var chgerEmail 	= orderInfoList[0].ordEmail;
+	var chgerPhnno 	= orderInfoList[0].ordPhnno;
+	var chgerTelno 	= orderInfoList[0].ordTelno;
+
+	// 2021.01.26 화면통합
+	// 6. 취소신청, 취소완료 여부 체크
+	// 취소신청
+	if (reqGbn == "cnclReq") {
+		confirmStr 		= "취소신청하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclComplete/';
+	}
+	// 취소완료
+	else if (reqGbn == "cnclComplete") {
+		confirmStr 		= "취소완료하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclComplete/';
+	}
+	// 취소신청승인
+	else if (reqGbn == "cnclReqComplete") {
+		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclComplete/';
+	}
+	// 취소신청철회
+	else if (reqGbn == "cnclReqCancel") {
+		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclReqCancel/';
+	}
+
+	var jsonObj = {
+		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
+		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
+		,"chgMemo"			: $('#chgMemo').val()
+		,"cancelReqList" 	: cancelRequestTargetList
+		,"accountNo" 		: accountNo
+		,"accountNm" 		: accountNm
+		,"bankCd" 			: bankCd
+		,"allCanYn" 		: allCanYn
+		,"isCustomer" 		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipcode"		: ""
+		,"chgerBaseAddr"	: ""
+		,"chgerDtlAddr"		: ""
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
+		,"reqGbn"			: reqGbn
+		,"ordChgSq"			: ordChgSq
+	}
+
+	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
+	var jsonData = JSON.stringify(jsonObj);
+	
+	mcxDialog.confirm(confirmStr, {
+		cancelBtnText		: "취소",
+		sureBtnText			: "확인",
+		sureBtnClick		: function() {
+			gagajf.ajaxJsonSubmit(
+				cnclUrl
+				, jsonData
+				, function() {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+					uifnPopupClose('popupCancelRequestForm');
+				}
+			);
+		}
+	});
+}
+
+// 환불계좌 등록
+var fnCreateOrderRfAccount = function () {	
+	var actionUrl = "/orderChange/refund/account/create/form?ordNo=" + ordNo ;
+	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
+};
+
+// 환불계좌 정보
+var fnBindOrderRfAccountInfo = function () {
+	gagaAgGrid.fetch(
+		"/orderChange/refund/account/info/list?ordNo=" + ordNo
+		, gridOptionsRefundAccountInfo
+		, null
+		, function (result) {
+		}
+	)
+};
+
+$(document).ready(function() {
+	// 1. 그리드생성
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
+	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
+	
+	// 2. 그리드 데이타 싱크작업
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);								// 주문정보
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
+	gagaAgGrid.hideStatusBar('gridDelvCdList');
+	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
+	
+	// 3. 환불정보계산
+	fnCalculateRefundAmt(null);
+	
+	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
+	if (payMeans !== 'G014_20') {
+		$('#wrapRefundAccount').addClass("off");
+		fnBindOrderRfAccountInfo();
+	}
+	
+	// 5. 취소신청, 취소완료, 취소승인, 취소철회 버튼 제어
+	if (ordChgSq > 0) {
+		$("#cnclReqBtn").css("display", "none");
+		$("#cnclCompleteBtn").css("display", "none");
+	} else {
+		$("#cnclReqCompleteBtn").css("display", "none");
+		$("#cnclReqCancelBtn").css("display", "none");
+	}
+	
+	// 6. 취소사유 선택
+	if (ordChgSq > 0) {
+		$("select[name='selectChgReason']").val(chgReason);										// 변경사유코드
+		$("select[name='selectChgReason']").attr("disabled", "true");							// 변경사유 비활성화
+		$("#chgMemo").text(chgMemo);															// 변경사유메모
+		$("#chgMemo").attr("disabled", "true");													// 변경사유메모 비활성화
+		fnChangeChgReason(chgReason);															// 귀책사유
+	}
+	
+	// debug mode 해제
+	if (temp2) {
+		$("#h4OrderCancelRequestToBeList").css("display", "none");
+		$("#gridOrderCancelRequestToBeList").css("display", "none");
+		$("#h4DelvCdList").css("display", "none");
+		$("#gridDelvCdList").css("display", "none");
+	}
+});
+</script>
+</html>
+
+
+
+
+

+ 145 - 0
src/main/webapp/WEB-INF/views/order/CnclReqViewForm.html

@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CancelRequestForm.html
+ * @desc    : 취소요청 화면
+ *============================================================================
+ * STYLE24
+ * 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="350">
+	<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" name="cancelRequestFrm" action="/orderChange/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="ordChgSq" th:value="${ordChgSq}"/>
+				<input type="hidden" name="chgReason" value=""/>
+				<input type="hidden" name="chgReasonDesc" value=""/>
+
+				<h4>(취소/반품/교환) 요청 정보</h4>
+				<div id="gridOrderChangeList" style="width:100%; height: 180px; min-height:99px;" class="ag-theme-balham"></div>
+				
+				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
+					<button type="button" class="btn btn-success" onclick="fnCnclReq('cancel');">취소철회</button>
+					<button type="button" class="btn btn-success" onclick="fnCnclReq('confirm');">취소승인</button>
+				</div>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var ordNo 					= [[${ordNo}]];									// 주문번호
+var ordChgSq 				= [[${ordChgSq}]];								// 주문변경번호
+var orderChangeList 		= [[${orderChangeList}]];						// 취소/반품/교환요청 정보
+
+//
+//var orderInfoList 		= [[${orderInfoList}]];							// 주문기본정보
+//var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+//var chgReason				= orderChangeList[0].chgReason;					// 변경사유코드
+//var chgMemo				= orderChangeList[0].chgMemo;					// 변경사유메모
+
+var temp1 = true;
+var temp2 = false;
+
+// 6. 반품/교환 정보
+var columnDefsOrderChangeList = [
+	{
+		headerName		: "요청번호"		
+		, field			: "ordChgSq"		
+		, width			: 100	
+		, cellClass		: 'text-center'
+	},
+	{headerName: "요청구분"		, field: "chgGbNm"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "옵션1"			, field: "optCd1"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "수량"			, field: "chgQty"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
+	{
+		headerName		: "요청일자"		
+		, field			: "regDt"		
+		, width			: 150		
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "변경사유"		, field: "chgReasonNm"	, width: 100	, cellClass: 'text-center'},
+	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-center'},
+	{headerName: "변경자명"		, field: "chgerNm"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "변경자핸드폰"		, field: "chgerPhnno"	, width: 120	, cellClass: 'text-center'}
+];
+var gridOptionsOrderChangeList = gagaAgGrid.getGridOptions(columnDefsOrderChangeList);
+</script>
+
+<!-- function -->
+<script>
+// 취소승인
+var fnCnclReq = function (cnclGbn) {
+	var confirmStr 		= "";
+	var cnclLinkStr	 	= "";
+	
+	if (cnclGbn == "cancel") {
+		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?";
+		cnclLinkStr 	= "/orderChange/cnclReqCancel";
+	} else {
+		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?";
+		cnclLinkStr 	= "/orderChange/cnclReqComplete";
+	}
+	
+	mcxDialog.confirm(confirmStr, {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 		= ordNo;	//전역변수
+			data.ordChgSq 	= ordChgSq;
+
+			var jsonData = JSON.stringify(data);
+			
+			gagajf.ajaxJsonSubmit(
+				cnclLinkStr
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+					uifnPopupClose('popupCancelRequestForm');
+				}
+			);
+		}
+	});
+};
+</script>
+
+<script>
+$(document).ready(function() {
+	// 1. 그리드생성
+	gagaAgGrid.createGrid('gridOrderChangeList'				, gridOptionsOrderChangeList);			// 취소/반품/교환 요청 정보
+	
+	// 2. 그리드 데이타 싱크작업
+	gridOptionsOrderChangeList.api.setRowData(orderChangeList);										// 취소/반품/교환요청 정보
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderChangeList');
+});
+</script>
+</html>
+
+
+
+
+

+ 110 - 0
src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html

@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDetailChangeHst.html
+ * @desc    : 주문상품상세이력 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.18   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="780" data-height="400">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>주문상품상세이력</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailChangeHstForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="overflow-y:auto;">
+			<form id="cancelRequestFrm">
+				<div id="gridOrderDetailChangeHstList" style="width:100%; height:300px;" class="ag-theme-balham"></div>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var orderDetailHstList = [[${orderDetailHstList}]];
+
+// specify the columns
+var columnDefs4OrderDetailChangeHstList = [
+	{
+		headerName			: "변경일시"	
+		, field				: "updDt"
+		, width				: 150
+		, cellClass			: 'text-center' 
+		, cellRenderer: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "변경아이디"		, field: "updId"		, width: 120	, cellClass: 'text-center'},
+	{headerName: "변경내용"		, field: "ordDtlStatNm"	, width: 130	, cellClass: 'text-center'},
+	{headerName: "주문수량"		, field: "ordQty"		, width: 80		, cellClass: 'text-center'},
+	{headerName: "취소수량"		, field: "cnclRtnQty"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "출고처"			, field: "delvLocNm"	, width: 150	, cellClass: 'text-center'},
+	{headerName: "송장번호"		, field: "invoiceNo"	, width: 130	, cellClass: 'text-center'},
+	{headerName: "택배사"			, field: "shipCompNm"	, width: 130	, cellClass: 'text-center'}
+];
+
+var gridOptions4OrderDetailChangeHstList = gagaAgGrid.getGridOptions(columnDefs4OrderDetailChangeHstList);
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderDetailChangeHstList', gridOptions4OrderDetailChangeHstList);
+	gridOptions4OrderDetailChangeHstList.api.setRowData(orderDetailHstList);
+	gagaAgGrid.hideStatusBar('gridOrderDetailChangeHstList');
+});
+/*]]>*/
+
+</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>
+</html>
+
+
+
+
+

+ 96 - 0
src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html

@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDetailCouponHst.html
+ * @desc    : 주문상품 상세 쿠폰 이력 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1000">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>쿠폰 내역</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailCouponHstForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="overflow-y:auto;">
+			<form id="cancelRequestFrm">
+				<div id="gridOrderCouponInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var orderCouponHstList = [[${orderCouponHstList}]];
+
+//specify the columns
+var columnDefsOrderCouponInfo = [
+	{headerName: "쿠폰구분", 			field: "cpnType", 	width: 100, cellClass: 'text-center'},
+	{headerName: "상품코드/공급처코드", 	field: "targetCd1", width: 160, cellClass: 'text-center'},
+	{headerName: "주문상세/배송정책", 	field: "targetCd2", width: 160, cellClass: 'text-center'},
+	{headerName: "쿠폰ID", 			field: "cpnSq", 	width: 100, cellClass: 'text-center'},
+	{headerName: "쿠폰명", 			field: "cpnNm", 	width: 140, cellClass: 'text-center'},
+	{
+		headerName			: "웹 할인금액/율"
+		, field				: "dcPval"
+		, width				: 120
+		, cellClass			: 'text-center'
+		, valueFormatter	: function(params) {
+			return (params.data.dcWay == '10') ? params.value.addComma() + '원' : params.value.addComma() + '%';}	
+	},
+	{
+		headerName			: "모바일 할인금액/율"
+		, field				: "dcMval"
+		, width				: 120
+		, cellClass			: 'text-center'
+		, valueFormatter	: function(params) {
+			return (params.data.dcWay == '10') ? params.value.addComma() + '원' : params.value.addComma() + '%';
+		}	
+	},
+	{
+		headerName			: "판매상품가격"
+		, field				: "ordAmt"
+		, width				: 100
+		, cellClass			: 'text-center'
+		, valueFormatter	: function(params) {
+			return params.value.addComma();
+		}	
+	},
+	{
+		headerName			: "실할인금액"
+		, field				: "cpnDcAmt"
+		, width				: 100
+		, cellClass			: 'text-center'
+		, valueFormatter	: function(params) {
+			return params.value.addComma();
+		}	
+	}
+];
+
+var gridOptionsOrderCouponInfo = gagaAgGrid.getGridOptions(columnDefsOrderCouponInfo);
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderCouponInfo', gridOptionsOrderCouponInfo);
+	gridOptionsOrderCouponInfo.api.setRowData(orderCouponHstList);
+	gagaAgGrid.hideStatusBar('gridOrderCouponInfo');
+});
+/*]]>*/
+
+</script>
+</html>
+
+
+
+
+

+ 8 - 6
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -154,7 +154,7 @@
 <!-- data -->
 <script th:inline="javascript">
 var ordNo 					= [[${ordNo}]];							// 주문번호
-var userNo 					= [[${userNo}]]							// 관리자번호
+var userNo 					= [[${userNo}]];						// 관리자번호
 
 var orderInfo 				= [[${orderInfo}]];						// 기본정보
 var orderGoodsInfo 			= [[${orderGoodsInfo}]];				// 주문상세정보
@@ -514,7 +514,7 @@ var columnDefsDeliveryInfo = [
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
 			var rtnStr = ""
-			if (canChgDelvOrdStat.includes(params.data.ordDtlStat)) {
+			if (canChgDelvStat.includes(params.data.ordDtlStat)) {
 				// 배송지 수정 (주문배송, 교환배송)
 				rtnStr += params.value;
 				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'ADDR');\">POST</button>";
@@ -648,6 +648,7 @@ var columnDefsOrderChangeInfo = [
 	{
 		headerName: "회수구분", field: "wdGb", width: 100, cellClass: 'text-center',
 		cellRenderer: function (params) {
+			console.log(params);
 			return params.value == 'W' ? '회수요청' : '직접배송'; 
 		}
 	},
@@ -662,9 +663,10 @@ var columnDefsOrderChangeInfo = [
 		, cellRenderer	: function (params) {
 			var rtnStr = ""
 			
-			rtnStr += params.value;
 			// 회수지수정가능(교환요청, 반품요청)
-			if (params.data.wdGb != 'D' && canChgDelvChgStat.includes(params.data.chgStat)) {
+			if (params.data.wdGb != 'D' && (params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_33' || params.data.chgStat == 'G685_40')) {
+				
+				rtnStr += params.value;			
 				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'CLAIM');\">POST</button>";
 				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
 			} else {
@@ -970,7 +972,7 @@ $(document).ready(function () {
 	});
 	// 교환요청
 	$('#btnExchange').on('click', function () {
-		fnExchangeRequest();
+		fnExchangeRequest(ordNo, 'N');
 	});
 	// 메모등록
 	$('#btnCreateOrderMemo').on('click', function () {
@@ -1042,7 +1044,7 @@ var fnReturnRequest = function (ordChgSq) {
 // 교환요청
 var fnExchangeRequest = function (ordChgSq) {
 	
-	// 교환요청 구분 (orChgSq null 이면 교환요청화면 있으면 교환요청정보화면)
+	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
 	if (ordChgSq == null) {
 		ordChgSq = 0;
 	}

+ 1397 - 0
src/main/webapp/WEB-INF/views/order/OrderDetailFormBack20210122.html

@@ -0,0 +1,1397 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderListForm.html
+ * @desc    : 주문상세화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1500" data-height="700"> <!-- data-width="1500" data-height="870" -->
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>주문상세내역</h2>
+			<button type="button" class="close" onclick="fnOrderDetailClose()"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="orderDetailInfo" name="orderDetailInfo" action="#" th:method="post">
+				<input type="hidden" name="custNo"/>
+				<input type="hidden" name="orderNm"/>
+				<input type="hidden" name="orderPhnno"/>
+				<input type="hidden" name="orderEmail"/>
+				
+				<h4>기본정보</h4>
+				<!-- <div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div> -->
+
+				<!-- TABLE -->
+				<table class="tableStyle">
+					<colgroup>
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+					</colgroup>
+					<thead>
+						<tr>
+							<th>사이트</th>
+							<th>몰구분</th>
+							<th>웹구분</th>
+							<th>외부몰</th>
+							<th>주문일시</th>
+							<th>주문자</th>
+							<th>고객번호</th>
+							<th>주문번호</th>
+							<th>이메일</th>
+							<th>핸드폰번호</th>
+							<th>회원구분</th>
+							<th>관리대상</th>
+							<th>등급</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td th:text="${orderInfo[0].siteCdNm}"></td>
+							<td th:text="${orderInfo[0].mallGbNm}"></td>
+							<td th:text="${orderInfo[0].frontGbNm}"></td>
+							<td th:text="${orderInfo[0].extmallNm}"></td>
+							<td th:text="${orderInfo[0].ordDt}"></td>
+							<td th:text="${orderInfo[0].ordNm}"></td>
+							<td th:text="${orderInfo[0].custNo}"></td>
+							<td th:text="${orderInfo[0].ordNo}"></td>
+							<td th:text="${orderInfo[0].ordEmail}"></td>
+							<td th:text="${orderInfo[0].ordPhnno}"></td>
+							<td th:text="${orderInfo[0].custGbNm}"></td>
+							<td th:text="${orderInfo[0].managedRsnNm}"></td>
+							<td th:text="${orderInfo[0].custGradeNm}"></td>
+						</tr>
+					</tbody>
+				</table>
+				<!-- //TABLE -->
+									
+				<h4>주문상품정보</h4>
+				<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 off" id="btnFreeGiftCancel" style="margin-left:10px;" >사은품취소</button>
+				<div id="gridOrderFreeGiftInfo" style="width:100%; height:120px;" class="ag-theme-balham"></div>
+				
+				<h4>배송정보</h4>
+				<div id="gridDeliveryAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				
+				<table style="width:100%;">
+					<colgroup>
+						<col style="width:65%;"/>
+						<col/>                                                                                  
+					</colgroup>
+					<tbody>
+						<tr>
+							<td style="">
+								<h4>결제정보</h4>
+								<div id="gridPaymentInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+							</td>
+							<td style="">
+								<h4>배송비정보</h4>
+								<div id="gridDeliveryFeeInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+							</td>
+						<tr>
+					</tbody>
+				</table>
+
+				<div id="wrapOrderChange">
+					<h4>(취소/반품/교환)요청 정보</h4>
+					<div id="gridOrderChangeInfo" style="width:100%; height: 180px; min-height:99px;" class="ag-theme-balham"></div>
+				</div>
+
+				<div id="wrapRefund">
+					<h4>환불정보</h4>
+					<div id="gridOrderRefundInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+				</div>
+
+				<table style="width:100%;">
+					<colgroup>
+						<col style="width:65%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<td style="">
+								<h4>상담내역</h4>
+								<div id="gridOrderCounselInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+							</td>
+							<td style="">
+								<h4>관리자메모</h4>
+								<button type="button" id="btnCreateOrderMemo" class="btn btnRight btn-base btn-sm" style="margin-left:10px;"> +</button>
+								<div id="gridOrderMemoInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+var ordNo 					= [[${ordNo}]];							// 주문번호
+var userNo 					= [[${userNo}]]							// 관리자번호
+
+var orderInfo 				= [[${orderInfo}]];						// 기본정보
+var orderGoodsInfo 			= [[${orderGoodsInfo}]];				// 주문상세정보
+var orderFreeGiftInfo 		= [[${orderFreeGiftInfo}]];				// 주문사은품정보
+var orderDeliveryAddrInfo	= [[${orderDeliveryAddrInfo}]];			// 배송정보
+var orderPaymentInfo 		= [[${orderPaymentInfo}]];				// 결제정보
+var orderDeliveryFeeInfo 	= [[${orderDeliveryFeeInfo}]];			// 배송비정보
+var orderChangeInfo 		= [[${orderChangeInfo}]];				// 취소/반품/교환요청 정보
+var orderRefundInfo 		= [[${orderRefundInfo}]];				// 환불정보
+var orderCounselInfo 		= [[${orderCounselInfo}]];				// 상담내역
+var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
+</script>
+
+<!-- AgGrid 컬럼 세팅 -->
+<script>
+// 1.주문기본정보 그리드 바인딩
+// 2.상품별 상세정보
+var columnDefsGoodsInfo = [
+	{
+		headerName	: "주문상세",
+		children	: [
+			{headerName: "번호"		, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'},
+			{headerName: "주문구분"	, field: "exchGbNm"		, width: 80, cellClass: 'text-center'},
+		],
+	},
+	{
+		headerName	: "상품정보",
+		children	: [
+			{headerName: "상품코드"	, field: "goodsCd"		, width: 80, cellClass: 'text-center'},
+			{
+				headerName		: "상품명"
+				, field			: "goodsNm"
+				, 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: 80, cellClass: 'text-center'}
+		]
+	},
+	{
+		headerName	: "단품정보",
+		children	: [
+			{headerName: "단품코드"	, field: "itemCd"		, width: 80, cellClass: 'text-center'},
+			{
+				headerName		: "단품명"
+				, field			: "itemNm"
+				, 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>';
+				}
+			},
+			{headerName: "옵션1"		, field: "optCd1"		, width: 80, cellClass: 'text-center'},
+			{headerName: "옵션2"		, field: "optCd2"		, width: 80, cellClass: 'text-center'},
+			{headerName: "단품수량"	, field: "itemQty"		, width: 80, cellClass: 'text-center'},
+			{
+				headerName		: "단품금액"
+				, field			: "itemPrice"
+				, width			: 100
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "옵션추가금액"
+				, field			: "optAddPrice"
+				, width			: 100
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세단품",
+		children	: [
+			{headerName: "주문수량"	, field: "ordQty"		, width: 80, cellClass: 'text-center'},
+			{headerName: "취소수량"	, field: "cnclRtnQty"	, width: 80, cellClass: 'text-center'},
+			{headerName: "변경요청수량"	, field: "ordReqChgQty"	, width: 100, cellClass: 'text-center'},
+			{headerName: "상세상태"	, field: "ordDtlStat"	, width: 120, cellClass: 'text-center', hide: true},
+			{
+				headerName		: "상세상태"
+				, field			: "ordDtlStatNm"
+				, width			: 120
+				, 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>";
+				}
+			},
+			{
+				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 추가적인 개발은 추후 물류개발이 완료된 후 추가할 예정
+					// To Do List
+					// @ 재고정보수정
+					// @ 정산정보수정
+					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			: "cpn1DcAmt"
+				, width			: 80
+				, cellClass		: 'text-right' //goodsCpnDcAmtClass
+				, cellRenderer: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "상품"
+				, field			: "goodsCpnDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right' //goodsCpnDcAmtClass
+				, cellRenderer: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "장바구니"
+				, field			: "cartCpnDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "다다익선",
+		children	: [
+			{
+				headerName		: "수량"
+				, field			: "tmtb1DcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "금액"
+				, field			: "tmtb2DcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "포인트",
+		children	: [
+			{
+				headerName		: "사용"
+				, field			: "pntDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "즉시사용"
+				, field			: "prePntDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "적립"
+				, field			: "savePntAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "상품권",
+		children	: [
+			{
+				headerName		: "사용"
+				, field			: "gfcdUseAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderGiftcardHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "금액(원/단위)",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제"
+				, field			: "realOrdAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"
+				, field			: "cnclRtnAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+		]
+	},
+	{headerName: "결품", field: "soldoutYn", width: 60, cellClass: 'text-center'},
+	{
+		headerName	: "배송",
+		children	: [
+			{
+				headerName		: "송장번호"
+				, field			: "invoiceNo"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var retStr = '';
+					if (!gagajf.isNull(params.value)) retStr = '<a href="javascript:void(0);" onclick="fnSearchDelivery(\'' + params.data.trackingUrl + '\',\'' + params.data.invoiceNo + '\');">' + params.value + '</a>';
+					return retStr;
+				}
+			},
+			{headerName: "출고처"		, field: "delvLocNm"	, width: 120, cellClass: 'text-center'},
+			{headerName: "배송지번호"	, field: "delvAddrSq"	, width: 120, cellClass: 'text-center'}
+		]
+	}
+];
+var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
+
+// 2.5 주문사은품정보
+var columnDefsOrderFreeGiftInfo = [
+	{headerName: "주문사은품번호"	, field: "ordFreegiftSq"	, width: 120, cellClass: 'text-center', hide: true},
+	{headerName: "주문번호"		, field: "ordNo"			, width: 120, cellClass: 'text-center'},
+	{headerName: "사은품프로모션"	, field: "freegiftSq"		, width: 100, cellClass: 'text-center', hide: true},
+	{headerName: "사은품프로모션명"	, field: "freegiftNm"		, width: 250, cellClass: 'text-center'},
+	{headerName: "사은품혜택번호"	, field: "freegiftValSq"	, width: 100, cellClass: 'text-center', hide: true},
+	{
+		headerName			: "사용포인트"		
+		, field				: "usePoint"			
+		, width				: 100
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{headerName: "사은품코드"		, field: "itemCd"			, width: 100, cellClass: 'text-center'},
+	{headerName: "사은품명"		, field: "itemNm"			, width: 100, cellClass: 'text-center'},
+	{headerName: "사은품수량"		, field: "itemQty"			, width: 100, cellClass: 'text-center'},
+	{headerName: "옵션명"			, field: "optCd"			, width: 100, cellClass: 'text-center'},
+	{headerName: "옵션코드1"		, field: "optCd1"			, width: 100, cellClass: 'text-center'},
+	{headerName: "옵션코드2"		, field: "optCd2"			, width: 100, cellClass: 'text-center'},
+	{headerName: "삭제여부"		, field: "delYn"			, width: 100, cellClass: 'text-center'}
+];
+var gridOptionsOrderFreeGiftInfo = gagaAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
+
+// 3.배송정보
+var columnDefsDeliveryInfo = [
+	{headerName: "배송지번호"		, field: "delvAddrSq"		, width: 80, cellClass: 'text-center'},
+	{headerName: "주문구분"		, field: "exchGbNm"			, width: 80, cellClass: 'text-center'},
+	{headerName: "수정여부"		, field: "delvAddrEditYn"	, width: 80, cellClass: 'text-center', hide: true},
+	{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			: 220
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = ""
+			
+			if (params.data.delvAddrEditYn < 1) {
+				// 배송지 수정 (주문배송, 교환배송)
+				rtnStr += params.value;			
+				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'ADDR');\">POST</button>";
+				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnUpdateOrderAddr('" + params.node.rowIndex + "');\">저장</button>";
+			} else {
+				rtnStr += params.value;
+			}
+			
+			return rtnStr;
+		}
+	},
+	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 220, cellClass: 'text-left'},
+	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 220, cellClass: 'text-left', editable: true},
+	{headerName: "배송메모"		, field: "delvMemo"			, width: 250, cellClass: 'text-left', editable: true}
+];
+var gridOptionsDeliveryInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryInfo);
+
+// 4.결제정보
+var columnDefsPaymentInfo = [
+	{headerName: "결제수단"		, field: "payMeansNm"	, width: 100	, cellClass: 'text-center'},
+	{headerName: "카드(은행)"		, field: "cardNm"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "할부(입금계좌)"	, field: "cardMips"		, width: 150	, cellClass: 'text-center'},
+	{
+		headerName		: "승인번호"
+		, field			: "pgTradeNo"
+		, width			: 100
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+
+			if (!gagajf.isNull(params.value)) {
+				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + params.value + '</a>';
+			}
+
+			if (gagajf.isNull(params.value) && !gagajf.isNull(params.data.pgTid)) {
+				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + '거래내역' + '</a>';
+			}
+
+			return retStr;
+		}
+	},
+	{
+		headerName			: "결제일시"	
+		, field				: "payDt"
+		, width				: 130
+		, cellClass			: 'text-center' 
+		, cellRenderer: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "결제상태"	, field: "payStatNm"	, width: 80		, cellClass: 'text-center'},
+	{
+		headerName			: "결제금액"
+		, field				: "payAmt"
+		, width				: 80
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{headerName: "계좌만료일"	, field: "vaDeadline"	, width: 150	, cellClass: 'text-center'}
+];
+var gridOptionsPaymentInfo = gagaAgGrid.getGridOptions(columnDefsPaymentInfo);
+
+// 5.배송비
+var columnDefsDeliveryFeeInfo = [
+	{headerName: "배송비종류"		, field: "delvFeeGbNm", width: 120, cellClass: 'text-center'},
+	{
+		headerName			: "배송비"
+		, field				: "delvFee"
+		, width				: 100
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{headerName: "배송비정산여부"	, field: "delvUsacYn", width: 120, cellClass: 'text-center'},
+	{
+		headerName			: "배송비정산일시"	
+		, field				: "delvUsacDt"
+		, width				: 140
+		, cellClass			: 'text-center' 
+		, cellRenderer: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	}
+];
+var gridOptionsDeliveryFeeInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
+
+// 6. 반품/교환 정보
+var columnDefsOrderChangeInfo = [
+	{headerName: "요청번호"		, field: "ordChgSq"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "요청구분"		, field: "chgGbNm"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "옵션1"			, field: "optCd1"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "수량"			, field: "chgQty"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
+	{
+		headerName		: "요청일자"		
+		, field			: "regDt"		
+		, width			: 150		
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "변경사유"		, field: "chgReasonNm"	, width: 100	, cellClass: 'text-center'},
+	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-center'},
+	{headerName: "변경자명"		, field: "chgerNm"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "변경자핸드폰"		, field: "chgerPhnno"	, width: 120	, cellClass: 'text-center', editable: true},
+	{
+		headerName		: "우편번호"		
+		, field			: "chgerZipNo"
+		, width			: 220
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = ""
+			
+			if (params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_40' ) {
+				// 배송지 수정 (주문배송, 교환배송)
+				rtnStr += params.value;			
+				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'CLAIM');\">POST</button>";
+				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
+			} else {
+				rtnStr = "";
+			}
+			
+			return rtnStr;
+		}
+	},
+	{headerName: "주소(기본)"		, field: "chgerBaseAddr"	, width: 220, cellClass: 'text-left'},
+	{headerName: "주소(상세)"		, field: "chgerDtlAddr"	, width: 150	, cellClass: 'text-center'	, editable: true},
+	{
+		headerName		: "택배사전송"
+		, field			: "wdInvoiceSendYn"
+		, width			: 120
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			return (params.value == 'N') ? '미전송' : '전송';
+		}
+	},
+	{
+		headerName		: "요청취소"
+		, field			: "ordDtlNo"
+		, width			: 100
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = "";
+
+			if (params.data.chgGb == "G680_30" && params.data.chgStat == "G685_40") {
+				retStr = ' <button type="button" class="btn btn-success" onclick="fnReturnReqeustCancel(\'' + params.data.ordChgSq + '\',\'' + params.value + '\',\'' + params.node.rowIndex + '\');">반품취소</button>';
+			} else if (params.data.chgGb == "G680_40" && params.data.chgStat == "G685_30") {
+				retStr = ' <button type="button" class="btn btn-success" onclick="fnExchangeReqeustCancel(\'' + params.data.ordChgSq + '\',\'' + ordNo + '\',\'' + params.value + '\',\'' + params.node.rowIndex + '\');">교환취소</button>';
+			} else if (params.data.chgGb == "G680_20" && params.data.chgStat == "G685_20") {
+				retStr = '<button type="button" class="btn btn-success" onclick="fnCancelConfirmRequestCancel(\'' + params.data.ordChgSq + '\')">요청철회</button>';
+			}
+
+			return retStr;
+		}
+	},
+	{
+		headerName		: "회수지시전송"
+		, field			: "wdInvoiceSendYn"
+		, width			: 120
+		, cellClass		: 'text-center'
+	},
+	{headerName: "회수송장번호", field: "wdInvoiceNo", width: 90, cellClass: 'text-center'}
+];
+var gridOptionsOrderChangeInfo = gagaAgGrid.getGridOptions(columnDefsOrderChangeInfo);
+
+// 7.환불정보
+var columnDefsRefundInfo = [
+	{headerName: "환불수단"		, field: "payMeansNm"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "환불은행(카드)"	, field: "cardNm"		, width: 120	, cellClass: 'text-center'},
+	{headerName: "환불은행계좌번호"	, field: "raNo"			, width: 150	, cellClass: 'text-center'},
+	{headerName: "예금주"			, field: "raNm"			, width: 80		, cellClass: 'text-center'},
+	{
+		headerName			: "환불금액"
+		, field				: "refundAmt"
+		, width				: 100
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "환불완료일자"		
+		, field			: "updDt"		
+		, width			: 140	
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "환불처리자"		, field: "updNm"		, width: 120		, cellClass: 'text-center'}
+];
+var gridOptionsRefundInfo = gagaAgGrid.getGridOptions(columnDefsRefundInfo);
+
+// 8.상담내역
+var columnDefsOrderCounselInfo = [
+	{headerName: "상담구분"		, field: "counselClsfNm"	, width: 120	, cellClass: 'text-center'},
+	{headerName: "상품코드"		, field: "goodsCd"			, width: 120	, cellClass: 'text-center'},
+	{
+		headerName		: "질문제목"
+		, field			: "questTitle"
+		, width			: 250
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			return '<a href="javascript:void(0);" onclick="cfnOpenOneToOneAskDetailPopup(\'' + params.data.counselSq + '\')">' + params.value + '</a>';
+		}
+	},
+	{
+		headerName		: "등록일"			
+		, field			: "questDt"	
+		, width			: 120	
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{
+		headerName		: "답변일"			
+		, field			: "ansDt"	
+		, width			: 120	
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "답변자"			, field: "ansNm"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "삭제여부"		, field: "delYn"	, width: 80		, cellClass: 'text-center'}
+];
+var gridOptionsOrderCounselInfo = gagaAgGrid.getGridOptions(columnDefsOrderCounselInfo);
+
+// 9.주문메모
+var columnDefsOrderMemoInfo = [
+	{headerName: "등록일시"		, field: "regDt"	, width: 135	, cellClass: 'text-center'},
+	{
+		headerName		: "등록자"
+		, field			: "regNm"
+		, width			: 100
+		, cellClass		: 'text-center'
+	},
+	{
+		headerName		: "관리메모"
+		, field			: "memo"
+		, width			: 150
+		, cellClass		: 'text-left'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			
+			if (!gagajf.isNull(params.value)) {
+				retStr = '<a href="javascript:void(0);" onclick="fnCreateOrderMemo(\'' + params.data.ordNo + '\',\'' + params.data.orderMemoSq + '\',\'U' + '\');">' + params.value + '</a>';
+			}
+			return retStr;
+		}
+	},
+	{
+		headerName		: "삭제"
+		, field			: "orderMemoSq"
+		, width			: 80
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			
+			if (params.data.updNo == userNo) {
+				retStr = '<button type="button" class="btn btn-danger" onclick="fnDeleteOrderMemo(\'' + params.data.ordNo + '\',\'' + params.value + '\');"> - </button>';
+			}
+			return retStr;
+		}
+	},
+];
+var gridOptionsOrderMemoInfo = gagaAgGrid.getGridOptions(columnDefsOrderMemoInfo);
+</script>
+
+<script>
+var fnSetGridHeightInit = function () {
+	if (_windowWidth < 1780) {
+		_girdRowH1 = 33 + _scrollH;
+		_girdRowH2 = 80 + _scrollH;
+	} else {
+		_girdRowH1 = 33
+		_girdRowH2 = 80;
+	}
+}
+</script>
+
+<!-- 버튼 이벤트 바인딩 -->
+<script>
+var _windowWidth 	= $(window).width();		/* 위도우창 넓이 */
+var _girdRowH 		= 33;						/* 그리드 Row 줄 높이 */
+var _girdRowH1 		= 33;						/* 그리드 타이틀 1줄 짜리 높이*/
+var _girdRowH2 		= 62;						/* 그리드 타이틀 2줄 짜리 높이*/
+var _scrollH 		= 27;						/* 가로스크롤bar 높이 */
+
+$(window).resize(function () {
+	_windowWidth = $(window).width();
+	fnSetGridHeightInit();
+});
+
+</script>
+<!-- AgGrid 생성 -->
+<script>
+// 팝업닫기
+var fnOrderDetailClose = function(){
+	uifnPopupClose('popupOrderDetail');
+}
+
+$(document).ready(function () {
+	
+	// 1. 그리드 그리기
+	//gagaAgGrid.createGrid('gridOrderInfo'					, gridOptionsOrderInfo);			// 기본정보
+	gagaAgGrid.createGrid('gridOrderGoodsInfo'				, gridOptionsGoodsInfo);			// 상품정보
+	gagaAgGrid.createGrid('gridOrderFreeGiftInfo'			, gridOptionsOrderFreeGiftInfo);	// 사은품정보
+	gagaAgGrid.createGrid('gridDeliveryAddrInfo'			, gridOptionsDeliveryInfo);			// 배송정보
+	gagaAgGrid.createGrid('gridPaymentInfo'					, gridOptionsPaymentInfo);			// 결제정보
+	gagaAgGrid.createGrid('gridDeliveryFeeInfo'				, gridOptionsDeliveryFeeInfo);		// 배송비정보
+	gagaAgGrid.createGrid('gridOrderChangeInfo'				, gridOptionsOrderChangeInfo);		// 취소/반품/교환 요청 정보
+	gagaAgGrid.createGrid('gridOrderRefundInfo'				, gridOptionsRefundInfo);			// 환불정보
+	gagaAgGrid.createGrid('gridOrderCounselInfo'			, gridOptionsOrderCounselInfo);		// 상담내역
+	gagaAgGrid.createGrid('gridOrderMemoInfo'				, gridOptionsOrderMemoInfo);		// 관리자메모
+	
+	// 2. 그리드 데이터 바인딩
+	//gridOptionsOrderInfo.api.setRowData(orderInfo);								// 기본정보
+	gridOptionsGoodsInfo.api.setRowData(orderGoodsInfo);							// 상품정보
+	gridOptionsOrderFreeGiftInfo.api.setRowData(orderFreeGiftInfo);					// 사은품품정보
+	gridOptionsDeliveryInfo.api.setRowData(orderDeliveryAddrInfo);					// 배송정보
+	gridOptionsPaymentInfo.api.setRowData(orderPaymentInfo);						// 결제정보
+	gridOptionsDeliveryFeeInfo.api.setRowData(orderDeliveryFeeInfo);				// 배송비정보
+	gridOptionsOrderChangeInfo.api.setRowData(orderChangeInfo);						// 취소/반품/교환요청 정보
+	gridOptionsRefundInfo.api.setRowData(orderRefundInfo);							// 환불정보
+	gridOptionsOrderCounselInfo.api.setRowData(orderCounselInfo);					// 상담내역
+	gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);					// 관리자메모
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderGoodsInfo');
+	gagaAgGrid.hideStatusBar('gridOrderFreeGiftInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryAddrInfo');
+	gagaAgGrid.hideStatusBar('gridPaymentInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryFeeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderChangeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderRefundInfo');
+	gagaAgGrid.hideStatusBar('gridOrderCounselInfo');
+	gagaAgGrid.hideStatusBar('gridOrderMemoInfo');
+	
+	// 3. 그리드 높이 설정
+	fnSetGridHeightInit();
+	
+	// 4. 그리드 숨김 처리
+	if (orderChangeInfo == null || orderChangeInfo.length === 0) {
+		$("#wrapOrderChange").addClass("off");
+	}
+	
+	if (orderRefundInfo == null || orderRefundInfo.length === 0) {
+		$("#wrapRefund").addClass("off");
+	}
+	
+	// 5. 버튼처리
+	// 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.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') {
+			addrBtnChkCnt++;
+		}
+	});
+
+	// 주소변경 버튼 히든처리
+	if (addrBtnChkCnt > 0) {
+		$("#btnUpdateOrderAddr").removeClass("off");
+	}
+});
+
+$(document).ready(function () {
+	$('#orderDetailContents').css("width", "97%").css("height", "96%");
+	
+	// 취소요청
+	$('#btnCancel').on('click', function () {
+		fnCancelRequest(ordNo, 'N');
+	});
+	// 반품요청
+	$('#btnReturn').on('click', function () {
+		fnReturnRequest(ordNo, 'N');
+	});
+	// 교환요청
+	$('#btnExchange').on('click', function () {
+		fnExchangeRequest(ordNo, 'N');
+	});
+	// 메모등록
+	$('#btnCreateOrderMemo').on('click', function () {
+		fnCreateOrderMemo(ordNo, 0, 'N');
+	});
+	// 배송 정보 수정
+	$('#btnUpdateOrderAddr').on('click', function () {
+		fnUpdateOrderAddr();
+	});
+	// 환불계좌 등록
+	$('#btnSaveAccount').on('click', function () {
+		fnCreateOrderRfAccount(ordNo, custNo);
+	});
+});
+</script>
+
+<!-- function -->
+<script>
+var gridOrderChangeInfoSelectedIdx = '';
+
+// 배송지변경
+var fnUpdateOrderAddr = function (rowIdx) {	
+	gridOptionsDeliveryInfo.api.stopEditing();
+	var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(rowIdx).data);
+	
+	mcxDialog.confirm("주소를 변경하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			gagajf.ajaxJsonSubmit(
+				"/order/deliver/addr/update"
+				, jsonData
+				, function () {
+					
+				}
+			);
+		}
+	});
+}
+
+// 취소요청
+var fnCancelRequest = function () {
+	var actionUrl = "/orderChange/cncl/req/form?ordNo=" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
+};
+
+// 반품요청
+var fnReturnRequest = function () {
+	var actionUrl = "/orderChange/rtn/req/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 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 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 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 () {
+					
+				}
+			);
+		}
+	});
+}
+
+// 반품요청 철회
+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 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;
+	}
+
+	$('#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);
+};
+
+// 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();
+				}
+			);
+		}
+	});
+};
+
+// 구매확정철회
+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();
+					}
+				);
+			}
+		});
+	}
+};
+
+// 주문상세 상태값 변경
+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(idx, addrGb) {
+		
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 배송지주소 수정
+			if ("ADDR" == addrGb) {
+				gridOptionsDeliveryInfo.api.gre
+				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipZipNo 		= data.zonecode;
+				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipBaseAddr 		= cfnGetDaumRoadAddr(data);
+				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipDtlAddr 		= "";
+				gridOptionsDeliveryInfo.api.refreshCells();
+			}
+			// 회수지주소 수정
+			else {
+				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerZipNo 		= data.zonecode;
+				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerBaseAddr 	= cfnGetDaumRoadAddr(data);
+				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerDtlAddr 	= "";
+				gridOptionsOrderChangeInfo.api.refreshCells();
+			}
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
+	
+	cfnOpenDaumAddr(daumZip);
+}
+</script>
+
+</html>
+
+
+
+
+

+ 106 - 0
src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDetailPointHst.html
+ * @desc    : 주문상품 상세 상품권 이력 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900">
+	<div class="panelStyle">
+		<div class="giftcardTitle">
+			<h2>상품권 사용 내역</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailGiftcardHstForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="overflow-y:auto;">
+			<form id="pointHstFrm">
+				<div id="gridOrderGiftcardInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var orderGiftcardHstList = [[${orderGiftcardHstList}]];
+
+// specify the columns
+var columnDefsOrderGiftcardInfo = [
+		{headerName: "상품권명", 		field: "gfcdNm", 		width: 180, cellClass: 'text-center'},
+		{headerName: "상품권코드", 		field: "gfcdNo", 		width: 180, cellClass: 'text-center'},
+		{
+			headerName			: "상품권승인금액"
+			, field				: "chgGfcdAmt"
+			, width				: 130
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{
+			headerName			: "상품권사용금액"
+			, field				: "usGfcdAmt"
+			, width				: 130
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{
+			headerName			: "상품권남은금액"
+			, field				: "rmGfcdAmt"
+			, width				: 130
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{headerName: "주문상세", 		field: "ordDtlNo", 		width: 100, cellClass: 'text-center'},
+		{headerName: "상품코드", 		field: "goodsCd", 		width: 100, cellClass: 'text-center'},
+		{
+			headerName			: "상품권사용금액"
+			, field				: "gfcdAmt"
+			, width				: 130
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{headerName: "사유", 			field: "occurDtlDesc", 	width: 180, cellClass: 'text-center'},
+		{
+			headerName			: "등록일시"	
+			, field				: "regDt"
+			, width				: 130
+			, cellClass			: 'text-center' 
+			, cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+			}
+		}
+];
+
+var gridOptionsOrderGiftcardInfo = gagaAgGrid.getGridOptions(columnDefsOrderGiftcardInfo);
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderGiftcardInfo', gridOptionsOrderGiftcardInfo);
+	gridOptionsOrderGiftcardInfo.api.setRowData(orderGiftcardHstList);
+	gagaAgGrid.hideStatusBar('gridOrderGiftcardInfo');
+});
+/*]]>*/
+
+</script>
+</html>
+
+
+
+
+

+ 97 - 0
src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html

@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDetailPointHst.html
+ * @desc    : 주문상품 상세 마일리지 이력 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>포인트 사용 내역</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailPointHstForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="overflow-y:auto;">
+			<form id="pointHstFrm">
+				<div id="gridOrderPointInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var orderPointHstList = [[${orderPointHstList}]];
+
+// specify the columns
+var columnDefsOrderPointInfo = [
+		{headerName: "상품코드", 		field: "goodsCd", 		width: 100, cellClass: 'text-center'},
+		{headerName: "적립율(PC)", 	field: "pntPrate", 		width: 100, cellClass: 'text-center'},
+		{headerName: "적립율(모바일)", 	field: "pntMrate", 		width: 100, cellClass: 'text-center'},
+		{
+			headerName			: "판매상품가격"
+			, field				: "currPrice"
+			, width				: 120
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{
+			headerName			: "실결제상품가격"
+			, field				: "realOrdAmt"
+			, width				: 140
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{
+			headerName			: "사용포인트"
+			, field				: "pntAmt"
+			, width				: 100
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{headerName: "사유", 			field: "occurDtlDesc", 	width: 180, cellClass: 'text-center'},
+		{
+			headerName			: "등록일시"	
+			, field				: "regDt"
+			, width				: 130
+			, cellClass			: 'text-center' 
+			, cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+			}
+		}
+];
+
+var gridOptionsOrderPointInfo = gagaAgGrid.getGridOptions(columnDefsOrderPointInfo);
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderPointInfo', gridOptionsOrderPointInfo);
+	gridOptionsOrderPointInfo.api.setRowData(orderPointHstList);
+	gagaAgGrid.hideStatusBar('gridOrderPointInfo');
+});
+/*]]>*/
+
+</script>
+
+</html>
+
+
+
+
+

+ 78 - 0
src/main/webapp/WEB-INF/views/order/OrderDetailTmtbHst.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDetailPointHst.html
+ * @desc    : 주문상품 상세 상품권 이력 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="800">
+	<div class="panelStyle">
+		<div class="giftcardTitle">
+			<h2>다다익선 적용 내역</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailTmtbHstForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="overflow-y:auto;">
+			<form id="pointHstFrm">
+				<div id="gridOrderTmtbInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var orderTmtbHstList = [[${orderTmtbHstList}]];
+
+// specify the columns
+var columnDefsOrderGiftcardInfo = [
+		{headerName: "다다익선번호"	, field: "tmtbSq", 		width: 100, cellClass: 'text-center'},
+		{headerName: "다다익선명"	, field: "tmtbNm", 		width: 180, cellClass: 'text-center'},
+		{
+			headerName			: "할인금액"
+			, field				: "tmtbDcAmt"
+			, width				: 120
+			, cellClass			: 'text-center'
+			, valueFormatter	: function(params) {
+				return params.value.addComma();
+			}	
+		},
+		{headerName: "주문상세", 		field: "ordDtlNo",	width: 120, cellClass: 'text-center'},
+		{headerName: "상품코드", 		field: "goodsCd",	width: 120, cellClass: 'text-center'},
+		{
+			headerName			: "등록일시"	
+			, field				: "regDt"
+			, width				: 130
+			, cellClass			: 'text-center' 
+			, cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+			}
+		}
+];
+
+var gridOptionsOrderTmtbInfo = gagaAgGrid.getGridOptions(columnDefsOrderGiftcardInfo);
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderTmtbInfo', gridOptionsOrderTmtbInfo);
+	gridOptionsOrderTmtbInfo.api.setRowData(orderTmtbHstList);
+	gagaAgGrid.hideStatusBar('gridOrderTmtbInfo');
+});
+/*]]>*/
+
+</script>
+</html>
+
+
+
+
+

+ 766 - 0
src/main/webapp/WEB-INF/views/order/OrderListFormBack.html

@@ -0,0 +1,766 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderListForm.html
+ * @desc    : 주문목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+ <style>
+ .ag-neo .ag-cell.top-row-span {
+     border-bottom: 0px;
+}
+.ag-neo .ag-cell.bottom-row-span {
+     border-top: 0px;
+     text-indent: -100em;
+}
+ </style>
+ 
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+	
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	
+	<form id="searchForm" name="searchForm" action="#" th:action="@{'/order/list'}">
+		<input type="hidden" id="searchGb" name="searchGb" />
+		
+		<!-- 패널 영역1 -->
+		<div class="panelStyle" >
+			<!-- 검색조건 영역 -->
+			<!-- TITLE -->
+			<div class="panelTitle">
+				<h3>
+					<i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">주문번호</font> 또는 <font color="red">검색조건</font> 하나를 꼭 입력해 주세요.
+				</h3>
+				<span class="panelControl">
+					<i class="fa fa-chevron-up"></i>
+				</span>
+			</div>
+			
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>사이트</th>
+						<td>
+							<select name="siteCd">
+								<option value="">[전체]</option>
+								<option th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>몰구분</th>
+						<td>
+							<select name="mallCd">
+								<option value="">[전체]</option>
+								<option th:if="${mallGbList}" th:each="oneData, status : ${mallGbList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>업체/브랜드<em class="required" title="필수"></em></th>
+						<td colspan="3">
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
+							<select name="supplyCompCd" id="supplyCompCd">
+								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<span id="multiBrand"></span>
+						</td>
+					</tr>
+					<tr>
+						<th>주문상태</th>
+						<td>
+							<div class="multiCheckBox" style="width:270px">
+								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
+								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
+									<li th:if="${ordStatList}" th:each="oneData, status : ${ordStatList}">
+										<label class="chkBox">
+											<input type="checkbox" name="multiOrdStat" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|">
+										</label>
+									</li>
+								</ul>
+							</div>
+						</td>
+						<th>주문상세상태</th>
+						<td colspan="3">
+							<div class="multiCheckBox" style="width:270px">
+								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
+								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
+									<li th:if="${ordDtlStatList}" th:each="oneData, status : ${ordDtlStatList}">
+										<label class="chkBox">
+											<input type="checkbox" name="multiOrdDtlStat" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|">
+										</label>
+									</li>
+								</ul>
+							</div>
+						</td>
+						<th rowspan="5">키워드<i class="star"></i></th>
+						<td rowspan="5">
+							<select name="search" id="search">
+								<option value="searchOrdNo">주문번호</option>
+								<option value="searchExtmallOrderId">외부몰주문번호</option>
+								<option value="searchAgentOrderId">에이전트주문번호</option>
+							</select>
+							<textarea class="textareaR3 w70p" name="condition" id="condition"></textarea>
+						</td>
+					</tr>
+					<tr>
+						<th>변경구분</th>
+						<td>
+							<select name="chgGb">
+								<option value="">[전체]</option>
+								<option th:if="${chgGbList}" th:each="oneData, status : ${chgGbList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>변경요청처리상태</th>
+						<td>
+							<select name="chgStat">
+								<option value="">[전체]</option>
+								<option value="9999">[품절취소]</option>
+								<option th:if="${chgStatList}" th:each="oneData, status : ${chgStatList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>결제수단</th>
+						<td>
+							<select name="payMeans">
+								<option value="">[전체]</option>
+								<option th:if="${payMeansList}" th:each="oneData, status : ${payMeansList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>주문자명</th>
+						<td>
+							<input type="text" name="orderNm" placeholder="" maxlength="20"/>
+						</td>
+						<th>고객ID</th>
+						<td>
+							<input type="text" name="custId" placeholder="" maxlength="20"/>
+						</td>
+						<th>주문자휴대폰번호</th>
+						<td>
+							<input type="text" name="orderPhnno" placeholder="" maxlength="20"/>
+						</td>
+					</tr>
+					<tr>
+						<th>상품코드</th>
+						<td>
+							<input type="text" name="goodsCd" placeholder="" maxlength="20"/>
+						</td>
+						<th>사이즈</th>
+						<td>
+							<input type="text" name="sizeCd" placeholder="" maxlength="20"/>
+						</td>
+						<th>단품명</th>
+						<td>
+							<input type="text" name="goodsNm" placeholder="" maxlength="20"/>
+						</td>
+					</tr>
+					<tr>
+						<th>수취인명</th>
+						<td>
+							<input type="text" name="recipNm" placeholder="" maxlength="20"/>
+						</td>
+						<th>송장번호</th>
+						<td>
+							<input type="text" name="invoiceNo" placeholder="" maxlength="20"/>
+						</td>
+						<th>회수지시전송여부</th>
+						<td>
+							<select name="wdInvoiceSendYn" class="w150">
+								<option value="">전체</option>
+								<option value="Y">전송</option>
+								<option value="N">미전송</option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>조회일자</th>
+						<td colspan="7">
+							<select name="searchDateGb">
+								<option value="ordDt">주문일자</option>
+								<option value="delvStdt">출고일자</option>
+								<option value="cnclReqDt">@취소요청일자</option>
+								<option value="changReqDt">@교환요청일자</option>
+								<option value="rtnReqDt">@반품요청일자</option>
+								<option value="soldoutDt">품절일자</option>
+							</select>
+							<span id="terms"></span>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
+					</li>
+				</ul>
+				
+			</div>
+		</div>
+
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-info btn-lg" onclick="fnOrderExcelList();">엑셀다운로드</button>
+				</li>
+				<li class="aR">
+					검색결과 : <strong><span id="rowCntOrderList">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="100" selected="selected">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+						<option value="5000">5000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			
+			<div class="panelContent" style="overflow: hidden;">
+				<div id="gridOrderList" style="width: 100%; height: 600px;" class="ag-theme-balham lh60"></div>
+			</div>
+
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="orderListPagination"></div>
+				</li>
+			</ul>
+		</div>
+
+	</form>
+</div>
+
+<label class="off">
+	<a href="javascript:void(0);" id="hdOrderExcelList" style="display: none;">엑셀다운로드</a>
+</label>
+
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+var sessRoleCd 		= [[${sessionInfo.roleCd}]];
+var siteCdList 		= gagajf.convertToArray([[${siteCdList}]]);
+var mallGbList 		= gagajf.convertToArray([[${mallGbList}]]);
+var ordDtlStatList 	= gagajf.convertToArray([[${ordDtlStatList}]]);
+var payMeansList 	= gagajf.convertToArray([[${payMeansList}]]);
+var chgStatList 	= gagajf.convertToArray([[${chgStatList}]]);
+var chgGbList 		= gagajf.convertToArray([[${chgGbList}]]);
+var formalGbList 	= gagajf.convertToArray([[${formalGbList}]]);
+var frontGbList 	= {'P': 'PC', 'M': 'MO'};
+var uploadGoodsUrl 	= [[${@environment.getProperty('upload.goods.view')}]];
+
+// 1. 주문기본정보
+var columnDefsOrderList = [
+	{
+		headerName	: "주문기본정보"
+		, cellClass	: 'text-center'
+		, children	: [
+			{
+				headerName		: "주문번호"
+				, field			: 'ordNo'
+				, width			: 80
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, cellRenderer	: function (params) {
+					var roleCd = [[${sessionInfo.roleCd}]];
+					if (!roleCd.startsWith("C")) {
+						return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
+					} else {
+						return params.value;
+					}
+				}
+			},
+			{
+				headerName		: "주문자"
+				, field			: "ordNm"
+				, width			: 100
+				, cellClass		: 'text-left'
+				, sortable		: true
+				, cellRenderer	: function (params) {
+					var custNo = '';
+					if (!gagajf.isNull(params.data.custNo)) {
+						custNo = params.data.custNo;
+					}
+					
+					var roleCd = [[${sessionInfo.roleCd}]];
+					if (!roleCd.startsWith("C") && !gagajf.isNull(params.data.custNo)  && params.data.mallGb === '10' ) {
+						return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.value + '(' + custNo + ')' + '</a>';
+					} else {
+						return params.value + '(' + custNo + ')';
+					}
+				}
+			},
+			{headerName: "고객고유번호"	, field: "custNo"		, width: 120, cellClass: 'text-center', hide: true},
+			{headerName: "외부몰"		, field: "extmallNm"	, width: 100, cellClass: 'text-center', sortable: true},
+			{headerName: "휴대폰번호"	, field: "orderPhnno"	, width: 120, cellClass: 'text-center', hide: true},
+			{
+				headerName		: "사이트"
+				, field			: "siteCd"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(siteCdList, params.data.siteCd); 
+				}
+			},
+			{
+				headerName		: "프론트"
+				, field			: "frontGb"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(frontGbList, params.data.frontGb); 
+				}
+			},
+			{
+				headerName		: "몰구분"
+				, field			: "mallGb"
+				, width			: 60
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(mallGbList, params.data.mallGb); 
+				}
+			},
+			{
+				headerName		: "주문일시"
+				, field			: "ordDt"
+				, width			: 140
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.ordDt); 
+				}
+			},
+			{
+				headerName		: "결제수단"
+				, field			: "payMeans"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(payMeansList, params.data.payMeans); 
+				}
+			},
+			{
+				headerName		: "신규/교환"
+				, field			: "ordExchGb"
+				, width			: 100
+				, cellClass		: 'text-center',
+				valueGetter 	: function (params) {
+					return params.data.ordExchGb === 'O' ? '신규' : '교환';
+				}
+			},
+			{
+				headerName		: "주문상세상태"
+				, field			: "ordDtlStat"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, valueGetter	: function (params) {
+					var ordDtlStat = gagaAgGrid.lookupValue(ordDtlStatList, params.data.ordDtlStat);
+					var chgStat='';
+					if (params.data.ordDtlStat === '99') {
+						chgStat = gagaAgGrid.lookupValue(chgStatList, params.data.chgStat);
+						if (!gagajf.isNull(chgStat)) {
+							chgStat = chgStat.substr(0, 2);
+							if (params.data.soldoutYn === 'Y') {
+								chgStat = '품절';
+							}
+							ordDtlStat = ordDtlStat + '-' + chgStat;
+						}
+
+					}
+					return ordDtlStat;
+				}
+			},
+			{headerName: "출고처", field: "delvLocNm", width: 110, cellClass: 'text-center', sortable: true, hide:true},
+		]
+	},
+	{
+		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			: 200
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, cellRenderer	: function (params) {
+					var roleCd = [[${sessionInfo.roleCd}]];
+					if (!roleCd.startsWith("C")) {
+						return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
+					} else {
+						return params.value;
+					}
+				}
+			}
+		]
+	},
+	{
+		headerName	: "단품정보"
+		, cellClass	: 'text-center'
+		, children	: [
+			{
+				headerName		: "이미지"
+				, field			: "sysImgNm"
+				, width			: 100
+				, height		: 60
+				, cellClass		: 'text-center'
+				,cellRenderer	: function(params) {
+					return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+				}
+			},			
+			{
+				headerName		: "단품코드"
+				, field			: "itemCd"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, cellRenderer: function (params) {
+					var roleCd = [[${sessionInfo.roleCd}]];
+					if (!roleCd.startsWith("C")) {
+						return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenGoodsDetailPopup('U','" + params.value + "');\">" + params.value + "</a>";
+					} else {
+						return params.value;
+					}
+				}
+			},
+			{headerName: "옵션1"		, field: "optCd1"		, width: 60	, cellClass: 'text-center'	, sortable: true},
+			{headerName: "옵션2"		, field: "optCd2"		, width: 60		, cellClass: 'text-center'	, sortable: true},
+			{headerName: "단품명"		, field: "itemNm"		, width: 200	, cellClass: 'text-left'	, sortable: true},
+			{
+				headerName		: "외부몰벤더"
+				, field			: "vendorId"
+				, width			: 110
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(vendorList, params.data.vendorId); 
+				}
+			},
+			{headerName: "외부몰주문번호"	, field: "extmallOrderId"	, width: 150, cellClass: 'textFormat', sortable: true},
+			{headerName: "외부몰부주문번호"	, field: "agentOrderId"		, width: 120, cellClass: 'textFormat', sortable: true},
+			{
+				headerName		: "주문수량"
+				, field			: "ordQty"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, valueGetter: function (params) { 
+					return params.data.ordQty.addComma(); 
+				}
+			},
+			{
+				headerName		: "취소수량"
+				, field			: "cnclRtnQty"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return params.data.cnclRtnQty.addComma(); 
+				}
+			},
+			{
+				headerName		: "주문금액"
+				, field			: "ordAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueGetter	: function (params) { 
+					return params.data.ordAmt.addComma(); 
+				}
+			},
+			{
+				headerName		: "취소반품금액"
+				, field			: "cnclRtnAmt"
+				, width			: 120
+				, cellClass		: 'text-right'
+				, valueGetter	: function (params) { 
+					return params.data.cnclRtnAmt.addComma(); 
+				}
+			},
+			{
+				headerName		: "총할인금액"
+				, field			: "totDcAmt"
+				, width			: 120
+				, cellClass		: 'text-right'
+				, valueGetter: function (params) { 
+					return params.data.totDcAmt.addComma(); 
+				}
+			},
+			{
+				headerName		: "실판매금액"
+				, field			: "realOrdAmt"
+				, width			: 100
+				, cellClass		: 'text-right'
+				, valueGetter	: function (params) { 
+					return params.data.realOrdAmt.addComma(); 
+				}
+			},
+			{headerName: "원코드"		, field: "supplyGoodsCd"	, width: 130, cellClass: 'text-center', sortable: true},
+			{
+				headerName		: "정상/이월"
+				, field			: "formalGb"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, sortable		: true 
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(formalGbList, params.data.formalGb); 
+				}
+			},
+			{
+				headerName		: "출고처지정일시"
+				, field			: "delvAssignDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.delvAssignDt); 
+				}
+			},
+			{
+				headerName		: "송장출력일시"
+				, field			: "invoiceDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.invoiceDt); 
+				}
+			},
+			{headerName: "출고택배사"		, field: "shipCompNm"	, width: 150, cellClass: 'text-center'},
+			{headerName: "출고송장"		, field: "invoiceNo"	, width: 150, cellClass: 'text-center'},
+			{
+				headerName		: "출고일시"
+				, field			: "delvResDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.delvResDt); 
+				}
+			},
+			{headerName: "품절여부"		, field: "soldoutYn"	, width: 90		, cellClass: 'text-center', sortable: true},
+			{headerName: "품절메모"		, field: "soldoutMemo"	, width: 120	, cellClass: 'text-left'},
+			{
+				headerName		: "품절일시"
+				, field			: "soldoutRegDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.soldoutRegDt); 
+				}
+			},
+			{headerName: "품절처리자", field: "soldoutRegId", width: 120, cellClass: 'text-center'},
+			{
+				headerName		: "변경요청번호"
+				, field			: "ordChgSq"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) {
+					return params.data.ordChgSq === 0 ? '' : params.data.ordChgSq;
+				}
+			},
+			{
+				headerName		: "변경구분"
+				, field			: "chgGb"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, valueGetter: function (params) { 
+					return gagaAgGrid.lookupValue(chgGbList, params.data.chgGb); 
+				}
+			},
+			{
+				headerName		: "변경상태"
+				, field			: "chgStat"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(chgStatList, params.data.chgStat); 
+				}
+			},
+			{headerName: "회수지시여부"		, field: "wdInvoiceSendYn"		, width: 100, cellClass: 'text-center'},
+			{headerName: "회수택배사"		, field: "wdShipCompNm"			, width: 100, cellClass: 'text-center'},
+			{headerName: "회수송장"		, field: "wdInvoiceNo"			, width: 120, cellClass: 'text-center'},
+			{headerName: "수취인명"		, field: "recipNm"				, width: 100, cellClass: 'text-center'},
+			{headerName: "수취인연락처"		, field: "recipPhnno"			, width: 120, cellClass: 'text-center'},
+			{headerName: "수취인주소"		, field: "recipAddr"			, width: 500, cellClass: 'text-left'},
+			{
+				headerName		: "배송메모"
+				, field			: "delvMemo"
+				, width			: 200
+				, cellClass		: 'left'
+				, valueGetter: function (params) {
+					var delvMemo = '';
+					if (!gagajf.isNull(params.data.delvMemo)) {
+						delvMemo = fnRemoveEmojis(params.data.delvMemo);
+					}
+					return delvMemo;
+				}
+			},
+			{headerName: "출고메모", field: "dstrbtNote", width: 200, cellClass: 'left'}
+		]
+	}
+];
+
+var gridOptionsOrderList = gagaAgGrid.getGridOptions(columnDefsOrderList);
+
+gridOptionsOrderList.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+
+// 최근상세보기한 주문번호
+var currOrdNo = '';
+
+// 조회
+$('#btnOrderSearch').on('click', function () {
+	fnSearchList();
+});
+
+var fnSearchList = function () {
+	var ordNo 	= $('#searchForm input[name=ordNo]').val();
+	var stDate 	= $('#stDate').val();
+	var edDate 	= $('#edDate').val();
+
+	if (gagajf.isNull(ordNo)) {
+		if (gagajf.isNull(stDate)) {
+			mcxDialog.alert('시작 기간을 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(edDate)) {
+			mcxDialog.alert('종료 기간을 입력하세요.');
+			return;
+		}
+	}
+	
+	gagaPaging.init('searchForm', fnSearchCallBack, 'orderListPagination', $('#searchForm').find('#pageSize').val());
+	gagaPaging.load($("#searchForm input[name=pageNo]").val());
+	
+	// 2020.12.08 페이징 처리 때문에 주석 처리
+	//gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptionsOrderList, '#searchForm', function (result) {
+		//$("#rowCntOrderList").text(gridOptionsOrderList.api.getDisplayedRowCount());
+		// 주문리스트 합계 정보
+		//gagajf.ajaxFormSubmit('/order/list/sum/info', '#searchForm', fnOrderListSumInfoCallback);
+	//});
+};
+
+var fnSearchCallBack = function(result){
+	$('#searchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+	$('#searchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
+	$('#searchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+	$('#searchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+	
+	gridOptionsOrderList.api.setRowData(result.orderList);
+	gagaPaging.createPagination(result.pageing.pageable);
+}
+
+// 엑셀조회
+$("#btnSearchExcel").on('click', function () {
+	cfnExcelUploadPopup('', 'fnExcelUpoadCallback');
+});
+
+var fnExcelUpoadCallback = function (data) {
+	$("#excelFileNm").val(data.excelFileNm);
+	gagaAgGrid.fetch('/order/excel/search', gridOptionsOrderList, '#searchForm', function () {
+		$("#rowCntOrderList").text(gridOptionsOrderList.api.getDisplayedRowCount());
+	});
+};
+
+// 초기화 클릭시
+$('#btnInit').on('click', function() {
+	$('#searchForm')[0].reset();
+	$("#multiBrand").empty();
+});
+
+// 엑셀 다운로드
+// 2020.12.11 현재는 그리드의 조회 목록을 엑셀 다운로드 하고 있지만 추후 에는 조건의 엑셀 조회 후 다운로드 기능으로 변경 해야 할듯함
+// 기존의 주문목록은 페이징 기능이 없었지만 페이징 기능을 추가 하면서 엑셀다운로드시 조회 후 파일다운 기능 필요  
+var fnOrderExcelList = function () {
+	gagaAgGrid.showOrHideColumn(gridOptionsOrderList	, "custNo", true);
+	gagaAgGrid.exportToExcel('주문목록'					, gridOptionsOrderList);
+	gagaAgGrid.showOrHideColumn(gridOptionsOrderList	, "custNo", false);
+};
+
+var fnOpenOrderDetailPopup = function (ordNo) {
+	currOrdNo = ordNo;
+	cfnOpenOrderDetailPopup(ordNo);
+};
+
+var fnReOpenOrderDetailPopup = function () {
+	cfnOpenOrderDetailPopup(currOrdNo);
+};
+	
+//자사/입점 변경여부
+$("#searchForm input[name=selfYn]").bind('click change', function () {
+	var radioValue = $(this).val();
+	var selfGb = "S";	// 자사 공급 업체
+	
+	if (radioValue == "N"){
+		selfGb = "E";	//입점 공급업체
+	}
+	
+	var actionUrl = '/renderer/supply/company/list/'+ selfGb;	
+
+	$('#searchForm').find('#multiBrand').empty();
+
+	cfnCreateCombo(actionUrl, $('#searchForm select[name=supplyCompCd]'), "[전체]", "");
+});
+	
+// 업체변경시
+$('#searchForm select[name=supplyCompCd]').on('change', function() {
+	var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+	if(sessRoleCd == "G001_B000"){
+		actionUrl = '/renderer/brand/AuthBrandlist';
+	}
+
+	cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
+});
+
+//페이징
+$('#searchForm select[name=pageSize]').on('change', function() {
+	$("#searchForm input[name=pageNo]").val('1');
+	fnGoodsListSearch($("#searchForm input[name=searchGb]").val());
+});
+
+// 초기설정
+$(document).ready(function() {
+	// 달력기능 활성화
+	cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '주문');
+	gagaAgGrid.createGrid('gridOrderList', gridOptionsOrderList);
+	gridOptionsOrderList.api.hideOverlay();
+});
+</script>
+
+</html>
+
+
+
+
+

+ 183 - 0
src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html

@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderMemoRegistForm.html
+ * @desc    : 주문메모 등록 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>주문메모등록</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCreateOrderMemo');"><i class="fa fa-times"></i></button>
+		</div>
+	
+		<div class="panelContent" style="height:100%; overflow-y:auto;">
+			<form id="orderMemoRequestFrm">
+				<input type="hidden" name="ordNo" th:value="${ordNo}" />
+				<input type="hidden" name="seq" th:value="${seq}" />
+				<input type="hidden" name="mode" th:value="${mode}" />
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:30%" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>등록자ID</th>
+							<td id="userNm"></td>
+						</tr>
+						<tr>
+							<th>관리자 메모</th>
+							<td>
+								<textarea th:if="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" th:text="${orderMemo.memo}"></textarea>
+								<textarea th:unless="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" text=""></textarea>
+							</td>
+						</tr>
+						<tr id="imageFileTr">
+							<th>파일</th>
+							<td><div class="uFile">
+								<input id="imageFile" name="imageFile" type="file" class="uFileInput"/>
+								<label for="imageFile" class="uFileLabel">파일선택</label>
+								<input type="hidden" name="orgFileNm"/>
+								<input type="hidden" name="sysFileNm"/>
+							</div>
+							</td>
+						</tr>
+						<th:block th:if="${mode == 'U' and orderMemo.sysFileNm != null and orderMemo.sysFileNm != ''}" th:with="uploadImageUrl=${@environment.getProperty('upload.image.view')}">
+							<tr>
+								<th>이미지</th>
+								<td>
+									<a href="javascript:void(0);" onclick="fnPreImgView()">
+										<img id="memoImg" th:src="|${uploadImageUrl}/memo/${orderMemo.sysFileNm}|" th:onerror="'this.src=\''+@{${@environment.getProperty('domain.uximage')}+ '/image/no.gif'}+'\';'" width="300px"/>
+									</a>
+								</td>
+							</tr>
+						</th:block>
+					</tbody>
+				</table>
+				<div>
+					<button type="button" class="btn btn-success btnRight marT10" id="btnOrderMemoRegistOk">저장</button>
+				</div>	
+				<br>
+			</form>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+// 이벤트 바인딩 관련
+var orderMemo 	= [[${orderMemo}]];
+var userNo 		= [[${userNo}]];
+var userNm 		= [[${userNm}]];
+var mode 		= [[${mode}]];
+
+// 첨부파일 등록
+$('#orderMemoRequestFrm input[name=imageFile]').on('change', function() {
+	var file = this.files[0];
+	
+	if (typeof(file) == 'undefined'){
+		return;
+	}
+	
+	gagajf.ajaxFileUpload('/common/file/upload?subDir=/memo'
+		, file
+		, function(result) {
+			$('#orderMemoRequestFrm input[name=orgFileNm]').val(result.oldFileName);
+			$('#orderMemoRequestFrm input[name=sysFileNm]').val(result.newFileName);
+		}
+		, 'image'
+	);
+});
+
+// 주문메모저장
+$('#btnOrderMemoRegistOk').on('click', function() {
+	var memo = $('#orderMemoRequestFrm textarea[name=memo]').val();
+
+	if (gagajf.isNull(memo)) {
+		mcxDialog.alert('메모 입력해 주세요.');
+		$('#orderMemoRequestFrm textarea[name=memo]').focus();
+		return;
+	}
+
+	mcxDialog.confirm('저장하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function(){
+			var jsonData = JSON.stringify($('#orderMemoRequestFrm').serializeObject());
+			gagajf.ajaxJsonSubmit(
+				'/order/memo/save'
+				, jsonData
+				, function(){
+					fnBindOrderMemo();
+					uifnPopupClose('popupCreateOrderMemo');
+				}
+			);
+		}
+	});
+});
+	
+// 이미지 클릭 시 미리보기 팝업 이벤트
+var fnPreImgView = function(){
+	cfnOpenImagePreViewPopup('preImgView', $('#memoImg').attr('src'));
+}
+
+// 이미지 로드 시 사이즈 변경
+$('#imagePreView').bind('load', function(){
+	var windowWidth = $(window).width() * 0.95;
+	var windowHeight = $(window).height() * 0.95;
+	
+	var width = $('#imagePreView').width();
+	var height = $('#imagePreView').height();
+	
+	if (width > windowWidth) {
+		$('#preImgView >.videoPopup').css('width', windowWidth);
+		$('#imagePreView').css('width', windowWidth);
+		
+	}
+	if (height > windowHeight) {
+		$('#preImgView >.videoPopup').css('height', windowHeight);
+		$('#imagePreView').css('height', windowHeight);
+	}
+});
+	
+$(document).ready(function() {
+	var userText = '';
+	
+	if (mode == 'U') {
+		userText = orderMemo.userNm + ' ('+orderMemo.updNo+')';
+		$('#orderMemoRequestFrm input[name=orgFileNm]').val(orderMemo.orgFileNm);
+		$('#orderMemoRequestFrm input[name=sysFileNm]').val(orderMemo.sysFileNm);
+	} else {
+		if (!gagajf.isNull(userNm) && !gagajf.isNull(userNo)) {
+			userText = userNm + ' (' + userNo + ')';
+		} else {
+			if (gagajf.isNull(userNm)) userText = userNm;
+			if (gagajf.isNull(userNo)) userText = userNo;
+		}
+	}
+	
+	$('#userNm').text(userText);
+
+	// 등록자만 수정 가능하게 처리
+	if (mode == 'U' && userNo != orderMemo.updNo) {
+		$('#btnOrderMemoRegistOk').css('display', 'none');
+		$('#imageFileTr').css('display', 'none');
+		$('#orderMemoRequestFrm textarea[name=memo]').attr('readonly', true);
+	}
+});
+
+/*]]>*/
+</script>
+
+</html>

+ 437 - 0
src/main/webapp/WEB-INF/views/order/OrderSamplePopupForm.html

@@ -0,0 +1,437 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderSamplePopupForm.html
+ * @desc    : 주문 샘플 데이터 생성 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.30   card007     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1200" id="popupOrderSample">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong th:text="${'주문 샘플 데이터 생성'}"></strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupOrderSample');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		
+		<!-- CONTENT -->
+		<div class="panelContent">
+			<form id="orderSamplePopupForm" name="orderSamplePopupForm" action="#" th:action="@{'/order/sample/create'}" th:method="post">
+				<table class="frmStyle" aria-describedby="등록폼">
+					<colgroup>
+						<col style="width:7%;"/>
+						<col style="width:26%;"/>
+						<col style="width:7%;"/>
+						<col style="width:26%;"/>
+						<col style="width:7%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>회원번호</th>
+							<td>
+								<input class="w200" type="text" name="custNo" id="custNo"/>
+								<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch" onclick="fnApplyCustomerInfo()">적용</button>
+							</td>
+							<th>주문자명</th>
+							<td>
+								<input type="text" name="ordNm" id="ordNm"/>
+							</td>
+							<th>핸드폰번호</th>
+							<td>
+								<input type="text" name="ordPhnno" id="ordPhnno"/>
+							</td>
+						</tr>
+						<tr>
+							<th>전화번호</th>
+							<td>
+								<input type="text" name="ordTelno" id="ordTelno"/>
+							</td>
+							<th>이메일</th>
+							<td colspan="3">
+								<input type="text" name="ordEmail" id="ordEmail"/>
+							</td>
+						</tr>
+						<tr>
+							<th>배송지</th>
+							<td colspan="5">
+								<input type="text" name ="recipZipcode" id="recipZipcode" class="w100" readonly="readonly"/>
+								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delivery');">우편번호찾기</button>
+								<input type="text" name ="recipBaseAddr" id="recipBaseAddr" class="w300"/>
+								<input type="text" name ="recipDtlAddr" id="recipDtlAddr" class="w300"/>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+		<!-- //CONTENT -->
+
+		<!-- Grid -->
+		<ul class="panelBar">
+			<li class="left">
+				<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsDeleteRow();">행삭제</button>
+			</li>
+			<li class="right">
+				<button type="button" class="btn btnRight btn-base btn-lg" onclick="fnOpenGoodsPopup();">주문상품추가</button>
+			</li>
+		</ul>
+		<div id="gridGoodsList" style="height: 390px;" class="ag-theme-balham lh60"></div>
+		<!-- //Grid -->
+
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-info btn-lg" id="btnCreateOrderSample">저장</button>
+			</li>
+		</ul>
+		<!-- //버튼 배치 영역 -->
+	</div>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var sessRoleCd = [[${sessionInfo.roleCd}]];
+	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
+	var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
+	var seasonList = gagajf.convertToArray([[${seasonList}]]);
+	var columnDefs = [];
+	columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: 'No', width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
+		},
+		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.gif\';"/>';
+			}
+		},
+		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{headerName: "구성상품코드", field: "compsGoodsCd", width: 140, cellClass: 'text-center'},
+		{headerName: "판매가능재고", field: "stockQtySum", width: 120, cellClass: 'text-right',
+			valueFormatter: function(params) {	return params.value.addComma();},
+			cellStyle : function(params){
+				if ("00" == params.data.goodsStat  || "10" == params.data.goodsStat || "20" == params.data.goodsStat || "30" == params.data.goodsStat) {
+					return;
+				}
+				var color = "";
+				if (params.value <= 0){
+					color = '#ff96689c';
+				}
+				return { 'background-color': color};
+			}
+		},
+		{
+			headerName		: "주문옵션"
+			, field			: "optCd"
+			, width			: 100
+			, cellClass		: "text-center"
+			, cellRenderer	: function (params) {
+				var strVal			= '';
+				if (!gagajf.isNull(params.data.optCd2)) {
+					var optArr = params.data.optCd2.split(',');
+					strVal += '<select class="optCd2" name="optCd2" goodsCd="' + params.data.goodsCd + '" onchange="fnChangeOption(this)">';
+					if (gagajf.isNull(params.data.optCd)) {
+						strVal += '<option value="" selected>선택</option>';	
+					} else {
+						strVal += '<option value="">선택</option>'
+					}
+					
+					
+					$.each(optArr, function (idx, item) {
+						if (params.data.optCd == item) {
+							strVal += '<option value="' + item + '" selected>' + item + '</option>';
+						} else {
+							strVal += '<option value="' + item + '">' + item + '</option>';
+						}
+					});
+				}
+				
+				return strVal;
+			}
+		},
+		{headerName: "주문수량", field: "ordQty", width: 100, cellClass: 'text-center', editable : true},
+		{headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
+		},
+		{headerName: "년도", field: "styleYear" , width: 80, cellClass: 'text-center'},
+		{headerName: "시즌", field: "seasonCd" , width: 80, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(seasonList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(seasonList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(seasonList, params.newValue); }
+		},
+		{headerName: "정상가", field: "listPrice" , width: 100, cellClass: 'text-right'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "판매가", field: "currPrice" , width: 100, cellClass: 'text-right'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		/*{headerName: "할인율", field: "dcRate" , width: 90, cellClass: 'text-right'},*/
+		{headerName: "가격변경일", field: "priceUpdDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "ERP재고연동여부", field: "erpStockLinkYn", width: 120, cellClass: 'text-center'},
+		{headerName: "이월구분", field: "formalGb", width: 100, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(formalGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(formalGbList, params.newValue); }
+		},
+		{headerName: "반품가능", field: "returnableYn" , width: 90, cellClass: 'text-center'},
+		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "등록자", field: "regNm" , width: 100, cellClass: 'text-center'},
+		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "수정자", field: "updNm" , width: 100, cellClass: 'text-center'}
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	
+	// 중복 선택 가능
+	gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+	gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+	
+	gridOptions.getRowStyle = function(params) {
+		if ("G008_00" == params.data.goodsStat  || "G008_10" == params.data.goodsStat || "G008_20" == params.data.goodsStat || "G008_30" == params.data.goodsStat) {
+			return { background: '#23c6c8' };
+		}
+	}
+
+	// 주문수량 변경 이벤트
+	gridOptions.onCellValueChanged = function(event) {
+		let ordQty = event.data.ordQty;
+		if (event.colDef.field == "ordQty" && event.data.ordQty > event.data.stockQtySum) {
+			ordQty = event.data.stockQtySum;
+			mcxDialog.alert('주문수량이 판매가능재고보다 클 수 없습니다.');
+		}
+		
+		gridOptions.api.forEachNode(function(rowNode, index) {
+			if (event.data.goodsCd == rowNode.data.goodsCd){
+				rowNode.data.ordQty = ordQty;
+				
+				gridOptions.api.updateRowData({update: [rowNode.data]});
+			}
+		});
+	}
+
+	//상품조회 팝업
+	var fnOpenGoodsPopup = function() {
+		cfnOpenGoodsPopup('fnFetchGoods');
+	}
+	
+	// 상품추가
+	var fnFetchGoods = function(goodsData) {
+		if (goodsData.length < 1) return;
+		
+		// 기존상품
+		var oldGoodsSetList = gagaAgGrid.getAllRowData(gridOptions);
+		var index = oldGoodsSetList.length+1;
+		
+		var arrGoodsCd = [];
+		$.each(goodsData, function(idx, item) {
+			arrGoodsCd.push(item.goodsCd);
+		})
+		
+		var isExist = false;
+		var jsonData = JSON.stringify(arrGoodsCd);
+		gagajf.ajaxJsonSubmit('/order/sample/goods/info', jsonData, function(result) {
+			$.each(result, function(idx, item) {
+				isExist = false;
+				gridOptions.api.forEachNode(function(rowNode, index) {
+					//중복상품 여부 확인
+					if (item.goodsCd == rowNode.data.goodsCd){
+						isExist = true;
+					}
+				});
+				
+				if(!isExist){
+					var data = {
+						no: index
+						, sysImgNm : item.sysImgNm
+						, goodsCd : item.goodsCd
+						, compsGoodsCd : item.repGoodsCd
+						, goodsNm : item.goodsNm
+						, ordQty : 1
+						, optCd2 : item.siteCd
+						, stockQtySum : item.stockQtySum
+						, goodsStat : item.goodsStat
+						, styleYear : item.styleYear
+						, seasonCd : item.seasonCd
+						, listPrice : item.listPrice
+						, currPrice : item.currPrice
+						, priceUpdDt : item.priceUpdDt
+						, erpStockLinkYn : item.erpStockLinkYn
+						, formalGb : item.formalGb
+						, returnableYn : item.returnableYn
+						, regDt : item.regDt
+						, regNm : item.regNm
+						, updDt : item.updDt
+						, updNm : item.updNm
+					};
+					
+					//그리드 마지막에 추가해야함
+					gridOptions.api.updateRowData({add: [data], addIndex: idx});
+					gridOptions.api.refreshCells();
+					index++;
+				}
+			});
+		});
+	}
+
+	//상품삭제
+	var fnGoodsDeleteRow = function() {
+		var selectedData = gagaAgGrid.selectedRowData(gridOptions);
+		
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		
+		//화면에서 삭제
+		gagaAgGrid.removeRowData(gridOptions, false);
+	}
+
+	// 저장
+	$('#btnCreateOrderSample').on('click', function() {
+		// 입력 값 체크
+		let selectedData = gagaAgGrid.selectedRowData(gridOptions);
+		
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		
+		let optChk = true;
+		let qtyChk = true;
+		$.each(selectedData, function(idx, item) {
+			if (gagajf.isNull(item.optCd)) {
+				optChk = false;
+			} else if (item.ordQty <= 0) {
+				qtyChk = false;
+			}
+		});
+		
+		if (!optChk) {
+			mcxDialog.alert('주문옵션이 없습니다.');
+			return false;
+		}
+		
+		if (!qtyChk) {
+			mcxDialog.alert('주문수량은 0보다 커야 됩니다.');
+			return false;
+		}
+		
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let params = {};
+				params.custNo = $('#custNo').val();
+				params.ordNm = $('#ordNm').val();
+				params.ordPhnno = $('#ordPhnno').val();
+				params.ordEmail = $('#ordEmail').val();
+				params.recipZipcode = $('#recipZipcode').val();
+				params.recipBaseAddr = $('#recipBaseAddr').val();
+				params.recipDtlAddr = $('#recipDtlAddr').val();
+				params.goods = selectedData;
+				
+				let jsonData = JSON.stringify(params);
+				
+				gagajf.ajaxJsonSubmit($('#orderSamplePopupForm').prop('action'), jsonData, function(result) {
+					uifnPopupClose('popupOrderSample');
+				});
+			}
+		});
+	});
+
+	// 회원정보 적용
+	var fnApplyCustomerInfo = function() {
+		var params = {};
+		params.searchGb = 'custNo';
+		params.searchTxt = $('#orderSamplePopupForm input[name=custNo]').val();
+		
+		var jsonData = JSON.stringify(params);
+		
+		gagajf.ajaxJsonSubmit('/customer/active/list', jsonData, function(result) {
+			let param = result[0];
+			
+			$('#ordNm').val(param.custNm);
+			$('#ordPhnno').val(param.cellPhnno);
+			$('#ordEmail').val(param.email);
+			$('#recipZipcode').val(param.homeZipcode);
+			$('#recipBaseAddr').val(param.homeBaseAddr);
+			$('#recipDtlAddr').val(param.homeDtlAddr);
+		});
+	}
+
+	var fnOpenDaumAddr = function() {
+		let daumZip = new daum.Postcode({
+			oncomplete: function(data) {
+				// 우편번호와 주소 정보를 해당 필드에 넣는다.
+				$('#orderSamplePopupForm input[name=recipZipcode]').val(data.zonecode);
+				$('#orderSamplePopupForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
+				$('#orderSamplePopupForm input[name=recipDtlAddr]').focus();
+				
+				cfnCloseDaumAddr();
+			},
+			width: '100%'
+		});
+		
+		cfnOpenDaumAddr(daumZip);
+	}
+	
+	var fnChangeOption = function(param) {
+		var params = {};
+		params.goodsCd = $(param).attr('goodsCd');
+		params.siteCd = $(param).val();
+		
+		var jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit('/order/sample/goods/stock', jsonData, function(result) {
+			gridOptions.api.forEachNode(function(rowNode, index) {
+				if (result.goodsCd == rowNode.data.compsGoodsCd){
+					rowNode.data.stockQtySum = result.minOrdQty;
+					console.log(result);
+					rowNode.data.optCd = result.siteCd;
+					gridOptions.api.updateRowData({update: [rowNode.data]});
+				}
+			});
+		});
+	}
+
+	$(document).ready(function() {
+		gagaAgGrid.createGrid('gridGoodsList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 370 - 0
src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

@@ -0,0 +1,370 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderSellerListForm.html
+ * @desc    : 입점업체미발주목록조회 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+ 
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+	
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	
+	<form id="searchForm" name="searchForm" action="#" th:action="@{'/order/seller/unorder/list'}">
+		<input type="hidden" id="searchGb" name="searchGb" />
+		<input type="hidden" id="imageViewYn" name="imageViewYn" />
+		
+		<!-- 패널 영역1 -->
+		<div class="panelStyle" >
+			<!-- 검색조건 영역 -->
+			<!-- TITLE -->
+			<div class="panelTitle">
+				<h3>
+					<i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">주문번호</font> 또는 <font color="red">검색조건</font> 하나를 꼭 입력해 주세요.
+				</h3>
+				<span class="panelControl">
+					<i class="fa fa-chevron-up"></i>
+				</span>
+			</div>
+			
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>업체/브랜드<em class="required" title="필수"></em></th>
+						<td colspan="7">
+							<!-- <label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="N" />자사</label> -->
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="Y" checked/>입점</label>
+							<select name="supplyCompCd" id="supplyCompCd">
+								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<span id="multiBrand"></span>
+						</td>
+					</tr>
+					<tr>
+						<th>주문번호</th>
+						<td>
+							<input type="text" name="ordNo" placeholder="" maxlength="20"/>
+						</td>
+						<th>주문자명</th>
+						<td>
+							<input type="text" name="ordNm" placeholder="" maxlength="20"/>
+						</td>
+						<th>상품코드</th>
+						<td>
+							<input type="text" name="goodsCd" placeholder="" maxlength="20"/>
+						</td>
+						<th>주문상세상태</th>
+						<td>
+							<select name="ordDtlStat" id="ordDtlStat">
+								<option value="G013_20" selected>결제완료</option>
+								<option value="G013_30">상품준비중</option>
+								<!-- <option value="G013_26">교환출고처지정</option>
+								<option value="G013_35">입고확정</option> -->
+								<option value="G013_55">출고완료</option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>조회일자</th>
+						<td colspan="7">
+							<select name="searchDateGb">
+								<option value="ordDt">주문일자</option>
+							</select>
+							<span id="terms"></span>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
+					</li>
+				</ul>
+				
+			</div>
+		</div>
+
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-info btn-lg" onclick="cfnDownloadSampleFile('SF018');">입점송장번호등록다운로드</button>
+				</li>
+				<li class="aR">
+					<button type="button" id="btnExcelDown" class="btn btn-info btn-lg">엑셀다운로드</button>
+					<button type="button" id="btnInvoiceExcelUpLoad" class="btn btn-success btn-lg">송장엑셀업로드</button>
+					<button type="button" id="btnSave" class="btn btn-success btn-lg">저장</button>
+				</li>
+			</ul>
+			
+			<div class="panelContent" style="overflow: hidden;">
+				<div id="gridList" style="width: 100%; height: 600px;" class="ag-theme-balham lh30"></div>
+			</div>
+		</div>
+		
+		<!-- //리스트 영역 -->
+		<label class="off">
+			<a href="javascript:void(0);" id="excelList" style="display: none;">엑셀다운로드</a>
+		</label>
+
+	</form>
+</div>
+
+<label class="off">
+	<a href="javascript:void(0);" id="hdOrderExcelList" style="display: none;">엑셀다운로드</a>
+</label>
+	
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+var sessRoleCd 		= [[${sessionInfo.roleCd}]];
+var shipCompanyList = gagajf.convertToArray([[${shipCompanyList}]]);
+
+var columnDefs = [
+	{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+	{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+	{headerName: "입점업체",			field:"supplyCompNm",		width:100, cellClass: 'text-center'},
+	{headerName: "입점업체코드",		field:"supplyCompCd",		width:100, cellClass: 'text-center', hide: true},
+	{headerName: "브랜드",			field:"brandKnm",			width:100, cellClass: 'text-center'},
+	{headerName: "상품타입",			field:"goodsTypeNm",		width:100, cellClass: 'text-center'},
+	{headerName: "상품코드",			field:"goodsCd",			width:100, cellClass: 'text-center'},
+	{headerName: "상품명",			field:"goodsNm",			width:100, cellClass: 'text-center'},
+	{headerName: "주문번호",			field:"ordNo",				width:100, cellClass: 'text-center'},
+	{headerName: "주문상세번호",		field:"ordDtlNo",			width:100, cellClass: 'text-center'},
+	{headerName: "주문상세상태",		field:"ordDtlStatNm", 		width:100, cellClass: 'text-center'},
+	{headerName: "주문자명",			field:"ordNm",				width:100, cellClass: 'text-center'},
+	{headerName: "주문일시",			field:"ordDt",				width:100, cellClass: 'text-center',
+		cellRenderer		: function (params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+		}
+	},
+	{headerName: "결제수단",			field:"payMeansNm",			width:100, cellClass: 'text-center'},
+	{headerName: "주문자휴대전화",		field:"ordPhnno",			width:100, cellClass: 'text-center'},
+	{headerName: "수령자명",			field:"recipNm",			width:100, cellClass: 'text-center'},
+	{headerName: "수령자휴대전화",		field:"recipPhnno",			width:120, cellClass: 'text-center'},
+	{headerName: "수령자우편번호",		field:"recipZipNo",			width:120, cellClass: 'text-center'},
+	{headerName: "수령자기본주소",		field:"recipBaseAddr",		width:120, cellClass: 'text-center'},
+	{headerName: "수령자상세주소",		field:"recipDtlAddr",		width:120, cellClass: 'text-center'},
+	{headerName: "업체상품코드",		field:"supplyGoodsCd",		width:100, cellClass: 'text-center'},
+	{headerName: "단품코드",			field:"itemCd",				width:100, cellClass: 'text-center'},
+	{headerName: "단품상품명",			field:"itemNm",				width:100, cellClass: 'text-center'},
+	{headerName: "칼라",				field:"optCd1",				width:100, cellClass: 'text-center'},
+	{headerName: "사이즈",			field:"optCd2",				width:100, cellClass: 'text-center'},
+	{headerName: "주문수량",			field:"itemOrdQty",			width:100, cellClass: 'text-center'},
+	{headerName: "주문금액",			field:"ordAmt",				width:100, cellClass: 'text-center'},
+	{headerName: "할인금액",			field:"totDcAmt",			width:100, cellClass: 'text-center'},
+	{headerName: "실결제금액",			field:"realOrdAmt",			width:100, cellClass: 'text-center'},
+	{headerName: "배송업체",			field:"shipCompCd",			width:150, cellClass: 'text-left'
+		, editable 			: true
+		, cellEditor		: 'agRichSelectCellEditor'
+		, cellEditorParams	: { 
+			values: gagaAgGrid.extractValues(shipCompanyList) 
+		}
+		, valueFormatter: function (params) { 
+			return gagaAgGrid.lookupValue(shipCompanyList, params.value); 
+		}
+		, valueParser: function (params) { 
+			return gagaAgGrid.lookupKey(shipCompanyList, params.newValue); 
+		}
+	},
+	{headerName: "송장",				field:"invoiceNo",			width:150, cellClass: 'text-left', editable : true}
+];
+
+var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+gridOptions.suppressRowClickSelection = true;
+gridOptions.rowSelection = 'multiple';
+gridOptions.stopEditingWhenGridLosesFocus = true;
+
+// 조회버튼
+$('#btnOrderSearch').on('click', function() {
+	fnSearch();
+});
+
+// 검색
+var fnSearch = function() {
+	var formId = '#searchForm';
+	var ordNo = $('#searchForm input[name=ordNo]').val();
+	var stDate = $('#stDate').val();
+	var edDate = $('#edDate').val();
+	
+	if (gagajf.isNull(ordNo)) {
+		if (gagajf.isNull(stDate)) {
+			mcxDialog.alert('시작 기간을 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(edDate)) {
+			mcxDialog.alert('종료 기간을 입력하세요.');
+			return;
+		}
+	}
+	
+	gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
+}
+
+// 엑셀다운로드 시 주문상태 변경
+$('#btnExcelDown').on('click', function () {
+	var selectedData = gridOptions.api.getSelectedRows();
+
+	if (selectedData.length == 0) {
+		mcxDialog.alert('선택된 행이 없습니다.');
+		return;
+	}
+	
+	mcxDialog.confirm('엑셀 다운로드 하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function(){
+			var jsonData = JSON.stringify(selectedData);
+			gagajf.ajaxJsonSubmit('/order/seller/unorder/status/save', jsonData, fnExcelDownCollback);
+		}
+	});
+});
+
+// 엑셀다운로드
+var fnExcelDownCollback = function(flag){
+	$('#excelList').attr({ href : '/order/seller/unorder/excel/list' }).get(0).click();
+}
+
+// 송장 엑셀 업로드
+$('#btnInvoiceExcelUpLoad').on('click', function() {
+	cfnExcelUploadPopup('invoiceExcelUpload', 'invoiceExcelUpload');
+});
+
+var invoiceExcelUpload = function(result){
+	mcxDialog.confirm('송장 변경을 진행하시겠습니까?', {
+		cancelBtnText	: "취소"
+		, sureBtnText	: "확인"
+		, sureBtnClick	: function(){
+			var data = {
+				procJob 		: result.procJob
+				, excelFileNm 	: result.excelFileNm
+			};
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit('/order/seller/unorder/invoice/excelupload/save', jsonData, fnInvoiceSaveCollback);
+		}
+	});	
+}
+
+// 송장번호 저장후 
+var fnInvoiceSaveCollback = function(result){
+	mcxDialog.alert(result.msg);
+	return;
+}
+
+// 송장번호 저장시
+$('#btnSave').on('click', function () {
+	var selectedData = gridOptions.api.getSelectedRows();
+
+	if (selectedData.length == 0) {
+		mcxDialog.alert('선택된 행이 없습니다.');
+		return;
+	}
+	
+	var checkFlag = false;
+	$.each(selectedData, function(idx, item) {
+		if (gagajf.isNull(item.shipCompCd)){
+			checkFlag = true;
+			mcxDialog.alert('배송업체를 선택하세요.');
+			return;
+		}
+		
+		if (gagajf.isNull(item.invoiceNo)){
+			checkFlag = true;
+			mcxDialog.alert('송장번호를 입력하세요.');
+			return;
+		}
+	});
+	
+	if (checkFlag){
+		return false;
+	}
+	
+	mcxDialog.confirm('저장 하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function(){
+			var jsonData = JSON.stringify(selectedData);
+			gagajf.ajaxJsonSubmit('/order/seller/unorder/invoice/save', jsonData, fnInvoiceSaveCollback);
+
+		}
+	});
+	
+});
+
+// 초기화 클릭시
+$('#btnInit').on('click', function() {
+	$('#searchForm')[0].reset();
+	$("#multiBrand").empty();
+});
+
+// 자사/입점 변경여부
+$("#searchForm input[name=selfYn]").bind('click change', function () {
+	var radioValue = $(this).val();
+	var selfGb = "S";	// 자사 공급 업체
+	
+	if (radioValue == "N"){
+		selfGb = "E";	//입점 공급업체
+	}
+	
+	var actionUrl = '/renderer/supply/company/list/'+ selfGb;	
+
+	$('#searchForm').find('#multiBrand').empty();
+
+	cfnCreateCombo(actionUrl, $('#searchForm select[name=supplyCompCd]'), "[전체]", "");
+});
+	
+// 업체변경시
+$('#searchForm select[name=supplyCompCd]').on('change', function() {
+	var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+	if (sessRoleCd == "G001_B000") {
+		actionUrl = '/renderer/brand/AuthBrandlist';
+	}
+	
+	cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
+});
+
+//초기설정
+$(document).ready(function() {
+	// 달력기능 활성화
+	cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '주문');
+	gagaAgGrid.createGrid('gridList', gridOptions);
+	gridOptions.api.hideOverlay();
+});
+
+</script>
+
+</html>
+
+
+
+
+

+ 127 - 0
src/main/webapp/WEB-INF/views/order/RefundAccountRegistForm.html

@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderListForm.html
+ * @desc    : 주문목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.04   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>환불계좌정보</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCreateRefundAccount');"><i class="fa fa-times"></i></button>
+		</div>
+
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="orderRefundAccontForm">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col />
+						<col />
+						<col />
+						<col />
+						<col />
+						<col />
+					</colgroup>
+					<tbody>
+					<tr>
+						<th>은행</th>
+						<td>
+							<select name="bankCd">
+								<option value="">[선택하세요]</option>
+								<option th:if="${bankList}" th:each="oneData, status : ${bankList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>계좌번호</th>
+						<td><input type="text" name="accountNo" data-valid-type="numeric"></td>
+						<th>예금주</th>
+						<td><input type="text" name="accountNm"></td>
+						</th:block>
+						<td>
+							<button type="button" class="btn btn-success" id="saveAccountBtn" onclick="fnSaveAccount();">저장</button>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	/* 이벤트 바인딩 관련 */
+	var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
+	var ordNo 					= orderInfoList[0].ordNo;
+	var custNo 					= orderInfoList[0].custNo;
+
+	/* 환불계좌번호 저장 */
+	var fnSaveAccount = function(){
+		var bankCd 		= $("#orderRefundAccontForm select[name=bankCd]").val();
+		var accountNo 	= $("#orderRefundAccontForm input[name=accountNo]").val();
+		var accountNm 	= $("#orderRefundAccontForm input[name=accountNm]").val();
+
+		if (gagajf.isNull(bankCd)) {
+			mcxDialog.alert('은행을 선택하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(accountNo)) {
+			mcxDialog.alert('계좌번호를 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(accountNm)) {
+			mcxDialog.alert('예금주를 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(ordNo) || gagajf.isNull(custNo)) {
+			mcxDialog.alert('주문정보를 다시 확인하시기 바랍니다..');
+			return;
+		}
+
+		mcxDialog.confirm("환불계좌를 저장하시겠습니까?", {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function(){
+				var data = {};
+				data.ordNo 			= ordNo;
+				data.custNo 		= custNo;
+				data.bankCd 		= bankCd;
+				data.accountNo 		= accountNo;
+				data.accountNm 		= accountNm;
+
+				var jsonData = JSON.stringify(data);
+
+				gagajf.ajaxJsonSubmit('/order/account/save', jsonData, function(result){
+					uifnPopupClose('popupCreateRefundAccount');
+					fnBindOrderRfAccountInfo();
+				});
+			}
+		});
+	};
+
+	$(document).ready(function() {
+
+
+	});
+
+	/*]]>*/
+</script>
+
+</html>
+
+
+
+
+