瀏覽代碼

기획전 코너관리

sowon4187 5 年之前
父節點
當前提交
06242f2db4

+ 29 - 0
src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java

@@ -251,5 +251,34 @@ public interface TsaPlanDao {
 	 * @since 2021. 2. 17
 	 */
 	void savePlanCornerGoods(Plan param);
+	
+	/**
+	 * 기획전 코너 상품 삭제
+	 *
+	 * @param 기획전 상세번호
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	void deletePlanCornerGoods(Plan param);
+	
+	/**
+	 * 기획전 코너 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	void createPlanCornerCopy(Plan param);
+	
+	/**
+	 * 기획전 상품 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	void createPlanGoodsCopy(Plan param);
+
+
 
 }

+ 130 - 7
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -1,6 +1,7 @@
 package com.style24.admin.biz.service;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.apache.commons.lang3.StringUtils;
@@ -9,6 +10,8 @@ import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.util.GagaFileUtil;
 import com.gagaframework.web.util.GagaStringUtil;
 import com.style24.admin.biz.dao.TsaPlanDao;
@@ -36,6 +39,9 @@ public class TsaPlanService {
 	@Autowired
 	private Environment env;
 	
+	@Autowired
+	private ObjectMapper mapper;
+	
 	/**
 	 * 기획전 코너 전체 조회
 	 *
@@ -591,14 +597,30 @@ public class TsaPlanService {
 	 *
 	 * @param
 	 * @return
-	 * @author rladbwnd5
-	 * @since 2020. 1. 3
+	 * @author sowon
+	 * @since 2021. 2. 17
 	 */
 	@Transactional("shopTxnManager")
 	public void deletePlanCornerInfo(Collection<Plan> paramList) {
 		for (Plan cornerInfo : paramList) {
 			planDao.deletePlanCornerInfo(cornerInfo);
-			//marketingDao.deletePlanCornerGoods(cornerInfo);
+			planDao.deletePlanCornerGoods(cornerInfo);
+		}
+	}
+	
+
+	/**
+	 * 기획전 코너 상품 삭제 처리
+	 *
+	 * @param
+	 * @return
+	 * @author rladbwnd5
+	 * @since 2021. 2. 18
+	 */
+	@Transactional("shopTxnManager")
+	public void deletePlanCornerGoods(Collection<Plan> paramList) {
+		for (Plan cornerInfo : paramList) {
+			planDao.deletePlanCornerGoods(cornerInfo);
 		}
 	}
 	
@@ -655,12 +677,8 @@ public class TsaPlanService {
 	 */
 	@Transactional("shopTxnManager")
 	public void savePlanGoods(Collection<Plan> paramList) {
-		int disp = 1;
 		for (Plan param : paramList) {
-			param.setDispOrd(disp);
-			param.setPlanDtlSq(param.getPlanDtlSq());
 			savePlanCornerGoods(param);
-			disp++;
 		}
 	}
 
@@ -679,7 +697,112 @@ public class TsaPlanService {
 		plan.setRegNo(TsaSession.getInfo().getUserNo());
 		plan.setUpdNo(TsaSession.getInfo().getUserNo());
 		plan.setGoodsCd(param.getGoodsCd());
+		plan.setPlanDtlSq(param.getPlanDtlSq());
 		planDao.savePlanCornerGoods(plan);
 	}
+	
+	/**
+	 * 기획전 코너 복사
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	@Transactional("shopTxnManager")
+	public void copyPlanCorner(Collection<Plan> paramList) {
+		try {
+			for (Plan planInfo : paramList) {
+				planInfo.setRegNo(TsaSession.getInfo().getUserNo());
+				planInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+				planInfo.setPlanDtlSq(planDao.getPlanDtlSq(planInfo));
+				// 코너 복사
+				planDao.createPlanCornerCopy(planInfo);
+				
+				// 상품 복사 시 적용 할 상세일련번호
+				Integer planDtlSq = planInfo.getPlanDtlSq();
+
+				// 상품 조회
+				Plan planSearch = new Plan();
+				planSearch.setPlanDtlSq(planInfo.getCopyPlanDtlSq());
+				Collection<Plan> goodsList = planDao.getPlanGoodsList(planSearch);
+
+				// 상품 복사
+				if (goodsList != null && !goodsList.isEmpty()) {
+					for (Plan goodsInfo : goodsList) {
+						goodsInfo.setPlanDtlSq(planDtlSq);
+						goodsInfo.setRegNo(planInfo.getRegNo());
+						goodsInfo.setUpdNo(planInfo.getUpdNo());
+						planDao.createPlanGoodsCopy(goodsInfo);
+					}
+				}
+			}
+		} catch (Exception e) {
+			log.info("[기획전 복사 중 Error] {}", e.toString());
+			throw new IllegalStateException("기획전 복사 실패");
+		}
+	}
+
+	/**
+	 * 기획전 코너 상품 엑셀 저장
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	@Transactional("shopTxnManager")
+	public void createExceluploadGoods(Collection<GagaMap> ecxelGoodsList, Plan param) {
+		String targetPath = env.getProperty("upload.excel.target.path");
+
+		if ((ecxelGoodsList == null || ecxelGoodsList.isEmpty())) {
+			deleteFile(targetPath, param.getExcelFileNm());
+			throw new IllegalStateException("저장 할 데이터가 없습니다.");
+		}
+
+		Collection<Plan> dtlPlan = new ArrayList<>();
+		Collection<Plan> goodsList = new ArrayList<>();
+
+		long tempPlanDtlSq = 0;
+		for (GagaMap gagaMap : ecxelGoodsList) {
+			Plan planGoods = mapper.convertValue(gagaMap, Plan.class);
+			planGoods.setPlanSq(param.getPlanSq());
+
+			String planDtlSq = String.valueOf(planGoods.getPlanDtlSq());
+			if (StringUtils.isBlank(planDtlSq)) {
+				throw new IllegalStateException("상품코드 : " + planGoods.getGoodsCd() + " 기획전 코너 번호가 없습니다.");
+			}
+
+			if (StringUtils.isBlank(planGoods.getGoodsCd())) {
+				throw new IllegalStateException("비어 있는 상품코드가 존재합니다.");
+			}
+
+			// 중복 확인 위한 데이터 적제
+			if (tempPlanDtlSq != planGoods.getPlanDtlSq()) {
+				dtlPlan.add(planGoods);
+			}
+
+			// 상품 데이터 적제
+			goodsList.add(planGoods);
+		}
+
+		// 기획전 유효성 체크
+		for (Plan plan : dtlPlan) {
+			Plan searchCorner = new Plan();
+			searchCorner.setPlanSq(plan.getPlanSq());
+			searchCorner.setPlanDtlSq(plan.getPlanDtlSq());
+
+			Collection<Plan> cornerList = planDao.getPlanCornerList(searchCorner);
+
+			if (cornerList == null || cornerList.isEmpty()) {
+				throw new IllegalStateException("상품코드 : " + plan.getGoodsCd() + "의 " + plan.getPlanDtlSq() + " 기획전 코너가 존재 하지 않습니다.");
+			}
+		}
+
+		// 기획전 상품 저장
+		for (Plan goods : goodsList) {
+			savePlanCornerGoods(goods);
+		}
+	}
 
 }

+ 100 - 0
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -61,10 +61,12 @@ import com.style24.persistence.domain.User;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.excel.GagaExcelUtil;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.gagaframework.web.util.GagaDateUtil;
+import com.gagaframework.web.util.GagaFileUtil;
 
 /**
  * 마케팅 Controller
@@ -1864,6 +1866,104 @@ public class TsaMarketingController extends TsaBaseController {
 		planService.savePlanGoods(paramList);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
+	
+	/**
+	 * 기획전 코너 상품 삭제
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	@PostMapping("/planning/corner/goods/delete")
+	@ResponseBody
+	public GagaResponse deletePlanCornerGoods(@RequestBody Collection<Plan> paramList) {
+		planService.deletePlanCornerGoods(paramList);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+	
+	/**
+	 * 기획전 코너 복사
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	@GetMapping("/planning/corner/copy/list/form")
+	public ModelAndView planCornerCopyForm(Plan param) {
+		ModelAndView mav = new ModelAndView();
+
+		// 코너유형목록
+		mav.addObject("cornerDispTypeCopyList", rendererService.getCommonCodeList("G045", "Y"));
+
+		// 코너유형
+		mav.addObject("planDtlStatCopyList", rendererService.getCommonCodeList("G044", "Y"));
+
+		// 코너 조회
+		mav.addObject("planList", planService.getPlanAllList(param));
+
+		if (param.getCopyMode().equals("CORNER")) { // 코너 복사
+			// 기획전 일련번호
+			mav.addObject("planSq", param.getPlanSq());
+		}
+
+		// 모드
+		mav.addObject("copyMode", param.getCopyMode());
+
+		mav.setViewName("marketing/PlanCornerCopyForm");
+		
+
+		return mav;
+	}
+	
+	/**
+	 * 기획전 코너 복사
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	@PostMapping("/planning/corner/copy")
+	@ResponseBody
+	public GagaResponse copyPlanCorner(@RequestBody Collection<Plan> paramList) {
+		planService.copyPlanCorner(paramList);
+		return super.ok(message.getMessage("SUCC_0004"));
+	}
+	
+	
+	/**
+	 * 기획전 코너 상품 엑셀상품추가
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	@PostMapping("/planning/corner/goods/excelupload")
+	@ResponseBody
+	public GagaMap createExceluploadGoods(@RequestBody Plan param) throws Exception {
+		String targetPath = env.getProperty("upload.excel.target.path") + "/excel/";
+		String[] goodsNames = {"planDtlSq", "goodsCd"};
+
+		Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, param.getExcelFileNm()), 0, goodsNames, 0);
+
+		try {
+			planService.createExceluploadGoods(ecxelGoodsList, param);
+		} catch (Exception e) {
+			// 파일 삭제
+			GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, param.getExcelFileNm()));
+			throw new IllegalStateException(e.getMessage());
+		}
+
+		// 파일 삭제
+		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, param.getExcelFileNm()));
+
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.SUCCESS.getCode()); // 200
+		result.set("message", message.getMessage("SUCC_0001"));
+		return result;
+	}
+
+	
+	
 
 
 }

+ 73 - 19
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -644,6 +644,18 @@
 		AND    PLAN_DTL_SQ = #{planDtlSq}
 	</delete>
 	
+	<!-- 기획전 코너 상품 삭제 처리 -->
+	<update id="deletePlanCornerGoods" parameterType="Plan">
+		/* TsaMarketing.deletePlanCornerGoods */
+		UPDATE TB_PLAN_GOODS
+		SET    DEL_YN = 'Y'
+		     , DISP_ORD = 0
+		WHERE  PLAN_DTL_SQ = #{planDtlSq}
+		<if test="goodsCd != null and goodsCd != ''">
+		AND    GOODS_CD = #{goodsCd}
+		</if>
+	</update>
+	
 	<!-- 기획전 코너 저장 -->
 	<insert id="savePlanCornerInfo" parameterType="Plan">
 		/* TsaMarketing.savePlanCornerInfo */
@@ -715,7 +727,7 @@
 			               , G.LIST_PRICE                                                                 
 			               , G.CURR_PRICE                                                                 
 			               , G.DC_RATE                                                                    
-			               , G.FORMAL_GB                                                                  
+			               , CASE G.FORMAL_GB WHEN 'G009_20' THEN '이월' ELSE '정상' END AS FORMAL_GB                                                                 
 			               , G.SEASON_CD       
 			               , (SELECT SUPPLY_COMP_NM
                  				FROM   TB_SUPPLY_COMPANY
@@ -735,13 +747,15 @@
 			               , TG.REG_NO                                                                    
 			               , TG.REG_DT                              
 			               , TG.UPD_NO                                                                    
-			               , TG.UPD_DT                              
+			               , TG.UPD_DT     
+			               , TG.PLAN_DTL_SQ                          
 			         FROM TB_GOODS G
 					        JOIN ( SELECT @rownum := 0) R
 					        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 					        INNER JOIN TB_PLAN_GOODS TG ON G.GOODS_CD = TG.GOODS_CD 
 			         WHERE 1=1
 			         	 AND TG.PLAN_DTL_SQ = #{planDtlSq}
+			         	 AND TG.DEL_YN = 'N'
 			         ORDER BY G.REG_DT DESC, G.GOODS_CD
 		<include refid="getListPagingCondition_sql"/>
 		)Q
@@ -787,10 +801,11 @@
 		        INNER JOIN TB_PLAN_GOODS TG ON G.GOODS_CD = TG.GOODS_CD 
 		        WHERE 1=1
 		        AND TG.PLAN_DTL_SQ = #{planDtlSq}
+	            AND TG.DEL_YN = 'N'
 		    ) CNT
 	</select>
 	
-	<!-- 기획전 코너 저장 -->
+	<!-- 기획전 코너 상품저장 -->
 	<insert id="savePlanCornerGoods" parameterType="Plan">
 		/* TsaMarketing.savePlanCornerGoods */
 		INSERT INTO
@@ -807,14 +822,7 @@
 			   VALUES (
 			    	    #{planDtlSq}
 			          , #{goodsCd}
-			          <choose>
-				          <when test="dispOrd != null and dispOrd != ''">
-				          , #{dispOrd}
-				          </when>
-				          <otherwise>
-				          ,1
-				          </otherwise>
-			          </choose>
+			          , 0
 			          , 'N'
 			          , #{regNo}
 			          , now()
@@ -825,18 +833,64 @@
 			      DUPLICATE KEY
 			   UPDATE
 			        DEL_YN = 'N'
-		          <choose>
-			          <when test="dispOrd != null and dispOrd != ''">
-			          , DISP_ORD = #{dispOrd}
-			          </when>
-			           <otherwise>
-			          ,DISP_ORD = 1
-			          </otherwise>
-		          </choose>
 		          , UPD_DT = now()
 		          , UPD_NO = #{updNo}                                  
 	</insert>
 	
+	<!-- 기획전 코너 복사 -->
+	<insert id="createPlanCornerCopy" parameterType="Plan">
+		/* TsaMarketing.createPlanCornerCopy */
+		INSERT INTO TB_PLAN_DETAIL (
+		            PLAN_DTL_SQ						          
+		          , PLAN_SQ                              
+		          , CORNER_DISP_TYPE                       
+		          , CORNER_NM                              
+		          , DISP_STDT                       
+		          , DISP_EDDT                              
+		          , DISP_ORD                                  
+		          , REG_NO                                    
+		          , REG_DT                                    
+		          , UPD_NO                                    
+		          , UPD_DT
+		      ) SELECT #{planDtlSq}
+		             , #{planSq}
+		             , CORNER_DISP_TYPE
+		             , CORNER_NM
+		             , DISP_STDT
+		             , DISP_EDDT
+		             , DISP_ORD
+		             , #{regNo}
+		             , now()
+		             , #{updNo}
+		             , now()
+		        FROM   TB_PLAN_DETAIL
+		        WHERE  PLAN_DTL_SQ = #{copyPlanDtlSq}
+	</insert>
+	
+	<!-- 기획전 상품 복사 -->
+	<insert id="createPlanGoodsCopy" parameterType="Plan">
+		/* TsaMarketing.createPlanGoodsCopy */
+		INSERT INTO TB_PLAN_GOODS (
+		            PLAN_DTL_SQ				 
+		          , GOODS_CD                 
+		          , DISP_ORD                 
+		          , DEL_YN                   
+		          , REG_NO                   
+		          , REG_DT                   
+		          , UPD_NO                   
+		          , UPD_DT                   
+		      ) VALUES (
+		            #{planDtlSq}
+		          , #{goodsCd}
+		          , #{dispOrd}
+		          , 'N'
+		          , #{regNo}
+		          , now()
+		          , #{updNo}
+		          , now()
+		       )
+	</insert>
+	
 	
 	
 </mapper>

+ 249 - 0
src/main/webapp/WEB-INF/views/marketing/PlanCornerCopyForm.html

@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PlanCornerCopyForm.html
+ * @desc    : 기획전 코너 복사 화면 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.18   sowon   최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1200" data-height="800"	id="popupCornerCopy">
+	<div class="panelStyle" style="height: 750px;">
+		<div class="panelTitle">
+			<strong>기획전 복사</strong>
+			<button type="button" class="close"	onclick="uifnPopupClose('popupCornerCopy')">
+				<i class="fa fa-times"></i>
+			</button>
+		</div>
+
+
+		<div class="panelContent">
+			<input type="hidden" name="planSq" id="OrdPlanSq" th:value="${planSq}" />
+			<form id="planCornerCopyForm" name="planCornerCopyForm" action="#" th:action="@{'/marketing/planning/corner/list'}" th:method="post">
+				<input type="hidden" name="copyMode" id="copyMode" th:value="${copyMode}" />
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width: 10%" />
+						<col style="width: 40%;" />
+						<col />
+					</colgroup>
+					<tr>
+						<th >기획전명</th>
+						<td>
+							<select name="planSq" id="planSq">
+								<option value="">선택</option>
+								<option th:if="${planList}"	th:each="oneData, status : ${planList}"	th:value="${oneData.planSq}" th:text="|[${oneData.planSq}]  ${oneData.planNm}|"></option>
+							</select>
+						</td>
+					</tr>
+				</table>
+
+				<ul class="panelBar">
+					<li class="right" style="margin-right: -19px; margin-top: 10px;">
+						<span class="btnRight">
+							<button type="button" class="btn btn-default btn-lg" onclick="fnPlanCornerCopy();">복사</button>
+						</span>
+					</li>
+				</ul>
+
+				<ul class="boxContent">
+					<li>
+						<div id="gridListCornerCopy" style="width: 100%; height: 200px;" class="ag-theme-balham"></div>
+					</li>
+				</ul>
+			</form>
+		</div>
+
+		<div class="panelContent">
+			<div>
+				<h4>
+					코너명 : <label id="cornerNmCopy"></label>
+				</h4>
+			</div>
+			<div id="gridListGoodsCopy" style="width: 100%; height: 300px;"	class="ag-theme-balham"></div>
+		</div>
+
+	</div>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+
+	var copyMode = [[${copyMode}]]
+	var cornerList = [[${cornerList}]];
+	var cornerDispTypeCopyList =  gagajf.convertToArray([[${cornerDispTypeCopyList}]]);
+	var planDtlStatCopyList =  gagajf.convertToArray([[${planDtlStatCopyList}]]);
+
+	var columnDefsCorner = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "코너번호"		, field:'planDtlSq'			, width:120, cellClass: 'text-left', editable: false },
+		{headerName: "코너명"			, field:'cornerNm'			, width:350, cellClass: 'text-left',
+			cellRenderer: function(params) {return '<a href="javascript:void(0);">' + params.value + '</a>'; },
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 50, required: true }
+		},
+		{headerName: "코너유형"		, field:'cornerDispType'		, width:130, cellClass: 'text-left',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(cornerDispTypeCopyList) , maxlength: 50, required: true },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(cornerDispTypeCopyList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(cornerDispTypeCopyList, params.newValue); }
+		},
+		{headerName: "전시순서"		, field:'dispOrd'				, width:100, cellClass: 'text-right',
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 3, required: true }
+		},
+		{headerName: "상태"			, field:'planDtlStat'			, width:100, cellClass: 'text-left',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(planDtlStatCopyList) , maxlength: 50, required: true },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(planDtlStatCopyList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(planDtlStatCopyList, params.newValue); }
+		},
+		{headerName: "기획전 일련번호"	, field:'planSq'	, width:90, cellClass: 'text-left', hide: true},
+		{headerName: "시작일"			, field:'startSearchDate'	, width:110, cellClass: 'text-left',
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 10, required: true }
+		},
+		{headerName: "시작시간"		, field:'startSearchTime'	, width:110, cellClass: 'text-center',
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 6, required: true }
+		},
+		{headerName: "종료일"			, field:'endSearchDate'		, width:110, cellClass: 'text-left',
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 10, required: true }
+		},
+		{headerName: "종료시간"		, field:'endSearchTime'		, width:110, cellClass: 'text-center',
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 6, required: true }
+		},
+		{headerName: "등록자"			, field:'regId'				, width:120, cellClass: 'text-center'},
+		{headerName: "수정자"			, field:'updId'				, width:120, cellClass: 'text-center'}
+	];
+
+	var gridOptionsCornerCopy = gagaAgGrid.getGridOptions(columnDefsCorner);
+	gridOptionsCornerCopy.defaultColDef.editable = true;
+	gridOptionsCornerCopy.rowSelection = 'multiple';
+
+	
+
+	// 기획전명 변경 시
+	$('#planCornerCopyForm select[name=planSq]').on('change', function() {
+		fnCornerSearchCopy();
+	});
+
+	// 코너 셀 클릭 이벤트
+	gridOptionsCornerCopy.onCellClicked = function(event) {
+		var field = event.colDef.field;
+		if (field != 'cornerNm') return;
+
+		fnCornerGoodsSearchCopy(event.data);
+	}
+
+	// 코너 상품 조회
+	var fnCornerGoodsSearchCopy = function(data) {
+		if (!gagajf.isNull(data.cornerNm)) {
+
+			var data = {planDtlSq : data.planDtlSq};
+			var jsonData = JSON.stringify(data);
+			
+			gagajf.ajaxJsonSubmit('/marketing/planning/corner/goods/list', jsonData, function(result) {
+				gridOptionsGoodsCopy.api.setRowData(result.planGoodsList);
+			})
+			$('#cornerNmCopy').html(data.cornerNm);
+		}
+	}
+
+	// 코너 조회
+	var fnCornerSearchCopy = function() {
+		var formId = '#planCornerCopyForm';
+		gagaAgGrid.fetch($(formId).prop('action'), gridOptionsCornerCopy, formId
+						, function() {
+								if (gridOptionsCornerCopy.api.getDisplayedRowCount() >= 1) {
+									gridOptionsCornerCopy.api.getRowNode(0).setSelected(true);
+									fnCornerGoodsSearchCopy(gridOptionsCornerCopy.api.getRowNode(0).data);
+								} else {
+									$('#gridListGoodsCopy').html('');
+									$('#cornerNmCopy').html('');
+									gagaAgGrid.createGrid('gridListGoodsCopy', gridOptionsGoodsCopy);
+								}
+				});
+	}
+
+	// 코너 복사
+	var fnPlanCornerCopy = function() {
+		var selectData = gagaAgGrid.selectedRowData(gridOptionsCornerCopy);
+
+		if (selectData.length < 1) {
+			mcxDialog.alert('선택 된 코너가 없습니다.');
+			return;
+		}
+
+		$(selectData).each(function(idx, data) {
+			console.log(copyMode);
+			if (copyMode == 'CORNER') {
+				data.planSq = $('#OrdPlanSq').val(); // 코너 복사 시 선택 된 기획전 번호
+				console.log(data.planSq);
+			} else {
+				data.copyPlanSq = $('#planCornerCopyForm select[name=planSq]').val(); // 기획전 복사 시 복사 될 기획전 번호
+			}
+			data.copyPlanDtlSq = data.planDtlSq;
+			data.copyMode = $('#copyMode').val();
+		});
+
+		mcxDialog.confirm('선택된 코너를 복사하시겠습니까?',{
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(selectData);
+
+				gagajf.ajaxJsonSubmit('/marketing/planning/corner/copy', jsonData, function() {
+					if (copyMode == 'CORNER') {
+						fnCornerSearch();
+					} else {
+						fnSearch();						
+						uifnPopupClose('popupEventWebDetail');
+					}
+					uifnPopupClose('popupCornerCopy')
+				});
+			}
+		});
+	}
+
+	var columnDefsGoodsCopy = [
+		{headerName: "상품코드"	, field:'goodsCd'		, width:150, cellClass: 'text-left'},
+		{headerName: "상품명"		, field:'goodsNm'		, width:350, cellClass: 'text-left'},
+		/* {headerName: "전시순서"	, field:'dispOrd'		, width:80 , cellClass: 'text-right'}, */
+		{headerName: "가용재고"	, field:'stockQtySum'	, width:80 , cellClass: 'text-right',
+			cellRenderer: function(params) {return !gagajf.isNull(params.value) ? params.value : '0'; }
+		},
+		{headerName: "할인율"		, field:'dcRate'		, width:80 , cellClass: 'text-right'},
+		{headerName: "정상가"		, field:'listPrice'		, width:100, cellClass: 'text-right'
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "판매가"		, field:'currPrice'		, width:100, cellClass: 'text-right'
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "업체"		, field:'supplyCompNm'	, width:150, cellClass: 'text-left'},
+		{headerName: "기획전상세"	, field:'planDtlSq'		, width:150, cellClass: 'text-left', hide: true},
+		{headerName: "등록일"		, field:'regDt'			, width:100,  cellClass: 'text-left',
+			cellRenderer: function(params) { return !gagajf.isNull(params.value) ? params.value.toDate("YYYY-MM-DD HH:MM:SS").format("YYYY-MM-DD") : ''; }
+		},
+		{headerName: "정상/이월여부", field:'formalGb'		, width:150, cellClass: 'text-left'}
+	];
+
+	var gridOptionsGoodsCopy = gagaAgGrid.getGridOptions(columnDefsGoodsCopy);
+	
+	$(document).ready(function() {
+		gagaAgGrid.createGrid('gridListCornerCopy', gridOptionsCornerCopy);
+		gagaAgGrid.createGrid('gridListGoodsCopy', gridOptionsGoodsCopy);
+	});
+
+/*]]>*/
+</script>
+</html>

