기소유예 달력 적용 완료

This commit is contained in:
hylee 2023-11-23 12:54:22 +09:00
parent 9008ff4757
commit ee8626ced2
12 changed files with 631 additions and 440 deletions

View File

@ -16,6 +16,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
@ -598,9 +599,6 @@ public class FndtnEnhanceTrnController {
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
// 페이징 없이 select를 하기 위한
vEPrcsDetailVO.setRecordCountPerPage(10000);
vEPrcsDetailVO.setFirstIndex(0);
List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsAplctPrdService.selectPagingList4Fndth(vEPrcsDetailVO);
@ -611,6 +609,41 @@ public class FndtnEnhanceTrnController {
}
@RequestMapping("/web/ve/aplct/fndtnEnhanceTrn/selectSchduleManagerListAjax.do")
@ResponseBody
// public ModelAndView eduSelectAjax(
public List<VEPrcsDetailVO> selectSchduleManagerListAjax(
@ModelAttribute("vEPrcsDetailVO") VEPrcsDetailVO vEPrcsDetailVO
, ModelMap model
, HttpServletRequest request
) throws Exception {
// ModelAndView modelAndView = new ModelAndView();
// modelAndView.setViewName("jsonView");
//로그인 처리====================================
//로그인 정보 가져오기
// String s_oprtnLoginCheckNInfo = checkLoginUtil.oprtnCheckNInfo(model);
// if (!"".equals(s_oprtnLoginCheckNInfo)) {
// modelAndView.addObject("result", "loginFail");
// return modelAndView;
// }
//로그인 처리====================================
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
vEPrcsDetailVO.setsTodate(vEPrcsDetailVO.getsTodate().split("T")[0].replaceAll("-", ""));
List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsAplctPrdService.selectSchduleManagerList(vEPrcsDetailVO);
// modelAndView.addObject("data", vEPrcsDetailVOList);
// modelAndView.addObject("result", "success");
return vEPrcsDetailVOList;
}
/**
* 교육소개 임시페이지
*/

View File

@ -955,7 +955,7 @@ public class InstrPrflController {
schduleManageVO.setSearchStartDt(schduleManageVO.getSearchStartDt().split("T")[0].replaceAll("-", ""));
System.out.println("=================");
return schduleManageService.selectSchManageStatusInstrList(schduleManageVO);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -55,4 +55,6 @@ public interface VEPrcsAplctPrdService {
void updateEtc(VEPrcsDetailVO vEPrcsDetailVO);
List<VEPrcsDetailVO> selectSchduleManagerList(VEPrcsDetailVO vEPrcsDetailVO);
}

View File

@ -154,6 +154,10 @@ public class VEPrcsDetailVO extends ComDefaultVO implements Serializable {
private String mberNm;
private String sTodate;
private String start;
private String send;
@ -749,6 +753,24 @@ public class VEPrcsDetailVO extends ComDefaultVO implements Serializable {
public void setMberNm(String mberNm) {
this.mberNm = mberNm;
}
public String getsTodate() {
return sTodate;
}
public void setsTodate(String sTodate) {
this.sTodate = sTodate;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getSend() {
return send;
}
public void setSend(String send) {
this.send = send;
}
}

View File

@ -120,4 +120,8 @@ public class VEPrcsAplctPrdDAO extends EgovAbstractDAO {
update("VEPrcsAplctPrdDAO.updateEtc", vEPrcsDetailVO);
}
public List<VEPrcsDetailVO> selectSchduleManagerList(VEPrcsDetailVO vEPrcsDetailVO) {
return (List<VEPrcsDetailVO>) list("VEPrcsAplctPrdDAO.selectSchduleManagerList", vEPrcsDetailVO);
}
}

View File

@ -127,4 +127,9 @@ public class VEPrcsAplctPrdServiceImpl implements VEPrcsAplctPrdService {
vEPrcsAplctPrdDAO.updateEtc(vEPrcsDetailVO);
}
@Override
public List<VEPrcsDetailVO> selectSchduleManagerList(VEPrcsDetailVO vEPrcsDetailVO) {
return vEPrcsAplctPrdDAO.selectSchduleManagerList(vEPrcsDetailVO);
}
}

View File

@ -723,4 +723,23 @@
PRCS_APLCT_PRD_ORD = #prcsAplctPrdOrd#
AND EDU_APLCT_ORD = #eduAplctOrd#
</select>
<select id="VEPrcsAplctPrdDAO.selectSchduleManagerList" parameterClass="VEPrcsDetailVO" resultClass="VEPrcsDetailVO">
/*VEPrcsAplctPrdDAO.selectSchduleManagerList*/
SELECT
a.PRCS_APLCT_PRD_ORD as prcsAplctPrdOrd
, a.PRCS_ORD as prcsOrd
, TO_CHAR(TO_DATE(a.EDU_STRT_PNTTM, 'YYYY.MM.DD'), 'YYYY-MM-DD') AS "start" /*시작*/
, TO_CHAR(TO_DATE(a.EDU_DDLN_PNTTM, 'YYYY.MM.DD'), 'YYYY-MM-DD') AS "end" /*종료*/
, b.PRCS_NM AS title
, b.PRCS_CN AS prcsCn
FROM
ve_prcs_aplct_prd a
LEFT JOIN VE_PRCS b
ON a.prcs_ord = b.prcs_ord
where
a.LCTR_DIV_CD ='60'
AND SUBSTRING(a.EDU_STRT_PNTTM, 1, 7) = TO_CHAR(TO_DATE(#sTodate#,'YYYYMMDD')+ 7,'YYYY.MM')
</select>
</sqlMap>

View File

@ -49,6 +49,7 @@ $(document).ready(function(){
// dayDiff 값을 추가합니다.
newRow.append('<td class="edup_days">' + dayDiff + '</td>');
console.log('currentMonth : ' ,currentMonth);
// 교육일정 칼럼을 초기화합니다.
for (var i = 1; i <= 12; i++) {
// 다음 월 class
@ -61,6 +62,7 @@ $(document).ready(function(){
} else if (i === currentMonth) {
cellClass = "edup_this";
}
if (i === parseInt(startDt.split('.')[1])) {
newRow.append('<td class="' + cellClass + '" onclick="fncGoDetail(\'' + item.prcsAplctPrdOrd + '\')" style="cursor:pointer;">' + parseInt(startDt.split('.')[2]) + '</td>');
} else {
@ -458,7 +460,7 @@ $(document).ready(function(){
<div class="tab_content">
<!--
<div class="list_top">
<div class="list_top_left">
<label for="" class="label">교육과정 선택</label>
@ -481,7 +483,7 @@ $(document).ready(function(){
<button type="button" class="btnType01">검색</button>
</div>
</div>
-->
<div class="edup_result">
<div>총 <span>6</span>개의 검색결과가 있습니다.</div>
<ul>

View File

@ -206,9 +206,9 @@
<div class="tb_tit02_left">
<div class="t_best q_title">Q&amp;A</div>
</div>
<div class="btn_wrap1">
<button type="button" title="최근 교육 목록 더보기" class="con_more" onclick="location.href='/offedu/web/ve/aplct/fndtnEnhanceTrn/fndtnEduAplctList.do'">더보기</button>
</div>
<!-- <div class="btn_wrap1"> -->
<!-- <button type="button" title="최근 교육 목록 더보기" class="con_more" onclick="location.href='/offedu/web/ve/aplct/fndtnEnhanceTrn/fndtnEduAplctList.do'">더보기</button> -->
<!-- </div> -->
</div>
<div class="btn_right">
<button type="button" class="btnType04" data-tooltip="target_confirm_popup">교육문의</button>

View File

@ -11,71 +11,32 @@
<un:useConstants var="VeConstants" className="kcc.ve.cmm.VeConstants" />
<title>교육신청 목록 > 성인 찾아가는 저작권 교육 > 한국저작권위원회 저작권 교육 시스템</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<style type="text/css">
.fc-day-sat { color:#0000FF; } /* 토요일 */
.fc-day-sun { color:#FF0000; } /* 일요일 */
</style>
<link type="text/css" rel="stylesheet" href="<c:url value='/js/fullcalendar/5.9.0/main.css' />" />
<script type="text/javascript" src="<c:url value='/js/fullcalendar/5.9.0/main.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/fullcalendar/5.9.0/locales-all.js'/>"></script>
<script type="text/javaScript" language="javascript">
$(document).ready(function(){
$('#schduleManager').hide();
$('.tab_button').click(function(){
var type = $(this).data('info');
// list 타입이면 return;
if(type === 'list')
if(type === 'list'){
$('#schduleManager').hide();
return false;
}
var data = fncEduSelect();
console.log('data : ', data);
// 월 하이라이트 체크
fn_MonthHL();
// 현재 날짜를 가져옵니다.
var today = new Date();
var currentMonth = today.getMonth() + 1;
// 데이터 추가 전 촐기화
$(".edu_program tbody").empty();
// 반복시작
$.each(data, function(index, item) {
var prcsNm = item.prcsNm;
var startDt = item.eduStrtPnttm;
// 교육 일수 구하기
var dayDiff = fn_dayDiff(item);
var newRow = $("<tr></tr>");
// prcsNm 값을 추가합니다.
newRow.append('<td class="edup_title">' + prcsNm + '</td>');
// dayDiff 값을 추가합니다.
newRow.append('<td class="edup_days">' + dayDiff + '</td>');
// 교육일정 칼럼을 초기화합니다.
for (var i = 1; i <= 12; i++) {
// 다음 월 class
var cellClass = "edup_pass"; // 기본값
// 전 월 class
if (i < currentMonth) {
cellClass = "edup_pre";
// 현재 월
} else if (i === currentMonth) {
cellClass = "edup_this";
}
if (i === parseInt(startDt.split('.')[1])) {
newRow.append('<td class="' + cellClass + '" onclick="fncGoDetail(\'' + item.prcsAplctPrdOrd + '\')" style="cursor:pointer;">' + parseInt(startDt.split('.')[2]) + '</td>');
} else {
newRow.append('<td class="' + cellClass + '"></td>');
}
}
// 테이블에 새로운 행을 추가합니다.
$(".edu_program tbody").append(newRow);
});
//-- /반복끝
$('#schduleManager').show();
});
$(".aplctBtn button").click(function(){
var regForm = document.regForm;
regForm.prcsAplctPrdOrd.value = $(this).data('info');
@ -103,7 +64,6 @@ $(document).ready(function(){
var ddlnCdText = '';
console.log('');
if (currentDate < strtPnttm) {
ddlnCdText = "접수전";
} else if (currentDate >= strtPnttm && currentDate <= endPnttm) {
@ -125,6 +85,118 @@ $(document).ready(function(){
});
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('schduleManager');
var calendar = new FullCalendar.Calendar(calendarEl, {
locale: 'ko',
timezone : "local",
weekends : true,
editable : false,
firstDay : 0, //월요일이 먼저 오게 하려면 1
dayMaxEvents: true,
navLinks: false,
customButtons: {
myCustomButton: {
text: '오늘',
click: function(event, elm) {
alert('clicked the custom button!');
}
},viewWeekends : {
text : '주말',
click : function (event, elm) {
calendar.setOption("weekends" , calendar.getOption("weekends") ? false : true);
}
}
},buttonText: {
listMonth: '일정'
},
headerToolbar: {
//left: 'prevYear nextYear today',
left: 'today',
center: 'prev title next',
//right: 'dayGridMonth,listMonth'
right: ''
},
eventSources: [
{
events: function(info, successCallback, failureCallback) {
var events = [];
console.log('info', info);
var s_todate = info.startStr;
ex_s_todate = info.startStr;
var data = fncEduSelect(s_todate);
console.log(data);
data.forEach(item => {
console.log(item);
item.url = '${pageContext.request.contextPath}/web/ve/aplct/sspnIdtmt/eduAplctDetail.do?prcsAplctPrdOrd='+item.prcsAplctPrdOrd; // 여기서 원하는 URL로 대체
});
events.push({
title: 'title',
start: '2023-11-10',
end: '2023-11-29',
url: '${pageContext.request.contextPath}/detail.do?seq='
}); 
// successCallback(events);
successCallback(data);
/*
$.ajax({
url: '<c:url value="/web/ve/instr/tngrVisitEdu/instrInfo/tngrSchduleManagerAjaxLoadData.do"/>',
type: 'POST',
dataType: 'json',
data: {
searchStartDt : "",
//searchStartDt : "",
searchStartDt : s_todate,
todate : info.start,
searchYearMonth : function(){
return "";
}
},
success: function(data) {
successCallback(data);
// 날짜 계산
// setCalDate(data, info.startStr);
}
}); */
}
}
],
eventContent: function(arg, createElement) {
event.preventDefault();
console.log(arg.event._def.url);
// arg.event._def.url = "#none";
},
eventClick: function(info) {
info.jsEvent.preventDefault();
console.log('info.event._def.extendedProps : ', info);
location.href = info.event.url;
// schDetailPop(info.event._def.extendedProps.schSeq, info.event._def.extendedProps.schChasiSeq);
return false;
},
});
calendar.render();
});
// 대상자 이름, 생년월일, 대상자TB ID
function fncEduReg(trgtNm, dBirth, sspnIdtmtTrgtOrd){
var form = document.regForm;
@ -191,10 +263,14 @@ $(document).ready(function(){
$("#monthTemp th:nth-child(" + currentMonth + ")").addClass("edup_this");
}
function fncEduSelect(){
function fncEduSelect(s_todate){
var returnVal = '';
var form = document.selectForm ;
form.sTodate.value = s_todate;
var data = new FormData(document.getElementById("selectForm"));
var url = "${pageContext.request.contextPath}/web/ve/aplct/fndtnEnhanceTrn/eduSelectAjax.do";
var url = "${pageContext.request.contextPath}/web/ve/aplct/fndtnEnhanceTrn/selectSchduleManagerListAjax.do";
console.log(data);
$.ajax({
type:"POST",
@ -206,10 +282,9 @@ $(document).ready(function(){
contentType: false,
cache: false,
success:function(returnData){
if(returnData.result == "success"){
console.log('returnData : ', returnData);
returnVal = returnData.data;
}
// returnVal = returnData.data;
returnVal = returnData;
},
error:function(request , status, error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
@ -307,6 +382,108 @@ $(document).ready(function(){
$('#dBirth').val('');
}
/*
*##############################################################################
* START
*##############################################################################
*/
// 날짜 계산
function setCalDate(data, startStr) {
// 현재월 구하기
startStr = startStr.substr(0, 10);
console.log('startStr : ', startStr);
startStr = startStr.replace(/-/g, "");
console.log('startStr : ', startStr);
startStr = startStr.replace(/./g, "");
var todayYear = startStr.substring(0,4);
var todayMonth = 0;
var todayDay = startStr.substring(6,8);
if (todayDay == "01") {
todayMonth = startStr.substring(4,6);
}
else {
if (startStr.substring(4,6) == "12") {
todayMonth = "01";
}
else {
todayMonth = parseInt(startStr.substring(4,6), 10) + 1;
if (todayMonth < 10) {
todayMonth = "0" + todayMonth;
}
}
}
// End
//alert(todayMonth);
var monthCnt = 0;
var week1Cnt = 0, week2Cnt = 0, week3Cnt = 0, week4Cnt = 0, week5Cnt = 0, week6Cnt = 0;
var sHtml = "";
for (var j = 0; j < data.length; j++) {
var schStartDate = data[j].start.substr(0, 10);
schStartDate = replaceAll(schStartDate, "-", "");
schStartDate = replaceAll(schStartDate, ".", "");
schStartDate = replaceAll(schStartDate, "/", "");
var thisYear = schStartDate.substring(0,4);
var thisMonth = schStartDate.substring(4,6);
var thisDay = schStartDate.substring(6,8);
var thisWeek = getSecofWeek(schStartDate);
// 해당월 데이터만 처리
if (todayMonth == thisMonth) {
monthCnt++;
if (thisWeek == 1) {
week1Cnt++;
}
else if (thisWeek == 2) {
week2Cnt++;
}
else if (thisWeek == 3) {
week3Cnt++;
}
else if (thisWeek == 4) {
week4Cnt++;
}
else if (thisWeek == 5) {
week5Cnt++;
}
else if (thisWeek == 6) {
week6Cnt++;
}
}
}
sHtml += "전체 : " + monthCnt + "건";
sHtml += " &nbsp;(1주차 : " + week1Cnt + "건";
sHtml += ", &nbsp;&nbsp;2주차 : " + week2Cnt + "건";
sHtml += ", &nbsp;&nbsp;3주차 : " + week3Cnt + "건";
sHtml += ", &nbsp;&nbsp;4주차 : " + week4Cnt + "건";
sHtml += ", &nbsp;&nbsp;5주차 : " + week5Cnt + "건";
sHtml += ", &nbsp;&nbsp;6주차 : " + week6Cnt + "건)";
sHtml += '&nbsp;<button type="button" class="btn_down_excel" onclick="excelDownLoad();">일정현황 엑셀 다운로드</button>';
//$("#weekCnt").html(sHtml);
}
// 해당일 주차 계산
function getSecofWeek(date) {
var d = new Date( date.substring(0,4), parseInt(date.substring(4,6))-1, date.substring(6,8) );
var fd = new Date( date.substring(0,4), parseInt(date.substring(4,6))-1, 1 );
return Math.ceil((parseInt(date.substring(6,8))+fd.getDay())/7);
}
</script>
<!-- content -->
@ -314,6 +491,7 @@ $(document).ready(function(){
<form name="selectForm" id="selectForm">
<input type="hidden" name="lctrDivCd" value="60">
<input type="hidden" name="sTodate" value="">
</form>
<form name="confirmForm" id="confirmForm">
<input type="hidden" name="trgtNm">
@ -464,84 +642,7 @@ $(document).ready(function(){
</div>
</div>
<div class="tab_content">
<!-- <div class="list_top">
<div class="list_top_left">
<label for="" class="label">교육과정 선택</label>
<select class="selType1">
<option for="">전체</option>
<option for="">지난교육일정</option>
<option for="">당월교육일정</option>
<option for="">교육예정일정</option>
</select>
</div>
<div class="btn_wrap">
<div class="calendar_wrap">
<duet-date-picker identifier="date" name="searchStartDt" class="startDate hydrated" value=""></duet-date-picker>
</div>
~
<div class="calendar_wrap">
<duet-date-picker identifier="date" name="searchEndDt" class="endDate hydrated" value=""></duet-date-picker>
</div>
<button type="button" class="btnType01">검색</button>
</div>
</div> -->
<div class="edup_result">
<div>총 <span>6</span>개의 검색결과가 있습니다.</div>
<ul>
<li class="pass">지난교육일정</li>
<li class="this">당월교육일정</li>
<li class="pre">교육예정일정</li>
</ul>
</div>
<div class="edu_program">
<table>
<caption>교육일정표</caption>
<colgroup>
<col style="width: ;">
<col style="width: ;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
<col style="width:4%;">
</colgroup>
<thead>
<tr>
<th class="first" rowspan="2">교육과정명<br/><span class="ep_text">(상세 내용을 보시려면 과정을 클릭하세요)</span></th>
<th rowspan="2">일수</th>
<th colspan="12">교육일정<sapn class="ep_text">(교육 시작일)</sapn></th>
</tr>
<tr id="monthTemp">
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th>9</th>
<th>10</th>
<th>11</th>
<th>12</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="tab_content" id="schduleManager">
</div>

View File

@ -200,6 +200,9 @@
<div class="tb_tit02_left">
<div class="t_best q_title">Q&amp;A</div>
</div>
<div class="btn_wrap1">
<button type="button" title="최근 교육 목록 더보기" class="con_more" onclick="location.href='/offedu/web/ve/aplct/fndtnEnhanceTrn/fndtnEduAplctList.do'">더보기</button>
</div>
</div>
<div class="btn_right">
<button type="button" class="btnType04" data-tooltip="target_confirm_popup">교육문의</button>