<%--
  Class Name : CateCodeTree.jsp
  Description : 카테고리 코드
  Modification Information
 
      수정일         수정자                   수정내용
    -------    --------    ---------------------------
     2018.06.11   ITN              최초 생성
 
    author   : ITN
    since    : 2018.06.11
--%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="itn.com.cmm.service.EgovProperties"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="ko">
<link href="<c:url value='/'/>css/jstree/themes/default/style.min.css" rel="stylesheet" type="text/css">
<style>
.jstree_orgChart {
	overflow: auto;
	border: 1px solid silver;
	min-height: 100px;
	width: 390px;
}
</style>
<script src="<c:url value='/js/jquery-1.12.4.min.js' />"></script> 
<script src="<c:url value='/js/jstree.min.js' />"></script>
<script src="<c:url value='/js/EgovCmmUtl.js' />"></script>
<script src="/direct/js/jquery.nice-select.js"></script>
<script>
$( document ).ready(function() {
	jstreeInit();
	$('.tbType2 input').keydown(function(e) {
	    if (e.keyCode == 13) {
	    	$('.main1_save_btn').click();
	    }
	});
});
/*********************************
 * jstree
 *********************************
 */
var newNodeId = "";
var modiNodeId = "";
function jstreeInit() {
	$('#kopost_organization').jstree({
		"core" : {
			"animation" : 0,
			"multiple" : false,
			"check_callback" : true, 
			"themes" : { "stripes" : true },
			"data" : {
				"url" : "<c:url value='/sym/ccm/ccc/CateCodeTreeInitAjax.do'/>",
				"dataType" : "json",
				"data" : function (node) {
					return {'id' : node.id }
				}
			}
		},
		"types" : {
			"#" : {
				/* "max_children" : 4, */
				"max_depth" : 4,
				"valid_children" : ["root"]
			},
			"root" : {
				//"icon" : "/static/3.3.5/assets/images/tree_icon.png",
				"icon" : "glyphicon glyphicon-flash",
				"valid_children" : ["default"]
			},
		    "default" : {
				"valid_children" : ["default","file"]
		    },
		    "file" : {
				//"icon" : "glyphicon glyphicon-file",
				"icon" : "jstree-file",
				"valid_children" : []
			}
		},
		"plugins" : [
			"contextmenu", "search", 
			"types"
			//, "unique"
			//, "wholerow"
			// "dnd" move기능 삭제
			// "checkbox" 체크박스 삭제
		]
	})
	.bind('loaded.jstree', function(e, data) {
		//console.log("jstree loaded");
		//$(this).jstree(true).open_all();
		$('#kopost_organization').jstree('open_node' , $('#10000') )
	})
	.on('select_node.jstree', function (e, data) {
		if(!$('.organ_rightbox').is(":visible")){
			$(".organ_rightbox").show();
		}
			
		/*  코드  선택 */
		var cateNo = data.node.id;
		var upperCateNo = data.node.parent;
		//하위 코드가 있으면 코드 변경못하게
		$('#nodeDepth').val(data.node.parents.length);
		$('#upperCateNo').val(upperCateNo);
		
		if(data.node.children.length > 0){
			$('#cateNo').attr("readonly",true);
			
		}else{
			$('#cateNo').attr("readonly",false);
		}
		
		//코드 추가시 자동 선택되게
		if(newNodeId !=""){
			cateNo = newNodeId ;
			newNodeId = "";
			$('#'+data.instance.get_node(cateNo).a_attr.id).trigger("click"); //클릭 이벤트 발생
		}
		
		$("#menuTopNm").text(data.node.text);
		
		$.ajax({
			type:"POST",
			url:"<c:url value='/sym/ccm/ccc/CateCodeInfoAjax.do' />",
			data:{ "cateNo" : cateNo, "upperCateNo" :  upperCateNo, "cateDepth" : data.node.parents.length},
			dataType:'json',
			async: false,
			//timeout:(1000*30),
			success : function(returnData, status) {
				if (status == "success") {
					var cateCodeVO = returnData.cateCodeVO;
					fn_setting_menuNo(cateCodeVO);
				} else { alert("코드 조회가 실패되었습니다."); return;} 
			},
			error : function(request , status, error) {
			},
			complete : function () {
				deleteLodingBar();
			}
		});
	})
	.on('rename_node.jstree', function (e, data) { //코드명 변경
		var nodeId = data.node.id; 
		var oldText = data.old;
		var newText = data.text;
		var upperCateNo = data.node.parent;
		
		if (data.node.parents.length == 1) {
			alert("최상위 공통코드 명은 변경할수 없습니다.");
			data.instance.refresh();
		}else if (data.node.parents.length > 0) {
			/* 부서명 변경 */
			if (oldText != newText) {
				if (confirm("코드명을  변경하시겠습니까?" )) {
					$.ajax({
						type:"POST",
						//url:"<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoNmUpdateAjax.do' />",
						url:"<c:url value='/sym/ccm/ccc/CateCodeInfoNmUpdateAjax.do' />",
						data:{ "cateNo" : nodeId, "cateNm" :  newText },
						dataType:'json',
						success : function(returnData, status) {
							if (status == "success") {
								alert("코드명이 변경되었습니다.");
							} else { alert("코드명 변경이 실패되었습니다."); return;} 
						},
						error : function(request , status, error) {
							alert("코드명 변경이 실패되었습니다.");
						},
						complete : function () {
							data.instance.refresh();
						}
					});
				} else {
					data.instance.refresh();
				}
			}
		} else {/* 코드 추가 */
			
		}
	})
	.on('delete_node.jstree', function (e, data) {
		/* 코드 삭제  */
		var upperCateNo = data.node.parent;
		if(data.node.parents.length == 1){
			alert("최상위 공통코드는 삭제할수 없습니다.");
			data.instance.refresh();
		}else{
			if(data.node.children.length != 0){
				alert("하위 코드를 먼저 삭제 후 코드를 삭제해 주세요.");
				data.instance.refresh();
			}else{
				if (confirm("[" + data.node.text + "]" + " 코드를 삭제하시겠습니까?")){
					$.ajax({
						type:"POST",
						//url:"<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoDeleteAjax.do' />",
						url:"<c:url value='/sym/ccm/ccc/CateCodeInfoDeleteAjax.do' />",
						data:{ "cateNo" : data.node.id ,  "upperCateNo" :  upperCateNo, "nodeDepth" : data.node.parents.length },
						dataType:'json',
						//timeout:(1000*30),
						success : function(returnData, status) {
							if (status == "success") {
								
								alert("코드 정보가 삭제되었습니다.");
								fn_init_menuInfo();
							} else { alert("코드 정보 삭제가 실패되었습니다."); return;} 
						},
						error : function(request , status, error) {
							alert("코드 정보 삭제가 실패되었습니다.");
							//alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
						},
						complete : function () {
							data.instance.refresh();
						}
					});
				} else {
					data.instance.refresh();
				}
			}
		}
	})
	.on('create_node.jstree', function(e, data) {
		if (data.node.parents.length > 4) {
			alert("더 이상 하위 코드를 생성할수 없습니다.");
			data.instance.refresh();
		}else{
			if (confirm("코드를 추가하시겠습니까?")){
				var instance = data.instance;
				var menuNm = data.text;
				var upperCateNo = data.node.parent;
				var menuOrdr = 1;
				var childrenNodes = instance.get_node(upperCateNo).children;
				
				// 하위 코드 있을 시 마지막 부서 sort_ord + 1
				if (childrenNodes.length > 1) {
					menuOrdr = childrenNodes.length ;
				}
				
				$.ajax({
					type:"POST",
					url:"<c:url value='/sym/ccm/ccc/CateCodeInfoInsertAjax.do' />",
					data:{ "cateNm" : menuNm, "upperCateNo" :  upperCateNo, "cateDepth" : data.node.parents.length },
					dataType:'json',
					success : function(returnData, status) {
						if(returnData.status == "success") {
							//alert("코드가 추가 되었습니다.");
							newNodeId =  returnData.newMenuNo ; //코드추가후 노드선택
						}else if(returnData.status == "dupl"){ 
							alert("중복된 아이디가 있습니다.\n 중복된 아이디변경/삭제후 다시 추가해 주세요\n"+ "("+returnData.menuManageVO.codeNm+")"); 
							return;
						}else{
							alert("코드 추가가 실패하였습니다.");
							return;
						}
					},
					error : function(request , status, error) {
						alert("코드 추가가 실패되었습니다.")
					},
					complete : function () {
						data.instance.refresh();  
					}
				});                                              
			}else{
				data.instance.refresh();
			}
		}
  	})
  	.on('move_node.jstree', function (e, data) {
		/* 코드 위치 변경 */
		var instance = data.instance;
		var cateNo = data.node.id;
		var childrenNodes = instance.get_node(cateNo).children;
		
		// 하위 코드 있을 시 이동 금지
		/* if (childrenNodes.length > 1) {
			alert("하위 코드가 있으면 코드 이동을 할 수 없습니다.");
			data.instance.refresh();
			return;
		} */
		
		if (confirm("코드 위치를 변경하시겠습니까?" )){
			//var partIdx = data.node.id;
			var upperCateNo = data.parent;
			var menuOrdr = data.position + 1;
			var sortOver = "A" ;
			$.ajax({
				type:"POST",
				url:"<c:url value='/sym/mnu/mcm/EgovMenuInfoMoveAjax.do' />",
				data:{ "cateNo" : cateNo, "upperCateNo" :  upperCateNo,  "menuOrdr" : menuOrdr},
				dataType:'json',
				//timeout:(1000*30),
				success : function(returnData, status) {
					if (status == "success") {
						alert("코드 위치가 변경되었습니다.");
					} else { alert("코드 위치 변경이 실패되었습니다."); return;}
				},
				error : function(request , status, error) {
					alert("코드 위치 변경이 실패되었습니다.");
					//alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
				},
				complete : function () {
					data.instance.refresh();
				}
			});
		} else {
			data.instance.refresh();
		}
	})
	.on("refresh.jstree", function (e,data) {
        if(modiNodeId !=""){     	
        	$('#'+data.instance.get_node(modiNodeId).a_attr.id).trigger("click");
        }
    });
}