+ 29 - 20
src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html

@@ -29,6 +29,7 @@
 				name="planCornerListForm" action="#"
 				th:action="@{'/marketing/planning/corner/list'}" th:method="post">
 				<input type="hidden" th:field="*{planSq}" />
+				<input type="hidden" th:field="*{planDtlSq}" />
 				<table class="frmStyle" style="margin-bottom: 10px;">
 					<colgroup>
 						<col style="width: 10%;" />
@@ -191,13 +192,12 @@
 								$('#cornerNm').html('');
 								gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
 				});
+		
+		uifnPopupClose('fnCreateGoods');
 	}
 	// 행추가
 	$('#btnAddRow').on('click', function() {
 		var allData = gagaAgGrid.getAllRowData(gridOptionsCorner);
-		console.log(allData.length);
-		console.log(allData[0]);
-		console.log(allData[0].crud);
 		var planSq = $('#planCornerListForm input[name=planSq]').val();
 		var stdt = planInfo.dispStdt.split(" ");
 		var eddt = planInfo.dispEddt.split(" ");
@@ -345,11 +345,13 @@
 		});
 	}
 
+	// 코너 복사
 	var fnCornerCopyPopup = function() {
-		var actionUrl = '/marketing/plan/corner/copy/list/form?planSq=' + planInfo.planSq;
+		var actionUrl = '/marketing/planning/corner/copy/list/form?planSq=' + planInfo.planSq;
 		actionUrl += '&copyMode=CORNER';
 		cfnOpenModalPopup(actionUrl,'popupCornerCopy');
 	}
