فهرست منبع

Merge branch 'develop' into xyzp1539

xyzp1539 5 سال پیش
والد
کامیت
5a80e8b677
23فایلهای تغییر یافته به همراه1543 افزوده شده و 559 حذف شده
  1. 18 2
      src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java
  2. 8 1
      src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java
  3. 1 1
      src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java
  4. 22 2
      src/main/java/com/style24/admin/biz/service/TsaDisplayService.java
  5. 13 0
      src/main/java/com/style24/admin/biz/service/TsaOrderService.java
  6. 0 1
      src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java
  7. 29 3
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  8. 39 2
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  9. 15 0
      src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  10. 0 26
      src/main/java/com/style24/admin/support/env/TsaConstants.java
  11. 7 0
      src/main/java/com/style24/persistence/domain/GoodsCategory.java
  12. 2 0
      src/main/java/com/style24/persistence/domain/Order.java
  13. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  14. 188 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  15. 45 12
      src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
  16. 261 100
      src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html
  17. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsListForm.html
  18. 15 48
      src/main/webapp/WEB-INF/views/order/CancelRequestForm.html
  19. 77 197
      src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  20. 5 100
      src/main/webapp/WEB-INF/views/order/OrderListForm.html
  21. 766 0
      src/main/webapp/WEB-INF/views/order/OrderListFormBack.html
  22. 15 49
      src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html
  23. 15 12
      src/main/webapp/ux/plugins/gaga/gaga.paging.js

+ 18 - 2
src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java

@@ -3,8 +3,7 @@ package com.style24.admin.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Category;
-import com.style24.persistence.domain.ItemkindCategory;
+import com.style24.persistence.domain.*;
 
 /**
  * 전시 Dao
@@ -136,4 +135,21 @@ public interface TsaDisplayDao {
 	 */
 	Collection<ItemkindCategory> getItemkindCategoryMappingList(String itemkindCd);
 
+	/**
+	 * 상품별카테고리전시관리 목록 건수 조회
+	 * @param goodsCategory
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 15
+	 */
+	int getGoodsCategoryListCount(GoodsCategory goodsCategory);
+
+	/**
+	 * 상품별카테고리전시관리 목록 조회
+	 * @param goodsCategory
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 15
+	 */
+	Collection<Goods> getGoodsCategoryList(GoodsCategory goodsCategory);
 }

+ 8 - 1
src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java

@@ -330,7 +330,14 @@ public interface TsaOrderDao {
 	 */
 	int changedOrdDtlStat(Order order);
 
-
+	/**
+	 * 배송 > 배송지 정보 수정
+	 *
+	 * @param deliveryAddr
+	 * @author jsh77b
+	 * @since 2021. 01. 15
+	 */
+	void updateOrderAddr(Order order);
 
 
 

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

@@ -13,7 +13,7 @@ import com.style24.admin.support.security.session.TsaSession;
 import com.style24.admin.support.util.TsitUtil;
 
 import com.style24.persistence.domain.Delivery;
-import com.style24.admin.support.env.TsaConstants.OrderDetailStat;
+import com.style24.core.support.env.TscConstants.OrderDetailStat;
 import com.style24.admin.support.env.TsaConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 

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

@@ -2,6 +2,7 @@ package com.style24.admin.biz.service;
 
 import java.util.Collection;
 
+import com.style24.persistence.domain.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
@@ -9,8 +10,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.admin.biz.dao.TsaDisplayDao;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.persistence.domain.Category;
-import com.style24.persistence.domain.ItemkindCategory;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -157,4 +156,25 @@ public class TsaDisplayService {
 		return displayDao.getItemkindCategoryMappingList(itemkindCd);
 	}
 
+	/**
+	 * 상품별카테고리전시관리 목록 건수 조회
+	 * @param goodsCategory
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 15
+	 */
+	public int getGoodsCategoryListCount(GoodsCategory goodsCategory) {
+		return displayDao.getGoodsCategoryListCount(goodsCategory);
+	}
+
+	/**
+	 * 상품별카테고리전시관리 목록 조회
+	 * @param goodsCategory
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 15
+	 */
+	public Collection<Goods> getGoodsCategoryList(GoodsCategory goodsCategory) {
+		return displayDao.getGoodsCategoryList(goodsCategory);
+	}
 }

+ 13 - 0
src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -538,5 +538,18 @@ public class TsaOrderService {
 			orderDao.createOrderDetailHst(order);
 		}
 	}
+	
+	/**
+	 * 배송 > 배송지 정보 수정
+	 *
+	 * @param Order - 배송지 정보
+	 * @author jsh77b
+	 * @since 2021. 01. 15
+	 */
+	@Transactional("shopTxnManager")
+	public void updateOrderAddr(Order order) {
+		order.setUpdNo(TsaSession.getInfo().getUserNo());;
+		orderDao.updateOrderAddr(order);
+	}
 
 }

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

@@ -32,7 +32,6 @@ import com.style24.persistence.domain.Withdraw;
 
 
 import com.style24.admin.support.env.TsaConstants;
-import com.style24.admin.support.env.TsaConstants.OrderDetailStat;
 //import com.style24.admin.support.env.TsaConstants.OrderStat;
 //import com.style24.admin.support.env.TsaConstants.PayMeans;
 //import com.style24.admin.support.env.TsaConstants.PaymentStat;

+ 29 - 3
src/main/java/com/style24/admin/biz/web/TsaDisplayController.java

@@ -2,8 +2,11 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.util.GagaDateUtil;
-import com.style24.persistence.domain.Brand;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -18,8 +21,6 @@ import com.style24.admin.biz.service.TsaDisplayService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.domain.Category;
-import com.style24.persistence.domain.ItemkindCategory;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -236,9 +237,34 @@ public class TsaDisplayController extends TsaBaseController {
 		// 시즌
 		mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
 
+		// 카테고리 등록/수정
+		mav.addObject("cateGbList", rendererService.getAvailCommonCodeList("G032"));
+
 		mav.setViewName("display/GoodsCategoryForm");
 
 		return mav;
 	}
 
+	/**
+	 * 상품별카테고리전시관리 조회
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 15
+	 */
+	@PostMapping("/goods/category/list")
+	@ResponseBody
+	public GagaMap getGoodsCategoryList(@RequestBody GoodsCategory goodsCategory) {
+		GagaMap result = new GagaMap();
+		log.info("[getGoodsCategoryList GoodsCategory]{}",goodsCategory);
+
+		goodsCategory.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		goodsCategory.setPageable(new TscPageRequest(goodsCategory.getPageNo() - 1, goodsCategory.getPageSize()));
+		goodsCategory.getPageable().setTotalCount(displayService.getGoodsCategoryListCount(goodsCategory));
+
+		result.set("pageing", goodsCategory);
+		result.set("goodsCategoryList", displayService.getGoodsCategoryList(goodsCategory));
+
+		return result;
+	}
+
 }

+ 39 - 2
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -21,6 +21,7 @@ import com.style24.admin.biz.service.TsaOrderService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
@@ -325,8 +326,44 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
-	
-	
+
+	/**
+	 * 교환요청 화면
+	 *
+	 * @param ordNo - 주문번호
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 01. 14
+	 */
+	@GetMapping("/exchange/request/form")
+	public ModelAndView exchangeRequestFrom(@RequestParam(value = "ordNo") int ordNo) {
+
+		Order order = new Order();
+		ModelAndView mav = new ModelAndView();
+
+		order.setOrdNo(ordNo);
+
+		// 교환가능 주문상세상탭값 설정
+		String[] ordDtlStatArr = new String[3];
+		ordDtlStatArr[0] = TscConstants.OrderDetailStat.SHIPPING.value();
+		ordDtlStatArr[1] = TscConstants.OrderDetailStat.SHIP_COMPLETE.value();
+		ordDtlStatArr[2] = TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value();
+		order.setOrdDtlStatArr(ordDtlStatArr);
+
+		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
+
+		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
+
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 반품사유
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 반품요청대상 목록
+		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
+		mav.addObject("ordNo"						, ordNo);
+		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));			// 배송정보
+
+		mav.setViewName("order/ReturnRequestForm");
+
+		return mav;
+	}
 }
 
 

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

