bin2107 5 anni fa
parent
commit
94640032b4

+ 46 - 4
src/main/java/com/style24/persistence/domain/Coupon.java

@@ -1,22 +1,24 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.core.support.util.CryptoUtils;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
+import java.util.List;
+
 @SuppressWarnings("serial")
 @Data
 public class Coupon extends TscBaseDomain {
     // TB_COUPON
-    private int    cpnId;					// 쿠폰ID
+    private Integer cpnId;					// 쿠폰ID
     private String cpnNm;					// 쿠폰명
     private String siteCd;					// 사이트코드(공통코드G000)
     private String afLinkCd;				// 제휴링크코드
     private String usableCustGb;			// 사용가능고객구분(공통코드G100)
     private String usableCustGrade;		    // 사용가능고객등급(공통코드G110)
     private String cpnType;				    // 쿠폰유형(공통코드G230)
-    private String cpnTarget;               // 쿠폰대상(공통코드G260)
     private String applyScope;				// 적용범위(A:전체, I:개별). "I:개별"이고 쿠폰유형이 "20:장바구니쿠폰" 외 이면 TB_COUPON_REFVAL 참조
     private String dcWay;					// 할인방식(공통코드G240)
     private int    dcPval;					// 할인값(PC). 할인방식이 금액이면 할인금액, 율이면 할인율
@@ -26,8 +28,6 @@ public class Coupon extends TscBaseDomain {
     private String pdGb;					// 기간/일수구분(P:기간, D:일수)
     private String availStdt;				// 유효시작일시(기간/일수구분 "P:기간"일 때 사용됨)
     private String availEddt;				// 유효종료일시(기간/일수구분 "P:기간"일 때 사용됨)
-    private String availStdtTime;			// 유효시작일시(시분초까지)
-    private String availEddtTime;			// 유효종료일시(시분초까지)
     private int    availDays;				// 유효일수(기간/일수구분 "D:일수"일 때 사용됨)
     private int    custPubLimitQty;		    // 고객당발행제한수량(0은 무제한)
     private int    totPubLimitQty;			// 총발행제한수량(0은 무제한)
@@ -57,7 +57,49 @@ public class Coupon extends TscBaseDomain {
 
     private String supplyCompCd;
     private String mdNo;
+
+    private int custNo;
     private String custNm;
+    private String custGbNm;
+    private String custGradeNm;
+    private String useYn;
+    private String usedDt;
+    private String pubReason;
+    private String pubReasonNm;
+    private String pubReasonDtl;
+    private String refVal;
+    private String secondRefVal;
+    private String useCondition;
+    private String issueCondition;
+    private String expireYn;
+    private int cpnCnt;
+    private String tgtCondition;
+    private String quickYn;
+
+    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;           //  제외상품시퀀스
+    private String cpnDesc;             // 쿠폰설명
+
+    private String scmYn;
+
+    // 사용가능고객구분
+    @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;

+ 46 - 3
src/main/java/com/style24/scm/biz/web/TssMarketingController.java

@@ -635,6 +635,10 @@ public class TssMarketingController extends TssBaseController {
 	public ModelAndView couponCreatePopup(@RequestParam(value = "mode") String mode, @RequestParam(value = "cpnId", required = false) Integer cpnId) {
 		ModelAndView mav = new ModelAndView();
 		log.info("[couponCreatePopup]",cpnId);
+		// 입점업체담당자는 업체코드 설정
+		if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {
+//			param.setRegNo(TssSession.getInfo().getUserNo());
+		}
 		String num = "";
 		int issueCnt = 0;
 
@@ -677,7 +681,7 @@ public class TssMarketingController extends TssBaseController {
 		String[] exceptCds = {"G008_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
 		// 입점업체 조회
-//		mav.addObject("ibSupplyCompList", rendererService.getSupplyCompanyList("", "N"));
+		mav.addObject("ibSupplyCompList", rendererService.getSupplyCompanyList(TssSession.getInfo().getSupplyCompCd()));
 		// 할인 쿠폰 코드 조회
 //		mav.addObject("dcCdList", rendererService.getCommonCodeList("G233", "Y"));
 		// 정상/이월 조회
@@ -720,7 +724,7 @@ public class TssMarketingController extends TssBaseController {
 			// 쿠폰상세조회
 			mav.addObject("cpnDetail", coreCouponService.getCouponDetail(cpnId));
 			// 쿠폰적용대상 - 공급업체 조회
-//			mav.addObject("cpnDtlRefvalSupplyCompList", coreCouponService.getCouponRefvalSupplyCompList(cpnId));
+			mav.addObject("cpnDtlRefvalSupplyCompList", coreCouponService.getCouponRefvalSupplyCompList(cpnId));
 			// 쿠폰적용대상 - 적용상품 조회
 			mav.addObject("cpnDtlRefvalApplyGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_10"));
 			// 쿠폰적용대상 - 카테고리 조회
@@ -730,7 +734,7 @@ public class TssMarketingController extends TssBaseController {
 			// 쿠폰적용대상 - 제외상품 조회
 			mav.addObject("cpnDtlRefvalExceptGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_14"));
 			// 쿠폰 입점업체분담율 조회
-//			mav.addObject("cpnDtlBurdenList", coreCouponService.getCouponBurdenList(cpnId));
+			mav.addObject("cpnDtlBurdenList", coreCouponService.getCouponBurdenList(cpnId));
 			// 시리얼 및 난수 쿠폰 조회
 //			mav.addObject("randomCpnList", coreCouponService.getRandomCouponInfo(cpnId));
 			// 쿠폰사용가능고객구분 조회
@@ -753,5 +757,44 @@ public class TssMarketingController extends TssBaseController {
 		mav.setViewName("marketing/CouponPopupForm");
 		return mav;
 	}
+
+	/**
+	 * 쿠폰 저장
+	 * @param coupon - 쿠폰 정보
+	 * @return
+	 * @author xyzp1539
+	 * @since 2021. 1. 11
+	 */
+	@PostMapping("/coupon/save")
+	@ResponseBody
+	public GagaResponse saveCoupon(@RequestBody Coupon coupon) {
+		log.info("couponSave : {}", coupon);
+		coupon.setRegNo(TssSession.getInfo().getUserNo());
+		coupon.setUpdNo(TssSession.getInfo().getUserNo());
+		String result = coreCouponService.saveCoupon(coupon);
+		if (!"SUCCESS".equals(result)) {
+			return super.error(message.getMessage(result));
+		}
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 쿠폰발급받은 회원리스트 팝업
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021-02-03
+	 */
+	@GetMapping("/coupon/pubCust/popup/form")
+	@ResponseBody
+	public ModelAndView couponPubCustListPopup(@RequestParam(value = "cpnId", required = true) Integer cpnId) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("cpnPubCustList", coreCouponService.getCpnPubCustList(cpnId));
+
+		mav.setViewName("marketing/CouponPubCustListPopupForm");
+		return mav;
+	}
    
 }

+ 105 - 35
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -29,6 +29,7 @@
 					<div class="tabsNav">
 						<li class="on"><a href="#coupontab1">기본정보</a></li>
 						<li><a href="#coupontab2">적용대상</a></li>
+						<li><a href="#coupontab3">입점업체분담율</a></li>
 					</div>
 					<ul class="tabsCont">
 						<li class="tab on" id="coupontab1">
@@ -298,6 +299,36 @@
 								</div>
 							</div>
 						</li>
+						<li class="tab" id="coupontab3">
+							<div class="panelStyle">
+								<div class="inner-panelContent">
+									<div class="panelContent">
+										<div class="panelBar">
+											<h4>업체 분담율</h4>
+										</div>
+										<table class="frmStyle">
+											<colgroup>
+												<col style="width:15%;">
+												<col style="width:85%;">
+											</colgroup>
+											<tbody>
+											<tr>
+												<th>업체 분담율</th>
+												<td>
+													<div class="padding10 inner-tb-solid">
+														<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyBurden">업체추가</button>
+														<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelApplyBurden">선택삭제</button>
+														<br/>
+														<div id="inComGridList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+													</div>
+												</td>
+											</tr>
+											</tbody>
+										</table>
+									</div>
+								</div>
+							</div>
+						</li>
 					</ul>
 				</div>
 				<div class="mdPopBtnB aR">
@@ -320,16 +351,42 @@
 	var cpnDtlRefvalCateList = [[${cpnDtlRefvalCateList}]];
 	var cpnDtlRefvalBrandList = [[${cpnDtlRefvalBrandList}]];
 	var cpnDtlRefvalExceptGoodsList = [[${cpnDtlRefvalExceptGoodsList}]];
+	var cpnDtlBurdenList = [[${cpnDtlBurdenList}]];
 
 	var issueCnt = [[${issueCnt}]];
 
 	// 공통코드 리스트
+	var ibSupplyComList = gagajf.convertToArray([[${ibSupplyCompList}]]);
 	var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
 	var cateGbList = gagajf.convertToArray([[${cateGbList}]]);
 	var delYnList = { "Y":"Yes", "N":"No" };
 	var selfBrandList = gagajf.convertToArray([[${selfBrandList}]]);
 	var siteCdList = gagajf.convertToArray([[${siteCdList}]]);
 
+	// ag-grid 입점업체분담율 컬럼
+	var columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{ headerName: "입점업체코드" , field:"supplyCompCd" , width:150, cellClass:"text-center"} ,
+		{ headerName: "입점업체명"  , field: "supplyCompNm" , width: 120 , cellClass: 'text-center'},
+		{ headerName: "쿠폰분담율(%)", field:"burdenRate" , width:150, cellClass: "text-center" , required: true
+			,valueFormatter: function(params) {
+				if(params.value && params.value > 0) {
+					if(params.value > 100){
+						mcxDialog.alert('할인율은 100이하로 설정해주세요.');
+						params.data.burdenRate = '0';
+						return '0';
+					}
+					return params.value.addComma();
+				} else {
+					return '0';
+				}
+			},
+			cellEditorParams: { maxlength: 4, validType: 'numeric'}
+		} ,
+		{ headerName: "쿠폰번호"  , field: "cpnId" , width: 120 , cellClass: 'text-center' , hide:true},
+		{ headerName: "삭제여부"  , field: "delYn" , width: 120 , cellClass: 'text-center' , hide:true}
+	];
+
 	// ag-grid 공급처 컬럼
 	var supplyColumnDefs = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
@@ -402,12 +459,14 @@
 		{ headerName: "삭제여부"  , field: "delYn" , width: 120 , cellClass: 'text-center' , hide:true}
 	];
 
+	var inComGridOptions = gagaAgGrid.getGridOptions(columnDefs);
 	var cateGridOptions = gagaAgGrid.getGridOptions(cateSelColumnDefs);
 	var goodsGridOptions = gagaAgGrid.getGridOptions(goodsSelColumnDefs);
 	var brandGridOptions = gagaAgGrid.getGridOptions(brandSelColumnDefs);
 	var supplyGridOptions = gagaAgGrid.getGridOptions(supplyColumnDefs);
 	var excepGoodsGridOptions = gagaAgGrid.getGridOptions(excepGoodsColumnDefs);
 
+	inComGridOptions.rowSelection = "multiple";
 	goodsGridOptions.rowSelection = "multiple";
 	supplyGridOptions.rowSelection = "multiple";
 	excepGoodsGridOptions.rowSelection = "multiple";
@@ -436,6 +495,30 @@
 		excepGoodsGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(excepGoodsGridOptions)});
 	});
 
