Parcourir la source

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

xodud lee il y a 5 ans
Parent
commit
e527cd4020

+ 21 - 0
src/main/java/com/style24/admin/biz/dao/TsaDeliveryDao.java

@@ -67,6 +67,17 @@ public interface TsaDeliveryDao {
 	 */
 	int saveChangeInvoice(Delivery delivery);
 	
+	/**
+	 * 송장번호 변경
+	 *
+	 * @param delivery 
+	 * @return int
+	 * @author moon
+	 * @since 2021. 06. 08
+	 */
+	int updateOrderDtlInvoice(Delivery delivery);
+	
+	
 	
 	/**
 	 * 주문 상태 값 변경
@@ -340,4 +351,14 @@ public interface TsaDeliveryDao {
 	 */
 	Collection<Delivery> getExchangeDelvFailList(Delivery delivery);
 	
+	/**
+	 * 수동 결품 
+	 *
+	 * @param delivery 
+	 * @return int
+	 * @author moon
+	 * @since 2021. 06. 08
+	 */
+	int updateSoldOut(Delivery delivery);
+	
 }

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

@@ -371,4 +371,12 @@ public interface TsaDisplayDao {
 	 * @since 2021. 3. 19
 	 */
 	void saveGnbTabPreview(GnbTab gnbTab);
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 상품 리스트
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 6. 9
+	 */
+	Collection<Goods> getContentsForGoodsList(Contents contents);
 }

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

@@ -227,14 +227,16 @@ public class TsaDeliveryService {
 			oneDelivery.setRegNo(userId);
 			
 			// 송장번호 변경
-			deliveryDao.saveChangeInvoice(oneDelivery);
+			int rtn = deliveryDao.saveChangeInvoice(oneDelivery);
+			
+			deliveryDao.updateOrderDtlInvoice(oneDelivery);
 			
 			// 주문상세이력
 			Order order = new Order();
 			order.setOrdDtlNo(oneDelivery.getOrdDtlNo());
 			order.setUpdNo(userId);
 			order.setRegNo(userId);
-			orderDao.createOrderDetailHst(order);			
+			orderDao.createOrderDetailHst(order);
 		}
 	}	
 	
@@ -263,10 +265,19 @@ public class TsaDeliveryService {
 			param.setAccountNo(item.getAccountNo());
 			param.setOrdDtlNo(item.getOrdDtlNo());
 			param.setCnclRtnQty(item.getSaleQty());
+			param.setOrdPhnno(item.getOrdPhnno());
+			log.info("item.getOrdPhnno(): "+item.getOrdPhnno());
 			ordSoldoutList.add(param);
 			
 		}
 		coreDeliveryService.cancelSoldout(ordSoldoutList,userNo, "N"); 
+		
+		for(Delivery data : soldoutList) {
+			data.setSoldoutMemo("수동 품절처리");
+			data.setUpdNo(userNo);
+			deliveryDao.updateSoldOut(data);
+		}
+		
 	}	
 	
 	

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

