Quellcode durchsuchen

상품관련메뉴 화면만 생성

eskim vor 5 Jahren
Ursprung
Commit
2cc5097b1c

+ 8 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaCommonDao.java

@@ -48,5 +48,13 @@ public interface TsaCommonDao {
 	 */
 	String getSampleFileSystemFilename(String sampleFileId);
 
+	/**
+	 * ERP 연동 여부
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 01. 16
+	 */
+	String getErpSyncYn();
 
 }

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

@@ -68,4 +68,17 @@ public class TsaCommonService {
 		return commonDao.getSampleFileSystemFilename(sampleFileId);
 	}
 
+	/**
+	 * ERP 연동 여부
+	 *
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2020. 01. 16
+	 */
+	public String getErpSyncYn() {
+		return commonDao.getErpSyncYn();
+	}
+
+
 }

+ 40 - 4
style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -21,8 +21,10 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.style24.admin.biz.service.TsaCommonService;
 import com.style24.admin.biz.service.TsaGoodsService;
 import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.biz.service.TsaSystemService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
@@ -42,6 +44,7 @@ import com.style24.persistence.domain.Itemkind;
 import com.style24.persistence.domain.NotiInfo;
 import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.NoticeGoods;
+import com.style24.persistence.domain.User;
 import com.style24.persistence.domain.Video;
 import com.style24.persistence.domain.WmsColorMapping;
 import com.style24.persistence.domain.WmsSeasonMapping;