+	// 업체분담율 추가 버튼 클릭시
+	$('#CouponForm #btnAddApplyBurden').on('click', function() {
+		cfnOpenCompanyListPopup("fnSetPopupApplyBurdenInfo" ,"M");
+	});
+
+	// 분담업체율 설정 / 업체 추가 콜백함수
+	var fnSetPopupApplyBurdenInfo = function(result) {
+		// 기존 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(inComGridOptions);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(inComGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "burdenRate"  : 100, "delYn" : result[i].delYn});
+			}
+		}
+	};
+
 	// 종료시간 클릭시
 	var fnChangeEdHH = function (obj){
 		var selectId = obj.id;
@@ -631,35 +714,19 @@
 				return false;
 			}
 		}
+		var usableCustGbArr = [];
+		var usableCustGradeArr = [];
+		var payTypeArr = [];
 
 		mcxDialog.confirm('저장하시겠습니까?' , {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function () {
-				var usableCustGbArr = [];
-				var chkCustGb  = $('#CouponForm input:checkbox[name=usableCustGbArr]:checked');
-				for(let i=0; i< chkCustGb.length; i++){
-					usableCustGbArr.push(chkCustGb.eq(i).val());
-				}
-
-				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()
 					,cpnDesc : $('#CouponForm input[name=cpnDesc]').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()
@@ -678,31 +745,32 @@
 					,downEddt : $('#CouponForm input[name=downEddt]').val()
 					,buyLimitAmt : $('#CouponForm input[name=buyLimitAmt]').val().replaceAll(',','')
 					,cpnStat : $('input:radio[name="disCpnStat"]:checked').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[name="serialCpnNm"]').val()
+					,endAlimYn : 'N'
+					,firstOrdYn : 'N'
+					,downAblYn : 'Y'
+					,custJoinStdt : null
+					,custJoinEddt : null
+					,buyStdt : null
+					,buyEddt : null
+					,newCustYn : 'N'
+					,dcCdGb : 'G233_00'
+					,rdCpnNm : null
+					,usableCustGbArr : usableCustGbArr
+					,usableCustGradeArr : usableCustGradeArr
+					,payTypeArr : payTypeArr
 					,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
-					,limitedTimeCpnList : gagaAgGrid.getAllRowData(limitedTimeCpnGridOptions)
-					,afChannelList : gagaAgGrid.getAllRowData(afLinkOptions)
 					,mode : $('#CouponForm input[name=mode]').val()
+					,limitedTimeCpnList : null
+					,afChannelList : null
+					,scmYn : 'Y'
 				};
 				var jsonData = JSON.stringify(data);
+				console.log('jsonData::>>'+jsonData);
 				gagajf.ajaxJsonSubmit($('#CouponForm').prop('action'), jsonData, fnCouponSaveCollback);
 			}
 		});