@@ -523,7 +523,12 @@ public class TsaDisplayService {
 	 * @since 2021. 2. 23
 	 */
 	public Collection<Contents> getContentsPreviewList(Contents contents) {
-		return displayDao.getContentsPreviewList(contents);
+		Collection<Contents> previewList = displayDao.getContentsPreviewList(contents);
+		for(Contents tempGoods : previewList){
+			tempGoods.setContentsGoodsList(displayDao.getContentsForGoodsList(tempGoods));
+		}
+
+		return previewList;
 	}
 
 	/**

+ 3 - 0
src/main/java/com/style24/persistence/domain/Contents.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
+import java.util.Collection;
 import java.util.List;
 
 @SuppressWarnings("serial")
@@ -94,4 +95,6 @@ public class Contents extends TscBaseDomain {
     private String group3brandCd;
     private String group3brandNm;
     private String group3brandImg;
+
+    Collection<Goods> contentsGoodsList;	//상품목록
 }

+ 11 - 0
src/main/java/com/style24/persistence/domain/Delivery.java

@@ -1,5 +1,7 @@
 package com.style24.persistence.domain;
 
+import java.util.Collection;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
@@ -72,6 +74,10 @@ public class Delivery extends TscBaseDomain {
 	private String termGb;
 	private String stDate;
 	private String edDate;
+	private String stDate2;
+	private String edDate2;
+	private String stDate3;
+	private String edDate3;
 	private String ordDt;       	// 주문일시
 	private String payDt;       	// 결제일시
 	private String extmallId;   	// 외부몰
@@ -105,6 +111,11 @@ public class Delivery extends TscBaseDomain {
 	private String bankCd;
 	private String accountNm;
 	private String accountNo;
+	private String invcTracking;
+	private String orgInvoiceNo;
+	private String soldoutMemo;
+	private String soldoutRegNo;
+	
 	
 	private Integer ordDtlNo;
 	private Integer ordNo;

+ 37 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml

@@ -73,6 +73,7 @@
 		    , (SELECT BD.BRAND_KNM FROM TB_BRAND BD WHERE BD.BRAND_CD = Z.BRAND_CD ) AS BRAND_NM
 		    , FN_GET_CODE_NM('G056', Z.GOODS_TYPE ) AS GOODS_TYPE_NM 
 		    , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY S WHERE S.SUPPLY_COMP_CD = Z.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM 
+		    , IFNULL((SELECT SWT_TRC_SEND_YN FROM TB_ORDER_DETAIL_INVOICE V WHERE V.ORD_NO = Z.ORD_NO AND V.ORD_DTL_NO = Z.ORD_DTL_NO AND V.INVOICE_NO = Z.INVOICE_NO  ),'N') AS INVC_TRACKING 
 		FROM (
 		    SELECT A.*, ROW_NUMBER() OVER(ORDER BY  A.ORD_NO DESC, A.ORD_DTL_NO) RNUM 
 		    FROM (
@@ -128,6 +129,7 @@
 						    , A.BANK_CD 
 						    , A.ACCOUNT_NO 
 						    , A.ACCOUNT_NM 
+						    , A.ORD_PHNNO
 					  FROM (
 							SELECT 
 								  A.ORD_NO     -- 주문번호
@@ -175,6 +177,7 @@
 							    , T.BANK_CD 
 							    , T.ACCOUNT_NO 
 							    , T.ACCOUNT_NM 
+							    , A.ORD_PHNNO
 							FROM  TB_ORDER A 
 							      INNER JOIN TB_ORDER_DETAIL B        ON A.ORD_NO       = B.ORD_NO
 								  INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON B.ORD_DTL_NO   = ODI.ORD_DTL_NO
@@ -234,6 +237,7 @@
 							    , T.BANK_CD 
 							    , T.ACCOUNT_NO 
 							    , T.ACCOUNT_NM 
+							    , A.ORD_PHNNO
 							FROM  TB_ORDER A 
 							      INNER JOIN TB_ORDER_DETAIL B        ON A.ORD_NO       = B.ORD_NO
 							      INNER JOIN TB_GOODS C               ON B.GOODS_CD     = C.GOODS_CD
@@ -407,7 +411,18 @@
 		WHERE  ORD_DTL_NO   = #{ordDtlNo}
 	</update>
 		
-
+	<!-- 송장번호  변경 -->
+	<update id="updateOrderDtlInvoice" parameterType="Delivery" >
+		/* TsaDelivery.updateOrderDtlInvoice */
+		 UPDATE TB_ORDER_DETAIL_INVOICE SET
+			   INVOICE_NO      = #{invoiceNo}
+			 , SWT_TRC_SEND_YN = 'N'
+			 , UPD_NO          = #{updNo}
+			 , UPD_DT          = NOW()
+		 WHERE ORD_DTL_NO = #{ordDtlNo}
+		   AND INVOICE_NO = #{orgInvoiceNo}
+	</update>
+			
 	
 	<!-- 출고금지상품 목록 -->
 	<select id="getBangoodsList" parameterType="Delivery" resultType="Delivery">
@@ -425,6 +440,7 @@
 			, DBG.DELV_BAN_STDT 
 			, DBG.DELV_BAN_EDDT	
 			, DBG.DELV_BAN_GOODS_SQ
+			, DBG.REG_DT
 		FROM  TB_DELIVERY_BAN_GOODS DBG
 		INNER JOIN TB_GOODS        G    ON DBG.GOODS_CD = G.GOODS_CD
 		INNER JOIN TB_BRAND        B    ON G.BRAND_CD = B.BRAND_CD
@@ -452,6 +468,12 @@
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 			AND DBG.REG_DT BETWEEN STR_TO_DATE(CONCAT(#{stDate},' 000000'),'%Y-%m-%d %H%i%S') AND STR_TO_DATE(CONCAT(#{edDate},' 235959'), '%Y-%m-%d %H%i%S')
 		</if>
+		<if test="stDate2 != null and stDate2 != '' and edDate2 != null and edDate2 != ''">
+			AND DBG.DELV_BAN_STDT BETWEEN STR_TO_DATE(CONCAT(#{stDate2},' 000000'),'%Y-%m-%d %H%i%S') AND STR_TO_DATE(CONCAT(#{edDate2},' 235959'), '%Y-%m-%d %H%i%S')
+		</if>
+		<if test="stDate3 != null and stDate3 != '' and edDate3 != null and edDate3 != ''">
+			AND DBG.DELV_BAN_EDDT BETWEEN STR_TO_DATE(CONCAT(#{stDate3},' 000000'),'%Y-%m-%d %H%i%S') AND STR_TO_DATE(CONCAT(#{edDate3},' 235959'), '%Y-%m-%d %H%i%S')
+		</if>				
 	</select>
 
 	<!-- 출고금지상품 삭제 -->
@@ -1187,5 +1209,18 @@
 		ORDER  BY EDF.REG_DT ASC
 	</select>
 		
-	
+	<!-- 수동 품절  -->
+	<update id="updateSoldOut" parameterType="Delivery" >
+		/* TsaDelivery.updateSoldOut */
+		 UPDATE TB_ORDER_DETAIL SET
+			   SOLDOUT_YN     = 'Y'
+			 , SOLDOUT_MEMO   = #{soldoutMemo}
+			 , SOLDOUT_REG_NO = #{updNo}
+			 , SOLDOUT_REG_DT = NOW()
+			 , UPD_NO         = #{updNo}
+			 , UPD_DT         = NOW()
+		 WHERE ORD_NO     = #{ordNo} 
+		   AND ORD_DTL_NO = #{ordDtlNo}
+	</update>
+		
 </mapper>

+ 22 - 42
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -1347,44 +1347,6 @@
 		     , A.BRAND_GROUP_NO
 		     , A.BRAND_GROUP_IMG
 		     , A.MD_TITLE
-		     ,(SELECT GROUP_CONCAT(B.GOODS_CD ORDER BY B.DISP_ORD SEPARATOR ',')
-		        FROM  TB_CONTENTS_GOODS B
-		       WHERE  1=1
-		       <if test="contentsLoc != 'SMM012'">
-		         AND  B.CATE_NO = A.CATE_NO
-		       </if>
-		         AND  B.CONTENTS_LOC = A.CONTENTS_LOC
-		         AND  B.CONTENTS_SQ = A.DISP_ORD
-		       <if test="contentsLoc != 'SMM012'">
-		         AND  B.CATE_NO = #{cateNo}
-		       </if>
-		         AND  B.CONTENTS_LOC = #{contentsLoc}) AS GOODS_CD_LIST
-		     ,(SELECT 	GROUP_CONCAT(B.GOODS_NM ORDER BY B.DISP_ORD SEPARATOR ',')
-		       FROM	TB_CONTENTS_GOODS B
-		       WHERE 1=1
-		       <if test="contentsLoc != 'SMM012'">
-		         AND B.CATE_NO = A.CATE_NO
-		       </if>
-		         AND B.CONTENTS_LOC = A.CONTENTS_LOC
-		         AND B.CONTENTS_SQ = A.DISP_ORD
-		       <if test="contentsLoc != 'SMM012'">
-		         AND  B.CATE_NO = #{cateNo}
-		       </if>
-		         AND B.CONTENTS_LOC = #{contentsLoc}) AS GOODS_NM_LIST
-		     ,(SELECT GROUP_CONCAT(GI.SYS_IMG_NM ORDER BY B.DISP_ORD SEPARATOR ',')
-		       FROM TB_CONTENTS_GOODS B
-		       JOIN TB_GOODS G ON B.GOODS_CD = G.GOODS_CD
-		       JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD AND G.MAIN_COLOR_CD = COLOR_CD AND GI.DEFAULT_IMG_YN = 'Y'
-		       WHERE 1=1
-		       <if test="contentsLoc != 'SMM012'">
-		         AND B.CATE_NO = A.CATE_NO
-		       </if>
-		        AND B.CONTENTS_LOC = A.CONTENTS_LOC
-		        AND B.CONTENTS_SQ = A.DISP_ORD
-		       <if test="contentsLoc != 'SMM012'">
-		        AND  B.CATE_NO = #{cateNo}
-		       </if>
-		        AND B.CONTENTS_LOC = #{contentsLoc}) AS GOODS_IMG_LIST
 		     , A.USE_YN
 		     , A.REG_NO
 		     , A.REG_DT
@@ -1474,9 +1436,11 @@
 			,DATE_FORMAT(#{dispStdt}, '%Y-%m-%d %H:%i:%S')
 			,DATE_FORMAT(#{dispEddt}, '%Y-%m-%d %H:%i:%S')
 			,(SELECT DISP_ORD FROM (SELECT IFNULL((MAX(DISP_ORD) + 1), 1) AS DISP_ORD FROM	TB_CONTENTS_PREVIEW	WHERE CATE_NO = #{cateNo} AND CONTENTS_LOC = #{contentsLoc}
-			    <if test="brandGroupNo != null and brandGroupNo !=''">
-			        AND BRAND_GROUP_NO = #{brandGroupNo}
-			    </if>
+			        <if test="contentsLoc != null and contentsLoc != '' and contentsLoc != 'SMM007'">
+			            <if test="brandGroupNo != null and brandGroupNo !=''">
+			                AND BRAND_GROUP_NO = #{brandGroupNo}
+			            </if>
+			        </if>
 			    ) TMP)
 			,#{imgPath1}
 			,#{imgPath2}
@@ -1503,7 +1467,7 @@
 			,#{subText3}
 			,#{subText4}
 			,#{html}
-			,#{brandGroupNo}
+			,CASE WHEN #{brandGroupNo} = '' THEN NULL ELSE #{brandGroupNo} END
 			,#{brandGroupImg}
 			,#{mdTitle}
 			,#{useYn}
@@ -1962,4 +1926,20 @@
 			</if>
 		</if>
 	</insert>
+
+	<select id="getContentsForGoodsList" parameterType="Contents" resultType="Goods">
+		/* TsaDisplay.getContentsForGoodsList */
+		SELECT CG.GOODS_CD
+		     , G.GOODS_NM
+		     , GI.SYS_IMG_NM
+		FROM TB_CONTENTS_GOODS CG
+		JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD AND G.MAIN_COLOR_CD = COLOR_CD AND GI.DEFAULT_IMG_YN = 'Y'
+		WHERE 1=1
+		<if test="contentsLoc != 'SMM012'">
+		AND CG.CATE_NO = #{cateNo}
+		</if>
+		AND CG.CONTENTS_LOC = #{contentsLoc}
+		AND CG.CONTENTS_SQ = #{dispOrd}
+	</select>
 </mapper>

+ 22 - 4
src/main/webapp/WEB-INF/views/delivery/BangoodsListForm.html

@@ -39,9 +39,9 @@
 					<table class="frmStyle">
 						<colgroup>
 							<col style="width:8%;"/>
-							<col style="width:12%;"/>
+							<col style="width:30%;"/>
 							<col style="width:8%;"/>
-							<col style="width:12%;"/>
+							<col style="width:30%;"/>
 						</colgroup>
 						<tr>
 							<th class="dashR">업체/브랜드</th>
@@ -75,7 +75,8 @@
 							</td>
 							<th class="dashR">삭제여부</th>
 							<td class="dashR">
-								<select name="delYn" id="delYn">
+								<select name="delYn" id="delYn" class="w80">
+									<option value="">전체</option>
 									<option value="N">N</option>
 									<option value="Y">Y</option>
 								</select>
@@ -87,6 +88,16 @@
 								<span id="terms"></span>
 							</td>
 						</tr>
+						<tr>
+							<th class="dashR">출고금지시작일자</th>
+							<td colspan="" class="dashR">
+								<span id="terms2"></span>
+							</td>
+							<th class="dashR">출고금지종료일자</th>
+							<td colspan="" class="dashR">
+								<span id="terms3"></span>
+							</td>
+						</tr>			
 					</table>
 	
 					<ul class="panelBar">
@@ -162,7 +173,8 @@
 		{headerName: "옵션2",			field: "optCd2",		width: 80,	cellClass: 'text-center'},
 		{headerName: "상품상태",		field: "goodsStat",		width: 80,	cellClass: 'text-center'},
 		{headerName: "출고금지시작일자",	field: "delvBanStdt",	width: 150,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }},
-		{headerName: "출고금지종료일자",	field: "delvBanEddt",	width: 150,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }}
+		{headerName: "출고금지종료일자",	field: "delvBanEddt",	width: 150,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }},
+		{headerName: "등록일자",		field: "regDt",			width: 100,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }}
 		
 	];
 
@@ -314,7 +326,13 @@
 
 	$(document).ready(function() {
 		gagaAgGrid.createGrid('gridList', gridOptions);
+		var hideList = ["btnThisWeek", "btnYesterWeek", "btnRecentMonth", "btnThisMonth", "btnYesterMonth", "btnRecent3Month"];
+		
 		cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '출고금지상품관리');
+		cfnCreateCalendar('#terms2', 'stDate2', 'edDate2', true, '출고금지상품관리','',hideList);
+		cfnCreateCalendar('#terms3', 'stDate3', 'edDate3', true, '출고금지상품관리','',hideList);
+		
+		
 		//var hideList = ["btnThisWeek", "btnYesterWeek", "btnRecentMonth", "btnThisMonth", "btnYesterMonth", "btnRecent3Month"];
 		//cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '출고금지상품관리', '', hideList);
 		fnInitCalendar();

+ 7 - 4
src/main/webapp/WEB-INF/views/delivery/DeliveryListForm.html

@@ -69,8 +69,8 @@
 
 						<th>업체/브랜드<em class="required" title="필수"></em></th>
 						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  >자사</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N" >입점</label>
 							<select name="supplyCompCd" id="supplyCompCd">
 								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
@@ -281,13 +281,14 @@
 		{headerName: "몰구분", 		field: "mallGbNm", 		width: 70, cellClass: 'text-center'},
 		{headerName: "주문자", 		field: "ordNm", 		width: 100, cellClass: 'text-center',
 			cellRenderer: function (params) {
-				if (roleCd.indexOf("C") < 0 && !gagajf.isNull(params.value) && params.data.mallGb === 'G011_10') {
+				if (roleCd.indexOf("C") < 0 && !gagajf.isNull(params.value) && params.data.mallGb === 'G011_10' && params.data.custNo > 0) {
 					return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.data.ordNm + '</a>';
 				} else {
 					return params.data.ordNm;
 				}
 			}
 		},
+		{headerName: "휴대번호", 		field: "ordPhnno", 		width: 100, cellClass: 'text-center'},
 		{headerName: "수령인", 		field: "recipNm", 		width: 100, cellClass: 'text-center'},
 		{headerName: "공급업체", 		field: "supplyCompNm", 	width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드", 		field: "supplyCompNm", 	width: 150, cellClass: 'text-center'},
@@ -333,6 +334,7 @@
 		{headerName: "출고택배사", 	field: "shipCompCd", 	width: 170, cellClass: 'text-center'
 			, valueGetter: function (params) { return gagaAgGrid.lookupValue(shipCompanyList, params.data.shipCompCd); }
 		},
+		{headerName: "배송추적", 		field: "invcTracking", 	width: 80, cellClass: 'text-center'},
 		{headerName: "출고송장", 		field: "invoiceNo", 	width: 150, cellClass: 'text-left'},
 		{headerName: "송장등록수정", 	field: "invoiceNo", 	width: 120, cellClass: 'text-center'
 			, cellRenderer : function (params) {
@@ -591,7 +593,8 @@
 		$(".btnToday").trigger('click');
 		$('#searchForm select[name=mallGb]').trigger('change');
 		$("#searchForm input[name=selfYn]").trigger('click');
-		//uifnFitGrid('auto'); // TO-BE 지워야됨  
+		$("#searchForm input[name='selfYn']:radio[value='Y']").prop('checked',true);
+
 	});
 
 	/*]]>*/

+ 9 - 2
src/main/webapp/WEB-INF/views/delivery/SaveInvoiceForm.html

@@ -63,12 +63,17 @@
 /* 이벤트 바인딩 관련 */
 	var ordDtlNo = [[${ordDelivery.ordDtlNo}]];
 	var ordDtlStat = [[${ordDelivery.ordDtlStat}]];
-
+	var orgInvoiceNo  = [[${ordDelivery.invoiceNo}]];
+	var orgShipCompCd = [[${ordDelivery.shipCompCd}]];  
 	/* 환불계좌번호 저장 */
 	var fnSaveAccount = function(){
 		var shipCompCd = $("#saveInvoiceForm select[name=shipCompany]").val();
 		var invoiceNo = $("#saveInvoiceForm input[name=invoiceNo]").val();
-
+		
+		if(orgInvoiceNo == invoiceNo && orgShipCompCd == shipCompCd){
+			mcxDialog.alert('변경된 내역이 없습니다.');
+			return;
+		}
 
 		if(gagajf.isNull(shipCompCd)) {
 			mcxDialog.alert('택배사 선택을 해주세요.');
@@ -89,9 +94,11 @@
 					param.shipCompCd = shipCompCd;
 					param.invoiceNo  = invoiceNo;
 					param.ordDtlNo   = ordDtlNo;
+					param.orgInvoiceNo = orgInvoiceNo;
 
 				var jsonData = JSON.stringify([param]);
 				gagajf.ajaxJsonSubmit('/delivery/orderDetail/save', jsonData, function (result) {
+					$('#btnSearch').trigger('click');
 					uifnPopupClose('popupChangeInvoice');
 				});
 			}

+ 47 - 9
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -809,7 +809,7 @@
 		if(contentsLoc=='SGNB001'){
 			gagaSn.setContents('#openBannerDesc'+dataIdx, '');
 		}
-
+		fnResetDispOrd();
 		tableLen = tableLen+1;
 	});
 
@@ -882,6 +882,7 @@
 
 	// SMM001 데이터 validation 체크
 	function smm001DataValidation(){
+		var dataBool = true;
 		$(".mcTable").each(function(i){
 			var thisIdx = $(this).find("input[name=tableIdx]").val();
 			var contentsTypeVal = $(this).find("input:radio[name=contentsType"+thisIdx+"]:checked").val();
@@ -889,21 +890,48 @@
 
 			if(gagajf.isNull(contentsTypeVal)){
 				mcxDialog.alert('컨텐츠 유형을 선택해주세요.');
-				return false;
+				dataBool = false;
 			}
 			if(contentsTypeVal=='P'){
 				if(gagajf.isNull($(this).find("input[name=planSq"+thisIdx+"]").val())){
 					mcxDialog.alert('기획전 번호를 입력해주세요.');
-					return false;
+					$(this).find("input[name=planSq"+thisIdx+"]").focus();
+					dataBool = false;
 				}
 			}
 			if(gagajf.isNull(textColorVal)){
 				mcxDialog.alert('썸네일 글자 색상을 선택해주세요.');
-				return false;
+				dataBool = false;
 			}
 		});
+		if(!dataBool){
+			return false;
+		}else{
+			return true;
+		}
+	}
 
-		return true;
+	// 전시 일시 체크
+	function dateValidation(){
+		var dateBool = true;
+		$(".mcTable").each(function(i){
+			var thisIdx = $(this).find("input[name=tableIdx]").val();
+			var dispStdt = $(this).find("[name=dispStdt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=stTimeHour]").val().replace('시', '') + "" +$(this).find("[name=stTimeMin]").val().replace('분', '') + "00";
+			var dispEddt = $(this).find("[name=dispEddt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=edTimeHour]").val().replace('시', '') + "" +$(this).find("[name=edTimeMin]").val().replace('분', '') + "59";
+
+			let fromDate = dispStdt.replace(/[^0-9]/g, '');
+			let toDate = dispEddt.replace(/[^0-9]/g, '');
+			if(fromDate > toDate){
+				mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+				$(this).find('input[name=dispStdt]').focus();
+				dateBool = false;
+			}
+		});
+		if(!dateBool){
+			return false;
+		}else{
+			return true;
+		}
 	}
 
 	/**
@@ -915,6 +943,11 @@
 			return;
 		}
 
+		// 전시일시 체크
+		if(!dateValidation()){
+			return false;
+		}
+
 		if(contentsLoc=='SMM001' || contentsLoc=='SOM001'){
 			if(!smm001DataValidation()){
 				return false;
@@ -1215,7 +1248,6 @@
 	 */
 	var brandDescIndex = 0;
 	var fnAddBrandDescRow = function (param){
-		console.log('here');
 		var val = typeof param=='object'?'':param;
 		var html = '<tr name="subTextPopRow">'
 		html += '<th>브랜드소개';
@@ -1373,7 +1405,14 @@
 
 	// 컨텐츠 행삭제
 	var fnDeleteContentsRow = function (obj){
-		$(obj).closest("table").remove();
+		mcxDialog.confirm('삭제시 전시순서가 초기화됩니다. 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				$(obj).closest("table").remove();
+				fnResetDispOrd();
+			}
+		});
 	}
 
 	// 행삭제
@@ -1428,8 +1467,7 @@
 
 	let fnBrandDesc = function (){
 		$(".mcTable").each(function (idx){
-			console.log(idx);
-			// cfnGetTextLength($(this).find('textarea[name=subText]'), 4000, $('#brandDescContent'+idx));
+			cfnGetTextLength($(this).find('textarea[name=subText]'), 4000, $('#brandDescContent'+idx));
 		});
 	}
 

+ 36 - 2
src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html

@@ -192,7 +192,7 @@
 			$("#brandListTd2").sortable();
 			$("#brandListTd3").sortable();
 		}
-
+		fnResetDispOrd();
 		tableIdx = tableIdx+1;
 	}
 
@@ -266,7 +266,36 @@
 
 	// 컨텐츠 행삭제
 	var fnDeleteContentsRow = function (obj){
-		$(obj).closest("table").remove();
+		mcxDialog.confirm('삭제시 전시순서가 초기화됩니다. 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				$(obj).closest("table").remove();
+				fnResetDispOrd();
+			}
+		});
+	}
+
+	// 전시 일시 체크
+	function dateValidation(){
+		var dateBool = true;
+		$(".tabTable").each(function(i){
+			var dispStdt = $(this).find("[name=dispStdt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=stTimeHour]").val().replace('시', '') + "" +$(this).find("[name=stTimeMin]").val().replace('분', '') + "00";
+			var dispEddt = $(this).find("[name=dispEddt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=edTimeHour]").val().replace('시', '') + "" +$(this).find("[name=edTimeMin]").val().replace('분', '') + "59";
+
+			let fromDate = dispStdt.replace(/[^0-9]/g, '');
+			let toDate = dispEddt.replace(/[^0-9]/g, '');
+			if(fromDate > toDate){
+				mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+				$(this).find('input[name=dispStdt]').focus();
+				dateBool = false;
+			}
+		});
+		if(!dateBool){
+			return false;
+		}else{
+			return true;
+		}
 	}
 
 	/**
@@ -278,6 +307,11 @@
 			return;
 		}
 
+		// 전시일시 체크
+		if(!dateValidation()){
+			return false;
+		}
+
 		dataArr = [];
 		$("#gnbTabList .tabTable").each(function (){
 			var newImgFileArr = [];

+ 2 - 1
src/main/webapp/WEB-INF/views/display/MainListForm.html

@@ -640,7 +640,8 @@
 			}
 		});
 		if(!contentLocCheck){
-			mcxDialog.alert('위치코드가 중복 되었습니다.');
+			// mcxDialog.alert('위치코드가 중복 되었습니다.');
+			mcxDialog.alert('이미 레이아웃 설정된 컨텐츠입니다.');
 			return;
 		}
 

+ 53 - 40
src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html

@@ -106,7 +106,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 				html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
 				html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 			}
-			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddGoodsRow(this,this,this);">상품추가</button>';
+			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddGoodsRow(this);">상품추가</button>';
 			html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBrandRow(this);">삭제</button></td>';
 			html += '</tr>';
 			if(contentsLoc=='SMM009' || contentsLoc=='SMM012'){
@@ -174,8 +174,9 @@ console.log('brandGroupNo:'+brandGroupNo);
 					}
 				}
 			}
-			if(!gagajf.isNull(result[i].goodsCdList)){
-				html += fnAddGoodsRow(result[i].goodsCdList,result[i].goodsNmList,result[i].goodsImgList);
+			if(!gagajf.isNull(result[i].contentsGoodsList)){
+				console.log(fnAddGoodsRow(result[i].contentsGoodsList));
+				html += fnAddGoodsRow(result[i].contentsGoodsList);
 			}
 			html += '</tbody></table>';
 		}
@@ -268,7 +269,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
 			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 		}
-		html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddGoodsRow(this,this,this);">상품추가</button>';
+		html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddGoodsRow(this);">상품추가</button>';
 		html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBrandRow(this);">삭제</button></td>';
 		html += '</tr>';
 		if(contentsLoc=='SMM009' || contentsLoc=='SMM012'){
@@ -495,8 +496,14 @@ console.log('brandGroupNo:'+brandGroupNo);
 
 	// 컨텐츠 행삭제
 	var fnDeleteBrandRow = function (obj){
-		$(obj).closest("table").remove();
-		fnReloadIdx();
+		mcxDialog.confirm('삭제시 전시순서가 초기화됩니다. 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				$(obj).closest("table").remove();
+				fnReloadIdx();
+			}
+		});
 	}
 
 	// 행삭제
@@ -537,6 +544,28 @@ console.log('brandGroupNo:'+brandGroupNo);
 		uifnPopupClose('popupMainMultiContents');
 	}
 
+	// 전시 일시 체크
+	function dateValidation(){
+		var dateBool = true;
+		$(".tableTest").each(function(i){
+			var dispStdt = $(this).find("[name=dispStdt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=stTimeHour]").val().replace('시', '') + "" +$(this).find("[name=stTimeMin]").val().replace('분', '') + "00";
+			var dispEddt = $(this).find("[name=dispEddt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=edTimeHour]").val().replace('시', '') + "" +$(this).find("[name=edTimeMin]").val().replace('분', '') + "59";
+
+			let fromDate = dispStdt.replace(/[^0-9]/g, '');
+			let toDate = dispEddt.replace(/[^0-9]/g, '');
+			if(fromDate > toDate){
+				mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+				$(this).find('input[name=dispStdt]').focus();
+				dateBool = false;
+			}
+		});
+		if(!dateBool){
+			return false;
+		}else{
+			return true;
+		}
+	}
+
 	/**
 	 * 임시저장
 	 */
@@ -546,6 +575,11 @@ console.log('brandGroupNo:'+brandGroupNo);
 			return;
 		}
 
+		// 전시일시 체크
+		if(!dateValidation()){
+			return false;
+		}
+
 		dataArr = [];
 		$("#multiPopSortable .tableTest").each(function(){	//$("#multiPopSortable table").each(function(){
 			var newImgFileArr = [];
@@ -625,11 +659,11 @@ console.log('brandGroupNo:'+brandGroupNo);
 
 			var dispOrd = $(this).find("[name=dispOrd]").val();
 
-			var brandGroupNo = '';
+			var brandGroupNo;
 			if(contentsLoc=='SBM007'||contentsLoc=='SBM008'||contentsLoc=='SBM009'||contentsLoc=='SBM017'||contentsLoc=='SBM018'||contentsLoc=='SBM019'||contentsLoc=='SOM003'||contentsLoc=='SCM002'||contentsLoc=='SCM003'){
 				brandGroupNo = [[${brandGroupNo}]];
 			}else{
-				$(this).find("[name=brandGroupNo]").val();
+				brandGroupNo = $(this).find("[name=brandGroupNo]").val();
 			}
 			var brandGroupImg = $(this).find("[name=brandNewImgFile]").val();
 			var mdTitle = $(this).find("[name=mdTitle]").val();
@@ -745,60 +779,39 @@ console.log('brandGroupNo:'+brandGroupNo);
 	 * 상품추가
 	 */
 	var goodsIdx = 0;
-	var fnAddGoodsRow = function (param, param2, param3){
+	var fnAddGoodsRow = function (param){
 		var addRow = "goodsListTd"+goodsIdx;
-		//console.log('addRow::'+addRow);
 
 		var html = '<tr name="goodsRow">';
 		html += '<th>상품추가<br><button type="button" class="btn btn-base btn-lg" onclick="fnSearchGoods(\''+addRow+'\');">상품조회</button>';
 		html += '<br></br><button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteTrRow(this);">삭제</button>';
 		html += '</th>';
 		html += '<td colspan="3">';
-		//html += '<table style="border-style: solid;border-color: #ac2925; width:100%; height:20px;">';
-		//html += '<colgroup>';
-		//html += '<col style="width:90%;"/>';
-		//html += '<col style="width:10%;"/>';
-		//html += '<col/>';
-		//html += '</colgroup>';
-		//html += '<thead>';
 		html += '<div class="sortableWrap" data-unit="7" style="overflow-y:scroll;">';
 		html += '<div class="itemWrap" id="goodsListTd'+goodsIdx+'">';
 		if(typeof param!='object'){
-			var goodsCdList = [];
-			var goodsNmList = [];
-			var goodsImgList = [];
-			goodsCdList = param;
-			goodsNmList = param2;
-			goodsImgList = param3;
-			// 여기서 부터 시작! 상품불러오는거 똑같이 html 추가해서 체크
-			// +) 저장할때 TB_CONTENTS_GOODS 에 상품코드, 상품명, 상품이미지경로 추가해서 3개다 불러와서 데이터 뿌릴수 있게
-			$.each(goodsCdList.split(','),function (i){
+			var imgPath = _goodsUrl;
+			for(let i=0; i<param.length; i++){
 				html += '<ul id="goodsUl'+i+'" class="item ui-state-default goodsClass" style="min-height:140px;"> ';
-				goodsImg = goodsImgList.split(',')[i];
-				goodsCd = goodsCdList.split(',')[i];
-				goodsNm = goodsNmList.split(',')[i];
 				html += '<li class="img">';
-				var imgPath = _goodsUrl;
-				html += '<img src="'+imgPath+ "/" +goodsImg+'" onerror="this.src=\'/image/no.png\';"/>';
+				html += '<img src="'+imgPath+ "/" +param[i].sysImgNm+'" onerror="this.src=\'/image/no.png\';"/>';
 				html += '</li>';
 				html += '<li class="cont">';
 				html += '<ul>';
-				html += '<li class="no" name="goodsCdLi"><span>'+goodsCd+'</span>';
-				html += '<input type="hidden" name="goodsImgPath" value="'+goodsImg+'">';
-				html += '<input type="hidden" name="goodsCd" value="'+goodsCd+'">';
-				html += '<input type="hidden" name="goodsNm" value="'+goodsNm+'">';
+				html += '<li class="no" name="goodsCdLi"><span>'+param[i].goodsCd+'</span>';
+				html += '<input type="hidden" name="goodsImgPath" value="'+param[i].sysImgNm+'">';
+				html += '<input type="hidden" name="goodsCd" value="'+param[i].goodsCd+'">';
+				html += '<input type="hidden" name="goodsNm" value="'+param[i].goodsNm+'">';
 				html += '<span style="margin-left:5px;"><a href="javascript:void(0);" id="delId" onclick="fnRemoveGoods(this,'+i+');">X</a></span>';
 				html += '</li>';
 				html += '</li>';
-				html += '<li class="title">'+goodsNm+'</li>';
+				html += '<li class="title">'+param[i].goodsNm+'</li>';
 				html += '</ul>';
 				html += '</ul>';
-			});
+			}
 		}
 		html += '</div>';
 		html += '</div>';
-		//html += '</thead>';
-		//html += '</table>';
 		html += '</td>';
 		html += '</tr>';
 		if(typeof param == 'object'){
@@ -808,7 +821,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 			}
 			goodsIdx++;
 			$(param).closest("table").find("tbody").append(html);
-
+			return html;
 		}else{
 			goodsIdx++;
 			return html;