@@ -79,6 +82,12 @@ public class TsaGoodsController extends TsaBaseController {
 	@Autowired
 	private TsaRendererService rendererService;
 
+	@Autowired
+	private TsaCommonService commonService;
+
+	@Autowired
+	private TsaSystemService systemService;
+
 	/**
 	 * 품목관리 화면
 	 *
@@ -1030,6 +1039,21 @@ public class TsaGoodsController extends TsaBaseController {
 	public ModelAndView massRegisterForm() {
 		ModelAndView mav = new ModelAndView();
 
+		// 상품상태
+		mav.addObject("goodsStatList", rendererService.getAvailCommonCodeList("G008"));
+		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+		// ERP 연동여부
+		mav.addObject("erpSyncYn", commonService.getErpSyncYn());
+		// 정보고시 목록
+		mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
+		// 사용자 업체
+		User loginInfo = systemService.getUser(TsaSession.getInfo().getUserNo());
+		String supplyCompCd = "NONE";
+		if (loginInfo != null) {
+			supplyCompCd = loginInfo.getSupplyCompCd();
+		}
+		mav.addObject("supplyCompCd", supplyCompCd);
 		mav.setViewName("goods/GoodsMassRegisterForm");
 
 		return mav;
@@ -1046,6 +1070,12 @@ public class TsaGoodsController extends TsaBaseController {
 	public ModelAndView wmsInstockForm() {
 		ModelAndView mav = new ModelAndView();
 
+		// 상품상태
+		String[] exceptCds = {"G008_00"};
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
+		// 품목
+		mav.addObject("itemkindList", rendererService.getAllItemkindList());
+
 		mav.setViewName("goods/GoodsWmsInstockForm");
 
 		return mav;
@@ -1104,17 +1134,23 @@ public class TsaGoodsController extends TsaBaseController {
 
 
 	/**
-	 * 상품 가격예약 관리 화면
+	 * 입점 가격 관리 화면
 	 *
 	 * @return
 	 * @author eskim
 	 * @since 2020. 10. 16
 	 */
-	@GetMapping("/price/form")
+	@GetMapping("/supply/price/form")
 	public ModelAndView priceForm() {
 		ModelAndView mav = new ModelAndView();
-
-		mav.setViewName("goods/GoodsPriceForm");
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
+		// 상품상태
+		String[] exceptCds = {"G008_00"};
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
+		// 정상이월
+		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
+		mav.setViewName("goods/GoodsSupplyPriceForm");
 
 		return mav;
 	}

+ 2 - 2
style24.admin/src/main/java/com/style24/persistence/domain/GoodsSearch.java

@@ -57,8 +57,8 @@ public class GoodsSearch extends TscBaseDomain {
 	private String callBackFun;
 	private String applyStdt;
 	private String applyEddt;
-	private String sizeCd;
-	private String colorCd;
+	private String optCd2;	//옵션2
+	private String colorCd;	//옵션1
 	private String beforSkipFlag;
 	private String goodsTnm;
 	private String imageViewYn;

+ 9 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaCommon.xml

@@ -62,4 +62,13 @@
 		FROM   TB_SAMPLE_FILE
 		WHERE  SAMPLE_FILE_ID = #{sampleFileId}
 	</select>
+	
+	<!-- ERP 연동 여부 -->
+	<select id="getErpSyncYn" resultType="String">
+		/* TsaSystem.getErpSyncYn */
+		SELECT UPPER(NVL(USE_YN,'N')) AS ERP_SYNC_YN
+		FROM TB_COMMON_CODE
+		WHERE CD_GB = 'G077'
+		AND CD = 'ERPSYNCYN'
+	</select>
 </mapper>

+ 10 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaStock.xml

@@ -245,6 +245,11 @@
 		            INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		            INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		            INNER JOIN TB_OPTION ST ON G.GOODS_CD = ST.GOODS_CD
+		            <if test="searchGb == null or searchGb =='BASIC'">
+		                                    <if test="optCd2 == null or optCd2 != ''">
+		                                    AND ST.OPT_CD2 = ${optCd2}
+		                                    </if>
+		            </if>
 		            LEFT OUTER JOIN  (SELECT GOODS_CD,
 		                                     OPT_CD,
 		                                     SUM((CASE SELL_GB WHEN '10' THEN 1
@@ -388,6 +393,11 @@
 		                    INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		                    INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		                    INNER JOIN TB_OPTION ST ON G.GOODS_CD = ST.GOODS_CD
+		                    <if test="searchGb == null or searchGb =='BASIC'">
+		                                            <if test="optCd2 == null or optCd2 != ''">
+		                                            AND ST.OPT_CD2 = ${optCd2}
+		                                            </if>
+		                    </if>
 		                    LEFT OUTER JOIN  (SELECT GOODS_CD,
 		                                             OPT_CD,
 		                                             SUM((CASE SELL_GB WHEN '10' THEN 1

+ 460 - 0
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsInstockAlarmForm.html

@@ -0,0 +1,460 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsInstockAlarmForm.html
+ * @desc    : 재입고알림관리
+ *============================================================================
+ * PASTEL
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.18   eskim   최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/goods/inStockAlarm/list'}">
+		<input type="hidden" id="searchGb" name="searchGb" />
+ 		<!-- 패널 영역1 -->
+		<div class="panelStyle" >
+			<div class="panelTitle">
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중  하나를 꼭 입력해 주세요.</h3>
+			</div>
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col width="13%"/>
+						<col width="37%"/>
+						<col width="13%"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>업체/브랜드</th>
+						<td>
+							<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>
+							<select name="brandCd" id="brandCd">
+								<option value="">[전체]</option>
+							</select>
+						</td>
+						<th>키워드</th>
+						<td>
+							<select name="search" id="search">
+								<option value="searchGoodsCd">상품코드</option>
+								<option value="searchGoodsNum">품번</option>
+								<option value="searchGoodsNm">상품명</option>
+								<option value="searchColorNm">색상명</option>
+								<option value="searchSizeNm">옵션명</option>
+							</select>
+							<input type="text" class="w50p" name="condition" id="condition" maxlength="50"/>
+						</td>
+					</tr>
+					<tr>
+						<th>카테고리</th>
+						<td colspan="3">
+							<input name="siteCd" id="siteCd" type="hidden" value="10"/>
+							<input name="selLvl" id="selLvl" type="hidden"/>
+							<input name="cateCd" id="cateCd" type="hidden"/>
+							<input name="cateType" id="cateType" type="hidden"/>
+							<select name="cateGb" id="selCate1" onchange="fnChangeSelect($(this).val(), 2);">
+								<option value="">[카테고리구분]</option>
+								<option th:if="${cateGbList}" th:each="oneData, status : ${cateGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<select id="selCate2" name="tcateCd" onchange="fnChangeSelect($(this).val(), 3);">
+								<option value="">[대카테고리]</option>
+							</select>
+							<select id="selCate3" name="mcateCd" onchange="fnChangeSelect($(this).val(), 4);">
+								<option value="">[중카테고리]</option>
+							</select>
+							<select id="selCate4" name="scateCd" onchange="fnChangeSelect($(this).val(), 5);">
+								<option value="">[소카테고리]</option>
+							</select>
+							<select id="selCate5" name="dcateCd" onchange="fnChangeSelect($(this).val(), 6);">
+								<option value="">[세카테고리]</option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>일자</th>
+						<td colspan="3" id="sellTerms"></td>
+					</tr>
+					<tr>
+						<th>발송여부</th>
+						<td colspan="3">
+							<select id="alarmYn" name="alarmYn">
+								<option value="">[전체]</option>
+								<option value="N">미발송</option>
+								<option value="Y">발송완료</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
+						<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
+					</li>
+				</ul>
+			</div>
+			<!-- //검색조건 영역 -->
+		</div>
+		<!-- 패널 영역1 -->
+		<div class="panelStyle">
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-primary btn-lg" id="inStockAlarmSend">재입고알림 발송</button>
+					<div class="iconTooltip">
+						<i class="fa fa-info" aria-hidden="true"></i>
+						<span class="left" style="width:300px;">
+						<!-- class="left" 또는 class="right" -->
+							PC재고, MO재고, APP재고 3가지 재고가 모두 있고, <br>품절여부가 아닐 때, 재입고알림 발송이 가능합니다.
+						</span>
+					</div>
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<!-- //상단버튼 영역  -->
+			<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>
+				</li>
+			</ul>
+			<!-- 검색결과 영역 -->
+		</div>
+		</form>
+		<!-- //패널 영역2 -->
+	</div>
+
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+
+	var sessRoleCd = [[${sessionInfo.roleCd}]];
+	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
+
+	var columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: 'No', width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
+		},
+		{headerName: "상세보기", field: "instockAlarmSq", width: 100, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return '<button type="button" class="btn btn-success btn-sm" onclick="fnOpenInStockDetailPopup(\'' + params.value + '\');">상세정보</button>';
+			}
+		},
+		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
+		{headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				if (params.data.imgType == "A"){
+					if(!gagajf.isNull(params.data.imgPath6)){
+						return '<img width="60" src="'+ uploadGoodsUrl+params.data.imgPath6.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+					}else{
+						return '<img width="60" src="'+ uploadGoodsUrl+params.value.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+					}
+				}else{
+					if(!gagajf.isNull(params.data.imgPath6)){
+						return '<img width="60" src="'+ params.data.imgPath1 + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+					}else{
+						return '<img width="60" src="'+ params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+					}
+				}
+			}
+		},
+		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 250, cellClass: 'text-left'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{headerName: "품목", field: "itemkindNm", width: 180, cellClass: 'text-center'},
+		{headerName: "신청수", field: "applycount", width: 80, cellClass: 'text-center'},
+		{headerName: "가용재고", field: "currStockQty" , width: 100, cellClass: 'text-center'},
+		{headerName: "색상명", field: "colorEnm", width: 150, cellClass: 'text-center'},
+		{headerName: "옵션", field: "sizeNm" , width: 80, cellClass: 'text-center'},
+		{headerName: "최초 접수일시", field: "updDt", width: 120, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD") : '';
+			}
+		},
+		{headerName: "알림 발송일시", field: "alarmDt", width: 120, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD") : '';
+			}
+		}
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복 선택 가능
+	gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+	gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+
+	// Row Click
+	gridOptions.onCellClicked = function(event) {
+		var goodsCd = event.data.goodsCd;
+		if (event.colDef.field == "goodsNm"){
+			cfnOpenGoodsDetailPopup('U',goodsCd);
+		}else if (event.colDef.field == "goodsCd"){
+			
+		}
+	}
+
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		fnInit();
+	});
+	
+	var fnInit = function(){
+		$('#searchForm')[0].reset();
+	}
+	
+	// 조회클릭시
+	$('#btnSearch').on('click', function() {
+		$("#searchForm input[name=pageNo]").val('1');
+		fnInStockAlarmListSearch();
+	});
+
+	// 조회
+	var fnInStockAlarmListSearch = function(gbn) {
+
+		$("#searchForm input[name=searchGb]").val("BASIC");
+		
+		if(!fnConditionCheck()) return;
+		
+		gagaPaging.init('searchForm', fnSearchCallBack, 'goodsListPagination', $('#searchForm').find('#pageSize').val());
+		gagaPaging.load($("#searchForm input[name=pageNo]").val());
+	}
+
+	//검색 조건 확인
+	var fnConditionCheck = function(){
+		var formId = '#searchForm';
+		var form = document.searchForm;
+
+		if($("#searchForm input[name=searchGb]").val() == "EXCEL") return true;
+		
+		var searchFlag = false;
+		var cnt = 0;
+
+		for (i = 0; i < form.elements.length; i++ ) {
+			var el = form.elements[i];
+
+			if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize" && el.name != "termGb")) {
+				if (!(el.value == null || el.value == "")) {
+					cnt++;
+				}
+			}
+		}
+			
+		if(cnt > 0) searchFlag = true;
+
+		if(searchFlag == false){
+			gagaAlert.alert("검색조건을 입력하세요.", function(){
+
+			});
+			return false;
+		}
+		
+		var fromDate = $('#searchForm input[name=stDate]').val();
+		var toDate = $('#searchForm input[name=edDate]').val();
+		
+		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
+			
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				gagaAlert.alert("등록일 조회시 시작일자와 종료일자를 입력하세요.", function() {
+					$('#searchForm input[name=stDate]').focus();
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				gagaAlert.alert("노출기간 시작일자는 종료일자 보다 클 수 없습니다.", function() {
+					$('#searchForm input[name=stDate]').focus();
+				});
+				return false;
+			} 
+		}
+
+		return true;
+	}
+
+	var fnChangeSelect = function(val, selLvl){
+		$("#cateCd").val('');
+		$('#tcateCd').val('');
+		$('#mcateCd').val('');
+		$('#scateCd').val('');
+		$('#dcateCd').val('');
+		if(val==''){
+			if(selLvl>1){
+				selLvl = selLvl - 1;
+				if(selLvl>2){
+					$("#cateCd").val($("#selCate"+(selLvl-1)).val());
+				}
+			}else{
+				selLvl = '';
+			}
+		}else{
+			if(selLvl>2){
+				$("#cateCd").val(val);
+			}
+		}
+		$("#searchForm input[name=selLvl]").val(selLvl);
+		$("#searchForm input[name=searchGb]").val("BASIC");
+		gagajf.ajaxFormSubmit('/display/category/list', "#searchForm", fnChangeCategory);
+	}
+
+	var fnChangeCategory = function(data){
+		var selLvl = $("#searchForm input[name=selLvl]").val();
+		var html = '<option value="">[선택]</option>';
+		for(var i=1; i<6; i++){
+			if(i>selLvl){
+				$("#selCate"+i).html(html);
+			}
+		}
+		for(var i=0; i<data.length; i++){
+			var cd = '';
+			var nm = '';
+			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;
+					$("#cateType").val(data[i].cateType);
+				}
+				html += '<option value="'+cd+'">['+cd+'] '+nm+'</option>';
+			}
+		}
+		$("#selCate"+selLvl).html(html);
+	}
+	
+	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());
+		gridOptions.api.setRowData(result.inStockAlarmList);
+		gagaPaging.createPagination(result.pageing.pageable);
+	}
+
+	// 재입고알림 상세정보 버튼
+	var fnOpenInStockDetailPopup = function(instockAlarmSq){
+		var actionUrl = "/goods/inStockAlarm/detail/form?instockAlarmSq=" + instockAlarmSq;
+
+		uifnPopClose('popupInStockDetail');
+		cfnOpenModalPopup(actionUrl, 'popupInStockDetail');
+	}
+	
+	//페이징 
+	$('#searchForm select[name=pageSize]').on('change', function() {
+		$("#searchForm input[name=pageNo]").val('1');
+		fnInStockAlarmListSearch($("#searchForm input[name=searchGb]").val());
+	});
+	
+	//업체변경시
+	$('#searchForm select[name=supplyCompCd]').on('change', function() {
+		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+		if(sessRoleCd == "G001_B000"){
+			actionUrl = '/renderer/brand/AuthBrandlist';
+		}
+		$("#searchForm select[name=brandCd] option:gt(0)").remove();
+
+		cfnCreateCombo(actionUrl, $('#searchForm select[name=brandCd]'), "[전체]", "");
+	});
+
+	// 재입고알림 발송
+	$('#inStockAlarmSend').click(function(e) {
+		//상품선택여부 확인처리 추가
+		var selectedData = gridOptions.api.getSelectedRows();
+
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return false;
+		}
+
+		var arrInstockAlarmSq = [];
+		var chkFlag = false;
+		$.each(selectedData, function(idx, item) {
+
+			if (item.alarmYn == "Y"){
+				chkFlag = true;
+				mcxDialog.alert(item.goodsCd +"상품은 이미 재입고알림 발송되었습니다.");
+				return false;
+			}
+
+			if (item.currStockQty < 1 || item.soldoutYn == 'Y'){
+				chkFlag = true;
+				mcxDialog.alert(item.goodsCd +"상품( 사이즈 : " + item.sizeNm + " )은 가용재고가 없습니다.");
+				return false;
+			}
+
+			arrInstockAlarmSq.push(item.instockAlarmSq);
+		});
+
+		if (chkFlag){
+			return;
+		}
+
+		mcxDialog.confirm('재입고알림을 발송하시겠습니까?',  {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {arrInstockAlarmSq : arrInstockAlarmSq
+				};
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/goods/inStockAlarm/send', jsonData, fnSendInstockCallBack);
+			}
+		});
+	});
+
+	// 재입고알림 발송 콜백
+	var fnSendInstockCallBack = function(){
+		fnInStockAlarmListSearch();
+	}
+	
+	$(document).ready(function() {
+		
+		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '예약일', 'X');
+
+		var selectCode = '<select  name="termGb" id="termGb">';
+		selectCode += '<option value="regDt" seledted>접수일</option>';
+		selectCode += '<option value="alarmDt">발송일</option>';
+		selectCode += '</select>';
+
+		$("#searchForm").find('#sellTerms').prepend(selectCode);
+
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+
+	});
+
+/*]]>*/
+</script>
+ 	
+</html>