@@ -1086,6 +1154,7 @@
 	}
 
 	$(document).ready(function() {
+		gagaAgGrid.createGrid('inComGridList', inComGridOptions);
 		gagaAgGrid.createGrid('brandGridList', brandGridOptions);
 		gagaAgGrid.createGrid('cateGridList', cateGridOptions);
 		gagaAgGrid.createGrid('supplyGridList', supplyGridOptions);
@@ -1127,6 +1196,7 @@
 
 		} else {
 			// 수정모드시 그리드 세팅
+			inComGridOptions.api.setRowData(cpnDtlBurdenList);
 			supplyGridOptions.api.setRowData(cpnDtlRefvalSupplyCompList);
 			goodsGridOptions.api.setRowData(cpnDtlRefvalApplyGoodsList);
 			excepGoodsGridOptions.api.setRowData(cpnDtlRefvalExceptGoodsList);

+ 72 - 0
src/main/webapp/WEB-INF/views/marketing/CouponPubCustListPopupForm.html

@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CouponPubCustListPopupForm.html
+ * @desc    : 쿠폰 발급받은 회원리스트 팝업 화면
+ *============================================================================
+ * ISTYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.03   bin2107       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="960" data-height="500" >
+	<div class="panelStyle" >
+		<div class="panelTitle">
+			<h2>쿠폰 발급받은 회원</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('CpnPubCustListPopup')"><i class="fa fa-times"></i></button>
+		</div>
+		<div class="panelContent">
+			<div id="pubCustgridList" style="width:100%; height:420px;" class="ag-theme-balham"></div>
+		</div>
+	</div>
+</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	var cpnPubCustList = [[${cpnPubCustList}]]; //gagajf.convertToArray([[${cpnPubCustList}]]);
+
+	var columnDefs = [
+		{ headerName: "회원번호" , field:"custNo" , width:100, cellClass:"text-center"} ,
+		{ headerName: "회원명" , field:"custNm" , width:120, cellClass:"text-center" } ,
+		{ headerName: "회원구분" , field:"custGbNm" , width:120, cellClass:"text-center" } ,
+		{ headerName: "회원등급" , field:"custGradeNm" , width:120, cellClass:"text-center" } ,
+		{ headerName: "시작유효기간" , field:"availStdt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.availStdt);
+			}
+		} ,
+		{ headerName: "종료유효기간" , field:"availEddt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.availEddt);
+			}
+		} ,
+		{ headerName: "사용여부" , field:"useYn" , width:120, cellClass:"text-center" } ,
+		/*{ headerName: "사용일" , field:"usedDt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.usedDt);
+			}
+		} ,*/
+		{ headerName: "발급사유" , field:"pubReasonNm" , width:200, cellClass:"text-center"} ,
+		{ headerName: "발급상세사유" , field:"pubReasonDtl" , width:200, cellClass:"text-center"} ,
+		{ headerName: "발급인ID" , field:"regNo" , width:100, cellClass:"text-center"} ,
+		{ headerName: "발급시간" , field:"regDt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.regDt);
+			}
+		}
+	];
+
+	let pubCustGridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	$(document).ready(function(){
+		gagaAgGrid.createGrid('pubCustgridList', pubCustGridOptions);
+		pubCustGridOptions.api.setRowData(cpnPubCustList);
+	});
+
+	/*]]>*/
+</script>
+</html>