//코드 정보 세팅
function fn_setting_menuNo(cateCodeVO){
	//upperIdxs = upperIdxs.join("|");
	var tmpHtml = "";
	if(cateCodeVO!=null){
		$('#cateNo').val(cateCodeVO.id);
		$('#beforeNo').val(cateCodeVO.id);
		$('#cateNm').val(cateCodeVO.text);                                                                         
		$('#cateCode').val(cateCodeVO.cateCode);                                                                         
		$('#cateOrdr').val(cateCodeVO.cateOrdr);
		$('#upperCateNoTxt').text(cateCodeVO.parent);
		$('#upperCateNo').val(cateCodeVO.parent);
		$('#cateDepth').text(cateCodeVO.cateDepth);
		$('#useYn').val(cateCodeVO.useYn);
		$(".main1_delete_btn").removeAttr("onclick");
		$(".main1_delete_btn").attr("onclick", "fn_delete_menuInfo('"+cateCodeVO.id+"');return false;");
		$(".main1_save_btn").removeAttr("onclick");
		$(".main1_save_btn").attr("onclick", "fn_save_menuInfo('"+cateCodeVO.id+"');return false;");
		
		//selectupdate
		$('#useYn').niceSelect('update');
		
	}
}

//코드  정보 삭제
function fn_delete_menuInfo(cateNo) {
	if(cateNo == null || "undefined"== cateNo){
		alert("삭제 하려는 코드를 먼저 선택해주세요.");
		return ;
	}
	
	var instance = $('#kopost_organization').jstree(true);
	
	if(instance.get_node(cateNo)==false){
		cateNo = $('#upperCateNoText').text()+"__"+cateNo ;
	}
	if(instance.get_node(cateNo).children.length != 0){
		alert("하위 코드를 먼저 삭제 후 코드를 삭제해 주세요.");
		return;
	}
	
	if (confirm("코드를 삭제 하시겠습니까?")){
		$.ajax({
			type:"POST",
			"url" : "<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoDeleteAjax.do'/>",
			data:{ "cateNo" : cateNo , "nodeDepth" : instance.get_node(cateNo).parents.length , upperCateNo : $('#upperCateNo').val() },
			dataType:'json',
			//timeout:(1000*30),
			success : function(returnData, status) {
				if (returnData.status == "success") {
					//코드 목록 갱신
					var instance = $('#kopost_organization').jstree(true);
					alert("코드 정보가 삭제 되었습니다.");
					$("#kopost_organization").jstree("refresh");
					fn_init_menuInfo();
				} else if(returnData.status == "duplPk"){
					alert("삭제하려는 코드를 참조하고 있는 코드가 있습니다.\n 참조하는 코드를 삭제후 다시 시도해 주세요\n"+ "("+returnData.menuManageResultVO.menuCours+")");
					return;
				}					
				else { 
					alert("코드 삭제가 실패되었습니다."); 
					return;
				} 
			},
			error : function(request , status, error) {
				alert("코드 삭제가 실패되었습니다..");
			},
			complete : function () {
			}
		});
	}
}