@@ -601,6 +601,21 @@ public class TsaOrderController extends TsaBaseController {
 
 		return super.ok("성공");
 	}
+	
+	/**
+	 * 배송 > 배송지 정보 수정
+	 *
+	 * @param deliveryAddr - 배송지정보
+	 * @return GagaResponse
+	 * @author jsh77b
+	 * @since 2021. 01. 15
+	 */
+	@PostMapping("/deliver/addr/update")
+	@ResponseBody
+	public GagaResponse udpateDeliveryAddrUpdate(@RequestBody Order order) {
+		orderService.updateOrderAddr(order);
+		return super.ok("수정이 완료되었습니다.");
+	}
 }
 
 

+ 0 - 26
src/main/java/com/style24/admin/support/env/TsaConstants.java

@@ -26,32 +26,6 @@ public class TsaConstants {
 		}
 	}
 
-	// 주문상세상태
-	public enum OrderDetailStat {
-		DEPOSIT_WAIT("G013_10"),			// 입금대기
-		ORDER_WAIT_PRICE("G013_18"),		// 발주대기-가격차이
-		ORDER_WAIT_POST("G013_19"),			// 발주대기-우편번호상이
-		PAYMENT_COMPLETE("G013_20"),		// 결제완료
-		GOODS_PREPARE("G013_30"),			// 상품준비중
-		DELIVERY_PREPARE("G013_40"),		// 배송준비중
-		SHIPPING("G013_50"),				// 배송중
-		SHIP_COMPLETE("G013_55"),			// 출고완료
-		DELIVERY_COMPLETE("G013_60"),		// 배송완료
-		//PURCHASE_CONFIRM("70"),			// 구매확정
-		PAYMENT_BEFORE_CANCEL("G013_98"),	// 결제전주문취소
-		PAYMENT_AFTER_CANCEL("G013_99");	// 결제후주문취소
-
-		private String value;
-
-		private OrderDetailStat(String value) {
-			this.value = value;
-		}
-
-		public String value() {
-			return value;
-		}
-	}
-	
 	// 몰구분
 	public enum MallGb {
 		SELFMALL("G011_10"),			// 자사몰

+ 7 - 0
src/main/java/com/style24/persistence/domain/GoodsCategory.java

@@ -3,6 +3,7 @@ package com.style24.persistence.domain;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -90,4 +91,10 @@ public class GoodsCategory extends TscBaseDomain {
 	private String[] goodsCdList;
 
 	private String goodsCds;
+
+	// Pagination
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
 }

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

@@ -168,6 +168,8 @@ public class Order extends TscBaseDomain {
 	private String recipDtlAddr;
 	private String ordEmail;
 	private String delvMemo;
+	private String delvAddrEditYn;
+	private String exchGbNm;
 	
 	private String escrowYn;
 	private String payMeansNm;

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

@@ -588,7 +588,7 @@
 		     , UPD_DT
 		)
 		VALUES (
-		       (SELECT CONCAT(#{brandGb},IFNULL(LPAD(CAST(SUBSTRING(MAX(BRAND_CD),2) AS UNSIGNED) + 1,3,'0'),'000'))
+		       (SELECT CONCAT(#{brandGb},IFNULL(LPAD(CAST(SUBSTRING(MAX(BRAND_CD),2) AS UNSIGNED) + 1,4,'0'),'0000'))
 		        FROM   TB_BRAND Z
 		        WHERE  BRAND_CD LIKE CONCAT(#{brandGb},'%')
 		       )

+ 188 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -550,5 +550,192 @@
 		AND    IC.ITEMKIND_CD = #{itemkindCd}
 		ORDER  BY C4.CATE_GB, C4.LEAF_CATE_NO
 	</select>
-	
+
+	<!-- 상품별카테고리전시관리 목록 건수 조회 -->
+	<select id="getGoodsCategoryListCount" parameterType="GoodsCategory" resultType="int">
+		/* TsaDisplay.getGoodsCategoryListCount */
+		SELECT  COUNT(*) AS TOTCNT
+		FROM	TB_GOODS G
+		WHERE	1=1
+		<if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
+			<include refid="getGoodsCategoryListCondition_sql"/>
+		</if>
+	</select>
+
+	<!-- 상품별카테고리전시관리 목록 조회 -->
+	<select id="getGoodsCategoryList" parameterType="GoodsCategory" resultType="Goods">
+		SELECT	Z.*
+		FROM	(
+			SELECT	@rownum := @rownum + 1 AS RNUM
+					,A.*
+					, CASE WHEN A.GOODS_TYPE = 'G056_S' THEN (SELECT NVL(SUM(CURR_STOCK_QTY), 0) - NVL(SUM(BASE_STOCK_QTY), 0) AS CURR_STOCK_QTY FROM VW_STOCK_COMPOSE WHERE GOODS_CD = A.GOODS_CD)
+					ELSE (SELECT NVL(SUM(CURR_STOCK_QTY), 0) - NVL(SUM(BASE_STOCK_QTY), 0) AS CURR_STOCK_QTY FROM VW_STOCK WHERE GOODS_CD = A.GOODS_CD)
+					END AS CURR_STOCK_QTY
+			FROM	(
+				SELECT	G.GOODS_CD
+						, G.GOODS_NM
+						, G.DC_RATE
+						, G.TAG_PRICE
+						, G.LIST_PRICE
+						, G.CURR_PRICE
+						, G.GOODS_TYPE
+						, G.PNT_PRATE
+						, G.PRE_PPNT_USABLE_YN
+						, G.PNT_MRATE
+						, G.PRE_MPNT_USABLE_YN
+						, G.ERP_STOCK_LINK_YN
+						, G.ERP_PRICE_LINK_YN
+						, G.FORMAL_GB
+						, G.SELF_GOODS_YN
+						, G.REG_DT
+						, G.SUPPLY_GOODS_CD
+						, G.SUPPLY_COMP_CD
+						, G.BRAND_CD
+						, G.ITEMKIND_CD
+						, G.GOODS_STAT
+						, G.STYLE_YEAR
+						, G.SEASON_CD
+						, (SELECT BRAND_GRP_NM FROM TB_BRAND WHERE BRAND_CD = G.BRAND_CD) AS BRAND_GRP_NM
+						, (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+				FROM	TB_GOODS G
+				JOIN ( SELECT @rownum := 0) R
+				WHERE 1=1
+				<include refid="getGoodsCategoryListCondition_sql"/>
+				ORDER BY G.REG_DT DESC, G.GOODS_CD
+			<include refid="getListPagingCondition_sql"/>
+	</select>
+
+	<sql id="getListPagingCondition_sql">
+		<choose>
+			<when test="pageable != null">
+				) A
+				)Z
+				WHERE RNUM BETWEEN  #{pageable.startRow} AND #{pageable.endRow}
+			</when>
+			<otherwise>
+				) A
+				)Z
+			</otherwise>
+		</choose>
+	</sql>
+
+	<sql id="getGoodsCategoryListCondition_sql">
+		<if test='goodsCd != null and goodsCd != ""'>
+			AND UPPER(G.GOODS_CD) LIKE CONCAT('%',UPPER(#{goodsCd}),'%')
+		</if>
+		<if test='supplyGoodsCd != null and supplyGoodsCd != ""'>
+			AND G.SUPPLY_GOODS_CD = #{supplyGoodsCd}
+		</if>
+		<if test='goodsNm != null and goodsNm != ""'>
+			AND UPPER(G.GOODS_NM) LIKE CONCAT('%',UPPER(#{goodsNm}),'%')
+		</if>
+		<if test='goodsStat != null and goodsStat != ""'>
+			AND G.GOODS_STAT = #{goodsStat}
+		</if>
+		<if test="supplyCompCd != null and supplyCompCd != ''">
+			AND G.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
+		<if test="mdId != null and mdId != ''">
+			AND EXISTS (
+			SELECT BRAND_CD
+			FROM TB_BRAND_MD
+			WHERE MD_NO = #{mdId}
+			AND BRAND_CD = G.BRAND_CD
+			)
+		</if>
+		<if test="brandCd != null and brandCd != ''">
+			AND G.BRAND_CD = #{brandCd}
+		</if>
+		<if test="itemkindCd != null and itemkindCd != ''">
+			AND G.ITEMKIND_CD = #{itemkindCd}
+		</if>
+		<if test="formalGb != null and formalGb != ''">
+			AND G.FORMAL_GB = #{formalGb}
+		</if>
+		<!--<if test="currStockQty != null and currStockQty != ''">
+			AND EXISTS (
+			SELECT 1 FROM(
+			SELECT NVL(SUM(CURR_STOCK_QTY), 0) - NVL(SUM(BASE_STOCK_QTY), 0) AS CURR_STOCK_QTY
+			FROM VW_STOCK WHERE GOODS_CD = A.GOODS_CD
+			)
+			WHERE CURR_STOCK_QTY >= #{currStockQty}
+			)
+		</if>--> <!-- 자사/입점일때 따로 테이블 찾아야함..일단 패스 -->
+		<if test="styleYear != null and styleYear != ''">
+			AND G.STYLE_YEAR = #{styleYear}
+		</if>
+		<if test="seasonCd != null and seasonCd != ''">
+			AND G.SEASON_CD = #{seasonCd}
+		</if>
+		<if test="currPriceSt != null and currPriceSt != ''">
+			AND G.CURR_PRICE >= #{currPriceSt}
+		</if>
+		<if test="currPriceEd != null and currPriceEd != ''">
+			<![CDATA[
+			AND G.CURR_PRICE <= #{currPriceEd}
+			]]>
+		</if>
+		<if test='soldoutYn != null and soldoutYn == "Y"'>
+			AND EXISTS (
+			SELECT GOODS_CD
+			FROM VW_STOCK
+			WHERE SOLDOUT_YN = 'Y'
+			AND GOODS_CD = G.GOODS_CD
+			)
+		</if>
+		<if test='soldoutYn != null and soldoutYn == "N"'>
+			AND NOT EXISTS (
+			SELECT GOODS_CD
+			FROM VW_STOCK
+			WHERE SOLDOUT_YN = 'Y'
+			AND GOODS_CD = G.GOODS_CD
+			)
+		</if>
+		<if test="changeableYn != null and changeableYn != ''">
+			AND G.CHANGEABLE_YN = #{changeableYn}
+		</if>
+		<if test="returnableYn != null and returnableYn != ''">
+			AND G.RETURNABLE_YN = #{returnableYn}
+		</if>
+		<if test="returnFeeFreeYn != null and returnFeeFreeYn != ''">
+			AND G.RETURN_FEE_FREE_YN = #{returnFeeFreeYn}
+		</if>
+		<if test="changeFeeFreeYn != null and changeFeeFreeYn != ''">
+			AND G.CHANGE_FEE_FREE_YN = #{changeFeeFreeYn}
+		</if>
+		<if test="dcRateSt != null and dcRateSt != ''">
+			AND G.DC_RATE >= #{dcRateSt}
+		</if>
+		<if test="dcRateEd != null and dcRateEd != ''">
+			<![CDATA[
+			AND G.DC_RATE <= #{dcRateEd}
+			]]>
+		</if>
+		<if test="stDate != null and stDate != ''">
+			AND G.REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		</if>
+		<if test="edDate != null and edDate != ''">
+			<![CDATA[
+			AND G.REG_DT < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+			]]>
+		</if>
+		<if test="dispYn != null and dispYn != ''">
+			<choose>
+				<when test='dispYn == "Y"'>
+					AND EXISTS
+					( SELECT 1
+					FROM TB_CATE_GOODS
+					WHERE GOODS_CD = G.GOODS_CD
+					)
+				</when>
+				<when test='dispYn == "N"'>
+					AND NOT EXISTS
+					( SELECT 1
+					FROM TB_CATE_GOODS
+					WHERE GOODS_CD = G.GOODS_CD
+					)
+				</when>
+			</choose>
+		</if>
+	</sql>
 </mapper>

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

@@ -215,6 +215,10 @@
 				     , OD.SOLDOUT_MEMO
 				     , DATE_FORMAT(OD.SOLDOUT_REG_DT,'%Y%m%d%H%i%S') AS SOLDOUT_REG_DT 
 				     , OD.SOLDOUT_REG_NO     
+		             , CASE WHEN OD.ORD_EXCH_GB = 'O'
+			                THEN '주문'
+			                ELSE '교환'
+			                END   EXCH_GB_NM 
 				FROM   TB_ORDER O
 				INNER  JOIN TB_ORDER_DETAIL OD
 				ON     O.ORD_NO = OD.ORD_NO
@@ -457,6 +461,10 @@
 	<select id="getOrderDetailList" parameterType="Order" resultType="Order">
 		/* order.getOrderDetailList */
 		SELECT OD.ORD_NO
+		     , CASE WHEN OD.ORD_EXCH_GB = 'O'
+			        THEN '주문'
+			        ELSE '교환'
+			        END   EXCH_GB_NM 
 		     , OD.ORD_DTL_NO
 		     , G1.GOODS_CD 
 		     , G1.GOODS_NM
@@ -505,6 +513,7 @@
 		     , X.G50
 		     , X.G55
 		     , X.G60
+		     , OD.DELV_ADDR_SQ
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -598,9 +607,28 @@
 	<!-- 주문상세 > 배송정보 -->
 	<select id="getDeliveryAddrList" parameterType="Order" resultType="Order">
 		/* order.getDeliveryAddrList */
-		SELECT Z.*
+		SELECT Z.DELV_ADDR_SQ
+		     , SUM(Z.DELV_ADDR_EDIT_YN) AS DELV_ADDR_EDIT_YN
+		     , Z.EXCH_GB_NM
+		     , Z.RECIP_NM
+		     , Z.RECIP_PHNNO
+		     , Z.RECIP_TELNO
+		     , Z.RECIP_ZIP_NO
+		     , Z.RECIP_BASE_ADDR
+		     , Z.RECIP_DTL_ADDR
+		     , Z.ORD_EMAIL
+		     , Z.DELV_MEMO
 		FROM   (
-			SELECT OD.DELV_ADDR_SQ 
+			SELECT OD.DELV_ADDR_SQ
+			     , CASE WHEN ORD_DTL_STAT IN ('G013_10', 'G013_20', 'G013_30', 'G013_40')
+			            THEN 0
+			            ELSE 1
+			            END DELV_ADDR_EDIT_YN
+			     , OD.ORD_EXCH_GB
+			     , CASE WHEN OD.ORD_EXCH_GB = 'O'
+			            THEN '주문'
+			            ELSE '교환'
+			            END   EXCH_GB_NM 
 			     , DA.RECIP_NM 
 			     , DA.RECIP_PHNNO 
 			     , DA.RECIP_TELNO 
@@ -616,15 +644,6 @@
 			ON     OD.DELV_ADDR_SQ  = DA.DELV_ADDR_SQ
 			WHERE  1=1
 			AND    OD.ORD_NO = #{ordNo}
-			GROUP  BY OD.DELV_ADDR_SQ 
-			     , DA.RECIP_NM 
-			     , DA.RECIP_PHNNO 
-			     , DA.RECIP_TELNO 
-			     , DA.RECIP_ZIP_NO 
-			     , DA.RECIP_BASE_ADDR
-			     , DA.RECIP_DTL_ADDR
-			     , O.ORD_EMAIL
-			     , DA.DELV_MEMO
 		) Z
 		ORDER  BY Z.DELV_ADDR_SQ
 	</select>
@@ -1519,7 +1538,21 @@
 		AND    ORD_DTL_NO = #{ordDtlNo}
 	</update>
 	
-
+	<!-- 배송 > 배송지 정보 수정 -->
+	<update id="updateOrderAddr" parameterType="Order">
+		/* order.updateOrderAddr : 주문 변경 업데이트(주문자 주소) */
+		UPDATE TB_DELIVERY_ADDR
+		SET    RECIP_NM        = #{recipNm}
+		     , RECIP_PHNNO     = #{recipPhnno}
+		     , RECIP_TELNO     = #{recipTelno}
+		     , RECIP_ZIP_NO    = #{recipZipNo}
+		     , RECIP_BASE_ADDR = #{recipBaseAddr}
+		     , RECIP_DTL_ADDR  = #{recipDtlAddr}
+		     , DELV_MEMO       = #{delvMemo}
+		     , UPD_NO          = #{updNo}
+		     , UPD_DT          = SYSDATE()
+		WHERE  DELV_ADDR_SQ = #{delvAddrSq}
+	</update>
 
 
 

+ 261 - 100
src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
+	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
  * @source  : GoodsCategoryForm.html
@@ -14,21 +14,26 @@
  * 1.0  2021.01.13   bin2107     최초 작성
  *******************************************************************************
  -->
-	<div id="main">
-		<!-- 메인타이틀 영역 -->
-		<div class="main-title">
-		</div>
-		<!-- //메인타이틀 영역 -->
-		
-		<!-- 메뉴 설명 -->
-		<div class="infoBox menu-desc">
-		</div>
-		<!-- //메뉴 설명 -->
-		
-		<!-- 검색조건 영역 -->
-		<div class="panelStyle">
-			<form id="goodsCateForm" name="goodsCateForm" action="#" th:action="@{'/display/goods/category/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
-				<table class="frmStyle" aria-describedby="검색조건">
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	<form id="goodsSearchForm" name="goodsSearchForm" action="#" th:action="@{'/display/goods/category/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>중 하나를 꼭 입력해 주세요.</h3>
+			</div>
+			<!-- //TITLE -->
+			<div class="panelContent">
+				<table class="frmStyle">
 					<colgroup>
 						<col width="7%"/>
 						<col width="18%"/>
@@ -153,16 +158,16 @@
 				</table>
 				<ul class="panelBar">
 					<li class="center">
-						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
-						<button type="button" class="btn btn-gray btn-lg" onclick="$('#goodsCateForm')[0].reset();">초기화</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#goodsSearchForm')[0].reset();" >초기화</button>
+						<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
 					</li>
 				</ul>
-			</form>
+			</div>
+			<!-- //검색조건 영역 -->
 		</div>
-		<!-- 검색조건 영역 -->
-
-		<!-- 리스트 영역 -->
+		<!-- 패널 영역1 -->
 		<div class="panelStyle">
+			<!-- 검색결과 영역 -->
 			<!-- 상단버튼 영역  -->
 			<ul class="panelBar">
 				<li>
@@ -185,100 +190,256 @@
 			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham lh60"></div>
 			<ul class="panelBar">
 				<li class="center">
-					<div class="tablePaging" id="goodsListPagination"></div>
+					<div class="tablePaging" id="goodsCategoryListPagination"></div>
 				</li>
 			</ul>
 		</div>
-		<!-- //리스트 영역 -->
-		
-		<!-- 등록/수정 -->
-		<div class="panelStyle">
-			<form id="detailForm" name="detailForm" action="#" th:action="@{'/display/category/save'}">
-				<table class="frmStyle" aria-describedby="등록/수정 폼">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:23%;"/>
-						<col style="width:10%;"/>
-						<col style="width:23%;"/>
-						<col style="width:10%;"/>
-						<col/>
-					</colgroup>
-
-				</table>
-			</form>
-			
-			<!-- 버튼 배치 영역 -->
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
-					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
-					<button type="button" class="btn btn-base btn-lg" id="btnRefresh4Srch" th:if="${sessionInfo.roleCd == 'G001_0000'}">4SRCH 갱신</button>
-				</li>
-			</ul>
-			<!-- //버튼 배치 영역 -->
-		</div>
-		<!-- 등록/수정 -->
+	</form>
+	<!-- //패널 영역2 등록/수정 -->
+	<div class="panelStyle">
+		<form id="goodsCateForm" name="goodsCateForm" action="#" th:action="@{'/display/goods/category/save'}">
+			<table class="frmStyle">
+				<colgroup>
+					<col style="width:20%;"/>
+					<col style="width:20%;"/>
+					<col style="width:20%;"/>
+					<col style="width:20%;"/>
+					<col style="width:20%;"/>
+				</colgroup>
+				<tr>
+					<th>카테고리구분</th>
+					<th>카테고리1</th>
+					<th>카테고리2</th>
+					<th>카테고리3</th>
+					<th>카테고리4</th>
+				</tr>
+				<th:block th:each="num, index  : ${#numbers.sequence(1,4)}">
+					<tr>
+						<input type="hidden" name="selLvl" th:id="selLvl_+${num}"/>
+						<td>
+							<select name="cateGb" th:id="selCate1_+${num}" th:idx="${num}" th:onchange="|fnChangeSelect($(this).val(), ${num}, 1);|">
+								<option value="">[선택]</option>
+								<option th:if="${cateGbList}" th:each="oneData, status : ${cateGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<td>
+							<select name="cate1No" th:id="selCate2_+${num}" th:onchange="|fnChangeSelect($(this).val(), ${num}, 2);|">
+								<option value="">[선택]</option>
+							</select>
+						</td>
+						<td>
+							<select name="cate2No" th:id="selCate3_+${num}" th:onchange="|fnChangeSelect($(this).val(), ${num}, 3);|">
+								<option value="">[선택]</option>
+							</select>
+						</td>
+						<td>
+							<select name="cate3No" th:id="selCate4_+${num}" th:onchange="|fnChangeSelect($(this).val(), ${num}, 4);|">
+								<option value="">[선택]</option>
+							</select>
+						</td>
+						<td>
+							<select name="cate4No" th:id="selCate5_+${num}" th:onchange="|fnChangeSelect($(this).val(), ${num}, 5);|">
+								<option value="">[선택]</option>
+							</select>
+							<input type="hidden" th:id='cateCd+${num}' name='cateCdArr' value='' />
+							<input type="hidden" th:id='cateGb+${num}' name='cateGbArr' value='' />
+							<input type="hidden" th:id='leafYn+${num}' value='' />
+							<input type="hidden" th:id='cateType+${num}' name='cateTypeArr' value='' />
+						</td>
+					</tr>
+				</th:block>
+			</table>
+		</form>
 	</div>
 
-<script th:inline="javascript">
-/*<![CDATA[*/
-	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=""  onerror="this.src=\'/image/no.gif\';"/>';
-			}
-		},
-		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'
-			,cellRenderer: function(params) {
-				return '<a href="javascript:void(0);">' + params.value + '</a>';
+
+	<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+	<script th:inline="javascript">
+		/*<![CDATA[*/
+		var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
+		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('goodsSearchForm',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=""  onerror="this.src=\'/image/no.gif\';"/>';
+				}
+			},
+			{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
+			{headerName: "상품명", field: "goodsNm", width: 350, cellClass: 'text-left'
+				,cellRenderer: function(params) {
+					return '<a href="javascript:void(0);">' + params.value + '</a>';
+				}
+			},
+			{headerName: "할인율", field: "dcRate", width: 80, cellClass: 'text-right'},
+			{
+				headerName: "판매가", field: "currPrice", width: 100, cellClass: 'text-right',
+				valueFormatter: function(params) {
+					return Number(params.value).addComma();
+				}
+			},
+			{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: "currStockQty", width: 100, cellClass: 'text-right'}, // 추후 추가해야함 ㅠㅠ
+			//{headerName: "품절여부", field: "soldoutYn", width: 80, cellClass: 'text-center'}, // 추후 추가해야함 ㅠㅠ
+			{headerName: "기존품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center' }
+			/*{headerName: "품목명", field: "itemkindNm", width: 250, cellClass: 'text-left'},
+            {headerName: "기존품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center' },
+            {headerName: "변경품목코드", field: "itemkindCdNew", width: 150, cellClass: 'text-center', editable : true,
+                cellEditor: 'textCellEditor',
+                cellEditorParams: { maxlength: 5, required: true, onblur: '$(this).val($(this).val().toUpperCase())' }
+            }*/
+		];
+
+		// Get GridOptions
+		var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+		// 중복 선택 가능
+		gridOptions.rowSelection = 'multiple';
+		gridOptions.suppressRowClickSelection = true;
+		gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+
+		gridOptions.stopEditingWhenGridLosesFocus = true;
+
+		// 조회
+		$('#btnSearch').on('click', function() {
+			if(gagajf.isNull($("#goodsSearchForm select[name=supplyCompCd]").val())
+					&& gagajf.isNull($("#goodsSearchForm input[name=goodsCd]").val())
+					&& (gagajf.isNull($("#goodsSearchForm input[name=stDate]").val()) && gagajf.isNull($("#goodsSearchForm input[name=edDate]").val()))){
+				mcxDialog.alert('검색조건을 입력해 주세요.');
+				return;
 			}
-		},
-		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
-		{headerName: "품목명", field: "itemkindNm", width: 250, cellClass: 'text-left'},
-		{headerName: "기존품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center' },
-		{headerName: "변경품목코드", field: "itemkindCdNew", width: 150, cellClass: 'text-center', editable : true,
-			cellEditor: 'textCellEditor',
-			cellEditorParams: { maxlength: 5, required: true, onblur: '$(this).val($(this).val().toUpperCase())' }
-		}
-	];
 
-	// Get GridOptions
-	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+			$('#goodsSearchForm input[name=changeableYn]').val($("#changeableYn").prop('checked')? 'N':'');
+			$('#goodsSearchForm input[name=returnableYn]').val($("#returnableYn").prop('checked')? 'N':'');
+			$('#goodsSearchForm input[name=returnFeeFreeYn]').val($("#returnFeeFreeYn").prop('checked')? 'Y':'');
+			$('#goodsSearchForm input[name=changeFeeFreeYn]').val($("#changeFeeFreeYn").prop('checked')? 'Y':'');
+			$("#goodsSearchForm input[name=searchGb]").val("BASIC");
+			fnSearch();
+		});
 
-	// 중복 선택 가능
-	gridOptions.rowSelection = 'multiple';
-	gridOptions.suppressRowClickSelection = true;
-	gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+		$("#pageSize").on("change", function(){
+			var rowCnt = gridOptions.api.getDisplayedRowCount();
+			if(rowCnt > 0){
+				fnSearch();
+			}
+		});
 
-	gridOptions.stopEditingWhenGridLosesFocus = true;
+		var fnSearch = function(){
+			gagaPaging.init('goodsSearchForm', fnSearchCallBack, 'goodsCategoryListPagination', $('#goodsSearchForm').find('#pageSize').val());
+			gagaPaging.load(1);
+		};
 
-	// 업체변경시
-	$('#goodsCateForm select[name=supplyCompCd]').on('change', function() {
-		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+		var fnSearchCallBack = function(result){
 
-		if(sessRoleCd == "G001_B000"){
-			actionUrl = '/renderer/brand/AuthBrandlist';
+			$('#goodsSearchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+			$('#goodsSearchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
+			$('#goodsSearchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+			$('#goodsSearchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+			gridOptions.api.setRowData(result.goodsCategoryList);
+			gagaPaging.createPagination(result.pageing.pageable);
 		}
-		$("#goodsCateForm select[name=brandCd] option:gt(0)").remove();
 
-		cfnCreateCombo(actionUrl, $('#goodsCateForm select[name=brandCd]'), "[전체]", "");
-	});
+		// 카테고리 selectBox 변경
+		var fnChangeSelect = function(val, cateIndex, selLvl){
+			console.log('val:::'+val);
+			console.log('cateIndex:::'+cateIndex);
+			console.log('selLvl:::'+selLvl);
+			$("#cateCd"+cateIndex).val('');
+			$("#cateGb"+cateIndex).val('');
+			$("#leafYn"+cateIndex).val('');
+
+			if (gagajf.isNull(val)) {
+				if (selLvl > 1) {
+					selLvl = selLvl - 1;
+					if(selLvl>1){
+						$("#cateCd"+cateIndex).val($("#selCate"+cateIndex+''+(selLvl-1)).val().split(',')[0]);
+						$("#leafYn"+cateIndex).val($("#selCate"+cateIndex+''+(selLvl-1)).val().split(',')[1]);
+					}
+				} else {
+					//selLvl = 1;
+					var html = '<option value="">[선택]</option>';
+					for(var i=1; i<5; i++){
+						$("#selCate"+i+'_'+cateIndex).html(html);
+					}
+					return;
+				}
+			}else if(selLvl>1){
+				$("#cateCd"+cateIndex).val(val.split(',')[0]);
+				$("#leafYn"+cateIndex).val(val.split(',')[1]);
+			}
+			$("#goodsCateForm input[name=selLvl]").val(selLvl);
+			$("#goodsCateForm input[name=cateIndex]").val(cateIndex);
+
+			var cateGb = $('#selCate1_'+cateIndex).val();
+			var cate1No = $('#selCate2_'+cateIndex).val().split(',')[0];
+			var cate2No = $('#selCate3_'+cateIndex).val().split(',')[0];
+			var cate3No = $('#selCate4_'+cateIndex).val().split(',')[0];
+			var cate4No = $('#selCate5_'+cateIndex).val().split(',')[0];
+			$("#cateGb"+cateIndex).val(cateGb);
+			if(selLvl==5 || (val=='' && selLvl==4)){
+				return;
+			}
 
-$(document).ready(function() {
+			var data = { siteCd : 'G000_10'
+				, selLvl : selLvl
+				,cateGb : cateGb
+				,cate1No : cate1No
+				,cate2No : cate2No
+				,cate3No : cate3No
+				,cate4No : cate4No
+			};
 
-	cfnCreateCalendar('#sellTerms', 'searchStdt', 'searchEddt', true, '기간', 'X');
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit('/display/category/list', jsonData, fnChangeCate);
+		}
 
-	// Create a agGrid
-	gagaAgGrid.createGrid('gridList', gridOptions);
+		var fnChangeCate = function(data){
+			console.log('hereeeeeeeeeeeee');
+			/*
+			var selLvl = $("#saveForm input[name=selLvl]").val();
+			var cateIndex = $("#saveForm input[name=cateIndex]").val();
+			var html = '<option value="">[선택]</option>';
+			for(var i=1; i<6; i++){
+				if(i>selLvl){
+					$("#selCate"+cateIndex+''+i).html(html);
+				}
+			}
+			for(var i=0; i<data.length; i++){
+				var cd = '';
+				var nm = '';
+				var leafYn = '';
+				if(data[i].useYn=='Y'){
+					if(selLvl=='1'){
+						cd = data[i].cateGb;
+						nm = gagaAgGrid.lookupValue(cateGbList, cd);
+					}else{
+						cd = data[i].cateCd;
+						nm = data[i].cateNm;
+						leafYn = ','+data[i].leafYn;
+						$("#cateType"+cateIndex).val(data[i].cateType);
+					}
+					html += '<option value="'+cd+leafYn+'">['+cd+'] '+nm+'</option>';
+				}
+			}
+			$("#selCate"+cateIndex+''+selLvl).html(html);
+			*/
+		}
 
-});
+		$(document).ready(function() {
+			cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '기간', 'X');
+			// Create a agGrid
+			gagaAgGrid.createGrid('gridList', gridOptions);
+		});
 
-/*]]>*/
-</script>
+		/*]]>*/
+	</script>
+</div>
 
-</html>
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -416,7 +416,7 @@
 		</div>
 		</form>
 		<!-- //패널 영역2 -->
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	var sessRoleCd = [[${sessionInfo.roleCd}]];

+ 15 - 48
src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -404,7 +404,7 @@ var columnCancelReqList = [
 		]
 	}
 ];
-var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
+var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
 
 // Add on options
 gridOptionsCancelReqList.suppressRowClickSelection = true;
@@ -657,7 +657,7 @@ var columnCancelReqToBeList = [
 		]
 	}
 ];
-var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
 
 // 3. 배송비정보(환불정보)
 var columnDelvCdList = [
@@ -763,7 +763,7 @@ var columnDelvCdList = [
 		]
 	}
 ];
-var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 
 // 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
@@ -775,45 +775,7 @@ var columnDefsRefundAccountInfo = [
 	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
 ];
 
-var gridOptionsRefundAccountInfo = orderAgGrid.getGridOptions(columnDefsRefundAccountInfo);
-</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
-		};
-	}
-}
+var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
 </script>
 
 <script>
@@ -1044,18 +1006,23 @@ var fnBindOrderRfAccountInfo = function () {
 $(document).ready(function() {
 	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
-	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	
 	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
-	
 	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
-	
 	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
 	
-	// 2. 환불정보계산
+	// 2. 그리드 데이타 싱크작업
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);								// 주문정보
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
+	gagaAgGrid.hideStatusBar('gridDelvCdList');
+	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
+	
+	// 3. 환불정보계산
 	fnCalculateRefundAmt(null);
 	
-	// 3. 무통장입금아일때 환불계좌 그리드 숨김처리
+	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
 	if (payMeans !== 'G014_20') {
 		$('#wrapRefundAccount').addClass("off");
 		fnBindOrderRfAccountInfo();

+ 77 - 197
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -95,7 +95,6 @@
 				<div id="gridOrderFreeGiftInfo" style="width:100%; height:120px;" class="ag-theme-balham"></div>
 				
 				<h4>배송정보</h4>
-				<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm off" id="btnUpdateOrderAddr">수정</button>
 				<div id="gridDeliveryAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
 				
 				<table style="width:100%;">
@@ -167,124 +166,18 @@ var orderChangeInfo 		= [[${orderChangeInfo}]];				// 취소/반품/교환요청
 var orderRefundInfo 		= [[${orderRefundInfo}]];				// 환불정보
 var orderCounselInfo 		= [[${orderCounselInfo}]];				// 상담내역
 var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
-
-// 쿠폰,포인트,적립금 컬럼배경색설정
-//var goodsCpnDcAmtClass 	= (orderGoodsInfo[0].goodsCpnDcAmt > 0) 	? 'bgPink' : 'text-right';
-//var cartCpnDcAmtClass 	= (orderGoodsInfo[0].cartCpnDcAmt > 0) 		? 'bgPink' : 'text-right';
-//var plusCpnDcAmtClass 	= (orderGoodsInfo[0].plusCpnDcAmt > 0) 		? 'bgPink' : 'text-right';
-//var pntDcAmtClass 		= (orderGoodsInfo[0].pntDcAmt > 0) 			? 'bgPink' : 'text-right';
-//var prePntDcAmtClass 		= (orderGoodsInfo[0].prePntDcAmt > 0) 		? 'bgPink' : 'text-right';
-//var savePntAmtClass 		= (orderGoodsInfo[0].savePntAmt > 0) 		? 'bgSky' : 'text-right';
-
-//var custNo 				= orderInfo[0].custNo;
-//var mallGb 				= orderInfo[0].mallGb;
 </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
-		};
-	}
-}
-
-// 그리드 추가
-//gagaAgGrid.createGrid('gridList', gridOptions);
-//gagaAgGrid.hideStatusBar('gridList');
-
 // 1.주문기본정보 그리드 바인딩
-var columnDefsOrderInfo = [
-	{
-		headerName			: "사이트"
-		, field				: "siteCd"
-		, width				: 100
-		, cellClass			: 'text-center'
-		, valueFormatter	: function (params) {
-			return gagaAgGrid.lookupValue(siteCdList, params.value);
-		}
-	},
-	{headerName: "몰구분"		, field: "mallGbNm"		, width: 80		, cellClass: 'text-center'},
-	{headerName: "웹구분"		, field: "frontGbNm"	, width: 80		, cellClass: 'text-center'},
-	{headerName: "외부몰"		, field: "extmallNm"	, width: 80		, cellClass: 'text-center'},
-	{
-		headerName			: "주문일시"	
-		, field				: "ordDt"
-		, 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: "ordNm"		, width: 80		, cellClass: 'text-center'},
-	{
-		headerName			: "고객번호"
-		, field				: "custNo"
-		, width				: 100
-		, cellClass			: 'text-center'
-		, valueFormatter	: function (params) {
-			return (params.data.mallGb == '20') ? '' : params.value;
-		}
-	},
-	{headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center'},
-	{
-		headerName			: "이메일"
-		, field				: "ordEmail"
-		, width				: 240
-		, cellClass			: 'text-center'
-		, cellRenderer		: function (params) {
-			return params.value ? params.value + '&nbsp&nbsp<button type="button" class="btn btn-base btn-sm" onclick="fnOpenEmailForm(\'' + params.data.orderEmail + '\',\'' + params.data.orderNm + '\',\'' + params.data.custNo + '\');"> 메일발송 </button>' : '';
-		}
-	},
-	{
-		headerName			: "핸드폰번호"
-		, field				: "ordPhnno"
-		, width				: 220
-		, cellClass			: 'text-center'
-		, cellRenderer		: function (params) {
-			return params.value + '&nbsp&nbsp<button type="button" class="btn btn-base btn-sm" onclick="fnOpenLmsForm(\'' + params.data.orderPhnno + '\',\'' + params.data.custNo + '\');"> LMS발송 </button>';
-		}
-	},
-	{headerName: "회원구분"	, field: "custGbNm"		, width: 80		, cellClass: 'text-center'},
-	{headerName: "관리대상"	, field: "managedRsnNm"	, width: 80		, cellClass: 'text-center'},
-	{headerName: "등급"		, field: "custGradeNm"	, width: 80		, cellClass: 'text-center'}
-];
-var gridOptionsOrderInfo = gagaAgGrid.getGridOptions(columnDefsOrderInfo);
-
 // 2.상품별 상세정보
 var columnDefsGoodsInfo = [
 	{
 		headerName	: "주문상세",
 		children	: [
-			{headerName: "번호"		, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'}
+			{headerName: "번호"		, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'},
+			{headerName: "주문구분"	, field: "exchGbNm"		, width: 80, cellClass: 'text-center'},
 		],
 	},
 	{
@@ -324,7 +217,7 @@ var columnDefsGoodsInfo = [
 				headerName		: "단품금액"
 				, field			: "itemPrice"
 				, width			: 100
-				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
@@ -333,7 +226,7 @@ var columnDefsGoodsInfo = [
 				headerName		: "옵션추가금액"
 				, field			: "optAddPrice"
 				, width			: 100
-				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
@@ -391,6 +284,7 @@ var columnDefsGoodsInfo = [
 					// 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);'>";
@@ -483,7 +377,7 @@ var columnDefsGoodsInfo = [
 				headerName		: "사용"
 				, field			: "pntDcAmt"
 				, width			: 80
-				, cellClass		: 'text-right' //pntDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
 				}
@@ -492,7 +386,7 @@ var columnDefsGoodsInfo = [
 				headerName		: "즉시사용"
 				, field			: "prePntDcAmt"
 				, width			: 80
-				, cellClass		: 'text-right' //prePntDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
 				}
@@ -501,7 +395,7 @@ var columnDefsGoodsInfo = [
 				headerName		: "적립"
 				, field			: "savePntAmt"
 				, width			: 80
-				, cellClass		: 'text-right' //savePntAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
 				}
@@ -515,7 +409,7 @@ var columnDefsGoodsInfo = [
 				headerName		: "사용"
 				, field			: "gfcdUseAmt"
 				, width			: 80
-				, cellClass		: 'text-right' //pntDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderGiftcardHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
 				}
@@ -569,7 +463,8 @@ var columnDefsGoodsInfo = [
 					return retStr;
 				}
 			},
-			{headerName: "출고처", field: "delvLocNm", width: 120, cellClass: 'text-center'}
+			{headerName: "출고처"		, field: "delvLocNm"	, width: 120, cellClass: 'text-center'},
+			{headerName: "배송지번호"	, field: "delvAddrSq"	, width: 120, cellClass: 'text-center'}
 		]
 	}
 ];
@@ -577,10 +472,10 @@ var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
 
 // 2.5 주문사은품정보
 var columnDefsOrderFreeGiftInfo = [
-	{headerName: "주문사은품번호"	, field: "ordFreegiftSq"	, width: 100, cellClass: 'text-center', hide: true},
-	{headerName: "주문번호"		, field: "ordNo"			, width: 100, cellClass: 'text-center'},
+	{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: 200, cellClass: 'text-center'},
+	{headerName: "사은품프로모션명"	, field: "freegiftNm"		, width: 250, cellClass: 'text-center'},
 	{headerName: "사은품혜택번호"	, field: "freegiftValSq"	, width: 100, cellClass: 'text-center', hide: true},
 	{
 		headerName			: "사용포인트"		
@@ -603,28 +498,40 @@ var gridOptionsOrderFreeGiftInfo = gagaAgGrid.getGridOptions(columnDefsOrderFree
 
 // 3.배송정보
 var columnDefsDeliveryInfo = [
-	{headerName: "배송지번호"		, field: "delvAddrSq"	, width: 100, cellClass: 'text-center'},
-	{headerName: "받는분"			, field: "recipNm"		, width: 80, cellClass: 'text-left', editable: true},
-	{headerName: "핸드폰번호"		, field: "recipPhnno"	, width: 120, cellClass: 'text-left', editable: true},
-	{headerName: "전화번호"		, field: "recipTelno"	, width: 120, cellClass: 'text-left', editable: true},
+	{headerName: "배송지번호"		, field: "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			: 200
-		, cellClass		: 'text-left'
+		, width			: 220
+		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
-			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('grid');\">우편번호찾기</button>";
+			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: 350, cellClass: 'text-left'},
-	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 200, cellClass: 'text-left', editable: true},
-	{headerName: "배송메모"		, field: "delvMemo"			, width: 280, cellClass: 'text-left', editable: true}
+	{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: "escrowYn"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "결제수단"		, field: "payMeansNm"	, width: 100	, cellClass: 'text-center'},
 	{headerName: "카드(은행)"		, field: "cardNm"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "할부(입금계좌)"	, field: "cardMips"		, width: 150	, cellClass: 'text-center'},
@@ -686,7 +593,7 @@ var columnDefsDeliveryFeeInfo = [
 	{
 		headerName			: "배송비정산일시"	
 		, field				: "delvUsacDt"
-		, width				: 180
+		, width				: 140
 		, cellClass			: 'text-center' 
 		, cellRenderer: function(params) {
 			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
@@ -717,27 +624,27 @@ var columnDefsOrderChangeInfo = [
 	{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: "chgerPostNo"	, width: 120	, cellClass: 'text-center'},
 	{
-		headerName		: "주소(기본)"
-		, field			: "chgerBaseAddr"
-		, width			: 250
+		headerName		: "우편번호"		
+		, field			: "chgerZipNo"
+		, width			: 220
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
-			var retStr = "";
+			var rtnStr = ""
 			
-			// 교환요청, 반품요청일때만 버튼 활성화
-			if (params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_40' ) {
-				if (params.data.wdInvoiceSendYn == 'N') {
-					retStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnOpenPostFindPopup('" + params.node.rowIndex + "');\">POST</button>";
-					retStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
-				}
+				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 += params.value;
 			}
-
-			retStr += (gagajf.isNull(params.value)) ? '' : (gagajf.isNull(params.data.chgerDtlAddr)) ? params.value : params.value + params.data.chgerDtlAddr;
-			return retStr;
+			
+			return rtnStr;
 		}
 	},
+	{headerName: "주소(기본)"		, field: "chgerBaseAddr"	, width: 220, cellClass: 'text-left'},
 	{headerName: "주소(상세)"		, field: "chgerDtlAddr"	, width: 150	, cellClass: 'text-center'	, editable: true},
 	{
 		headerName		: "택배사전송"
@@ -757,11 +664,11 @@ var columnDefsOrderChangeInfo = [
 			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>';
+				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>';
+				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>';
+				retStr = '<button type="button" class="btn btn-success" onclick="fnCancelConfirmRequestCancel(\'' + params.data.ordChgSq + '\')">요청철회</button>';
 			}
 
 			return retStr;
@@ -812,7 +719,7 @@ var columnDefsOrderCounselInfo = [
 	{
 		headerName		: "질문제목"
 		, field			: "questTitle"
-		, width			: 400
+		, width			: 250
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
 			return '<a href="javascript:void(0);" onclick="cfnOpenOneToOneAskDetailPopup(\'' + params.data.counselSq + '\')">' + params.value + '</a>';
@@ -847,13 +754,13 @@ var columnDefsOrderMemoInfo = [
 	{
 		headerName		: "등록자"
 		, field			: "regNm"
-		, width			: 130
+		, width			: 100
 		, cellClass		: 'text-center'
 	},
 	{
 		headerName		: "관리메모"
 		, field			: "memo"
-		, width			: 250
+		, width			: 150
 		, cellClass		: 'text-left'
 		, cellRenderer	: function (params) {
 			var retStr = '';
@@ -891,17 +798,6 @@ var fnSetGridHeightInit = function () {
 		_girdRowH1 = 33
 		_girdRowH2 = 80;
 	}
-	
-	//$('#gridOrderInfo').css('height', _girdRowH1 + _girdRowH);					//기본정보
-	//$('#gridDeliveryInfo').css('height', _girdRowH1 + _girdRowH);					//배송정보
-	//if (orderGoodsInfo != null && orderGoodsInfo.length > 0) $('#gridOrderGoodsInfo').css('height', _girdRowH2 + _girdRowH * orderGoodsInfo.length);
-	//if (orderPaymentInfo != null && orderPaymentInfo.length > 0) $('#gridPaymentInfo').css('height', _girdRowH1 + _girdRowH * orderPaymentInfo.length);
-	//if (orderDeliveryFeeInfo != null && orderDeliveryFeeInfo.length > 0) $('#gridDeliveryFeeInfo').css('height', _girdRowH1 + _girdRowH * orderDeliveryFeeInfo.length);
-	//if (orderChangeInfo != null && orderChangeInfo.length > 0) $('#gridOrderChangeInfo').css('height', _girdRowH1 + _girdRowH * orderChangeInfo.length);
-	//if (orderRefundInfo != null && orderRefundInfo.length > 0) $('#gridOrderRefundInfo').css('height', _girdRowH1 + _girdRowH * orderRefundInfo.length);
-	//if (orderCounselInfo != null && orderCounselInfo.length > 0) $('#gridOrderCounselInfo').css('height', _girdRowH1 + _girdRowH * orderCounselInfo.length);
-	//if (orderAdminMemoInfo != null && orderAdminMemoInfo.length > 0) $('#gridOrderMemoInfo').css('height', _girdRowH1 + _girdRowH * orderAdminMemoInfo.length);
-	//if (orderRfAccountInfo != null && orderRfAccountInfo.length > 0) $('#gridOptionsRefundAccountInfo').css('height', _girdRowH1 + _girdRowH * orderRfAccountInfo.length);
 }
 </script>
 
@@ -1059,10 +955,10 @@ $(document).ready(function () {
 var gridOrderChangeInfoSelectedIdx = '';
 
 // 배송지변경
-var fnUpdateOrderAddr = function () {
+var fnUpdateOrderAddr = function (rowIdx) {	
 	gridOptionsDeliveryInfo.api.stopEditing();
+	var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(rowIdx).data);
 	
-	var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(0).data);
 	mcxDialog.confirm("주소를 변경하시겠습니까?", {
 		cancelBtnText	: "취소",
 		sureBtnText		: "확인",
@@ -1253,34 +1149,6 @@ var fnBindDeliveryAddrCallBack = function(result) {
 	gridOptionsDeliveryInfo.api.setRowData(result);
 };
 
-// 우편번호 찾기관련
-var fnSetPostValue = function(zipNo, baseRoadAddr1, baseRoadAddr2, etcAddr, postPosition) {
-	if (postPosition == 'grid') {
-		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipPostNo = zipNo;
-		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipBaseAddr = baseRoadAddr1;
-		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipDtlAddr = baseRoadAddr2;
-		gridOptionsDeliveryInfo.api.refreshCells();
-	} 
-	else if (postPosition == 'returnRequest') {
-		$("#returnRequestFrm input[name=chgerPostNo]").val(zipNo);
-		$("#returnRequestFrm input[name=chgerBaseAddr]").val(baseRoadAddr1);
-		$("#returnRequestFrm input[name=chgerDtlAddr]").val(baseRoadAddr2);
-	} 
-	else if (postPosition == 'updateOrderChangeAddr') {
-		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerPostNo = zipNo;
-		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerBaseAddr = baseRoadAddr1;
-		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerDtlAddr = baseRoadAddr2;
-		gridOptionsOrderChangeInfo.api.refreshCells();
-
-	}
-}
-
-// 변경요청 > 우편번호찾기
-var fnOpenPostFindPopup = function (idx) {
-	gridOrderChangeInfoSelectedIdx = idx;
-	cfnOpenPostFindPopup('updateOrderChangeAddr');
-}
-
 // 변경요청 > 회수지정보 저장
 var fnSaveChgerAddr = function (rowIdx) {
 	gridOptionsOrderChangeInfo.api.stopEditing();
@@ -1492,13 +1360,25 @@ var fnChangOrdDtlStat = function (obj) {
 };
 
 // DAUM을 이용한 우편번호 팝업 레이어
-var fnOpenDaumAddr = function() {
+var fnOpenDaumAddr = function(idx, addrGb) {
+		
 	let daumZip = new daum.Postcode({
 		oncomplete: function(data) {
-			// 우편번호와 주소 정보를 해당 필드에 넣는다.
-			$('#detailForm input[name=bizZipcode]').val(data.zonecode);
-			$('#detailForm input[name=bizBaseAddr]').val(cfnGetDaumRoadAddr(data));
-			$('#detailForm input[name=bizDtlAddr]').focus();
+			// 배송지주소 수정
+			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();
 		},

+ 5 - 100
src/main/webapp/WEB-INF/views/order/OrderListForm.html

@@ -90,21 +90,8 @@
 						</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">
+						<td colspan="5">
 							<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;">
@@ -246,7 +233,7 @@
 			<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>
@@ -261,7 +248,7 @@
 	<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 type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
 
 <script th:inline="javascript">
 /*<![CDATA[*/
@@ -630,53 +617,9 @@ var columnDefsOrderList = [
 	}
 ];
 
-var gridOptionsOrderList = {
-	columnDefs					: columnDefsOrderList
-	, 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
-};
-
-// 상품이미지 노출을 위해 높이 조정
-gridOptionsOrderList.rowHeight 					= 60;
-gridOptionsOrderList.rowSelection 				= 'multiple';
-gridOptionsOrderList.suppressRowClickSelection 	= true;
-gridOptionsOrderList.getRowStyle = function (params) {
-	if (params.data.ordExchGb === 'E') {
-		return {background: 'orange'}
-	}
-}
-
-//Rowspan
-gridOptionsOrderList.defaultColDef.resizable = true;
-gridOptionsOrderList.suppressRowTransform = true;
+var gridOptionsOrderList = gagaAgGrid.getGridOptions(columnDefsOrderList);
 
-function onFirstDataRendered(params) {
-	
-}
+gridOptionsOrderList.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
 
 // 최근상세보기한 주문번호
 var currOrdNo = '';
@@ -724,44 +667,6 @@ var fnSearchCallBack = function(result){
 	gagaPaging.createPagination(result.pageing.pageable);
 }
 
-// 주문리스트 합계 정보
-var fnOrderListSumInfoCallback = function(result) {
-	if (!gagajf.isNull(result)) {
-		var sumOrdAmt 		= 0;
-		var sumOrdCnclAmt 	= 0;
-		var sumRealPayAmt 	= 0;
-		var ordNoCnt 		= 0;
-		var sumOrdQty 		= 0;
-		var sumOrdCnclQty 	= 0;
-
-		if (!gagajf.isNull(result.sumOrdAmt)) {
-			sumOrdAmt = result.sumOrdAmt.addComma();
-		}
-		if (!gagajf.isNull(result.sumOrdCnclAmt)) {
-			sumOrdCnclAmt = result.sumOrdCnclAmt.addComma();
-		}
-		if (!gagajf.isNull(result.sumRealPayAmt)) {
-			sumRealPayAmt = result.sumRealPayAmt.addComma();
-		}
-		if (!gagajf.isNull(result.ordNoCnt)) {
-			ordNoCnt = result.ordNoCnt.addComma();
-		}
-		if (!gagajf.isNull(result.sumOrdQty)) {
-			sumOrdQty = result.sumOrdQty.addComma();
-		}
-		if (!gagajf.isNull(result.sumOrdCnclQty)) {
-			sumOrdCnclQty = result.sumOrdCnclQty.addComma();
-		}
-
-		$('#sumOrdAmt').text(sumOrdAmt);
-		$('#sumOrdCnclAmt').text(sumOrdCnclAmt);
-		$('#sumRealPayAmt').text(sumRealPayAmt);
-		$('#ordNoCnt').text(ordNoCnt);
-		$('#sumOrdQty').text(sumOrdQty);
-		$('#sumOrdCnclQty').text(sumOrdCnclQty);
-	}
-};
-
 // 엑셀조회
 $("#btnSearchExcel").on('click', function () {
 	cfnExcelUploadPopup('', 'fnExcelUpoadCallback');

+ 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>
+
+
+
+
+

+ 15 - 49
src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html

@@ -457,7 +457,7 @@ var columnCancelReqList = [
 		]
 	}
 ];
-var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
+var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
 
 // Add on options
 gridOptionsCancelReqList.suppressRowClickSelection = true;
@@ -710,7 +710,7 @@ var columnCancelReqToBeList = [
 		]
 	}
 ];
-var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
 
 // 3. 배송비정보(환불정보)
 var columnDelvCdList = [
@@ -816,7 +816,7 @@ var columnDelvCdList = [
 		]
 	}
 ];
-var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 
 // 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
@@ -828,45 +828,7 @@ var columnDefsRefundAccountInfo = [
 	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
 ];
 
-var gridOptionsRefundAccountInfo = orderAgGrid.getGridOptions(columnDefsRefundAccountInfo);
-</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
-		};
-	}
-}
+var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
 </script>
 
 <script>
@@ -1172,24 +1134,28 @@ var fnSetChger = function(){
 $(document).ready(function() {
 	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
-	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	
 	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);
 	
-	// 3. 무통장입금아일때 환불계좌 그리드 숨김처리
+	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
 	if (payMeans !== 'G014_20') {
 		$('#wrapRefundAccount').addClass("off");
 		fnBindOrderRfAccountInfo();
 	}
 	
-	// 4. 회수지정보설정
+	// 5. 회수지정보설정
 	fnSetChger();
 });
 </script>

+ 15 - 12
src/main/webapp/ux/plugins/gaga/gaga.paging.js

@@ -165,13 +165,12 @@ var gagaPaging = {
 		let pageSize = pageable.pageSize;
 		let pageUnit = pageable.pageUnit;
 		let totalCount = pageable.totalCount;
-
 		let firstCount = (getPageGroup() - 1) * pageable.pageUnit + 1;
 		let loopCount = firstCount + pageUnit;
 		if (loopCount > getTotalPage()) {
-			loopCount = getTotalPage() + 1;
+			loopCount = Number(getTotalPage() + 1);
 		}
-
+		
 		var pageTag = '';
 		if (!(firstCount == 1 && loopCount == 1)) {
 			if (pageNo == 1) {
@@ -193,20 +192,24 @@ var gagaPaging = {
 					pageTag += "<a class=\"num\" href=\"#pageNo=" + i + "\">" + i +"</a>\n"
 				}
 			}
-
-			if (loopCount <= (getTotalPage() + 1)) {
-				if (pageNo == getTotalPage()) {
-					pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
-					pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n";
-				} else {
-					pageTag += "<a class=\"arrow\" href=\"#pageNo=" + (getPageGroup() * pageUnit + 1) + "\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
+			
+			if (loopCount <= (Number(getTotalPage() + 1))) {
+				//if (getTotalPage() <= pageUnit) {
+				//	pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
+				//	pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n";
+				//} else {
+					if (getTotalPage() > loopCount){
+						pageTag += "<a class=\"arrow\" href=\"#pageNo=" + (getPageGroup() * pageUnit + 1) + "\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";	
+					}else{
+						pageTag += "<a class=\"arrow\" href=\"#pageNo=" + getTotalPage() + "\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
+					}
 					pageTag += "<a class=\"arrow\" href=\"#pageNo=" + getTotalPage() + "\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n";
-				}
+				//}
 			}
 		}
 
 		function getPageGroup() {
-			return parseInt(pageNo / pageUnit + 1 );
+			return parseInt((pageNo-1) / pageUnit + 1 );
 		}
 
 		function getTotalPage() {