+ 103 - 0
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -236,6 +236,7 @@
 			<ul class="panelBar">
 				<li class="right">
 					<button type="button" class="btn btn-info btn-sm"  onclick="fnGoodsStatArea();" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">상태일괄적용</button>
+					<button type="button" class="btn btn-info btn-sm" onclick="fnGoodsStaSelfNotArea();" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">입점상태일괄적용</button>
 				</li>
 			</ul>
 			<ul class="boxContent off" id="goodsStatArea">
@@ -330,6 +331,26 @@
 					</table>
 				</li>
 			</ul>
+			<ul class="boxContent off" id="goodsStatSelfNoArea">
+				<li class="pad20">
+					<table class="frmStyle">
+						<colgroup>
+							<col width="7%"/>
+							<col/>
+						</colgroup>
+						<tr>
+							<th>상품상태</th>
+							<td>
+								<select  name="goodsStatNC" id="goodsStatNC">
+									<option value="">[선택]</option>
+									<option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+								</select>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsStateSelfNo('goodsStat')">적용</button>
+							</td>
+						</tr>
+					</table>
+				</li>
+			</ul>
 			<!-- 검색결과 영역 -->
 		</div>
 		</form>
@@ -801,6 +822,71 @@
 			}
 		});
 	}
+	
+	// 입점 상품상태 변경시
+	var fnChangeGoodsStateSelfNo = function(proc){
+
+		var objId = '#'+proc+"NC";
+		
+		if (gagajf.isNull($(objId).val())){
+			mcxDialog.alertC('적용하실 항목을 선택(입력)해주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(objId).focus();
+				}
+			});
+			return;
+		}
+	
+		var selectedData = gridOptions.api.getSelectedRows();
+
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		
+		var checkFlag = false;
+		$.each(selectedData, function(idx, item) {
+			if (item.selfGoodsYn == 'Y'){
+				checkFlag = true;
+				mcxDialog.alert('자사상품은 수정하실 수 없습니다.');
+				return;
+			}
+		});
+		
+		if (checkFlag){
+			return false;
+		}
+		
+		var goodsStatVal  = '';
+
+		if (proc == "goodsStat") {
+			goodsStatVal = $(objId).val();
+		}else{
+			return;
+		}
+
+		mcxDialog.confirm('적용 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var arrGoodsCd = [];
+
+				$.each(selectedData, function(idx, item) {
+					arrGoodsCd.push(item.goodsCd);
+				});
+
+				var data = {arrGoodsCd: arrGoodsCd
+							,goodsStat : goodsStatVal
+							,procJob : proc
+							};
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/goods/state/update', jsonData, fnChangeGoodsStateCollback);
+
+			}
+		});
+	}
 
 	var fnChangeGoodsStateCollback = function(result){
 		if (result.resultFlag == "FAIL"){
@@ -817,12 +903,29 @@
 		if ($("#searchForm").find("#goodsStatArea").hasClass('off')) {
 			$("#searchForm").find("#goodsStatArea").removeClass('off');
 			$("#searchForm").find("#goodsStatArea").addClass('on');
+			
+			$("#searchForm").find("#goodsStatSelfNoArea").removeClass('on');
+			$("#searchForm").find("#goodsStatSelfNoArea").addClass('off');
 		}else{
 			$("#searchForm").find("#goodsStatArea").removeClass('on');
 			$("#searchForm").find("#goodsStatArea").addClass('off');
 		}
 	}
 	
+	// 입점 상태일괄변경 버튼 클릭시
+	var fnGoodsStaSelfNotArea = function(){
+		if ($("#searchForm").find("#goodsStatSelfNoArea").hasClass('off')) {
+			$("#searchForm").find("#goodsStatSelfNoArea").removeClass('off');
+			$("#searchForm").find("#goodsStatSelfNoArea").addClass('on');
+			
+			$("#searchForm").find("#goodsStatArea").removeClass('on');
+			$("#searchForm").find("#goodsStatArea").addClass('off');
+		}else{
+			$("#searchForm").find("#goodsStatSelfNoArea").removeClass('on');
+			$("#searchForm").find("#goodsStatSelfNoArea").addClass('off');
+		}
+	}
+	
 	//세트상품구성 클릭 시
 	$('#btnGoodsSetMake').click(function(e) {
 		cfnOpenGoodsSetPopup();

+ 435 - 0
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsMassRegisterForm.html

@@ -0,0 +1,435 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"        >
+<!--
+ *******************************************************************************
+ * @source  : GoodsMassRegisterForm.html
+ * @desc    : 대량상품등록
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.18   eskim       최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- 검색조건 영역 -->
+		<form id="massForm" name="massForm" >
+		<div class="panelStyle">
+			<ul class="notice">
+				<li>상품을 대량으로 등록하는 페이지입니다.</li>
+				<li>상품을 등록 할 경우 [승인대기] 상태이며, STYLE 관리자의 [승인완료] 상태 변경 후 FRONT애 노출이 가능합니다.</li>
+				<li><th:block th:if="${erpSyncYn == 'N'}"><em><b>ERP연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
+			</ul>
+			<ul class="panelBar">
+				<li class="center">
+					<th:block th:if="${sessionInfo.roleCd == 'G001_0000' 
+									or sessionInfo.roleCd == 'G001_A000' 
+									or sessionInfo.roleCd == 'G001_A001' 
+									or sessionInfo.roleCd == 'G001_A100' 
+									or sessionInfo.roleCd == 'G001_A101'
+									or (sessionInfo.roleCd == 'G001_E000' and ( #strings.isEmpty(supplyCompCd) or supplyCompCd =='P'  or supplyCompCd =='T') )
+									}">
+						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF001');">자사상품 등록양식 다운로드</button>
+						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsSelfCreate" >자사상품 등록</button>
+					</th:block>
+					<th:block th:if="${sessionInfo.roleCd == 'G001_0000' 
+									or sessionInfo.roleCd == 'G001_A000' 
+									or sessionInfo.roleCd == 'G001_A001' 
+									or sessionInfo.roleCd == 'G001_A100' 
+									or sessionInfo.roleCd == 'G001_B000' 
+									or (sessionInfo.roleCd == 'G001_E000' and (#strings.isEmpty(supplyCompCd) or (supplyCompCd != 'P' and supplyCompCd != 'T')) )
+									}">
+						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF005');">입점상품 등록양식 다운로드</button>
+						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsCreate" >입점상품 등록</button>
+					</th:block>
+					<label class="off"><a href="javascript:void(0);" id="excelList" style="display: none;">엑셀다운로드</a></label>
+					<!--  추후 대량 수정 권한-->
+					<span th:if="${sessionInfo.roleCd == 'G001_0000' 
+									or sessionInfo.roleCd == 'G001_A000' 
+									or sessionInfo.roleCd == 'G001_A001' 
+									or sessionInfo.roleCd == 'G001_A100' 
+									or sessionInfo.roleCd == 'G001_A101'
+									or sessionInfo.roleCd == 'G001_B000' 
+								}" 
+							th:style="'padding-left:80px;'">
+						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF014');">상품대량수정 등록양식 다운로드</button>
+						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >입점상품 등록</button>
+					</span>
+				</li>
+			</ul>
+		</div>
+		<div class="panelStyle" >
+			<!-- 검색조건 영역 -->
+			<div class="panelTitle">
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 하나를 꼭 입력해 주세요.</h3>
+			</div>
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col width="10%"/>
+						<col width="40%"/>
+						<col width="10%"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>상품코드<i class="star"></i></th>
+						<td><input type="text" class="w130" name="condition" id="condition" maxlength="50"/></td>
+						<th>등록여부</th>
+						<td>
+							<select  name="regSuccYn" id="regSuccYn">
+								<option value="">[전체]</option>
+								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>등록일<i class="star"></i></th>
+						<td colspan="3" id="sellTerms"></td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
+						<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
+					</li>
+				</ul>
+			</div>
+			<!-- //검색조건 영역 -->
+		</div>
+		<div class="panelStyle">
+			<!-- 검색결과 영역 -->
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li class="left">
+					<!-- 아이콘 툴팁 -->
+					<div class="iconTooltip">
+						<i class="fa fa-info" aria-hidden="true"></i>
+						<span class="left aL" style="width:580px;">
+						<!-- class="left" 또는 class="right" -->
+							<em>상품미등록</em><br/>
+							- 상품코드 오류 : 빈값, 길이 11이 아닐경우, '_'가 미존재<br/>
+							- 업체 오류 : 빈값, 'W'나 'F' 가 아닌경우<br/>
+							- 상품명 오류 : 빈값<br/>
+							- 제조국 오류 : 빈값<br/>
+							- 제조년월일 오류 : 빈값, 날짜형식이 맞는지<br/>
+							- ERP 미존재 상품코드 : ERP에 상품코드가 존재하는지<br/>
+							- 스타일 연도 오류 : 온라인에서 관리되지 않는 스타일 연도<br/>
+							- 성별 오류 : 온라인에서 관리되지 않는 성별<br/>
+							- 컬러 오류 : 온라인에서 관리되지 않는 컬러<br/>
+							- 상품코드 중복등록요청 : 등록된 상품코드 등록요청<br/>
+							- 품목 오류 : 온라인에서 관리되지 않는 품목<br/>
+							- ERP 브랜드 오류 : 온라인에서 관리되지 않는 ERP 브랜드<br/>
+							- 이미지 유형 오류 : 온라인에서 관리되지 않는 이미지유형<br/>
+							- 상품이미지 필수 오류 : IMG_PATH1
+							- 품목의 고시정보 없음 : 품목의 고시분류 매핑이 안되어 있는 경우<br/>
+							- 고시분류 오류 : 등록요청 고시분류 와 온라인에서 품목과 매핑된 고시분류가 다른 경우<br/>
+							<em>상품등록</em><br/>
+							- ERP 상품 사이즈 정보 없음 : ERP에 상품코드의 사이즈가 없을 경우<br/>
+						</span>
+					</div>
+					<!-- //아이콘 툴팁 -->
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnGoodsRegExcelDownLoad">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //상단버튼 영역  -->
+			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham"></div>
+			<!-- 검색결과 영역 -->
+		</div>
+		<!-- //검색조건 영역 -->
+		</form>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var niClsfCdList = gagajf.convertToArray([[${niClsfCdList}]]);
+	var columnDefs = [
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "작업일시", field: "regDt", width: 150, cellClass: 'text-center'},
+		{headerName: "상품등록여부", field: "regSuccYn", width: 100, cellClass: 'text-center'},
+		{headerName: "등록결과메세지", field: "regFailRsn", width: 200, cellClass: 'text-left'},
+		{headerName: "등록브랜드코드", field: "brandCd", width: 120, cellClass: 'text-center'},
+		{headerName: "업체코드", field: "supplyCompCd", width: 130, cellClass: 'text-center'},
+		{headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 150, cellClass: 'text-left'},
+		{headerName: "상품타이틀", field: "goodsTnm", width: 150, cellClass: 'text-left'},
+		{headerName: "검색어", field: "goodsSnm1", width: 150, cellClass: 'text-left'},
+		{headerName: "제조국", field: "makeNm", width: 100, cellClass: 'text-center'},
+		{headerName: "제조일", field: "makeYmd", width: 100, cellClass: 'text-center'},
+		{headerName: "이지미타입", field: "imgType", width: 100, cellClass: 'text-center'},
+		{headerName: "이미지경로1", field: "imgPath1", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로2", field: "imgPath2", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로3", field: "imgPath3", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로4", field: "imgPath4", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로5", field: "imgPath5", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로6", field: "imgPath6", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로7", field: "imgPath7", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로8", field: "imgPath8", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로9", field: "imgPath9", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로10", field: "imgPath10", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로11", field: "imgPath11", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로12", field: "imgPath12", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로13", field: "imgPath13", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로14", field: "imgPath14", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로15", field: "imgPath15", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로16", field: "imgPath16", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로17", field: "imgPath17", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로18", field: "imgPath18", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로19", field: "imgPath19", width: 200, cellClass: 'text-left'},
+		{headerName: "이미지경로20", field: "imgPath20", width: 200, cellClass: 'text-left'},
+		{headerName: "고시분류코드", field: "niClsfCd", width: 200, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(niClsfCdList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(niClsfCdList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(niClsfCdList, params.newValue); }
+		},
+		{headerName: "고시내용1", field: "niContent1", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용2", field: "niContent2", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용3", field: "niContent3", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용4", field: "niContent4", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용5", field: "niContent5", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용6", field: "niContent6", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용7", field: "niContent7", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용8", field: "niContent8", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용9", field: "niContent9", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용10", field: "niContent10", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용11", field: "niContent11", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용12", field: "niContent12", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용13", field: "niContent13", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용14", field: "niContent14", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용15", field: "niContent15", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용16", field: "niContent16", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용17", field: "niContent17", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용18", field: "niContent18", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용19", field: "niContent19", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용20", field: "niContent20", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용21", field: "niContent21", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용22", field: "niContent22", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용23", field: "niContent23", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용24", field: "niContent24", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용25", field: "niContent25", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용26", field: "niContent26", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용27", field: "niContent27", width: 200, cellClass: 'text-left'},
+		{headerName: "고시내용28", field: "niContent28", width: 200, cellClass: 'text-left'},
+		{headerName: "브랜드", field: "brandCd", width: 100, cellClass: 'text-center'},
+		{headerName: "품목", field: "itemkindCd", width: 100, cellClass: 'text-center'},
+		{headerName: "스타일연도", field: "styleYear", width: 100, cellClass: 'text-center'},
+		{headerName: "시즌", field: "seasonCd", width: 80, cellClass: 'text-center'},
+		{headerName: "성별", field: "sexGb", width: 80, cellClass: 'text-center'},
+		{headerName: "품번", field: "goodsNum", width: 100, cellClass: 'text-center'},
+		{headerName: "형태", field: "shapeCd", width: 80, cellClass: 'text-center'},
+		{headerName: "색상", field: "colorCd", width: 80, cellClass: 'text-center'},
+		{headerName: "TAG가", field: "tagPrice", width: 100, cellClass: 'text-center'},
+		{headerName: "정상가", field: "listPrice", width: 100, cellClass: 'text-center'},
+		{headerName: "판매가", field: "currPrice", width: 100, cellClass: 'text-center'},
+		{headerName: "공급업체상품코드", field: "supplyGoodsCd", width: 130, cellClass: 'text-center'},
+		{headerName: "정상이월", field: "formalGb", width: 100, cellClass: 'text-center'},
+		/* {headerName: "옵션문자열", field: "optStr", width: 200, cellClass: 'text-center'},
+		{headerName: "안전재고문자열", field: "baseStockStr", width: 200, cellClass: 'text-center'},
+		{headerName: "현재고문자열", field: "currStockStr", width: 200, cellClass: 'text-center'}, */
+		{headerName: "매입유형", field: "buyingType", width: 80, cellClass: 'text-center'}
+	];
+
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	$(document).ready(function() {
+		
+		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일', 'X');
+		gagaAgGrid.createGrid('gridList', gridOptions);
+		
+	});
+	
+	//자사상품대량등록 클릭시
+	$('#btnGoodsSelfCreate').on('click', function() {
+		cfnExcelUploadPopup('createSelfGoods', 'createSelfGoods');
+	});
+	
+	var createSelfGoods = function(result){
+		var data = {procJob : result.procJob
+					,excelFileNm : result.excelFileNm
+					};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/goods/mass/excelupload/create', jsonData, fnGoodsSelfCreateCallBack);
+	}
+	
+	var fnGoodsSelfCreateCallBack = function(result){
+		
+		var date = new Date();
+		$("#massForm input[name=stDate]").val(date.format("YYYY-MM-DD"));
+		$("#massForm input[name=edDate]").val(date.format("YYYY-MM-DD"));
+		fnGoodsListSearch();
+	}
+	
+	//입점상품대량등록 클릭시
+	$('#btnGoodsCreate').on('click', function() {
+		cfnExcelUploadPopup('createGoods', 'createGoods');
+	});
+	
+	var createGoods = function(result){
+		var data = {procJob : result.procJob
+					,excelFileNm : result.excelFileNm
+					};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/goods/mass/excelupload/create', jsonData, fnGoodsCreateCallBack);
+	}
+	
+	var fnGoodsCreateCallBack = function(result){
+		
+		var date = new Date();
+		$("#massForm input[name=stDate]").val(date.format("YYYY-MM-DD"));
+		$("#massForm input[name=edDate]").val(date.format("YYYY-MM-DD"));
+		fnGoodsListSearch();
+	}
+	
+	//상품대량수정 클릭시
+	$('#btnGoodsUpdate').on('click', function() {
+		cfnExcelUploadPopup('updateGoods', 'updateGoods');
+	});
+	
+	var updateGoods = function(result){
+		var data = {procJob : result.procJob
+					,excelFileNm : result.excelFileNm
+					};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/goods/mass/excelupload/update', jsonData, fnGoodsUpdateCallBack);
+	}
+	
+	var fnGoodsUpdateCallBack = function(result){
+		
+		var date = new Date();
+		$("#massForm input[name=stDate]").val(date.format("YYYY-MM-DD"));
+		$("#massForm input[name=edDate]").val(date.format("YYYY-MM-DD"));
+		fnGoodsListSearch();
+	}
+	
+	$('#btnGoodsRegExcelDownLoad').on('click', function() {
+		
+		var date = new Date().format("YYYYMMDDHHmmss");
+		var params = {
+			
+			fileName : "상품대량등록결과_"+ date,
+			sheetName: "DATA"
+		}
+		gridOptions.excelStyles = [
+			{
+				id: 'text-center',
+				dataType: 'string',
+				font: {size : 10, bold: false}
+			},
+			{
+				id: 'text-left',
+				dataType: 'string',
+				font: {size : 10, bold: false}
+			}
+		]
+		
+		gridOptions.api.exportDataAsExcel(params);
+		
+	});
+	
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		$('#massForm')[0].reset();
+	});
+	
+	// 조회클릭시
+	$('#btnSearch').on('click', function() {
+		
+		if( gagajf.isNull($("#massForm input[name=condition]").val())
+			&& gagajf.isNull($("#massForm input[name=stDate]").val()) 
+			&& gagajf.isNull($("#massForm input[name=edDate]").val())){
+			
+			mcxDialog.alertC("검색조건을 입력하세요.",  {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#massForm input[name=condition]').focus();
+				}
+			});
+			return false;
+		}
+		
+		var fromDate = $('#massForm input[name=stDate]').val();
+		var toDate = $('#massForm input[name=edDate]').val();
+		
+		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
+			
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#massForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alertC("노출기간 시작일자는 종료일자 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#massForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			} 
+		}
+		fnGoodsListSearch();
+	});
+	
+	// 조회
+	var fnGoodsListSearch = function(gbn) {
+		gagaAgGrid.fetch('/goods/reg/log/list', gridOptions, '#massForm');
+	}
+	
+	//안내팝업
+	var fnGoodsOpenCommentPopup = function(id) {
+		var str = '<div class="popupWrap" id="'+id+'" style="z-index:30">';
+		str = str + '<div class="popup modeless ui-widget-content ui-draggable ui-draggable-handle" style="display: block;  position: relative;">';
+		str = str + '<button type="button" class="close" onclick="uifnPopClose(\''+id+'\')"><i class="fa fa-times"></i></button>';
+		str = str + '<div class="mdPopContent">';
+		str = str + '<ul class="notice ">';
+		str = str + '- <em>상품미등록</em>';
+		str = str + '<li>상품코드 오류 : 빈값, 길이 11, \'_\'가 존재하는지</li>';
+		str = str + '<li>업체 오류 : 빈값, \'W\'나 \'F\' 가 아닌경우</li>';
+		str = str + '<li>상품명 오류 : 빈값</li>';
+		str = str + '<li>제조국 오류 : 빈값</li>';
+		str = str + '<li>제조년월일 오류 : 빈값, 날짜형식이 맞는지</li>';
+		str = str + '<li>ERP 미존재 상품코드 : ERP에 상품코드가 존재하는지</li>';
+		str = str + '<li>스타일 연도 오류 : 온라인에서 관리되지 않는 스타일 연도</li>';
+		str = str + '<li>성별 오류 : 온라인에서 관리되지 않는 성별</li>';
+		str = str + '<li>컬러 오류 : 온라인에서 관리되지 않는 컬러</li>';
+		str = str + '<li>상품코드 중복등록요청 : 등록된 상품코드 등록요청</li>';
+		str = str + '<li>품목 오류 : 온라인에서 관리되지 않는 품목</li>';
+		str = str + '<li>ERP 브랜드 오류 : 온라인에서 관리되지 않는 ERP 브랜드</li>';
+		str = str + '<li>이미지 유형 오류 : 온라인에서 관리되지 않는 이미지유형</li>';
+		str = str + '<li>상품이미지 필수 오류 : A타입 : IMG_PATH1: 정사각형이미지(앞면),IMG_PATH3: 작사각형이미지(정면),<br/></li>';
+		str = str + '<span style="padding-left:185px;"></span>';
+		str = str + 'IMG_PATH4: 직사각형이미지(뒷면), IMG_PATH5: 상품상세컷(통자)';
+		str = str + '<li>상품이미지 필수 오류 : B타입 : IMG_PATH1, IMG_PATH2</li>';
+		str = str + '<li>품목의 고시정보 없음 : 품목의 고시분류 매핑이 안되어 있는 경우</li>';
+		str = str + '<li>고시분류 오류 : 등록요청 고시분류 와 온라인에서 품목과 매핑된 고시분류가 다른 경우</li>';
+		str = str + '- <em>상품등록</em>';
+		str = str + '<li>ERP 상품 사이즈 정보 없음 : ERP에 상품코드의 사이즈가 없을 경우</li>';
+		str = str + '</ul>';
+		str = str + '</div></div></div>';
+
+		if ($('#'+ id).length == 0) {
+			$('body').append(str);
+		}
+		$("#"+id).css({display:"block"});
+	}
+	
+/*]]>*/
+</script>
+</html>