//코드정보 init(코드 초기화)
function fn_init_menuInfo() {
	$("#menuTopNm").text("코드선택");
	$("#menuForm input[type=text]").val("")
	$('#menuCours').text("");
	$('#upperCateNoText').text("");
	/* $('#progrmFileNmText').text(""); */
}

//코드 초기화
function jstreeRefresh() {
	var searchForm = document.searchForm ;
	searchForm.authorCode.value = $('#authorCode').val();
	searchForm.submit();
	/* 	$('#kopost_organization').jstree("refresh");
	$('#kopost_organization').jstree(true).open_all();
	fn_init_menuInfo(); */
}


//코드 정보 저장. 등록/수정
function fn_save_menuInfo(cateNo) {
	
	var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?.]/gi;
	if(special_pattern.test(document.menuForm.cateNo.value) == true){
	  	alert("코드 코드는 특수문자를 쓸수 없습니다.") ;
	  	return;
	}
	
	if(cateNo == null || "undefined"== cateNo){
		alert("저장 하려는 코드를 먼저 코드트리에서 생성해 주세요."); return ;
	}
	
	var menuForm = document.menuForm;
	if(""==menuForm.cateNo.value){
		alert("코드는 필수 값입니다"); return false;
	}
	
	if(""==menuForm.cateCode.value){
		alert("코드 ID는 필수 값입니다"); return false;
	}
	
 	var url = "";
	//url = "<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoUpdateAjax.do'/>";
	url = "<c:url value='/sym/ccm/ccc/CateCodeInfoUpdateAjax.do'/>";
	var params = $(menuForm).serialize();
	$.ajax({
		type:"POST",
		"url":url,
		data:params,
		dataType:'json',
		async: false,
		success : function(returnData, status) {
			if (returnData.status == "success") {
				alert("코드 정보가 저장되었습니다.");
				//modiNodeId =  $('#menuNo').val();
				modiNodeId =  returnData.newMenuNo;
				
			} else if(returnData.status == "upperDupl"){
				alert("상위 코드 번호가 있습니다.");
				return;
			}else if(returnData.status == "dupl"){
				alert("이미 사용하고 있는 코드 번호가 있습니다.");
				return;
			}else if(returnData.status == "duplProNm"){
				alert("이미 사용하고 있는 프로그램파일명이 있습니다.");
				return;
			}else{ 
				alert("코드 정보 저장이 실패되었습니다."); return;
			} 
		},
		error : function(request , status, error) {
			alert("코드 정보 저장이 실패되었습니다.");
		},
		complete : function () {
			$("#kopost_organization").jstree("refresh");
		}
	});
	
}

