
/* ##############################################################
	설  명 : [Modal]직원 등록 팝업
	작성일 : 2023. 01. 19.
	작성자 : NTsoft
	수정일 	        수정자 	 수정내용
	-------         -------- ---------------------------
	2023. 01. 19.	NTsoft 	 최초 생성
*/
//직원 아이디 중복 유무
let duplicateYn=true;
let memberInsertModal = {
	callback : null,
	reqParam : null,
	dataList : null,
	/* 모달 초기화 작업 */
	init : function () {
		duplicateYn=true;
		$('#memberInsertModal').remove();
		$('body').append( this.HtmlTemplate);
		//그리드 이벤트
		this.setEvent();
	},
	/* 그리드 이벤트 설정 */
	setEvent:function() {
		$('#memberInsertModal .btnCancle').on("click", function(){
			memberInsertModal.close();
		});
		
		$('#memberInsertModal .btnSave').on("click", function(){
			memberInsertModal.save("I");
		});

		$('#memberInsertModal #modalLoginId').on("change", function(){
			duplicateYn=true;
			$('#memberInsertModal #idUseYn').remove();
		});
		$('#memberInsertModal .duplicate_id').on("click", function(){
			memberInsertModal.search();
		});

        $('#memberInsertModal #orderNumber').on('input', function() {
            // 입력된 키가 숫자가 아닌 경우 입력을 막음
            this.value = this.value.replace(/\D/g, '');
        });

	},
	/* 데이터 선택 */
	setSelect:function(selectNumber) {
		let checkedData = dataList[selectNumber];
		if(dataList==null||checkedData==undefined){
			return ;
		}
		
		if( memberInsertModal.callback )  {
			memberInsertModal.callback(checkedData);
		}
		memberInsertModal.close();
	},

	search:function (){
		let loginId          = $("#memberInsertModal #modalLoginId").val();
		if(true != fn_emptyCheck(loginId)){
			modalEvent.warning("등록", "아이디를 입력하세요");
			return;
		}
		let formData = new FormData();
		formData.append("menuClass", menuClass);
		formData.append("loginId", loginId);
		$.ajax({
			url: encodeURI('/webmember/selectMemberId.do'),
			data: formData,
			dataType: "json",
			processData: false,
			contentType: false,
			type: 'POST',
			async: true,
			success: function(data){
				if('0'==data.msgCode){
					if(data.totalCount===0){
						modalEvent.success("","사용 가능한 아이디입니다.",function () {
							duplicateYn = false;
							$('#memberInsertModal .duplicate_id').parent().append('<a id="idUseYn" style="font-size: small;color: #3985EA;">사용 가능한 아이디</a>')
						})
					} else {
						modalEvent.success("", "이미 존재하는 아이디입니다.", function () {
							duplicateYn = 'duplicate';
							$('#memberInsertModal .duplicate_id').parent().append('<a id="idUseYn" style="font-size: small;color: red;">중복된 아이디</a>')
						})
					}
				} else {
					modalEvent.danger("등록 오류", data.msgDesc);
				}
			},
			error : function(xhr, status, error) {
				modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
			},
			beforeSend:function(){

			},
			complete:function(){

			}
		});

	},
	//저장
	save:function(state) {
		let loginId          = $("#memberInsertModal #modalLoginId").val();
		let orderNumber      = $("#memberInsertModal #orderNumber").val();
		let password         = $("#memberInsertModal #modalPassword").val();
		let passwordConfirm  = $("#memberInsertModal #modalPasswordConfirm").val();
		let memberName       = $("#memberInsertModal #modalMemberName").val();
		let phoneNumber      = $("#memberInsertModal #modalPhoneNumber").val();
		let email            = $("#memberInsertModal #modalEmail").val();
		let type             = $("#memberInsertModal input[name='modalType']:checked").val();
		let muGroupId        = $("#memberInsertModal #modalGroupId").val();
		let muDutyId         = $("#memberInsertModal #modalDutyId").val();
		let muAuthId         = $("#memberInsertModal #modalAuthId").val();
		
		let reg_email    = /^([0-9a-zA-Z_\.-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}$/;
		let reg_tel      = /^[0-9]{8,11}$/;
		let reg_password = /^(?=.*[a-zA-Z])(?=.*\d)/;


		if(true != fn_emptyCheck(orderNumber)) {
			modalEvent.warning("등록", "정렬 순서를 입력하세요.");
			return;
		}
		if(duplicateYn){
			modalEvent.warning("등록", "아이디 중복여부를 확인해주세요.");
			return;
		}
		else if(duplicateYn==='duplicate'){
			modalEvent.warning("등록", "이미 사용중인 아이디 입니다.");
			return;
		}
		if(true != fn_emptyCheck(loginId)){
			modalEvent.warning("등록", "아이디 정보가 없습니다.");	
			return;
		}
		else{
			if(true != fn_lengthCheck(loginId, 255)) {
				modalEvent.warning("등록", "아이디 정보는 255자를 넘을 수 없습니다.");	
				return;
			}
		}
		if(true != fn_emptyCheck(password)) {
			modalEvent.warning("등록", "비밀번호를 입력하세요.");
			return;
		}
		else if(!reg_password.test(password)){
			modalEvent.warning("등록", "비밀번호는 숫자,영문 조합으로 입력해야합니다.");
			return;
		}
		else{
			if(true != fn_lengthCheck(password, 100)) {
				modalEvent.warning("등록", "비밀번호 정보는 100자를 넘을 수 없습니다.");
				return;
			}
		}

		if(true != fn_emptyCheck(passwordConfirm)) {
			modalEvent.warning("등록", "비밀번호 확인을 입력하세요.");
			return;
		}
		else if(!reg_password.test(passwordConfirm)){
			modalEvent.warning("등록", "비밀번호 확인은 숫자,영문 조합으로 입력해야합니다.");
			return;
		}
		else{
			if(true != fn_lengthCheck(passwordConfirm, 100)) {
				modalEvent.warning("등록", "비밀번호 확인 정보는 100자를 넘을 수 없습니다.");
				return;
			}
		}

		if(true != fn_emptyCheck(memberName)){
			modalEvent.warning("등록", "이름을 입력하세요");
			return;
		}
		else{
			if(true != fn_lengthCheck(memberName, 35)) {
				modalEvent.warning("등록", "이름 정보는 35자를 넘을 수 없습니다.");
				return;
			}
		}
		
		if(true != fn_emptyCheck(phoneNumber)){
			modalEvent.warning("등록", "연락처 정보를 입력하세요");
			return;
		}
		else if(reg_tel.test(phoneNumber) != true){
			modalEvent.warning("등록", "연락처 정보는 숫자 8~11자리여야 합니다");
			return;
		}
		else{
			phoneNumber = phoneNumber.replace("-", "");
		}
		
		if(true != fn_emptyCheck(email)){
			modalEvent.warning("등록", "이메일 정보를 입력하세요");
			return;
		}
		else if(!reg_email.test(email)) {
			modalEvent.warning("등록", "이메일 정보를 형식에 맞게 입력해주세요");
			return ;
		}
		
		if(true != fn_emptyCheck(type)){
			modalEvent.warning("등록", "유형 정보를 입력하세요");
			return;
		}
		
		if(true != fn_emptyCheck(muGroupId)){
			modalEvent.warning("등록", "조직 정보를 선택하세요");

			return;
		}
		
		if(true != fn_emptyCheck(muDutyId)){
			modalEvent.warning("등록", "직무 정보를 선택하세요");

			return;
		}
		
		if(true != fn_emptyCheck(muAuthId)){
			modalEvent.warning("등록", "권한그룹 정보를 선택하세요");

			return;
		}
		
		modalEvent.info("등록", "직원 정보를 등록하시겠습니까?", function(){
			let formData = new FormData();
			formData.append("menuClass", menuClass);
			formData.append("orderNumber", orderNumber);
			formData.append("loginId", loginId);
			formData.append("password", password);
			formData.append("passwordConfirm", passwordConfirm);
			formData.append("memberName", memberName);
			formData.append("phoneNumber", phoneNumber);
			formData.append("email", email);
			formData.append("muGroupId", muGroupId);
			formData.append("muDutyId", muDutyId);
			formData.append("muAuthId", muAuthId);
			formData.append("type", type);
	
			$.ajax({
				url: encodeURI('/webmember/insertMember.do'),
				data: formData,
				dataType: "json",
				processData: false,
				contentType: false,
				type: 'POST',
				async: true,
				success: function(data){
					if('0'==data.msgCode){
						modalEvent.success("등록 성공", data.msgDesc, function(){
							if( memberInsertModal.callback )  {
								memberInsertModal.callback();
							}
							memberInsertModal.close();
						});
					}
					else{
						modalEvent.danger("등록 오류", data.msgDesc);
					}
				},
				error : function(xhr, status, error) {
					modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
				},
				beforeSend:function(){
					
				},
				complete:function(){
					
				}
			});
		});
	},
	/*
	 * 팝업
	 * callback : 콜백함수, reqParam: 팝업파라미터
	 */
	popup:function(callback, reqParam) {
		// 초기화 후 열기
		memberInsertModal.init();
		
		//콜백함수 지정.
		memberInsertModal.callback = callback;
		memberInsertModal.reqParam = reqParam;
		memberInsertModal.dataList = null;
		
		// 조직
		fn_insertModal_setGroupCombo();
		
		// 직무
		fn_insertModal_setMemberDutyCombo();
		
		// 권한
		fn_insertModal_setAuthCombo();
		
		setTimeout(function(){
			$('#memberInsertModal').modal('show')
		}, 200);
	},
	/*
	 * 팝업 닫기
	 */
	close:function() {
		$('#memberInsertModal').modal('hide');

		setTimeout(function(){
			$('#memberInsertModal').remove();
		},500);
	},
	HtmlTemplate : `
	<div id="memberInsertModal" class="modal employee_registration_modal fade" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
		<div class="modal-dialog">
			<div class="modal-content">
				<div class="modal-header">
					<p class="title">직원 등록</p>
				</div>

				<div class="modal-body">
					<div class="form_box first">
						<div class="input_box">
							<label>아이디</label>
							<input type="text" id="modalLoginId" placeholder="아이디" maxlength="255">
							<button type="button" class="duplicate_id">중복체크</button>
						</div>

						<div class="input_box">
							<label>비밀번호</label>
							<input type="password" id="modalPassword" placeholder="비밀번호" maxlength="255">
							<input type="password" id="modalPasswordConfirm" placeholder="비밀번호 재확인" style="margin-left:10px;" maxlength="255">
						</div>
					</div>

					<div class="form_box">
						<div class="input_box">
							<label>이름</label>
							<input type="text" id="modalMemberName" placeholder="이름" maxlength="35">
						</div>

						<div class="input_box">
							<label>연락처</label>
							<input type="tel" id="modalPhoneNumber" placeholder="연락처" maxlength="13">
						</div>

						<div class="input_box">
							<label>이메일</label>
							<input type="text" id="modalEmail" placeholder="이메일" maxlength="255">
						</div>
						
						<div class="input_box">
							<label>유형</label>
							<div class="radio_box">
								<input type="radio" name="modalType" id="modalTypeD" value="D"/>
								<label for="modalTypeD" >닥터</label>
							</div>
							<div class="radio_box">
								<input type="radio" name="modalType" id="modalTypeA" value="A"/>
								<label for="modalTypeA" >상담</label>
							</div>
							<div class="radio_box">
								<input type="radio" name="modalType" id="modalTypeE" value="E" checked/>
								<label for="modalTypeE" >직원</label>
							</div>
						</div>
						
					</div>

					<p class="title">조직 및 권한</p>

					<div class="form_box">
							
						<div class="input_box">
							<label>조직/직무</label>
							<div class="select_list">
								<div class="select_box dropdown">
									<button class="label" class="label dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">조직</button>
									<input type="hidden" id="modalGroupId"></input>
									
									<ul class="select_option_list dropdown-menu"></ul>
								</div>
							</div>

							<div class="select_list last">
								<div class="select_box dropdown">
									<button class="label" class="label dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">직무</button>
									<input type="hidden" id="modalDutyId"></input>
									
									<ul class="select_option_list dropdown-menu"></ul>
								</div>
							</div>
						</div>

						<div class="input_box">
							<label>권한그룹</label>
							<div class="select_list">
								<div class="select_box dropdown">
									<button class="label" class="label dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">권한그룹</button>
									<input type="hidden" id="modalAuthId"></input>
									
									<ul class="select_option_list dropdown-menu"></ul>
								</div>
							</div>
						</div>
						<div class="input_box">
							<label>정렬순서</label>
							<input type="number" id="orderNumber" placeholder="">
						</div>
					</div>
				</div>

				<div class="modal-footer">
					<div class="btn_box">
						<button type="button" class="cancel_btn btnCancle">취소</button>
						<button type="button" class="registration_bth btnSave">등록</button>
					</div>
				</div>
			</div>
		</div>
	</div>
    `
};

/****************************************************************************
* 조직 옵션 조회
****************************************************************************/
function fn_insertModal_setGroupCombo(){
	// 대상
	const target = $("#memberInsertModal #modalGroupId").siblings("ul.select_option_list");

	// 데이터 조회
	let comboData = fn_selectListGroupOption();
	
	// 조회 데이터 셋팅
	let comboHTML = '';
	for(let i = 0; i < comboData.length; i++){
		let muGroupId     = comboData[i].muGroupId;
		let groupName     = comboData[i].groupName;
		
		comboHTML += '<li id="li_'+muGroupId+'" class="option_list_item">'+groupName+'</li>';
	}
	target.empty().html(comboHTML).trigger("create");

	// 콤보 이벤트
	target.find("li.option_list_item").click(function () {
		let selectIdArr = $(this).prop("id").split('_');
		let selectId    = selectIdArr[1];
		let selectName  = $(this).text();
		
		$(this).parent().siblings("button").text(selectName);
		$(this).parent().siblings("input").val(selectId);
	});
}

/****************************************************************************
* 직무 옵션 조회
****************************************************************************/
function fn_insertModal_setMemberDutyCombo(){
	// 대상
	const target = $("#memberInsertModal #modalDutyId").siblings("ul.select_option_list");

	// 초기화
	target.siblings("button").text("직무");
	target.siblings("input").val('');

	// 데이터 조회
	let comboData = fn_selectListDutyOption();
	
	// 조회 데이터 셋팅
	let comboHTML = '';
	for(let i = 0; i < comboData.length; i++){
		let muDutyId     = comboData[i].muDutyId;
		let dutyName     = comboData[i].dutyName;
		
		comboHTML += '<li id="li_'+muDutyId+'" class="option_list_item">'+dutyName+'</li>';
	}
	target.empty().html(comboHTML).trigger("create");

	// 콤보 이벤트
	target.find("li.option_list_item").click(function () {
		let selectIdArr = $(this).prop("id").split('_');
		let selectId    = selectIdArr[1];
		let selectName  = $(this).text();
		
		$(this).parent().siblings("button").text(selectName);
		$(this).parent().siblings("input").val(selectId);
	});
}

/****************************************************************************
* 권한 옵션 조회
****************************************************************************/
function fn_insertModal_setAuthCombo(){
	// 대상
	const target = $("#memberInsertModal #modalAuthId").siblings("ul.select_option_list");

	// 데이터 조회
	let comboData = fn_selectListAuthOption();
	
	// 조회 데이터 셋팅
	let comboHTML = '';
	for(let i = 0; i < comboData.length; i++){
		let muAuthId     = comboData[i].muAuthId;
		let authName     = comboData[i].authName;
		
		comboHTML += '<li id="li_'+muAuthId+'" class="option_list_item">'+authName+'</li>';
	}
	target.empty().html(comboHTML).trigger("create");

	// 콤보 이벤트
	target.find("li.option_list_item").click(function () {
		let selectIdArr = $(this).prop("id").split('_');
		let selectId    = selectIdArr[1];
		let selectName  = $(this).text();
		
		$(this).parent().siblings("button").text(selectName);
		$(this).parent().siblings("input").val(selectId);
	});
}