+	
 	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
 	var columnDefsGoods = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
@@ -371,10 +373,10 @@
 				return '<img width="60" src="'+imgPath.replace('1000', '100')+'" onerror="this.src=\''+_uximgUrl+'/image/no.gif\';">';
 			}
 		},
-		{headerName: "전시순서"	, field:'dispOrd'		, width:80 , cellClass: 'text-center'
+		/* {headerName: "전시순서"	, field:'dispOrd'		, width:80 , cellClass: 'text-center'
 			, editable : true, cellEditor: 'numericCellEditor'
 			, valueFormatter: function(params) { return params.value.addComma(); }
-		},
+		}, */
 		{headerName: "재고"		, field:'stockQtySum'			, width:80 , cellClass: 'text-center'
 			, cellRenderer: function(params) {return !gagajf.isNull(params.value) ? params.value : '0'; }
 		},
@@ -425,8 +427,6 @@
 	// 상품 선택삭제
 	var fnDeleteGoods = function() {
 		var removedData = gagaAgGrid.removeRowData(gridOptionsGoods);
-// 		var data = new Object();
-		_planDtlSq = removedData[0].planDtlSq;
 
 		if (removedData.length == 0) {
 			mcxDialog.alert('선택된 행이 없습니다.');
@@ -439,9 +439,8 @@
 			sureBtnClick: function() {
 				var jsonData = JSON.stringify(removedData);
 
-				gagajf.ajaxJsonSubmit('/marketing/plan/corner/goods/delete', jsonData, function() {
+				gagajf.ajaxJsonSubmit('/marketing/planning/corner/goods/delete', jsonData, function() {
 					fnCornerSearch();
-//	 				fnCornerGoodsSearch(data);
 				});
 			}
 		});
@@ -464,10 +463,20 @@
 	}
 
 	var fnOpenGoodsPopup = function() {
-		if (gagaAgGrid.getAllRowData(gridOptionsCorner).length < 1 ) {
+		var allData = gagaAgGrid.getAllRowData(gridOptionsCorner);
+		if (allData.length < 1 ) {
 			mcxDialog.alert('기획전 코너가 존재 하지 않습니다.');
 			return;
 		}
+		if (allData[0].regNm == '' || allData[0].regNm == null) {
+			mcxDialog.alert('추가 된 코너를 저장 후 코너를 추가하세요.');
+			return;
+		}
+
+		if ($("#cornerNm").text() == null || $("#cornerNm").text()=='') {
+			mcxDialog.alert('코너를 선택해주세요.');
+			return;
+		}
 		cfnOpenGoodsPopup('fnCreateGoods');
 	}
 
@@ -502,16 +511,16 @@
 							  goodsCd : result[disp].goodsCd };
 				oldGoodsList.unshift(goods);
 			}
+			
+			mcxDialog.confirm('선택하신 상품을 추가 하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					var jsonData = JSON.stringify(oldGoodsList);
+					gagajf.ajaxJsonSubmit('/marketing/planning/corner/goods/save', jsonData, fnCornerSearch);
+				}
+			});
 		}
-
-		mcxDialog.confirm('선택하신 상품을 추가 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				var jsonData = JSON.stringify(oldGoodsList);
-				gagajf.ajaxJsonSubmit('/marketing/planning/corner/goods/save', jsonData, fnCornerSearch);
-			}
-		});
 	}
 
 	// 순셔 변경 팝업