+ 344 - 0
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsSupplyPriceForm.html

@@ -0,0 +1,344 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsSupplyPriceForm.html
+ * @desc    : 입점 상품 가격 승인  관리
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.18   eskim       최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<form id="goodsPriceHstForm" name="goodsPriceHstForm" action="#" th:action="@{'/goods/price/hst/list'}">
+		<input type="hidden" id="confirmY" name="confirmY">
+ 		<!-- 패널 영역1 -->
+		<div class="panelStyle" >
+			<div class="panelTitle">
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 하나를 꼭 입력해 주세요.</h3>
+			</div>
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col width="10%"/>
+						<col width="40%"/>
+						<col width="10%"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>업체/브랜드</th>
+						<td>
+							<select name="supplyCompCd" id="supplyCompCd">
+								<option value="" th:if="${sessionInfo.roleCd} != 'A101'">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<select name="brandCd" id="brandCd">
+								<option value="">[전체]</option>
+							</select>
+						</td>
+						<th>상품코드</th>
+						<td>
+							<input type="text" class="w150" name="goodsCd" id="goodsCd" maxlength="50"/>
+						</td>
+					</tr>
+					<tr>
+						<th>발생일</th>
+						<td colspan="3" id="sellTerms"></td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
+						<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>&nbsp;&nbsp;&nbsp;&nbsp;
+						<button type="button" class="btn btn-base btn-lg" id="btnConfirmSearch" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">미승인목록 조회</button>
+					</li>
+				</ul>
+			</div>
+			<!-- //검색조건 영역 -->
+		</div>
+		<!-- 패널 영역1 -->
+		<div class="panelStyle">
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-success btn-lg" id="btnSaveGoodsPriceConfirm" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">승인</button>
+				</li>
+			</ul>
+			<!-- //상단버튼 영역  -->
+			<!-- 검색결과 영역 -->
+			<div id="gridList" style="width: 100%; height: 550px;" class="ag-theme-balham"></div>
+			<!-- 검색결과 영역 -->
+		</div>
+		</form>
+		<!-- //패널 영역2 -->
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var sessRoleCd = [[${sessionInfo.roleCd}]];
+	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
+	var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
+	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 params.node.rowIndex + 1 }},
+		{headerName: "등록일", field: "regYmd", width: 90, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDD").format("YYYY-MM-DD") : '';
+			}
+		},
+		{headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{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: "onPrice", width: 120, cellClass: 'text-right'
+			,valueFormatter: function(params) {return params.value.addComma();}
+		},
+		{headerName: "판매가조정대상금액", field: "gapPrice", width: 140, cellClass: 'text-right'
+			,cellRenderer: function(params) {
+				var gapPrice = Number(params.data.onPrice) - Number(params.data.erpPrice);
+				
+				if (gapPrice >= 0){
+					return '<font color="red"> '+ gapPrice.addComma() +'</font>';
+				}else{
+					return '<font color="blue"> '+ gapPrice.addComma() +'</font>';
+				}
+			}
+		},
+		{headerName: "온라인 판매수수료", field: "onTagPrice", width: 140, cellClass: 'text-right'
+			,valueFormatter: function(params) {return params.value.addComma();}
+		},
+		{headerName: "판매수수료 조정대상수수료", field: "gapTagPrice", width: 180, cellClass: 'text-right'
+			,cellRenderer: function(params) {
+				var gapTagPrice = Number(params.data.onTagPrice) - Number(params.data.erpTagPrice);
+				
+				if (gapTagPrice >= 0){
+					return '<font color="red"> '+ gapTagPrice.addComma() +'</font>';
+				}else{
+					return '<font color="blue"> '+ gapTagPrice.addComma() +'</font>';
+				}
+			}
+		},
+		{headerName: "승인자", field: "applyId", width: 130, cellClass: 'text-center'},
+		{headerName: "승인일자", field: "applyDt" , width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "등록일시", field: "regDt", width: 180, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "등록자", field: "regId" , width: 100, cellClass: 'text-center'}
+		
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복 선택 가능
+	gridOptions.rowSelection = 'multiple';
+ 	gridOptions.suppressRowClickSelection = true;
+	//gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+	
+	// Row Click
+	gridOptions.onCellClicked = function(event) {
+		var goodsCd = event.data.goodsCd;
+		if (event.colDef.field == "goodsCd"){
+			cfnOpenGoodsDetailPopup('U',goodsCd);
+		}
+	}
+	
+	gridOptions.excelStyles = [
+			{
+				id: 'text-center',
+				dataType: 'string',
+				font: {size : 10, bold: false}
+			},
+			{
+				id: 'text-left',
+				dataType: 'string',
+				font: {size : 10, bold: false}
+			},
+			{
+				id: 'text-right',
+				font: {size : 10, bold: false}
+			}
+		]
+		
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		fnInit();
+	});
+	
+	var fnInit = function(){
+		$('#goodsPriceHstForm')[0].reset();
+		//$("#goodsPriceHstForm input[type=radio]").removeClass("checked");
+		$("#goodsPriceHstForm input[type=checkbox]").removeClass("checked");
+		//$("#goodsPriceHstForm input[type=radio]").parent("label").removeClass("checked");
+		$("#goodsPriceHstForm input[type=checkbox]").parent("label").removeClass("checked");
+		$("#goodsPriceHstForm input[type=radio][checked]").parent("label").addClass("checked");
+	}
+	
+	// 조회클릭시
+	$('#btnSearch').on('click', function() {
+		fnGoodsPriceHstListSearch('N');
+	});
+
+	// 미승인목록 조회클릭시
+	$('#btnConfirmSearch').on('click', function() {
+		fnGoodsPriceHstListSearch('Y');
+	});
+	
+	// 조회
+	var fnGoodsPriceHstListSearch = function(confirmY) {
+		
+		$("#goodsPriceHstForm input[name=confirmY]").val(confirmY);
+		
+		if(!fnConditionCheck()) return;
+		
+		var formId = "#goodsPriceHstForm";
+		gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
+	}
+
+	//검색 조건 확인
+	var fnConditionCheck = function(){
+		var formId = '#goodsPriceHstForm';
+		var form = document.goodsPriceHstForm;
+
+		if ($("#goodsPriceHstForm input[name=confirmY]").val() == "Y") return true;
+		
+		var searchFlag = false;
+		var cnt = 0;
+
+		/* if( !gagajf.isNull($("#goodsPriceHstForm select[name=supplyCompCd]").val())
+				|| !gagajf.isNull($("#goodsPriceHstForm input[name=condition]").val())
+				|| (!gagajf.isNull($("#goodsPriceHstForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsPriceHstForm input[name=edDate]").val()))
+			){
+			searchFlag = true;
+		}else{ */
+			for (i = 0; i < form.elements.length; i++ ) {
+				var el = form.elements[i];
+				
+				if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "dateGbn")) {
+					if (!(el.value == null || el.value == "")) {
+						cnt++;
+					}
+				}
+			}
+			
+			if(cnt > 0) searchFlag = true;
+			
+		/* } */
+		
+		if(searchFlag == false){
+			mcxDialog.alert("검색조건을 입력하세요.");
+			return false;
+		}
+		return true;
+	}
+	
+	//업체변경시
+	$('#goodsPriceHstForm select[name=supplyCompCd]').on('change', function() {
+		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+		if(sessRoleCd == "G001_A1001"){
+			actionUrl = '/renderer/brand/AuthBrandlist';
+		}
+		$("#goodsPriceHstForm select[name=brandCd] option:gt(0)").remove();
+
+		cfnCreateCombo(actionUrl, $('#goodsPriceHstForm select[name=brandCd]'), "[전체]", "");
+		
+	});
+	
+	//브랜드 변경시
+	$('#goodsPriceHstForm select[name=brandCd]').on('change', function() {
+		
+		var supplyCompCd = $('#goodsPriceHstForm select[name=supplyCompCd]').val();
+		var brandCd = $('#goodsPriceHstForm select[name=brandCd]').val();
+		$("#goodsPriceHstForm select[name=sellStoreCd] option:gt(0)").remove();
+		if (!gagajf.isNull(brandCd)){
+			var url = "/renderer/extmall/sellstore/list/"+supplyCompCd+"/"+brandCd+"/";
+			cfnCreateCombo(url, $('#goodsPriceHstForm select[name=sellStoreCd]'), "[전체]", "");	
+		}
+		
+	});
+	
+	// 승인 클릭 시
+	$('#btnSaveGoodsPriceConfirm').on('click', function() {
+		
+		if ($("#goodsPriceHstForm input[name=confirmY]").val() != "Y"){
+			mcxDialog.alert("미승인목록 조회후 승인하세요.");
+			return false;
+		}
+		
+		var selectedData = gagaAgGrid.selectedRowData(gridOptions);
+		
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+
+		mcxDialog.confirm('승인 하시겠습니까?',{
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var jsonData = JSON.stringify(selectedData);
+				gagajf.ajaxJsonSubmit('/goods/price/hst/save', jsonData, fnSaveGoodsPriceConfirmCollBack); 
+			}
+		});
+	});	
+	
+	var fnSaveGoodsPriceConfirmCollBack = function(){
+		fnGoodsPriceHstListSearch('Y');
+	}
+	
+	$(document).ready(function() {
+		
+		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일', 'X');
+
+		var selectCode = '<select  name="dateGbn" id="dateGbn">';
+		selectCode += '<option value="R" seledted>가격변경일</option>';
+		selectCode += '<option value="P">승인일자</option>';
+		selectCode += '</select>';
+		
+		$("#goodsPriceHstForm").find('#sellTerms').prepend(selectCode);
+		
+		
+		if(sessRoleCd == "G001_A101") {
+			$("#goodsPriceHstForm select[name=supplyCompCd]").val([[${sessionInfo.supplyCompCd}]]);
+			$("#goodsPriceHstForm select[name=supplyCompCd]").attr("disabled", true);
+			$("select[disabled]").addClass("formControl");
+			var actionUrl = '/renderer/brand/AuthBrandlist';
+			cfnCreateCombo(actionUrl, $('#goodsPriceHstForm select[name=brandCd]'), "[전체]");
+		}
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+
+	});
+
+/*]]>*/
+</script>
+ 	</div>
+
+</html>

