Browse Source

Merge remote-tracking branch 'origin/develop' into 1004

card007 4 năm trước cách đây
mục cha
commit
63269ba1dd

+ 9 - 0
src/main/java/com/style24/admin/biz/dao/TsaSettleDao.java

@@ -86,6 +86,15 @@ public interface TsaSettleDao {
 	 */
 	Collection<SettleConfirm> getTaxBillSettleList(SettleConfirm settleConfirm);
 
+	/**
+	 * 상품권현황 목록
+	 * @param giftcardSettle - 상품권정산 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 16
+	 */
+	Collection<GiftcardSettle> getGiftcardStatusList(GiftcardSettle giftcardSettle);
+
 	/**
 	 * 상품권정산 목록
 	 * @param giftcardSettle - 상품권정산 정보

+ 11 - 0
src/main/java/com/style24/admin/biz/service/TsaSettleService.java

@@ -166,6 +166,17 @@ public class TsaSettleService {
 		}
 	}
 
+	/**
+	 * 상품권현황 목록
+	 * @param giftcardSettle - 상품권정산 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 16
+	 */
+	public Collection<GiftcardSettle> getGiftcardStatusList(GiftcardSettle giftcardSettle) {
+		return settleDao.getGiftcardStatusList(giftcardSettle);
+	}
+
 	/**
 	 * 상품권정산 목록
 	 * @param giftcardSettle - 상품권정산 정보

+ 12 - 1
src/main/java/com/style24/admin/biz/web/TsaSettleController.java

@@ -1,5 +1,6 @@
 package com.style24.admin.biz.web;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
@@ -370,7 +371,17 @@ public class TsaSettleController extends TsaBaseController {
 	@PostMapping("/giftcard/list")
 	@ResponseBody
 	public Collection<GiftcardSettle> getGiftcardSettleList(@RequestBody GiftcardSettle giftcardSettle) {
-		return settleService.getGiftcardSettleList(giftcardSettle);
+		Collection<GiftcardSettle> dataList = new ArrayList<GiftcardSettle>();
+
+		if (giftcardSettle.getTermGb().equals("SETTLE_YM")) { // 기간조건이 "정산월"이면
+			// 상품권정산 목록
+			dataList = settleService.getGiftcardSettleList(giftcardSettle);
+		} else {
+			// 상품권현황 목록
+			dataList = settleService.getGiftcardStatusList(giftcardSettle);
+		}
+
+		return dataList;
 	}
 
 	/**

+ 6 - 4
src/main/java/com/style24/persistence/domain/GiftcardSettle.java

@@ -21,14 +21,16 @@ public class GiftcardSettle extends TscBaseDomain {
 	private Integer custNo;		// 고객번호
 	private String custId;		// 고객ID
 	private int chgGfcdAmt;		// 전환금액(=최초등록금액)
-	private int uymGfcdAmt;		// 사용월사용금액
 	private int usGfcdAmt;		// 누적사용금액
-	private int rmGfcdAmt;		// 잔여금액
+	private int rmGfcdAmt;		// 잔여금액(=잔액)
+	private int useGfcdAmt;		// 정산월사용금액
+	private int cnclGfcdAmt;	// 정산월취소금액
+	private int prevRmGfcdAmt;	// 전월기준잔액
 
 	// 검색조건
-	private String termGb;		// 기간구분(REG_DT: 등록일, EXPIRE_DT: 사용만료일)
+	private String termGb;		// 기간구분(SETTLE_YM: 정산월, REG_DT: 등록일, EXPIRE_DT: 사용만료일)
+	private String settleYm;	// 정산월
 	private String startDt;		// 시작일자
 	private String endDt;		// 종료일자
-	private String useYm;		// 사용월
 
 }

+ 60 - 28
src/main/java/com/style24/persistence/mybatis/shop/TsaSettle.xml

@@ -578,36 +578,20 @@
 		WHERE  U.USAC_YM = REPLACE(#{settleYm},'-','')
 	</select>
 	
-	<!-- 상품권정산 목록 -->
-	<select id="getGiftcardSettleList" parameterType="GiftcardSettle" resultType="GiftcardSettle">
-		/* TsaSettle.getGiftcardSettleList */
-		SELECT CG.GFCD_NO                                              /*상품권번호*/
-		     , DATE_FORMAT(CG.REG_DT,'%Y-%m-%d')       AS REG_DT       /*등록일*/
-		     , DATE_FORMAT(CG.USE_EXP_DATE,'%Y-%m-%d') AS USE_EXP_DATE /*사용만료일*/
-		     , CASE WHEN NOW() <![CDATA[<]]> CG.USE_EXP_DATE THEN 'Y'
-		            ELSE 'N'
-		       END                                     AS AVAIL_YN     /*유효여부*/
-		     , CG.CUST_NO                                              /*고객번호*/
-		     , C.CUST_ID                                               /*고객ID*/
-		     , CG.CHG_GFCD_AMT                                         /*전환금액(=최초등록금액)*/
-		     , IFNULL(CGH.GFCD_AMT,0)                  AS UYM_GFCD_AMT /*사용월사용금액*/
-		     , CG.US_GFCD_AMT                                          /*누적사용금액*/
-		     , CG.RM_GFCD_AMT                                          /*잔여금액*/
+	<!-- 상품권현황 목록 -->
+	<select id="getGiftcardStatusList" parameterType="GiftcardSettle" resultType="GiftcardSettle">
+		/* TsaSettle.getGiftcardStatusList */
+		SELECT CG.GFCD_NO                                                                          /*상품권번호*/
+		     , DATE_FORMAT(CG.REG_DT,'%Y-%m-%d')                                   AS REG_DT       /*등록일*/
+		     , DATE_FORMAT(CG.USE_EXP_DATE,'%Y-%m-%d')                             AS USE_EXP_DATE /*사용만료일*/
+		     , CASE WHEN NOW() <![CDATA[<]]> CG.USE_EXP_DATE THEN 'Y' ELSE 'N' END AS AVAIL_YN     /*유효여부*/
+		     , CG.CUST_NO                                                                          /*고객번호*/
+		     , C.CUST_ID                                                                           /*고객ID*/
+		     , CG.CHG_GFCD_AMT                                                                     /*전환금액(=최초등록금액)*/
+		     , CG.US_GFCD_AMT                                                                      /*누적사용금액*/
+		     , CG.RM_GFCD_AMT                                                                      /*잔여금액*/
 		FROM   TB_CUST_GIFTCARD CG
 		INNER JOIN TB_CUSTOMER C ON CG.CUST_NO = C.CUST_NO
-		LEFT OUTER JOIN (
-		                 SELECT CUST_NO
-		                      , CUST_GFCD_SQ
-		                      , SUM(GFCD_AMT) AS GFCD_AMT
-		                 FROM   TB_CUST_GIFTCARD_HST
-		                 WHERE  1 = 1
-		                 <if test="useYm != null and useYm != ''">
-		                 AND    REG_DT <![CDATA[>=]]> STR_TO_DATE(CONCAT(#{useYm},'-01'),'%Y-%m-%d')
-		                 AND    REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(CONCAT(#{useYm},'-01'),'%Y-%m-%d'), INTERVAL 1 MONTH)
-		                 </if>
-		                 GROUP  BY CUST_NO, CUST_GFCD_SQ
-		                ) CGH ON CG.CUST_NO = CGH.CUST_NO
-		                     AND CG.CUST_GFCD_SQ = CGH.CUST_GFCD_SQ
 		WHERE  1 = 1
 		<choose>
 		    <when test="termGb == 'EXPIRE_DT'"> <!-- 사용만료일 -->
@@ -625,6 +609,54 @@
 		ORDER  BY CG.GFCD_NO
 	</select>
 	
+	<!-- 상품권정산 목록 -->
+	<select id="getGiftcardSettleList" parameterType="GiftcardSettle" resultType="GiftcardSettle">
+		/* TsaSettle.getGiftcardSettleList */
+		SELECT CG.GFCD_NO                                                                              /*상품권번호*/
+		     , DATE_FORMAT(CG.REG_DT,'%Y-%m-%d')                                   AS REG_DT           /*등록일*/
+		     , DATE_FORMAT(CG.USE_EXP_DATE,'%Y-%m-%d')                             AS USE_EXP_DATE     /*사용만료일*/
+		     , CASE WHEN NOW() <![CDATA[<]]> CG.USE_EXP_DATE THEN 'Y' ELSE 'N' END AS AVAIL_YN         /*유효여부*/
+		     , CG.CUST_NO                                                                              /*고객번호*/
+		     , C.CUST_ID                                                                               /*고객ID*/
+		     , CG.CHG_GFCD_AMT                                                                         /*전환금액(=최초등록금액)*/
+		     , IFNULL(CGH1.USE_GFCD_AMT,0)                                         AS USE_GFCD_AMT     /*정산월사용금액*/
+		     , IFNULL(CGH1.CNCL_GFCD_AMT,0)                                        AS CNCL_GFCD_AMT    /*정산월취소금액*/
+		     , CG.CHG_GFCD_AMT - IFNULL(CGH2.PREV_USE_GFCD_AMT,0)                  AS PREV_RM_GFCD_AMT /*전월기준잔액*/
+		     , (CG.CHG_GFCD_AMT - IFNULL(CGH2.PREV_USE_GFCD_AMT,0))
+		       - IFNULL(CGH1.USE_GFCD_AMT,0) + IFNULL(CGH1.CNCL_GFCD_AMT,0)        AS RM_GFCD_AMT      /*잔액(=최초등록금액 - 전월까지의누적사용금액 - 정산월사용금액 + 정산월취소금액)*/
+		FROM   TB_CUST_GIFTCARD CG
+		INNER JOIN TB_CUSTOMER C ON CG.CUST_NO = C.CUST_NO
+		LEFT OUTER JOIN (
+		                 /*정산월기준 사용금액과 취소금액*/
+		                 SELECT CUST_NO
+		                      , CUST_GFCD_SQ
+		                      , -1 * SUM(CASE WHEN OCCUR_GB IN ('G074_12','G074_19') THEN GFCD_AMT ELSE 0 END) AS USE_GFCD_AMT  /*사용금액*/
+		                      , SUM(CASE WHEN OCCUR_GB IN ('G074_13','G074_18') THEN GFCD_AMT ELSE 0 END)      AS CNCL_GFCD_AMT /*취소금액*/
+		                 FROM   TB_CUST_GIFTCARD_HST
+		                 WHERE  CUST_GFCD_SQ = 16
+		                 AND    REG_DT <![CDATA[>=]]> STR_TO_DATE(CONCAT(#{settleYm},'-01'),'%Y-%m-%d')
+		                 AND    REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(CONCAT(#{settleYm},'-01'),'%Y-%m-%d'), INTERVAL 1 MONTH)
+		                 GROUP  BY CUST_NO, CUST_GFCD_SQ
+		                ) CGH1 ON CG.CUST_NO = CGH1.CUST_NO
+		                      AND CG.CUST_GFCD_SQ = CGH1.CUST_GFCD_SQ
+		LEFT OUTER JOIN (
+		                 /*전월까지의 사용누적금액*/
+		                 SELECT CUST_NO
+		                      , CUST_GFCD_SQ
+		                      , -1 * SUM(GFCD_AMT) AS PREV_USE_GFCD_AMT
+		                 FROM   TB_CUST_GIFTCARD_HST
+		                 WHERE  CUST_GFCD_SQ = 16
+		                 AND    REG_DT <![CDATA[<]]> STR_TO_DATE(CONCAT(#{settleYm},'-01'),'%Y-%m-%d')
+		                 GROUP  BY CUST_NO, CUST_GFCD_SQ
+		                ) CGH2 ON CG.CUST_NO = CGH2.CUST_NO
+		                      AND CG.CUST_GFCD_SQ = CGH2.CUST_GFCD_SQ
+		WHERE  1 = 1
+		<if test="availYn != null and availYn != ''">
+		AND    (CASE WHEN NOW() <![CDATA[<]]> CG.USE_EXP_DATE THEN 'Y' ELSE 'N' END) = #{availYn}
+		</if>
+		ORDER  BY CG.GFCD_NO
+	</select>
+	
 	<!-- 제휴채널정산 목록 -->
 	<select id="getAfLinkFeeList" parameterType="AfLinkFee" resultType="AfLinkFee">
 		/* TsaSettle.getAfLinkFeeList */

+ 120 - 28
src/main/webapp/WEB-INF/views/settle/GiftcardSettleForm.html

@@ -36,24 +36,36 @@
 						<col style="width:10%;"/>
 					</colgroup>
 					<tr>
-						<th>기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<th>구분<i class="required" title="필수" aria-hidden="true"></i></th>
 						<td>
 							<select name="termGb">
+								<option value="SETTLE_YM">정산월</option>
 								<option value="REG_DT">등록일</option>
 								<option value="EXPIRE_DT">사용만료일</option>
 							</select>
-							<span id="terms">
+							<span id="spanSettle">
+								<input type="text" class="schMonth w60" name="settleYm" id="settleYm" maxlength="7"/>
+								<button type="button" class="btn icn schBtn" data-id="useYm"><i class="fa fa-calendar" aria-hidden="true"></i></button>
+							</span>
+							<span id="terms" style="display: none;">
+								<span class="nowrap">
+									<input name="startDt" id="startDt" type="text" class="w80 schDate" maxlength="8"/>
+									~
+									<input name="endDt" id="endDt" type="text" class="w80 schDate" maxlength="8"/>
+								</span>
+								<button type="button" class="btn btn-default btn-sm btnToday" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 't');">오늘</button>
+								<button type="button" class="btn btn-default btn-sm btnYesterday" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'y');">어제</button>
+								<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', '7d');">최근한주</button>
+								<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'tw');">이번주</button>
+								<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'pw');">지난주</button>
+								<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', '1m');">최근한달</button>
+								<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'tm');">이번달</button>
+								<button type="button" class="btn btn-default btn-sm btnYesterMonth" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'pm');">지난달</button>
+								<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', '3m');">최근3개월</button>
 							</span>
 						</td>
-						<th>사용월<i class="required" title="필수" aria-hidden="true"></i></th>
-						<td>
-							<input type="text" class="schMonth w60" name="useYm" id="useYm" maxlength="7" required="required"/>
-							<button type="button" class="btn icn schBtn" data-id="useYm"><i class="fa fa-calendar" aria-hidden="true"></i></button>
-						</td>
-					</tr>
-					<tr>
 						<th>유효상품권</th>
-						<td colspan="3">
+						<td>
 							<select name="availYn">
 								<option value="">[전체]</option>
 								<option value="Y">Yes</option>
@@ -66,7 +78,7 @@
 				<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="$('#searchForm')[0].reset();">초기화</button>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
 					</li>
 				</ul>
 			</form>
@@ -97,43 +109,123 @@
 		{ headerName: "유효여부", field: "availYn", width: 100, cellClass: 'text-center' },
 		{ headerName: "회원ID", field: "custId", width: 100, cellClass: 'text-center' },
 		{ 
-			headerName: "최초등록금액", field: "chgGfcdAmt", width: 120, cellClass: 'text-right',
-			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
-			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+			headerName: "최초등록금액", field: "chgGfcdAmt", width: 150, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
 		},
 		{
-			headerName: "사용월사용금액", field: "uymGfcdAmt", width: 120, cellClass: 'text-right',
-			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
-			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+			headerName: "누적사용금액", field: "usGfcdAmt", width: 150, cellClass: 'text-right', hide: true,
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
 		},
 		{
-			headerName: "누적사용금액", field: "usGfcdAmt", width: 100, cellClass: 'text-right',
-			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
-			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+			headerName: "정산월 사용금액", field: "useGfcdAmt", width: 150, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
 		},
 		{
-			headerName: "잔액", field: "rmGfcdAmt", width: 120, cellClass: 'text-right',
-			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
-			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+			headerName: "정산월 취소금액", field: "cnclGfcdAmt", width: 150, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: "잔액", field: "rmGfcdAmt", width: 150, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
 		}
 	];
 
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
 
+	let gb = 'SETTLE_YM';
+	
 	// 검색
 	$('#btnSearch').on('click', function() {
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		if (gb == 'SETTLE_YM') { // 정산월
+			if (gagajf.isNull($('#searchForm input[name=settleYm]').val())) {
+				mcxDialog.alertC('정산월을 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#searchForm input[name=settleYm]').focus();
+					}
+				});
+				return false;
+			}
+		} else {
+			if (gagajf.isNull($('#searchForm input[name=startDt]').val())) {
+				mcxDialog.alertC('시작일자를 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#searchForm input[name=startDt]').focus();
+					}
+				});
+				return false;
+			}
+			
+			if (gagajf.isNull($('#searchForm input[name=endDt]').val())) {
+				mcxDialog.alertC('종료일자를 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#searchForm input[name=endDt]').focus();
+					}
+				});
+				return false;
+			}
+			
+			var fromDate = $('#searchForm input[name=startDt]').val().toDate('YYYY-MM-DD');
+			var toDate = $('#searchForm input[name=endDt]').val().toDate('YYYY-MM-DD');
+			
+			if (fromDate > toDate) {
+				mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+				$('#searchForm input[name=endDt]').focus();
+				return false;
+			}
+		}
+		
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', function() {
+			fnShowOrHideColumn();
+		});
+	});
+	
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		$('#searchForm')[0].reset();
+		$('#settleYm').val((new Date()).before(0, 1, 0).format("YYYY-MM"));
+		$('.btnYesterMonth').trigger('click');
+		$('#searchForm select[name=termGb]').trigger('change');
 	});
 	
 	// 엑셀다운로드
 	$('#btnExcel').on('click', function() {
-		gagaAgGrid.exportToExcel('상품권정산 목록', gridOptions);
+		gagaAgGrid.exportToExcel('상품권 목록', gridOptions);
 	});
 	
