Преглед на файлове

공급업체출고처관리 추가

gagamel преди 5 години
родител
ревизия
682f5da17d

+ 18 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaBusinessDao.java

@@ -3,6 +3,7 @@ package com.style24.admin.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.SupplyCompany;
 
 /**
@@ -39,4 +40,21 @@ public interface TsaBusinessDao {
 	 */
 	void updateSupplyCompany(SupplyCompany supplyComp);
 
+	/**
+	 * 출고처관리 목록
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	Collection<DeliveryLoc> getDeliveryLocList(DeliveryLoc delvLoc);
+
+	/**
+	 * 출고처관리 저장
+	 * @param delvLoc - 출고처 정보
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	void saveDeliveryLoc(DeliveryLoc delvLoc);
+
 }

+ 28 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaBusinessService.java

@@ -5,9 +5,11 @@ import java.util.Collection;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.admin.biz.dao.TsaBusinessDao;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.SupplyCompany;
 
 import lombok.extern.slf4j.Slf4j;
@@ -53,4 +55,30 @@ public class TsaBusinessService {
 		}
 	}
 
+	/**
+	 * 출고처 목록
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 **/
+	public Collection<DeliveryLoc> getDeliveryLocList(DeliveryLoc delvLoc) {
+		return businessDao.getDeliveryLocList(delvLoc);
+	}
+
+	/**
+	 * 출고처 저장
+	 * @param delvLoc - 출고처 정보
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	@Transactional("shopTxnManager")
+	public void saveDeliveryLoc(DeliveryLoc delvLoc) {
+		if (StringUtils.isEmpty(delvLoc.getUseYn())) {
+			delvLoc.setUseYn("N");
+		}
+
+		businessDao.saveDeliveryLoc(delvLoc);
+	}
+
 }

+ 54 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaBusinessController.java

@@ -16,6 +16,7 @@ import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.SupplyCompany;
 
 import lombok.extern.slf4j.Slf4j;
@@ -96,4 +97,57 @@ public class TsaBusinessController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
+	/**
+	 * 공급업체출고처관리 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 **/
+	@GetMapping("/supply/company/delvloc/form")
+	public ModelAndView deliveryLocForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TsaSession.getInfo().getSupplyCompCd()));
+
+		// 출고처분류
+		mav.addObject("delvLocClsfList", rendererService.getCommonCodeList("G024"));
+
+		// 송장출력형태
+		mav.addObject("invoicePrintTypeList", rendererService.getCommonCodeList("G025"));
+
+		mav.setViewName("business/DeliveryLocForm");
+
+		return mav;
+	}
+
+	/**
+	 * 공급업체출고처 목록
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 **/
+	@PostMapping("/supply/company/delvloc/list")
+	@ResponseBody
+	public Collection<DeliveryLoc> getDeliveryLocList(@RequestBody DeliveryLoc delvLoc) {
+		return businessService.getDeliveryLocList(delvLoc);
+	}
+
+	/**
+	 * 공급업체출고처 저장 처리
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	@PostMapping("/supply/company/delvloc/save")
+	@ResponseBody
+	public GagaResponse saveDeliveryLoc(@RequestBody DeliveryLoc delvLoc) {
+		delvLoc.setRegNo(TsaSession.getInfo().getUserNo());
+		delvLoc.setUpdNo(TsaSession.getInfo().getUserNo());
+		businessService.saveDeliveryLoc(delvLoc);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 }

+ 1 - 5
style24.admin/src/main/java/com/style24/persistence/domain/DeliveryLoc.java

@@ -30,12 +30,8 @@ public class DeliveryLoc extends TsaBaseDomain {
 	private String rtnLocZipcode;		// 반품처우편번호
 	private String rtnLocBaseAddr;		// 반품처기본주소
 	private String rtnLocDtlAddr;		// 반품처상세주소
+	private String rtnLocNm;			// 반품처명
 	private String invoicePrintType;	// 송장출력형태(공통코드G025)
 	private String useYn;				// 사용여부
 
-//	private String delvLocType;
-//	private String delvBrandCode;
-//
-//	private String minStockLinkQty;
-
 }

+ 130 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -143,5 +143,135 @@
 		     , UPD_DT          = NOW()
 		WHERE  SUPPLY_COMP_CD = #{supplyCompCd}
 	</update>
+	
+	<!-- 출고처 목록 -->
+	<select id="getDeliveryLocList" parameterType="DeliveryLoc" resultType="DeliveryLoc">
+		/* TsaBusiness.getDeliveryLocList */
+		SELECT DELV_LOC_CD        /*출고처코드*/
+		     , DELV_LOC_NM        /*출고처명*/
+		     , SUPPLY_COMP_CD     /*공급업체코드*/
+		     , DELV_LOC_CLSF      /*출고처분류*/
+		     , DELV_ASSIGN_ORD    /*출고지정순서*/
+		     , DELV_ASSIGN_GRADE  /*출고지정등급*/
+		     , STOCK_APPL_RATE    /*재고적용율*/
+		     , DELV_FEE_RATE      /*출고수수료율*/
+		     , DELV_LOC_ZIPCODE   /*출고처우편번호*/
+		     , DELV_LOC_BASE_ADDR /*출고처기본주소*/
+		     , DELV_LOC_DTL_ADDR  /*출고처상세주소*/
+		     , RTN_LOC_ZIPCODE    /*반품처우편번호*/
+		     , RTN_LOC_BASE_ADDR  /*반품처기본주소*/
+		     , RTN_LOC_DTL_ADDR   /*반품처상세주소*/
+		     , RTN_LOC_NM         /*반품처명*/
+		     , INVOICE_PRINT_TYPE /*송장출력형태*/
+		     , USE_YN             /*사용여부*/
+		FROM   TB_DELIVERY_LOC
+		WHERE  1 = 1
+		<if test="supplyCompCd != null and supplyCompCd != ''">
+		AND    LOWER(SUPPLY_COMP_CD) LIKE CONCAT('%',LOWER(#{supplyCompCd}),'%')
+		</if>
+		<if test="delvLocNm != null and delvLocNm !=''">
+		AND    LOWER(DELV_LOC_NM) LIKE CONCAT('%',LOWER(#{delvLocNm}),'%')
+		</if>
+		<if test="delvLocClsf != null and delvLocClsf != ''">
+		AND    DELV_LOC_CLSF = #{delvLocClsf}
+		</if>
+		<if test="useYn != null and useYn != ''">
+		AND    USE_YN = #{useYn}
+		</if>
+		ORDER  BY DELV_LOC_CD
+	</select>
+
+	<!-- 출고처 저장 -->
+	<insert id="saveDeliveryLoc" parameterType="DeliveryLoc">
+		/*  TsaBusiness.saveDeliveryInfo */
+		INSERT INTO TB_DELIVERY_LOC (
+		       DELV_LOC_CD
+		     , DELV_LOC_NM
+		     , SUPPLY_COMP_CD
+		     , DELV_LOC_CLSF
+		     , DELV_ASSIGN_ORD
+		     , DELV_ASSIGN_GRADE
+		     , STOCK_APPL_RATE
+		     , DELV_FEE_RATE
+		     , DELV_LOC_ZIPCODE
+		     , DELV_LOC_BASE_ADDR
+		     , DELV_LOC_DTL_ADDR
+		     , RTN_LOC_ZIPCODE
+		     , RTN_LOC_BASE_ADDR
+		     , RTN_LOC_DTL_ADDR
+		     , RTN_LOC_NM
+		     , INVOICE_PRINT_TYPE
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{delvLocCd}
+		     , #{delvLocNm}
+		     , #{supplyCompCd}
+		     , #{delvLocClsf}
+		     , CASE WHEN #{delvLocClsf} IN ('G024_10','G024_21') THEN /*물류창고,직송매장*/
+		                IFNULL(#{delvAssignOrd},100)
+		            ELSE
+		                #{delvAssignOrd}
+		       END
+		     , #{delvAssignGrade}
+		     , CASE WHEN #{delvLocClsf} IN ('G024_10','G024_21') AND #{stockApplRate} = 0.0 THEN /*물류창고,직송매장*/
+		                IFNULL(#{stockApplRate},100.0)
+		            ELSE
+		                #{stockApplRate}
+		       END
+		     , CASE WHEN #{delvLocClsf} = 'G024_21' THEN /*직송매장*/
+		                IFNULL(#{delvFeeRate},0.0)
+		            ELSE
+		                #{delvFeeRate}
+		       END
+		     , #{delvLocZipcode}
+		     , #{delvLocBaseAddr}
+		     , #{delvLocDtlAddr}
+		     , #{rtnLocZipcode}
+		     , #{rtnLocBaseAddr}
+		     , #{rtnLocDtlAddr}
+		     , #{rtnLocNm}
+		     , #{invoicePrintType}
+		     , #{useYn}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       DELV_LOC_NM = #{delvLocNm}
+		     , DELV_LOC_CLSF = #{delvLocClsf}
+		     , DELV_ASSIGN_ORD = CASE WHEN #{delvLocClsf} IN ('G024_10','G024_21') THEN /*물류창고,직송매장*/
+		                                  IFNULL(#{delvAssignOrd},100)
+		                              ELSE
+		                                  #{delvAssignOrd}
+		                         END
+		     , DELV_ASSIGN_GRADE = #{delvAssignGrade}
+		     , STOCK_APPL_RATE = CASE WHEN #{delvLocClsf} IN ('G024_10','G024_21') AND #{stockApplRate} = 0.0 THEN /*물류창고,직송매장*/
+		                                  100
+		                              ELSE
+		                                  #{stockApplRate}
+		                         END
+		     , DELV_FEE_RATE = CASE WHEN #{delvLocClsf} = 'G024_21' THEN /*직송매장*/
+		                                IFNULL(#{delvFeeRate},0.0)
+		                            ELSE
+		                                #{delvFeeRate}
+		                       END
+		     , DELV_LOC_ZIPCODE = #{delvLocZipcode}
+		     , DELV_LOC_BASE_ADDR = #{delvLocBaseAddr}
+		     , DELV_LOC_DTL_ADDR = #{delvLocDtlAddr}
+		     , RTN_LOC_ZIPCODE = #{rtnLocZipcode}
+		     , RTN_LOC_BASE_ADDR = #{rtnLocBaseAddr}
+		     , RTN_LOC_DTL_ADDR = #{rtnLocDtlAddr}
+		     , RTN_LOC_NM = #{rtnLocNm}
+		     , INVOICE_PRINT_TYPE = #{invoicePrintType}
+		     , USE_YN = #{useYn}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
 
 </mapper>

+ 364 - 0
style24.admin/src/main/webapp/WEB-INF/views/business/DeliveryLocForm.html

@@ -0,0 +1,364 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : DeliveryLocForm.html
+ * @desc    : 출고처관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.14   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/business/supply/company/delvloc/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>공급업체</th>
+						<td>
+							<select name="supplyCompCd">
+								<option value="">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>출고처유형</th>
+						<td>
+							<select name="delvLocClsf">
+								<option value="">[전체]</option>
+								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>출고처명</th>
+						<td>
+							<input type="text" name="delvLocNm" maxlength="50"/>
+						</td>
+						<th>사용여부</th>
+						<td>
+							<select name="useYn">
+								<option value="Y">Yes</option>
+								<option value="N">No</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+		
+		<!-- 등록/수정 -->
+		<div class="panelStyle">
+			<form id="detailForm" name="detailForm" action="#" th:action="@{'/business/supply/company/delvloc/save'}">
+				<table class="frmStyle" aria-describedby="등록/수정 폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>출고처코드<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" class="w100" name="delvLocCd" maxlength="20" placeholder="출고처코드" required="required" data-valid-type="alphaNumeric" data-valid-name="출고처코드"/>
+						</td>
+						<th>출고처명<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" class="w200" name="delvLocNm" maxlength="100" placeholder="출고처명" required="required" data-valid-name="출고처명"/>
+						</td>
+						<th>출고처유형<i class="required" title="필수"></i></th>
+						<td>
+							<select name="delvLocClsf" required="required" data-valid-name="출고처유형">
+								<option value="">[선택]</option>
+								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>공급업체<i class="required" title="필수"></i></th>
+						<td>
+							<select name="supplyCompCd" required="required" data-valid-name="공급업체">
+								<option value="">[선택]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>재고적용율</th>
+						<td colspan="3">
+							<input type="text" class="w100 aR" name="stockApplRate" maxlength="5" data-valid-type="real"/>%
+							<span class="cBlue">* WMS부터 수신된 재고의 판매가용재고 적용율(%). 물류창고와 직송매장에 한함</span>
+						</td>
+						<th>출고수수료율</th>
+						<td colspan="3">
+							<input type="text" class="w100 aR" name="delvFeeRate" maxlength="5" data-valid-type="real"/>%
+							<span class="cBlue">* 직송매장 출고 시 적용할 출고수수료율(%)</span>
+						</td>
+					</tr>
+					<tr>
+						<th>출고지정순서</th>
+						<td colspan="3">
+							<input type="text" class="w100 aR" name="delvAssignOrd" maxlength="3" data-valid-type="integer"/>
+							<span class="cBlue">* 물류창고와 직송매장에 대해 출고지정되는 순서</span>
+						</td>
+<!-- 						<th>출고지정등급</th> -->
+<!-- 						<td> -->
+<!-- 							<select name="delvAssignGrade"> -->
+<!-- 								<option value="">[선택]</option> -->
+<!-- 								<option value="A">[A] A등급</option> -->
+<!-- 								<option value="B">[B] B등급</option> -->
+<!-- 								<option value="C">[C] C등급</option> -->
+<!-- 								<option value="Z">[Z] 출고지정제외</option> -->
+<!-- 							</select> -->
+<!-- 						</td> -->
+						<th>사용여부<i class="required" title="필수"></i></th>
+						<td colspan="3">
+							<label class="rdoBtn"><input type="radio" name="useYn" id="useYn" value="Y" checked="checked">Yes<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="useYn" id="useYn" value="N">No<span></span></label>
+						</td>
+					</tr>
+					<tr>
+						<th>출고처주소<i class="required" title="필수"></i></th>
+						<td colspan="7">
+							<input type="text" class="w100" name="delvLocZipcode" data-valid-name="출고처 우편번호" readonly="readonly"/>
+							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
+							<input type="text" class="w300" name="delvLocBaseAddr" required="required" data-valid-name="출고처 기본주소" readonly="readonly"/>
+							-
+							<input type="text" class="w300" name="delvLocDtlAddr" maxlength="100" data-valid-name="출고처 상세주소"/>
+						</td>
+					</tr>
+					<tr>
+						<th>반품처주소<i class="required" title="필수"></i></th>
+						<td colspan="7">
+							<input type="text" class="w100" name="rtnLocZipcode" data-valid-name="반품처 우편번호" readonly="readonly"/>
+							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('rtnLoc');">우편번호찾기</button>
+							<input type="text" class="w300" name="rtnLocBaseAddr" required="required" data-valid-name="반품처 기본주소" readonly="readonly"/>
+							-
+							<input type="text" class="w300" name="rtnLocDtlAddr" maxlength="100" data-valid-name="반품처 상세주소"/>
+						</td>
+					</tr>
+				</table>
+			</form>
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+		<!-- 등록/수정 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
+	let delvLocClsfList = gagajf.convertToArray([[${delvLocClsfList}]]);
+	let delvGradeList = { "A":"A등급", "B":"B등급", "C":"C등급", "Z":"출고지정제외" };
+	let invoicePrintTypeList = gagajf.convertToArray([[${invoicePrintTypeList}]]);
+
+	let columnDefs = [
+		{ headerName: "출고처코드", field: "delvLocCd", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "출고처명", field: "delvLocNm", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{
+			headerName: "출고처유형", field: "delvLocClsf", width: 150, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(delvLocClsfList, params.data.delvLocClsf);
+			}
+		},
+		{
+			headerName: "매장POS", field: "btnPos", width: 120, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				var btn = '';
+				if (params.value === '21') {
+					btn ='<button type="button" class="btn btn-success btn-sm" onclick="cfnPopPos(\'' + params.data.delvLocCd + '\');\">매장[POS]</button>';
+				}
+				return btn;
+			}
+		},
+		{
+			headerName: "공급업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
+			}
+		},
+		{ headerName: "출고지정순서", field: "delvAssignOrd", width: 120, cellClass: 'text-center' },
+// 		{
+// 			headerName: "출고지정등급", field: "delvAssignGrade", width: 150, cellClass: 'text-center',
+// 			cellRenderer: function (params) {
+// 				return gagaAgGrid.lookupValue(delvGradeList, params.value);
+// 			}
+// 		},
+		{ headerName: "재고적용율(%)", field: "stockApplRate", width: 120, cellClass: 'text-center' },
+		{headerName: "출고수수료율(%)", field: "delvFeeRate", width:120, cellClass: 'text-center' },
+		{
+			headerName: "송장출력형태", field: "invoicePrintType", width:150 , cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(invoicePrintTypeList, params.data.invoicePrintType);
+			}
+		},
+		{
+			headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) { return params.data.useYn == 'Y' ? 'Yes' : 'No'; }
+		}
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// Cell click
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'delvLocNm')
+			return;
+		
+		$('#detailForm input[name=delvLocCd]').attr('readonly', true);
+		$('#detailForm input[name=delvLocCd]').val(event.data.delvLocCd);
+		$('#detailForm input[name=delvLocNm]').val(event.data.delvLocNm);
+		$('#detailForm select[name=delvLocClsf]').val(event.data.delvLocClsf);
+		$('#detailForm select[name=supplyCompCd]').val(event.data.supplyCompCd);
+		$('#detailForm input[name=delvAssignOrd]').val(event.data.delvAssignOrd);
+		$('#detailForm select[name=delvAssignGrade]').val(event.data.delvAssignGrade);
+		$('#detailForm input[name=stockApplRate]').val(Number(event.data.stockApplRate).addComma());
+		$('#detailForm input[name=delvFeeRate]').val(Number(event.data.delvFeeRate).addComma());
+		$('#detailForm select[name=invoicePrintType]').val(event.data.invoicePrintType	);
+		$('#detailForm input[name=delvLocZipcode]').val(event.data.delvLocZipcode);
+		$('#detailForm input[name=delvLocBaseAddr]').val(event.data.delvLocBaseAddr);
+		$('#detailForm input[name=delvLocDtlAddr]').val(event.data.delvLocDtlAddr);
+		$('#detailForm input[name=rtnLocZipcode]').val(event.data.rtnLocZipcode);
+		$('#detailForm input[name=rtnLocBaseAddr]').val(event.data.rtnLocBaseAddr);
+		$('#detailForm input[name=rtnLocDtlAddr]').val(event.data.rtnLocDtlAddr);
+		$('#detailForm input[name=rtnLocNm]').val(event.data.rtnLocNm);
+		$('#detailForm input:radio[name=useYn]:input[value= ' + event.data.useYn + '] ').click();
+	}
+
+	// 출고처유형 셀렉트박스 변경 시 이벤트
+	$('#detailForm select[name=delvLocClsf]').on('change', function() {
+		let val = $(this).val();
+		
+		if (val == 'G024_10' || val == 'G024_21') { // 물류창고, 직송매장
+			$('#detailForm input[name=stockApplRate]').val(100);
+		} else {
+			$('#detailForm input[name=stockApplRate]').val('');
+		}
+	});
+	
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+
+	// 신규버튼
+	$('#btnNew').on('click', function() {
+		$("#detailForm")[0].reset();
+	});
+	
+	// 저장
+	$("#btnSave").on("click", function() {
+		// 필수값 체크
+		if (!gagajf.validation('#detailForm'))
+			return false;
+
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
+					$('#btnNew').trigger('click');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('출고처 목록', gridOptions);
+	});
+	
+	/**
+	 * DAUM을 이용한 우편번호 팝업 레이어
+	 * @param callbackPosition - 우편번호 정보를 설정할 위치
+	 */
+	var fnOpenDaumAddr = function(callbackPosition) {
+		let daumZip = new daum.Postcode({
+			oncomplete: function(data) {
+				// 우편번호와 주소 정보를 해당 필드에 넣는다.
+				if (callbackPosition == 'delvLoc') {
+					$('#detailForm input[name=delvLocZipcode]').val(data.zonecode);
+					$('#detailForm input[name=delvLocBaseAddr]').val(cfnGetDaumRoadAddr(data));
+					$('#detailForm input[name=delvLocDtlAddr]').focus();
+				} else if (callbackPosition == 'rtnLoc') {
+					$('#detailForm input[name=rtnLocZipcode]').val(data.zonecode);
+					$('#detailForm input[name=rtnLocBaseAddr]').val(cfnGetDaumRoadAddr(data));
+					$('#detailForm input[name=rtnLocDtlAddr]').focus();
+				}
+				
+				cfnCloseDaumAddr();
+			},
+			width: '100%'
+		});
+		
+		cfnOpenDaumAddr(daumZip);
+	}
+	
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>