bin2107 5 rokov pred
rodič
commit
5f5e4e0496

+ 25 - 1
src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java

@@ -211,9 +211,33 @@ public interface TsaCouponDao {
 
 	/**
 	 * 동일 쿠폰명이 존재하는지 확인
-	 * @param param
+	 * @param cpnId
 	 * @author xodud1202
 	 * @since 2021. 01. 26
 	 */
 	ArrayList<CustCoupon> getRandomCouponInfo(int cpnId);
+
+	/**
+	 * 쿠폰사용가능고객등급
+	 * @param params
+	 * @author bin2107
+	 * @since 2021. 02. 02
+	 */
+	void createCouponCustGubun(Coupon params);
+
+	/**
+	 * 쿠폰사용가능고객등급
+	 * @param params
+	 * @author bin2107
+	 * @since 2021. 02. 02
+	 */
+	void createCouponCustGrade(Coupon params);
+
+	/**
+	 * 쿠폰사용가능결제수단
+	 * @param params
+	 * @author bin2107
+	 * @since 2021. 02. 02
+	 */
+	void createCouponPayType(Coupon params);
 }

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

@@ -44,11 +44,102 @@ public class TsaCouponService {
 		params.setRegNo(TsaSession.getInfo().getUserNo());
 		params.setUpdNo(TsaSession.getInfo().getUserNo());
 
+		if(cpnId != 0) {    //수정모드일때
+
+		}else{	//등록모드일때
+			params.setCpnStat("G232_10");
+			couponDao.couponInsert(params);
+
+			for(int i=0; i<params.getUsableCustGbArr().length; i++){
+				params.setUsableCustGb(params.getUsableCustGbArr()[i]);
+				couponDao.createCouponCustGubun(params);
+			}
+
+			for(int i=0; i<params.getUsableCustGradeArr().length; i++){
+				params.setUsableCustGrade(params.getUsableCustGradeArr()[i]);
+				couponDao.createCouponCustGrade(params);
+			}
+
+			for(int i=0; i<params.getPayTypeArr().length; i++){
+				params.setPayType(params.getPayTypeArr()[i]);
+				couponDao.createCouponPayType(params);
+			}
+		}
+
+		// 공급업체 등록
+		for(CouponRefval compRefval : params.getSupplyCompList()){
+			compRefval.setCpnId(params.getCpnId());
+			compRefval.setCpnTarget("G260_13");
+			compRefval.setRefVal(compRefval.getSupplyCompCd());
+			compRefval.setRegNo(params.getRegNo());
+			compRefval.setUpdNo(params.getUpdNo());
+			couponDao.saveCouponRefVal(compRefval);
+		}
+
+		// 브랜드 등록
+		for(CouponRefval brandRefval : params.getBrandList()){
+			brandRefval.setCpnId(params.getCpnId());
+			brandRefval.setCpnTarget("G260_12");
+			brandRefval.setRefVal(brandRefval.getBrandCd());
+			brandRefval.setRegNo(params.getRegNo());
+			brandRefval.setUpdNo(params.getUpdNo());
+			couponDao.saveCouponRefVal(brandRefval);
+		}
+
+		// 적용상품
+		for(CouponRefval applyGoodsRefval : params.getApplyGoodsList()){
+			applyGoodsRefval.setCpnId(params.getCpnId());
+			applyGoodsRefval.setCpnTarget("G260_10");
+			applyGoodsRefval.setRefVal(applyGoodsRefval.getGoodsCd());
+			applyGoodsRefval.setRegNo(params.getRegNo());
+			applyGoodsRefval.setUpdNo(params.getUpdNo());
+			couponDao.saveCouponRefVal(applyGoodsRefval);
+		}
+
+		// 카테고리
+		for(CouponRefval cateRefval : params.getCateList()){
+			cateRefval.setCpnId(params.getCpnId());
+			cateRefval.setCpnTarget("G260_11");
+			cateRefval.setRefVal(cateRefval.getCateNo());
+			cateRefval.setFormalGb(cateRefval.getFormalGb());
+			cateRefval.setBrandCd(cateRefval.getBrandCd());
+			cateRefval.setRegNo(params.getRegNo());
+			cateRefval.setUpdNo(params.getUpdNo());
+			couponDao.saveCouponRefVal(cateRefval);
+		}
+
+		// 제외상품
+		for(CouponRefval exceptGoodsRefval : params.getExceptGoodsList()){
+			exceptGoodsRefval.setCpnId(params.getCpnId());
+			exceptGoodsRefval.setCpnTarget("G260_14");
+			exceptGoodsRefval.setRefVal(exceptGoodsRefval.getGoodsCd());
+			exceptGoodsRefval.setRegNo(params.getRegNo());
+			exceptGoodsRefval.setUpdNo(params.getUpdNo());
+			couponDao.saveCouponRefVal(exceptGoodsRefval);
+		}
+
+		// 입점업체분담율
+		for(CouponBurden couponBurden : params.getBurdenList()){
+			couponBurden.setCpnId(params.getCpnId());
+			couponBurden.setRegNo(params.getRegNo());
+			couponBurden.setUpdNo(params.getUpdNo());
+			couponDao.saveCouponBurden(couponBurden);
+		}
+
+		return "SUCCESS";
+	}
+	@Transactional("shopTxnManager")
+	public String saveCoupon2(Coupon params){
+		int cpnId = params.getCpnId();		// 쿠폰ID (신규생성인지 수정인지 구분하기 위해 params의 cpnId를 먼저 가져옴 > 쿠폰 생성시 cpnId를 저장하기때문임)
+		params.setRegNo(TsaSession.getInfo().getUserNo());
+		params.setUpdNo(TsaSession.getInfo().getUserNo());
+
 		couponDao.couponInsert(params);
 
 		Gson gson = new Gson();
 		Integer sequence;
 		// 적용대상 - 공급업체
+		/*
 		Collection<CouponRefval> supplyCompList = gson.fromJson(params.getSupplyCompList() , new TypeToken<Collection<CouponRefval>>(){}.getType());
 		for(CouponRefval supplyComp : supplyCompList) {
 			sequence = null;
@@ -146,7 +237,7 @@ public class TsaCouponService {
 
 			couponDao.saveCouponBurden(burden);
 		}
-
+		*/
 		// 수정모드이고 변경된 쿠폰상태가 대기 , 중지 인경우 고객이 발급받은 내용도 변경
 		if(cpnId != 0 &&
 				(params.getCpnStat().equals("G232_10") || params.getCpnStat().equals("G232_12")) ) {

+ 3 - 2
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -429,7 +429,8 @@ public class TsaMarketingController extends TsaBaseController {
 		// 쿠폰 유형 조회
 		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230", "Y"));
 		// 사용가능 고객구분 조회
-		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
+		String[] exceptCds1 = {"G100_00"};
+		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100", "Y", exceptCds1));
 		// 사용가능 고객등급 조회
 		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
 		// 재발급 여부 조회
@@ -1090,7 +1091,7 @@ public class TsaMarketingController extends TsaBaseController {
 
 	/**
 	 * 카드무이자할부 저장
-	 * @param point - 포인트 정보
+	 * @param cardPromotion - 포인트 정보
 	 * @return ModelAndView
 	 * @author eskim
 	 * @since 2021. 2. 1

+ 21 - 2
src/main/java/com/style24/persistence/domain/Coupon.java

@@ -5,6 +5,7 @@ import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
+import java.util.List;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -60,16 +61,34 @@ public class Coupon extends TscBaseDomain {
     private String rdCpnNm;                 // 랜덤쿠폰 사용키 (시리얼명 or 난수)
 
     // 그리드 파라미터
-    private String supplyCompList;          // 공급업체 리스트
+    /*private String supplyCompList;          // 공급업체 리스트
     private String brandList;               // 브랜드 리스트
     private String applyGoodsList;          // 적용상품 리스트
     private String exceptGoodsList;         // 제외상품 리스트
     private String cateList;                // 카테고리 리스트
-    private String burdenList;              // 업체 분담율 리스트
+    private String burdenList;              // 업체 분담율 리스트*/
+    List<CouponRefval> supplyCompList;          // 공급업체 리스트
+    List<CouponRefval> brandList;               // 브랜드 리스트
+    List<CouponRefval> applyGoodsList;          // 적용상품 리스트
+    List<CouponRefval> exceptGoodsList;         // 제외상품 리스트
+    List<CouponRefval> cateList;                // 카테고리 리스트
+    List<CouponBurden> burdenList;              // 업체 분담율 리스트
 
     // TB_COUPON_BAN_GOODS
     private int    cpnBanGoodsSq;           //  제외상품시퀀스
 
+    // 사용가능고객구분
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] usableCustGbArr;
+
+    // 사용가능고객등급
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] usableCustGradeArr;
+
+    // 결제수단
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] payTypeArr;
+
     // Pagination
     private TscPageRequest pageable;
     private int pageNo = 1;

+ 51 - 11
src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml

@@ -102,13 +102,11 @@
 	</select>
 
 	<!-- 쿠폰 등록 -->
-	<insert id="couponInsert" parameterType="Coupon">
+	<insert id="couponInsert" parameterType="Coupon" keyProperty="cpnId">
 		/* TsaCoupon.couponInsert*/
-		<selectKey keyProperty="cpnId" resultType="int" order="AFTER">
-			SELECT LAST_INSERT_ID()
-		</selectKey>
 		INSERT INTO TB_COUPON (
-		    CPN_NM
+		    CPN_ID
+		  , CPN_NM
 		  , SITE_CD
 		  , AF_LINK_CD
 		  , CPN_TYPE
@@ -146,7 +144,8 @@
 		  , BUY_EDDT
 		  , NEW_CUST_YN
 		) VALUES (
-		    #{cpnNm}
+		   #{cpnId}
+		  , #{cpnNm}
 		  , #{siteCd}
 		  , #{afLinkCd}
 		  , #{cpnType}
@@ -303,13 +302,11 @@
 	</select>
 
 	<!-- 쿠폰 적용대상 등록 -->
-	<insert id="saveCouponRefVal" parameterType="Coupon">
+	<insert id="saveCouponRefVal" parameterType="CouponRefval" keyProperty="cpnRefvalSq">
 		/* TsaCoupon.saveCouponRefVal */
 		INSERT INTO TB_COUPON_REFVAL (
 		    CPN_ID
-		  <if test='cpnRefvalSq != null and cpnRefvalSq > 0'>
 		  , CPN_REFVAL_SQ
-		  </if>
 		  , CPN_TYPE
 		  , CPN_TARGET
 		  , REF_VAL
@@ -325,9 +322,7 @@
 		  , UPD_DT
 		)
 		SELECT CPN_ID
-		     <if test="cpnRefvalSq != null and cpnRefvalSq > 0">
 			 , #{cpnRefvalSq}
-			 </if>
 			 , CPN_TYPE
 			 , #{cpnTarget}
 			 , #{refVal}
@@ -674,4 +669,49 @@
 		AND C.CUST_NO = CC.CUST_NO
 		WHERE RC.CPN_ID = #{cpnId}
 	</select>
+
+	<insert id="createCouponCustGubun" parameterType="Coupon">
+		/* TsaCoupon.createCouponCustGubun */
+		INSERT INTO TB_COUPON_CUST_GBN (
+				 CPN_ID
+				, USABLE_CUST_GB
+				, REG_NO
+				, REG_DT
+		) VALUES (
+				#{cpnId}
+				, #{usableCustGb}
+				, #{regNo}
+				, CURRENT_TIMESTAMP()
+		)
+	</insert>
+
+	<insert id="createCouponCustGrade" parameterType="Coupon">
+		/* TsaCoupon.createCouponCustGrade */
+		INSERT INTO TB_COUPON_CUST_GRADE (
+			CPN_ID
+			, USABLE_CUST_GRADE
+			, REG_NO
+			, REG_DT
+		) VALUES (
+			#{cpnId}
+			, #{usableCustGrade}
+			, #{regNo}
+			, CURRENT_TIMESTAMP()
+		)
+	</insert>
+
+	<insert id="createCouponPayType" parameterType="Coupon">
+		/* TsaCoupon.createCouponPayType */
+		INSERT INTO TB_COUPON_PAYTYPE (
+			CPN_ID
+			, PAY_TYPE
+			, REG_NO
+			, REG_DT
+		) VALUES (
+			 #{cpnId}
+			 , #{payType}
+			 , #{regNo}
+			 , CURRENT_TIMESTAMP()
+		)
+	</insert>
 </mapper>

+ 178 - 90
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -73,33 +73,30 @@
 										<tr class="dcCdGb" style="display:none;">
 											<th>할인쿠폰유형<em class="required" title="필수"></em></th>
 											<td class="normalCol">
-												<input type="hidden" id="dcCd" required="required"  data-valid-name="할인쿠폰유형">
+												<input type="hidden" id="dcCd" data-valid-name="할인쿠폰유형">
 												<label class="rdoBtn" th:if="${dcCdList}" th:each="oneData, status : ${dcCdList}"> <input type="radio" name="dcCdGb"  th:text="${oneData.cdNm}" th:value="${oneData.cd}"/></label>
 											</td>
 											<th class="randomCpnArea">난수생성수량<em class="required" title="필수"></em></th>
 											<td class="randomCpnArea">
-												<input type="text" name="randomCpnQty" class="w300" required="required" data-valid-name="난수생성수량" data-valid-type="numeric">
+												<input type="text" name="randomCpnQty" class="w300" data-valid-name="난수생성수량" data-valid-type="numeric">
 											</td>
 										</tr>
 										<tr class="serialCpnArea" style="display:none;">
 											<th>시리얼쿠폰키워드<em class="required" title="필수"></em></th>
 											<td>
-												<input type="text" name="serialCpnNm" class="w300" maxlength="10" required="required" data-valid-name="시리얼쿠폰키워드">
+												<input type="text" name="serialCpnNm" class="w300" maxlength="10" data-valid-name="시리얼쿠폰키워드">
 											</td>
 											<th>시리얼쿠폰발급수량<em class="required" title="필수"></em></th>
 											<td>
-												<input type="text" name="serialCpnQty" class="w300" required="required" data-valid-name="시리얼쿠폰발급수량" data-valid-type="numeric">
+												<input type="text" name="serialCpnQty" class="w300" data-valid-name="시리얼쿠폰발급수량" data-valid-type="numeric">
 											</td>
 										</tr>
 										<tr>
 											<th>사용가능고객구분<em class="required" title="필수"></em></th>
 											<td>
-												<!--<select name="usableCustGb" id="usableCustGb" required="required" data-valid-name="사용가능고객구분">
-													<option th:if="${usableCustGbList}" th:each="oneData , status : ${usableCustGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-												</select>-->
-												<input type="hidden" name="usableCustGb"/>
-												<label class="chkBox"><input type="checkbox" name="chkUsableCustGb" id="chkUsableCustGb10" value="G100_10">일반회원</label>
-												<label class="chkBox"><input type="checkbox" name="chkUsableCustGb" id="chkUsableCustGb20" value="G100_20">임직원</label>
+												<label class="chkBox" th:if="${usableCustGbList}" th:each="oneData, status : ${usableCustGbList}">
+													<input type="checkbox" name="usableCustGbArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+												</label>
 											</td>
 											<th>사이트<em class="required" title="필수"></em></th>
 											<td>
@@ -111,16 +108,9 @@
 										<tr>
 											<th>사용고객등급구분<em class="required" title="필수"></em></th>
 											<td>
-												<!--<select name="usableCustGrade" id="usableCustGrade" required="required" data-valid-name="사용고객등급구분">
-													<option value="ALL">[전체]</option>
-													<option th:if="${usableCustGradeList}" th:each="oneData , status : ${usableCustGradeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-												</select>-->
-												<input type="hidden" name="usableCustGrade"/>
-												<label class="chkBox"><input type="checkbox" name="chkUsableCustGrade" id="chkUsableCustGrade10" value="G110_10">VIP</label>
-												<label class="chkBox"><input type="checkbox" name="chkUsableCustGrade" id="chkUsableCustGrade20" value="G110_20">GOLD</label>
-												<label class="chkBox"><input type="checkbox" name="chkUsableCustGrade" id="chkUsableCustGrade30" value="G110_30">SILVER</label>
-												<label class="chkBox"><input type="checkbox" name="chkUsableCustGrade" id="chkUsableCustGrade40" value="G110_40">BRONZE</label>
-												<label class="chkBox"><input type="checkbox" name="chkUsableCustGrade" id="chkUsableCustGrade50" value="G110_50">WELCOME</label>
+												<label class="chkBox" th:if="${usableCustGradeList}" th:each="oneData, status : ${usableCustGradeList}">
+													<input type="checkbox" name="usableCustGradeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+												</label>
 											</td>
 											<th>만료알림여부<em class="required" title="필수"></em></th>
 											<td>
@@ -336,21 +326,14 @@
 												</select>
 											</td>
 										</tr>-->
-										<!--<tr class="payTypeTr" style="display: none;">
+										<tr class="payTypeTr" style="display: none;">
 											<th>결제수단<em class="required" title="필수"></em></th>
 											<td colspan="5">
-												<select name="payType" id="payType" data-valid-name="결제수단">
-													<option value="">[전체]</option>
-													<option th:if="${payTypeList}" th:each="oneData , status : ${payTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-												</select>
+												<label class="chkBox" th:if="${payTypeList}" th:each="oneData, status : ${payTypeList}">
+													<input type="checkbox" name="payTypeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+												</label>
 											</td>
 										</tr>
-										<tr>
-											<th>멀티결제수단</th>
-											<td colspan="5">
-
-											</td>
-										</tr>-->
 										<tr>
 											<th>쿠폰상태<em class="required" title="필수"></em></th>
 											<td>
@@ -705,28 +688,93 @@
 			cancelBtnText:"취소",
 			sureBtnText:"확인",
 			sureBtnClick: function () {
-				var chkUsableCustGb = document.getElementsByName("chkUsableCustGb");
-				var chkUsableCustGrade = document.getElementsByName("chkUsableCustGrade");
-				var usableCustGb = "";
-				var usableCustGrade = "";
-
-				for(let i=0; i<chkUsableCustGb.length; i++){
-					if(chkUsableCustGb[i].checked == true){
-						usableCustGb += chkUsableCustGb[i].value+"|";
-					}
+				gagajf.removeCommaAtNumberFormattedInput('#CouponForm');
+				// 필수값들 셋팅
+				setReqValue();
+				// 필수값 validation 체크
+				if (!gagajf.validation('#CouponForm')) {
+					return false;
 				}
-				for(let i=0; i<chkUsableCustGrade.length; i++){
-					if(chkUsableCustGrade[i].checked == true){
-						usableCustGrade += chkUsableCustGrade[i].value+"|";
-					}
+				// 데이터 validation 체크
+				if(!checkValidation()) {
+					return false;
+				}
+
+				var usableCustGbArr = [];
+				var chkCustGb  = $('#CouponForm input:checkbox[name=usableCustGbArr]:checked');
+				for(let i=0; i< chkCustGb.length; i++){
+					usableCustGbArr.push(chkCustGb.eq(i).val());
 				}
 
-				$("#CouponForm input[name=usableCustGb]").val(usableCustGb);
-				$("#CouponForm input[name=usableCustGrade]").val(usableCustGrade);
+				var usableCustGradeArr = [];
+				var chkCustGrade = $('#CouponForm input:checkbox[name=usableCustGradeArr]:checked');
+				for(let i=0; i< chkCustGrade.length; i++){
+					usableCustGradeArr.push(chkCustGrade.eq(i).val());
+				}
+
+				var payTypeArr = [];
+				var chkPayType = $('#CouponForm input:checkbox[name=payTypeArr]:checked');
+				for(let i=0; i< chkPayType.length; i++){
+					payTypeArr.push(chkPayType.eq(i).val());
+				}
+
+				var data = {
+						cpnId : $('#CouponForm input[name=cpnId]').val()
+						,cpnNm : $('#CouponForm input[name=cpnNm]').val()
+						,siteCd : $('#CouponForm select[name=siteCd]').val()
+						,afLinkCd : $('#CouponForm select[name=afLinkCd]').val()
+						,cpnType : $('input:radio[name="rdoCpnType"]:checked').val()
+						,applyScope : $('input:radio[name="rdoApplyScope"]:checked').val()
+						,dcWay : $('input:radio[name="rdoDcWay"]:checked').val()
+						,dcPval : $('#CouponForm input[name=dcPval]').val()
+						,dcMval : $('#CouponForm input[name=dcMval]').val()
+						,dcAval : $('#CouponForm input[name=dcAval]').val()
+						,maxDcAmt : $('#CouponForm input[name=maxDcAmt]').val()
+						,pdGb : $('#CouponForm select[name=pdGb]').val()
+						,availStdt : $('#CouponForm input[name=availStdt]').val()
+						,availEddt : $('#CouponForm input[name=availEddt]').val()
+						,availDays : $('#CouponForm input[name=availDays]').val()
+						,custPubLimitQty : $('#CouponForm input[name=custPubLimitQty]').val()
+						,totPubLimitQty : $('#CouponForm input[name=totPubLimitQty]').val()
+						,onePubQtyy : $('#CouponForm input[name=onePubQtyy]').val()
+						,downStdt : $('#CouponForm input[name=downStdt]').val()
+						,downEddt : $('#CouponForm input[name=downEddt]').val()
+						,buyLimitAmt : $('#CouponForm input[name=buyLimitAmt]').val()
+						,cpnStat : $('#CouponForm select[name=cpnStat]').val()
+						,endAlimYn : $('#CouponForm select[name=endAlimYn]').val()
+						,firstOrdYn : $('#CouponForm select[name=firstOrdYn]').val()
+						,downAblYn : $('#CouponForm select[name=downAblYn]').val()
+						,custJoinStdt : $('#CouponForm input[name=custJoinStdt]').val()
+						,custJoinEddt : $('#CouponForm input[name=custJoinEddt]').val()
+						,buyStdt : $('#CouponForm input[name=buyStdt]').val()
+						,buyEddt : $('#CouponForm input[name=buyEddt]').val()
+						,newCustYn : $('#CouponForm select[name=newCustYn]').val()
+						,afChannel : $('#CouponForm select[name=afChannel]').val()
+						,dcCdGb : $('input:radio[name="dcCdGb"]:checked').val()
+						,rdCpnNm : $('input:radio[name="rdCpnNm"]:checked').val()
+						,supplyCompList : gagaAgGrid.getAllRowData(supplyGridOptions)
+						,brandList : gagaAgGrid.getAllRowData(brandGridOptions)
+						,applyGoodsList : gagaAgGrid.getAllRowData(goodsGridOptions)
+						,exceptGoodsList : gagaAgGrid.getAllRowData(excepGoodsGridOptions)
+						,cateList : gagaAgGrid.getAllRowData(cateGridOptions)
+						,burdenList : gagaAgGrid.getAllRowData(inComGridOptions)
+						,usableCustGbArr : usableCustGbArr
+						,usableCustGradeArr : usableCustGradeArr
+						,payTypeArr : payTypeArr
+				};
+
+				var jsonData = JSON.stringify(data);
+
+				gagajf.ajaxJsonSubmit($('#CouponForm').prop('action'), jsonData, fnCouponSaveCollback);
+
 			}
 		});
 	}
 
+	var fnCouponSaveCollback = function (result){
+		console.log('AAAAAA');
+	}
+
 	function fnCouponCreate2(){
 		mcxDialog.confirm('저장하시겠습니까?' , {
 			cancelBtnText:"취소",
@@ -786,6 +834,28 @@
 	}
 
 	function checkValidation(){
+		// 사용가능고객구분 체크박스 체크
+		var usableCustGbCnt = $('#CouponForm input:checkbox[name=usableCustGbArr]').length;
+		if(usableCustGbCnt<1){
+			mcxDialog.alert("사용가능고객구분을 체크해주세요.");
+			$('#CouponForm input:checkbox[name=usableCustGbArr]').focus();
+			return;
+		}
+		// 사용가능고객등급 체크박스 체크
+		var usableCustGradeCnt = $('#CouponForm input:checkbox[name=usableCustGradeArr]').length;
+		if(usableCustGradeCnt<1){
+			mcxDialog.alert("사용가능고객등급을 체크해주세요.");
+			$('#CouponForm input:checkbox[name=usableCustGradeArr]').focus();
+			return;
+		}
+		// 결제수단 체크박스 체크
+		var payTypeCnt = $('#CouponForm input:checkbox[name=payTypeArr]').length;
+		if(payTypeCnt<1){
+			mcxDialog.alert("사용가능고객등급을 체크해주세요.");
+			$('#CouponForm input:checkbox[name=payTypeArr]').focus();
+			return;
+		}
+
 		//신규가입 지급한다면 validation 체크
 		if( $('#newCustYn option:selected').val() == "Y" ){
 			var fromDate = $('#CouponForm input[name=custJoinStdt]').val();
@@ -948,12 +1018,12 @@
 
 		// 주문서 쿠폰 선택시 결제수단 노출
 		if(radioValue == 'G230_20') {
-			//$('#CouponForm .payTypeTr').show();
-			//$('#CouponForm #payType').attr('required' , true);
+			$('#CouponForm .payTypeTr').show();
+			$('#CouponForm #payType').attr('required' , true);
 			$("#CouponForm .dcCdGb").show();		// 할인쿠폰유형 노출
 		} else {
-			//$('#CouponForm .payTypeTr').hide();
-			//$('#CouponForm #payType').attr('required' , false );
+			$('#CouponForm .payTypeTr').hide();
+			$('#CouponForm #payType').attr('required' , false );
 			$("#CouponForm .dcCdGb").hide();		// 할인쿠폰유형 숨김
 			$("#CouponForm input:radio[name='dcCdGb']:radio[value='G233_00']").prop('checked', true);		// 주문서 쿠폰이 아닐 경우 일반 쿠폰으로 설정
 		}
@@ -1415,14 +1485,14 @@
 		if($("#CouponForm #pdGb").val() == 'P') {
 			availStdt = $('#CouponForm input[name=availStDay]').val()+$('#CouponForm select[name=availStHH]').val()+$('#CouponForm select[name=availStMM]').val()+'00';
 			if($('#CouponForm select[name=availEdHH]').val() == "24"){
-				downEddt = $('#CouponForm input[name=availEdDay]').val()+'235959';
+				availEddt = $('#CouponForm input[name=availEdDay]').val()+'235959';
 			}else{
-				downEddt = $('#CouponForm input[name=availEdDay]').val()+$('#CouponForm select[name=availEdHH]').val()+$('#CouponForm select[name=availEdMM]').val()+'00';
+				availEddt = $('#CouponForm input[name=availEdDay]').val()+$('#CouponForm select[name=availEdHH]').val()+$('#CouponForm select[name=availEdMM]').val()+'00';
 			}
 			availStdt = availStdt.replace(/[^0-9]/g, '');
 			availEddt = availEddt.replace(/[^0-9]/g, '');
-			$('#CouponForm #availStdt').val(downStdt);
-			$('#CouponForm #availEddt').val(downEddt);
+			$('#CouponForm #availStdt').val(availStdt);
+			$('#CouponForm #availEddt').val(availEddt);
 			$('#CouponForm #availDays').val('');
 		} else {
 			$('#CouponForm #availStdt').val('');
@@ -1470,29 +1540,35 @@
 		}
 
 		// 적용대상 - 공급처 그리드 전체값 세팅
-		var supplyAllData = gagaAgGrid.getAllRowData(supplyGridOptions);
+		/*var supplyAllData = gagaAgGrid.getAllRowData(supplyGridOptions);
 		var jsonSupplyCompData = JSON.stringify(supplyAllData);
-		$('#CouponForm #supplyCompList').val(jsonSupplyCompData);
+		$('#CouponForm #supplyCompList').val(jsonSupplyCompData);*/
+		$('#CouponForm #supplyCompList').val(gagaAgGrid.getAllRowData(supplyGridOptions));
 		// 적용대상 - 브랜드 그리드 전체값 세팅
-		var brandAllData = gagaAgGrid.getAllRowData(brandGridOptions);
+		/*var brandAllData = gagaAgGrid.getAllRowData(brandGridOptions);
 		var jsonBrandData = JSON.stringify(brandAllData);
-		$('#CouponForm #brandList').val(jsonBrandData);
+		$('#CouponForm #brandList').val(jsonBrandData);*/
+		$('#CouponForm #brandList').val(gagaAgGrid.getAllRowData(brandGridOptions));
 		// // 적용대상 - 카테고리 그리드 전체값 세팅
-		var cateAllData = gagaAgGrid.getAllRowData(cateGridOptions);
+		/*var cateAllData = gagaAgGrid.getAllRowData(cateGridOptions);
 		var jsonCateData = JSON.stringify(cateAllData);
-		$('#CouponForm #cateList').val(jsonCateData);
+		$('#CouponForm #cateList').val(jsonCateData);*/
+		$('#CouponForm #cateList').val(gagaAgGrid.getAllRowData(cateGridOptions));
 		// 적용대상 - 적용상품 그리드 전체값 세팅
-		var goodsAllData = gagaAgGrid.getAllRowData(goodsGridOptions);
+		/*var goodsAllData = gagaAgGrid.getAllRowData(goodsGridOptions);
 		var jsonGoodsData = JSON.stringify(goodsAllData);
-		$('#CouponForm #applyGoodsList').val(jsonGoodsData);
+		$('#CouponForm #applyGoodsList').val(jsonGoodsData);*/
+		$('#CouponForm #applyGoodsList').val(gagaAgGrid.getAllRowData(goodsGridOptions));
 		// 적용대상 - 제외상품 그리드 전체값 세팅
-		var exceptGoodsAllData = gagaAgGrid.getAllRowData(excepGoodsGridOptions);
+		/*var exceptGoodsAllData = gagaAgGrid.getAllRowData(excepGoodsGridOptions);
 		var jsonExceptGoodsData = JSON.stringify(exceptGoodsAllData);
-		$('#CouponForm #excepGoodsList').val(jsonExceptGoodsData);
+		$('#CouponForm #excepGoodsList').val(jsonExceptGoodsData);*/
+		$('#CouponForm #excepGoodsList').val(gagaAgGrid.getAllRowData(excepGoodsGridOptions));
 		// 입점업체분담율 그리드 전체값 세팅
-		var inCompBurdenAllData = gagaAgGrid.getAllRowData(inComGridOptions);
+		/*var inCompBurdenAllData = gagaAgGrid.getAllRowData(inComGridOptions);
 		var jsonInCompBurdenData = JSON.stringify(inCompBurdenAllData);
-		$('#CouponForm #burdenList').val(jsonInCompBurdenData);
+		$('#CouponForm #burdenList').val(jsonInCompBurdenData);*/
+		$('#CouponForm #burdenList').val(gagaAgGrid.getAllRowData(inComGridOptions));
 
 	}
 
@@ -1625,39 +1701,51 @@
 			}
 
 			// 쿠폰다운 날짜
-			let edDtArr = cpnDetail.downEddt.split(" ");
-			if(edDtArr[1] == "23:59:59") {
-				edHour = "24";
-				edMinute = "00";
-				$("#CouponForm #downEdMM option").hide();
-				$('#CouponForm #downEdMM option:first').show().prop("selected", true);
+			let edDtArr;
+			if(!gagajf.isNull(cpnDetail.downEddt)){
+				edDtArr = cpnDetail.downEddt.split(" ");
+				if(edDtArr[1] == "23:59:59") {
+					edHour = "24";
+					edMinute = "00";
+					$("#CouponForm #downEdMM option").hide();
+					$('#CouponForm #downEdMM option:first').show().prop("selected", true);
+				}
 			}
 
 			// 유효 날짜
-			let availEdDtArr = cpnDetail.availEddt.split(" ");
-			if(availEdDtArr[1] == "23:59:59") {
-				edHour = "24";
-				edMinute = "00";
-				$("#CouponForm #availEdMM option").hide();
-				$('#CouponForm #availEdMM option:first').show().prop("selected", true);
+			let availEdDtArr;
+			if(!gagajf.isNull(cpnDetail.availEddt)){
+				availEdDtArr = cpnDetail.availEddt.split(" ");
+				if(availEdDtArr[1] == "23:59:59") {
+					edHour = "24";
+					edMinute = "00";
+					$("#CouponForm #availEdMM option").hide();
+					$('#CouponForm #availEdMM option:first').show().prop("selected", true);
+				}
 			}
 
 			// 첫구매 날짜
-			let firstBuyEdDtArr = cpnDetail.buyEddt.split(" ");
-			if(firstBuyEdDtArr[1] == "23:59:59") {
-				edHour = "24";
-				edMinute = "00";
-				$("#CouponForm #buyEdMM option").hide();
-				$('#CouponForm #buyEdMM option:first').show().prop("selected", true);
+			let firstBuyEdDtArr;
+			if(!gagajf.isNull(cpnDetail.buyEddt)){
+				firstBuyEdDtArr = cpnDetail.buyEddt.split(" ");
+				if(firstBuyEdDtArr[1] == "23:59:59") {
+					edHour = "24";
+					edMinute = "00";
+					$("#CouponForm #buyEdMM option").hide();
+					$('#CouponForm #buyEdMM option:first').show().prop("selected", true);
+				}
 			}
 
 			// 신규가입 날짜
-			let custJoinEdDtArr = cpnDetail.custJoinEddt.split(" ");
-			if(custJoinEdDtArr[1] == "23:59:59") {
-				edHour = "24";
-				edMinute = "00";
-				$("#CouponForm #custJoinEdMM option").hide();
-				$('#CouponForm #custJoinEdMM option:first').show().prop("selected", true);
+			let custJoinEdDtArr;
+			if(!gagajf.isNull(cpnDetail.custJoinEddt)){
+				custJoinEdDtArr = cpnDetail.custJoinEddt.split(" ");
+				if(custJoinEdDtArr[1] == "23:59:59") {
+					edHour = "24";
+					edMinute = "00";
+					$("#CouponForm #custJoinEdMM option").hide();
+					$('#CouponForm #custJoinEdMM option:first').show().prop("selected", true);
+				}
 			}
 
 			/*