+	// 구분 선택 시
+	$('#searchForm select[name=termGb]').on('change', function() {
+		gb = $('#searchForm select[name=termGb]').val();
+		
+		if (gb == 'SETTLE_YM') { // 정산월
+			$('#spanSettle').show();
+			$('#terms').hide();
+		} else {
+			$('#spanSettle').hide();
+			$('#terms').show();
+		}
+		
+		fnShowOrHideColumn();
+		gridOptions.api.setRowData();
+	});
+	
+	var fnShowOrHideColumn = function() {
+		if (gb == 'SETTLE_YM') { // 정산월
+			gagaAgGrid.showOrHideColumn(gridOptions, 'usGfcdAmt', false);
+			gagaAgGrid.showOrHideColumn(gridOptions, 'useGfcdAmt', true);
+			gagaAgGrid.showOrHideColumn(gridOptions, 'cnclGfcdAmt', true);
+		} else {
+			gagaAgGrid.showOrHideColumn(gridOptions, 'usGfcdAmt', true);
+			gagaAgGrid.showOrHideColumn(gridOptions, 'useGfcdAmt', false);
+			gagaAgGrid.showOrHideColumn(gridOptions, 'cnclGfcdAmt', false);
+		}
+	}
+	
 	$(document).ready(function() {
-		cfnCreateCalendar('#terms', 'startDt', 'endDt', true);
-		$('.btnThisMonth').trigger('click');
-		$('#useYm').val((new Date()).before(0, 1, 0).format("YYYY-MM"));
+		$('#settleYm').val((new Date()).before(0, 1, 0).format("YYYY-MM"));
+		$('.btnYesterMonth').trigger('click');
 		
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);