</script>
<title>코드관리</title>
</head>
<body>
<style>
.organ_rightbox span{
	float: none; margin-top: unset;
    font-size: unset; margin-left: 10px;
} 
</style>
<div class="contWrap">
	<form name="menuForm" id="menuForm" >
	<input type="hidden" id="existChildNode" name="existChildNode" value="N" />
	<input type="hidden" id="nodeDepth" name="nodeDepth" value="" />
	<input type="hidden" id="upperCateNo" name="upperCateNo" value="" />
	<div class="pageTitle">
		<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
		<h2 class="titType1 c_222222 fwBold">문자 카테고리 코드관리</h2>
		<p class="tType6 c_999999">문자 카테고리 코드를 추가/수정/삭제할 수 있습니다.</p>
	</div>
	<div class="pageNav">
		<img src="/pb/img/common/homeIcon.png" alt="홈이미지">&ensp;>&ensp;<p class="topDepth">코드관리</p>&ensp;>&ensp;<p class="subDepth">코드관리</p>
	</div>

	<div class="pageCont">
		<!-- 조직도 관리 시작 -->
		<div class="orgWrap">
			<div class="btnWrap">
				<input type="button" id="evts_button_open_all" value="모두열기" class="btnType1"  onclick="$('#kopost_organization').jstree('open_all' ); ">
				<input type="button" id="evts_button_close_all" value="모두닫기" class="btnType2" onclick="$('#kopost_organization').jstree('close_node' , $('#10000') ); ">
			</div>
			<div id="kopost_organization" class="orgCont"></div>
		</div>	
		<div class="tbWrap">
			<span class="tbTit" id="menuTopNm" >코드를 선택하세요</span>
			<table class="tbType2">
				<colgroup>
					<col style="width: 20%">
					<col style="width: 80%">
				</colgroup>
				<tbody>
					<tr>
						<th><span>코드번호</span></th>
						<td>
							<input type="text" name="cateNo" id="cateNo" maxlength="8"/>
							<input type="hidden" id="beforeNo" name="beforeNo"/><!-- 이전코드 No --> 
						</td>
					</tr>
					<tr>
						<th><span>코드명</span></th>
						<td>
							<input type="text" name="cateNm" id="cateNm" />
							<input type="hidden" id="tmp_Name" name="tmp_Name"/><!-- 이전코드 이름 -->
						</td>
					</tr>
					<tr>
						<th><span>코드ID</span></th>
						<td>
							<input type="text" name="cateCode" id="cateCode" />
						</td>
					</tr>
					<tr>
						<th><span>상위 코드</span></th>
						<td>
							<span id="upperCateNoTxt"></span>
						</td>
					</tr>
					<tr>
						<th><span>코드순서</span></th>
						<td>
							<input type="text" numberOnly name="cateOrdr" id="cateOrdr">
						</td>
					</tr>
					<tr>
						<th><span>사용/미사용</span></th>
						<td>
							<select name="useYn" id="useYn" >
					        	<option value="Y" <c:if test="${userSearchVO.useYn == 'Y'}">selected="selected"</c:if> >사용</option>
					        	<option value="N" <c:if test="${userSearchVO.useYn == 'N'}">selected="selected"</c:if> >미사용</option>
							</select>
						</td>
					</tr>
					<tr>
						<th><span>뎁스</span></th>
						<td>
							<span id="cateDepth"></span>
						</td>
					</tr>
				</tbody>
			</table>
		</div>
		<div class="btnWrap">
			<input type="button" class="btnType1 bg_456ded main1_save_btn" value="저 장" onClick="fn_save_menuInfo(); return false;">
			<!-- 삭제 기능 제거 - 아래의 경우를 방지하기 위해 미사용/사용처리로 제어
			1. 기존 카테고리 삭제
			2. 신규 카테고리 등록
			3. 신규 카테고리가 기존에 삭제했던 카테고리의 코드를 사용하는 경우. 신규 카테고리에 기존 카테고리의 문자샘플이 같이 조회되는 경우 방지 -->
			<!-- <input type="button" class="btnType2 main1_delete_btn" value="삭 제" onClick="fn_delete_menuInfo(); return false;"> -->
		</div>
	</div>
</div>
	</form>
	<form name="searchForm" method="get" action="<c:url value='/sym/mnu/mcm/EgovMenuCreatSelectJtree.do'/>" >
	<input name="authorCode" type="hidden" value="ROLE_ANONYMOUS" />
	</form>
	</div>

<script>
// 	document.getElementById("kopost_organization").style.fontSize="11px";
</script>
</body>
</html>