+ 300 - 0
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsWmsInstockForm.html

@@ -0,0 +1,300 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsWmsInstockForm.html
+ * @desc    : WMS입고상품관리 화면
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.18   eskim       최초 작성
+ *******************************************************************************
+ -->	
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<form id="goodsUnregisterListForm" name="goodsUnregisterListForm" action="#" th:action="@{'/goods/unregister/list'}">
+		<input type="hidden" id="searchGb" name="searchGb" />
+		<input type="hidden" id="dateGbn" name="dateGbn" value="R" />
+ 		<!-- 패널 영역1 -->
+		<div class="panelStyle" >
+			<div class="panelTitle">
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 하나를 꼭 입력해 주세요.</h3>
+			</div>
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col width="10%"/>
+						<col width="40%"/>
+						<col width="10%"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>업체/브랜드<i class="star"></i></th>
+						<td>
+							<select name="supplyCompCd" id="supplyCompCd">
+								<option value="" th:if="${sessionInfo.roleCd} != 'B000'">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<select name="brandCd" id="brandCd">
+								<option value="">[전체]</option>
+							</select>
+						</td>
+						<th>상품코드<i class="star"></i></th>
+						<td>
+							<input id="goodsCd" name=goodsCd type="text" class="w150"  maxlength="20"/>
+						</td>
+					</tr>
+					<tr>
+						<th>등록일<i class="star"></i></th>
+						<td colspan="3" id="sellTerms"></td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
+						<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
+					</li>
+				</ul>
+			</div>
+			<!-- //검색조건 영역 -->
+		</div>
+		<!-- 패널 영역1 -->
+		<div class="panelStyle">
+			<!-- 검색결과 영역 -->
+			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="goodsListPagination"></div>
+				</li>
+			</ul>
+			<!-- 검색결과 영역 -->
+		</div>
+		</form>
+		<!-- //패널 영역2 -->
+	</div>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var sessRoleCd = [[${sessionInfo.roleCd}]];
+	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
+	var itemkindList = gagajf.convertToArray([[${itemkindList}]]);
+	var columnDefs = [
+		/* {width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false}, */
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "브랜드", field: "brandCd", width: 100, cellClass: 'text-center'},
+		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
+		{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center'},
+		{headerName: "ERP상품명", field: "erpGoodsNm", width: 200, cellClass: 'text-left'},
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
+		//{headerName: "품목코드", field: "itemkindCd", width: 100, cellClass: 'text-center'},
+		{headerName: "품목명", field: "itemkindCd" , width: 200, cellClass: 'text-left',
+			cellEditorParams: { values: gagaAgGrid.extractValues(itemkindList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(itemkindList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(itemkindList, params.newValue); }
+		},
+		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "등록자", field: "regId", width: 100, cellClass: 'text-center'},
+		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "수정자", field: "updId", width: 100, cellClass: 'text-center'}
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복 선택 가능
+	//gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+	//gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		fnInit();
+	});
+	
+	var fnInit = function(){
+		$('#goodsUnregisterListForm')[0].reset();
+		//$("#goodsUnregisterListForm input[type=radio]").removeClass("checked");
+		$("#goodsUnregisterListForm input[type=checkbox]").removeClass("checked");
+		//$("#goodsUnregisterListForm input[type=radio]").parent("label").removeClass("checked");
+		$("#goodsUnregisterListForm input[type=checkbox]").parent("label").removeClass("checked");
+		$("#goodsUnregisterListForm input[type=radio][checked]").parent("label").addClass("checked");
+	}
+	
+	// 조회클릭시
+	$('#btnSearch').on('click', function() {
+		fnGoodsUnregisterListSearch('BASIC');
+	});
+
+	// 조회
+	var fnGoodsUnregisterListSearch = function(gbn) {
+
+		if (typeof(gbn) != 'undefined' &&  gbn == 'EXCEL'){
+			$("#goodsUnregisterListForm input[name=searchGb]").val("EXCEL");
+		}else if (typeof(gbn) != 'undefined' &&  gbn == 'EXCELRESULT'){
+			$("#goodsUnregisterListForm input[name=searchGb]").val("EXCELRESULT");
+		}else{
+			$("#goodsUnregisterListForm input[name=searchGb]").val("BASIC");
+		}
+		
+		if(!fnConditionCheck()) return;
+		
+		gagaAgGrid.fetch($('#goodsUnregisterListForm').prop('action'), gridOptions, '#goodsUnregisterListForm');
+	}
+
+	//검색 조건 확인
+	var fnConditionCheck = function(){
+		var formId = '#goodsUnregisterListForm';
+		var form = document.goodsUnregisterListForm;
+
+		if($("#goodsUnregisterListForm input[name=searchGb]").val() == "EXCEL" || $("#goodsUnregisterListForm input[name=searchGb]").val() == "EXCELRESULT") {
+			return true;
+		}
+		
+		var searchFlag = false;
+		var cnt = 0;
+
+		/* if( !gagajf.isNull($("#goodsUnregisterListForm select[name=supplyCompCd]").val())
+				|| !gagajf.isNull($("#goodsUnregisterListForm input[name=condition]").val())
+				|| (!gagajf.isNull($("#goodsUnregisterListForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsUnregisterListForm input[name=edDate]").val()))
+			){
+			searchFlag = true;
+		}else{ */
+			for (i = 0; i < form.elements.length; i++ ) {
+				var el = form.elements[i];
+				
+				if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize")) {
+					if (!(el.value == null || el.value == "")) {
+						cnt++;
+					}
+				}
+			}
+			
+			if(cnt > 0) searchFlag = true;
+			
+		/* } */
+		
+		if(searchFlag == false){
+			mcxDialog.alert("검색조건을 입력하세요.");
+			return false;
+		}
+		
+		var fromDate = $('#goodsUnregisterListForm input[name=stDate]').val();
+		var toDate = $('#goodsUnregisterListForm input[name=edDate]').val();
+		
+		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
+			
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#goodsUnregisterListForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alert("노출기간 시작일자는 종료일자 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#goodsUnregisterListForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			} 
+		}
+
+		return true;
+	}
+	
+	//업체변경시
+	$('#goodsUnregisterListForm select[name=supplyCompCd]').on('change', function() {
+		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+		if(sessRoleCd == "B000"){
+			actionUrl = '/renderer/brand/AuthBrandlist';
+		}
+		$("#goodsUnregisterListForm select[name=brandCd] option:gt(0)").remove();
+
+		cfnCreateCombo(actionUrl, $('#goodsUnregisterListForm select[name=brandCd]'), "[전체]", "");
+	});
+	
+	//엑셀 다운로드 클릭시
+	$('#btnGoodsUnregisterExcelDownLoad').on('click', function() {
+		//gagaAgGrid.exportToExcel('온라인미등록상품', gridOptions);
+		var date = new Date().format("YYYYMMDDHHmmss");
+		var params = {
+			
+			fileName : "온라인미등록상품_"+ date,
+			sheetName: "DATA"
+		}
+		gridOptions.excelStyles = [
+			{
+				id: 'text-center',
+				dataType: 'string',
+				font: {size : 10, bold: false}
+			},
+			{
+				id: 'text-left',
+				dataType: 'string',
+				font: {size : 10, bold: false}
+			}
+		]
+		
+		gridOptions.api.exportDataAsExcel(params);
+	});
+	
+	//엑셀 상품명/품목코드 저장
+	$('#btnGoodsExcelSave').on('click', function() {
+		cfnExcelUploadPopup('goodsInfoExcelUpload', 'goodsInfoExcelSave');
+	});
+	
+	var goodsInfoExcelSave = function(result){
+		mcxDialog.confirm('상품명/품목코드 저장을 진행하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {procJob : result.procJob
+						,excelFileNm : result.excelFileNm
+						};
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit('/goods/unregister/excelupload/save', jsonData, fnGoodsInfoExcelSaveCallBack);
+			}
+		});	
+	}
+	
+	var fnGoodsInfoExcelSaveCallBack = function(result){
+		fnGoodsUnregisterListSearch("EXCELRESULT");
+	}
+	
+	$(document).ready(function() {
+
+		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+
+	});
+
+/*]]>*/
+</script>
+ 	
+</html>

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html

@@ -113,7 +113,7 @@
 						</td>
 						<th>사이즈</th>
 						<td>
-							<input type="text" class="w80" name="sizeCd" id="sizeCd" maxlength="50"/>
+							<input type="text" class="w80" name="optCd2" id="optCd2" maxlength="50"/>
 						</td>
 						
 					</tr>