diff --git a/src/main/java/cokr/xit/fims/sndb/service/SndngService.java b/src/main/java/cokr/xit/fims/sndb/service/SndngService.java index 860c6cfe..a10989d4 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/SndngService.java +++ b/src/main/java/cokr/xit/fims/sndb/service/SndngService.java @@ -53,6 +53,11 @@ public interface SndngService { */ List getWrngSndngDtls(SndbQuery req); + + + + + /**지정한 조건에 따라 사전통지 발송 대상 목록을 조회하여 반환한다. * @param req 발송 대장 조회 조건 * @return 발송 대장 목록 diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java index 8263908d..11920fff 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java @@ -297,11 +297,26 @@ public class SndngBean extends AbstractComponent { + + /**지정한 조건에 따라 발송 대장 목록을 조회하여 반환한다. * @param req 발송 대장 조회 조건 * @return 발송 대장 목록 */ public List getSndngList(SndbQuery req) { + // 삭제 여부 확인 + if (req.getDelYN() == null) { + req.setDelYN("N"); + } + // 정렬 확인 + if (req.getOrderBy() == null) { + if (req.getBy() == null) { + req.setOrderBy("REG_DT"); + } else { + req.setOrderBy(CmmnUtil.convertCamelCaseToSnakeCase(req.getBy())); + } + } + return sndngMapper.selectSndngList(req); } @@ -310,6 +325,19 @@ public class SndngBean extends AbstractComponent { * @return 발송 대장 객체 목록 */ public List getSndngs(SndbQuery req) { + // 삭제 여부 확인 + if (req.getDelYN() == null) { + req.setDelYN("N"); + } + // 정렬 확인 + if (req.getOrderBy() == null) { + if (req.getBy() == null) { + req.setOrderBy("REG_DT"); + } else { + req.setOrderBy(CmmnUtil.convertCamelCaseToSnakeCase(req.getBy())); + } + } + return sndngMapper.selectSndngs(req); } diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java index d2cc180d..91e4fea1 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java @@ -10,6 +10,7 @@ import cokr.xit.foundation.AbstractComponent; import cokr.xit.foundation.data.DataObject; import cokr.xit.fims.sndb.SndngDtl; +import cokr.xit.fims.cmmn.CmmnUtil; import cokr.xit.fims.sndb.SndbQuery; import cokr.xit.fims.sndb.dao.SndngDtlMapper; @@ -35,6 +36,19 @@ public class SndngDtlBean extends AbstractComponent { * @return 발송 상세 목록 */ public List getSndngDtlList(SndbQuery req) { + // 삭제 여부 확인 + if (req.getDelYN() == null) { + req.setDelYN("N"); + } + // 정렬 확인 + if (req.getOrderBy() == null) { + if (req.getBy() == null) { + req.setOrderBy("REG_DT"); + } else { + req.setOrderBy(CmmnUtil.convertCamelCaseToSnakeCase(req.getBy())); + } + } + return sndngDtlMapper.selectSndngDtlList(req); } @@ -43,6 +57,14 @@ public class SndngDtlBean extends AbstractComponent { * @return 발송 상세 객체 목록 */ public List getSndngDtls(SndbQuery req) { + // 삭제 여부 확인 + if (req.getDelYN() == null) { + req.setDelYN("N"); + } + if (req.getOrderBy() == null) { + req.setOrderBy("SNDNG_DTL_ID"); + } + return sndngDtlMapper.selectSndngDtls(req); } diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java index c1004253..3ed2dcbc 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java @@ -60,6 +60,12 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic return sndngDtlBean.getSndngDtls(req); } + + + + + + @Override public List getAdvntceTrgtList(SndbQuery req) { return sndngBean.getAdvntceTrgtList(req); diff --git a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java index ee724af1..6825f28e 100644 --- a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java +++ b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java @@ -1,17 +1,16 @@ package cokr.xit.fims.sndb.web; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import org.apache.poi.ss.usermodel.CellStyle; import org.springframework.web.servlet.ModelAndView; import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import cokr.xit.base.code.CommonCode; import cokr.xit.base.file.xls.XLSWriter; @@ -150,10 +149,14 @@ public class Sndb01Controller extends ApplicationController { List result = sndngService.getWrngTrgtList(setFetchSize(req)); return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngTrgt"); } else { + // 현재 날짜 구하기 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String dateTime = dateFormat.format(System.currentTimeMillis()); + ArrayList cellDefs = fromJson(req.getCellDefs(), new TypeReference>() {}); XLSWriter xlsx = new XLSWriter() - .setFilename("계고장 발송 대상 목록.xlsx") + .setFilename("계고장발송대상" + "_목록_" + dateTime + ".xlsx") .worksheet(0); // CellStyle 지정은 여기에서.. @@ -267,7 +270,8 @@ public class Sndb01Controller extends ApplicationController { // View(jsp)에서 사용할 공통코드를 조회 Map> commonCodes = getCodesOf("FIM054"); - return mav.addObject("pageName", "sndb01030") // View(jsp)에서 사용할 id 뒤에 붙일 suffix + return mav + .addObject("pageName", "sndb01030") // View(jsp)에서 사용할 id 뒤에 붙일 suffix .addObject("infoPrefix", "wrngSndng") // prefix .addObject("sggCd", managedUser.getOrgID()) // 시군구 코드(SGG_CD) .addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD) @@ -286,9 +290,56 @@ public class Sndb01Controller extends ApplicationController { * } */ public ModelAndView getWarningSendingList(SndbQuery req) { - List result = sndngService.getWrngSndngList(setFetchSize(req)); + if (!"xls".equals(req.getDownload())) { + List result = sndngService.getWrngSndngList(setFetchSize(req)); + return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndng"); + } else { + // 현재 날짜 구하기 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String dateTime = dateFormat.format(System.currentTimeMillis()); + + ArrayList cellDefs = fromJson(req.getCellDefs(), new TypeReference>() {}); + + XLSWriter xlsx = new XLSWriter() + .setFilename("계고장발송현황" + "_목록_" + dateTime + ".xlsx") + .worksheet(0); + + // CellStyle 지정은 여기에서.. + CellStyle center = xlsx.cellStyle(Styler.CENTER); // 가운데 정렬 + CellStyle numeric = xlsx.n_nn0(); // 숫자 3자리 콤마(,) + CellStyle dateYMD = xlsx.yyyy_mm_dd(); // 연월일 + CellStyle dateDT = xlsx.yyyy_mm_dd_hh_mm_ss(); // 연월일+시간 + + List list = sndngService.getWrngSndngList(req.setFetchSize(0)); + + CellDef.setValues(cellDefs, Map.ofEntries( + Map.entry("업무구분", xlsx.style("TASK_SE_NM", center)) + , Map.entry("등록구분", xlsx.style("SNDNG_REG_SE_NM", center)) + , Map.entry("위반항목", "VLTN_ARTCL") + , Map.entry("발송일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_YMD"))).style(dateYMD)) + , Map.entry("납기일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_END_YMD"))).style(dateYMD)) + , Map.entry("총건수", xlsx.style("TNOCS", numeric)) + , Map.entry("총금액", xlsx.style("GRAMT", numeric)) + , Map.entry("제목", "TTL_NM") + , Map.entry("문서번호", "DOC_NO") + , Map.entry("등록일시", xlsx.format(o -> xlsx.str2datetime(o.get("REG_DT"))).style(dateDT)) + , Map.entry("등록사용자", xlsx.style("RGTR_NM", center)) + , Map.entry("수정일시", xlsx.format(o -> xlsx.str2datetime(o.get("MDFCN_DT"))).style(dateDT)) + , Map.entry("수정사용자", xlsx.style("MDFR_NM", center)) + ) + ); + + xlsx.cell(0, 0) + .value("계고장 발송 현황", center) + .merge(0, cellDefs.size() - 1) + .cell(3, 0) + .rowValues(CellDef.header(cellDefs, () -> CmmnUtil.headerStyle(xlsx))) + .cell(4, 0) + .values(list, CellDef.values(cellDefs)); - return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndng"); + return new ModelAndView("xlsView") + .addObject("xls", xlsx); + } } /**계도장 발송 현황 - 세부내용 정보 화면(sndb/sndb01/040-info)을 연다. @@ -308,7 +359,6 @@ public class Sndb01Controller extends ApplicationController { return mav.addObject("pageName", "sndb01040") .addObject("sggCd", req.getSggCd()) .addObject("taskSeCd", req.getTaskSeCd()) - .addObject("sndngSeCd", req.getSndngSeCd()) // 발송 구분 코드 .addObject("wrngSndngDtl", json ? sndngDtls : toJson(sndngDtls)) // 계도장 발송 현황 세부내용 ; } diff --git a/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml b/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml index 4373675e..4122da47 100644 --- a/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml +++ b/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml @@ -123,7 +123,7 @@ AND C.CRDN_ID IN ( #{crdnId} /* 단속 IDs */ - ) + ) AND C.CRDN_ID = #{crdnId} /* 단속 ID */ @@ -370,7 +370,7 @@ WHERE C.CRDN_ID IN ( /* 단속 IDs */ #{crdnId} - ) + ) WHERE C.CRDN_ID = #{crdnId} /* 단속 ID */ @@ -451,7 +451,7 @@ AND C.CRDN_ID IN ( /* 단속 IDs */ #{crdnId} - ) + ) AND C.CRDN_ID = #{crdnId} /* 단속 ID */ @@ -712,7 +712,7 @@ AND S.SNDNG_ID IN ( /* 발송 IDs */ #{sndngId} - ) + ) AND S.SNDNG_ID = #{sndngId} /* 발송 ID */ @@ -1091,7 +1091,7 @@ AND SD.SNDNG_DTL_ID IN ( /* 발송 상세 IDs */ #{sndngDtlId} - ) + ) AND SD.SNDNG_DTL_ID = #{sndngDtlId} /* 발송 상세 ID */ @@ -1099,7 +1099,7 @@ AND SD.SNDNG_ID IN ( /* 발송 IDs */ #{sndngId} - ) + ) AND SD.SNDNG_ID = #{sndngId} /* 발송 ID */ @@ -1107,7 +1107,7 @@ AND SD.CRDN_ID IN ( /* 단속 IDs */ #{crdnId} - ) + ) AND SD.CRDN_ID = #{crdnId} /* 단속 ID */ @@ -1115,7 +1115,7 @@ AND SD.SVBTC_ID IN ( /* 공시송달 IDs */ #{svbtcId} - ) + ) AND SD.SVBTC_ID = #{svbtcId} /* 공시송달 ID */ diff --git a/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml b/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml index 49a3c62e..a2b44f81 100644 --- a/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml +++ b/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml @@ -83,14 +83,6 @@ - - SELECT SD.SNDNG_DTL_ID /* 발송 상세 ID */ , SD.SVBTC_ID /* 공시송달 ID */ @@ -164,6 +156,16 @@ , SD.DEL_DT /* 삭제 일시 */ , SD.DLTR /* 삭제자 */ , SD.DEL_RSN /* 삭제 사유 */ + , GET_MASK_DATE(SD.DUDT_YMD, 'K') AS DUDT_YMD_MASK_KOR /* 납기 일자(한글표기) */ + , GET_MASK_DATE(SD.DUDT_YMD, '.') AS DUDT_YMD_MASK /* 납기 일자 */ + , GET_MASK_DATE(SD.DUDT_AFTR_YMD, '.') AS DUDT_AFTR_YMD_MASK /* 납기 후 일자 */ + , GET_MASK_EPAYNO(SD.EPAYNO) AS EPAYNO_MASK /* 전자납부번호 */ + , (SELECT GET_CODE_NM('FIM050', SD.SNDNG_DTL_STTS_CD) FROM DUAL) AS SNDNG_DTL_STTS_NM /* 발송 상세 상태 명 */ + , (SELECT GET_CODE_NM('FIM050', SD.BFR_SNDNG_DTL_STTS_CD) FROM DUAL) AS BFR_SNDNG_DTL_STTS_NM /* 전 발송 상세 상태 명 */ + , (SELECT GET_CODE_NM('FIM051', SD.SNDNG_RCVMT_CD) FROM DUAL) AS SNDNG_RCVMT_NM /* 발송 수납 명 */ + , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.RGTR) AS RGTR_NM /* 등록자 명 */ + , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.MDFR) AS MDFR_NM /* 수정자 명 */ + , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.DLTR) AS DLTR_NM /* 삭제자 명 */ , S.SNDNG_ID /* 발송 ID */ , S.SGG_CD /* 시군구 코드 */ , S.DEPT_CD /* 부서 코드 */ @@ -181,16 +183,6 @@ , S.EPOST_NOTICE_ID /* 전자우편 안내문 ID */ , S.SNDNG_STTS_CD /* 발송 상태 코드 */ , S.RESND_YN /* 재발송 여부 */ - , GET_MASK_DATE(SD.DUDT_YMD, 'K') AS DUDT_YMD_MASK_KOR /* 납기 일자(한글표기) */ - , GET_MASK_DATE(SD.DUDT_YMD, '.') AS DUDT_YMD_MASK /* 납기 일자 */ - , GET_MASK_DATE(SD.DUDT_AFTR_YMD, '.') AS DUDT_AFTR_YMD_MASK /* 납기 후 일자 */ - , (SELECT GET_CODE_NM('FIM050', SD.SNDNG_DTL_STTS_CD) FROM DUAL) AS SNDNG_DTL_STTS_NM /* 발송 상세 상태 명 */ - , (SELECT GET_CODE_NM('FIM050', SD.BFR_SNDNG_DTL_STTS_CD) FROM DUAL) AS BFR_SNDNG_DTL_STTS_NM /* 전 발송 상세 상태 명 */ - , (SELECT GET_CODE_NM('FIM051', SD.SNDNG_RCVMT_CD) FROM DUAL) AS SNDNG_RCVMT_NM /* 발송 수납 명 */ - , GET_MASK_EPAYNO(SD.EPAYNO) AS EPAYNO_MASK /* 전자납부번호 */ - , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.RGTR) AS RGTR_NM /* 등록자 명 */ - , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.MDFR) AS MDFR_NM /* 수정자 명 */ - , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.DLTR) AS DLTR_NM /* 삭제자 명 */ , (SELECT GET_CODE_NM('FIM047', S.SNDNG_SE_CD) FROM DUAL) AS SNDNG_SE_NM /* 발송 구분 명 */ FROM TB_SNDNG_DTL SD LEFT OUTER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID) @@ -207,6 +199,11 @@ + + + - ~ - - +
- - + + +
- - - - + +
@@ -361,7 +364,7 @@ } ajax.get({ - url : wctx.url("/" + params.taskSeCd + ${pageName}PrefixUrl + "/020/info.do") + url : ${pageName}Control.urls.getInfo , data : params || {} , success : resp => { dialog.open({ @@ -527,11 +530,11 @@ // 초기 기본 설정 initForm${pageName}(); - // URL 설정 - setURL${pageName}(taskSeCd); - // 기본 데이터 설정 setFormData${pageName}(taskSeCd); + + // URL 설정 + setURL${pageName}(taskSeCd); } // 검색 버튼 이벤트 @@ -648,7 +651,7 @@ // 달력 초기화 initDatepicker("frmSearch--${pageName}"); - $("#schLevyExclYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-365).date); + $("#schLevyExclYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date); $("#schLevyExclYmdTo--${pageName}").datepicker("setDate", new Date()); // 사용자 이름 @@ -658,11 +661,6 @@ ${pageName}Control.dataset.clear(); } - // URL 설정 - setURL${pageName} = (taskSeCd) => { - ${pageName}Control.urls.load = wctx.url("/" + taskSeCd + ${pageName}PrefixUrl + "/010/list.do"); // 조회 - } - // 기본 데이터 설정 setFormData${pageName} = (taskSeCd) => { // ${pageName}Control 설정 @@ -716,6 +714,12 @@ $("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} ); } + // URL 설정 + setURL${pageName} = (taskSeCd) => { + ${pageName}Control.urls.load = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/010/list.do"); // 조회 + ${pageName}Control.urls.getInfo = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/info.do"); // 계고장 발송대상 정보 + } + /************************************************************************** * script 진입 **************************************************************************/ diff --git a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01020-info.jsp b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01020-info.jsp index 25b633b1..3eab2b5f 100644 --- a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01020-info.jsp +++ b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01020-info.jsp @@ -157,12 +157,12 @@ **************************************************************************/ // URL var ${pageName}PrefixUrl = "/sndb/sndb01"; - // infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정) + // infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정) var ${pageName}CallPurpose = "${callPurpose}"; // FormFields - var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}"); - // main 의 검색 조건을 그대로 유지 - var ${pageName}Query = ${wrngTrgtQuery}; + var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}"); + // main 의 검색 조건을 그대로 유지 + var ${pageName}Query = ${wrngTrgtQuery}; /************************************************************************** * DatasetControl @@ -348,14 +348,6 @@ $("#sndngEndYmd--${pageName}").datepicker("setDate", new Date()); } - // 업무구분에 따른 url 설정 - setURL${pageName} = () => { - let taskSeCd = ${pageName}Query.taskSeCd; - - ${pageName}Control.urls.create = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/createWrngSndngList.do"); // 등록 - ${pageName}Control.urls.update = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/updateWrngSndngList.do"); // 수정 - } - // 기본 데이터 설정 setFormData${pageName} = () => { // @@ -374,6 +366,12 @@ $("#divSndngEndYmd--${pageName}").hide(); } + // 업무구분에 따른 url 설정 + setURL${pageName} = (taskSeCd) => { + ${pageName}Control.urls.create = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/createWrngSndngList.do"); // 등록 + ${pageName}Control.urls.update = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/updateWrngSndngList.do"); // 수정 + } + /************************************************************************** * script 진입 **************************************************************************/ @@ -387,12 +385,12 @@ // Dataset 설정 ${pageName}Control.addData(${wrngTrgt}); - // URL 설정 - setURL${pageName}(); - // 기본 데이터 설정 setFormData${pageName}(); + // URL 설정 + setURL${pageName}(${pageName}Query.taskSeCd); + // 보안모드 fn_securityModeToggle($("#securityMode--top").is(":checked")); }); diff --git a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01030-main.jsp b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01030-main.jsp index 0950fe42..7ec12a1d 100644 --- a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01030-main.jsp +++ b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01030-main.jsp @@ -111,10 +111,8 @@
- - - - + +
@@ -179,7 +177,19 @@ @@ -234,7 +244,7 @@ **************************************************************************/ // Dataset 변경 이벤트 ${pageName}Control.onDatasetChange = obj => { - renderList${pageName}(); + renderList${pageName}(obj.${infoPrefix}Total); $("#paging--${pageName}").setPagingInfo({ list : ${pageName}Control.dataset @@ -283,43 +293,194 @@ } /************************************************************************** - * + * DataTables 이벤트 **************************************************************************/ // DataTables에 click, dbclick 이벤트 - renderList${pageName} = () => { + renderList${pageName} = (totalSize) => { let ${infoPrefix}List = ${pageName}Control.dataset; let empty = ${infoPrefix}List.empty; + let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); - let trs = empty ? - [document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%> - ${infoPrefix}List.inStrings( - document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%> - (str, dataItem) => str - .replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');") - .replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');") + if (typeof clsForTask == "undefined" || clsForTask == null || clsForTask == "") { + clsForTask = $("#layout-navbar input[name='taskSeCd']:checked").val().toLowerCase(); + } else { + clsForTask = clsForTask.toLowerCase(); + } + + // 업무별 그리드 td + let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content; + let foundTr = $(foundContent).find("tr")[0].cloneNode(false); + let foundTds = $(foundContent).find("." + clsForTask + ",.cmn"); + + foundTds.each(function() { + foundTr.appendChild(this.cloneNode(true)); + }); + + let trs = empty ? + [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML] : + ${infoPrefix}List.inStrings( + foundTr.outerHTML, + (str, dataItem) => str + .replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');") + .replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');") ); - $("#tbody--${pageName}").html(trs.join()); + let noMore = (totalSize == ${infoPrefix}List.length); + let initScroll = (${pageName}Control.query.pageNum < 2) && (${pageName}Control.untilPageNum == 0); + + $("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore); + + if (${pageName}Control.untilPageNum != 0) { + ${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize; + ${pageName}Control.query.pageNum = ${pageName}Control.untilPageNum; + ${pageName}Control.untilPageNum = 0; + } + + // checkbox 체크 해제 $("th input[type='checkbox']").prop("checked", false); //보안모드 - fn_securityModeToggle($("#securityMode--top").is(":checked")); + fn_securityModeToggle($("#securityMode--top").is(":checked")); + } + + // DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트 + scrollDataList${pageName} = () => { + ${pageName}Control.tableRenderComplete = false; // dataTables 에 자료 추가 false + + ${pageName}Control.load(${pageName}Control.query.pageNum + 1); } /************************************************************************** - * 초기 셋팅 + * 사용자 함수(function) **************************************************************************/ - // 초기화 - initForm${pageName} = () => { - // 화면 초기화 - $("#frmSearch--${pageName}")[0].reset(); + // callback 사용자 검색 + callbackFindUser${pageName} = (userId, userNm) => { + $("#schRgtrCd--${pageName}").val(userId); // 사용자 ID + $("#schRgtrNm--${pageName}").val(userNm); // 사용자 명 + } - // dataset 초기화 - ${pageName}Control.dataset.clear(); + // 사용자 검색 + getFindUser${pageName} = () => { + let params = { + callbackFuncName : "callbackFindUser${pageName}" + } + + ajax.get({ + url : wctx.url("/user/user02/010/main.do") + , data : params || {} + , success : resp => { + dialog.open({ + id : "userDialog" + , title : "사용자 검색" + , content : resp + , size : "lg" + }); + } + }); } + // 개별총정보 dialog + getTotalInfo${pageName} = (crdnId) => { + if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return; + + let params = { + callControlName : "${pageName}Control" + , sggCd : $("#sggCd--${pageName}").val() + , taskSeCd : $("input[name=taskSeCd]:checked").val() + , crdnId : crdnId + } + + ajax.get({ + url : wctx.url(params.taskSeCd + "/sprt/sprt02/010/main.do") + , data : params + , success : resp => { + dialog.open({ + id : "totalInfoMainDialog" + , title : "개별총정보" + , content : resp + , size : "xxl" + }); + } + }); + } + + // 검색 자료 재조회 + refreshList${pageName} = () => { + ${pageName}Control.untilPageNum = ${pageName}Control.query.pageNum; + ${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize * ${pageName}Control.query.pageNum; + + ${pageName}Control.load(1); + } + + /************************************************************************** + * 버튼 clickEvent + **************************************************************************/ + // 업무 구분 변경 + fnResetAndChangeBiz${pageName} = (taskSeCd) => { + // 업무 구분 코드 + if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") { + taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val(); + } + + // 초기 기본 설정 + initForm${pageName}(); + + // 기본 데이터 설정 + setFormData${pageName}(taskSeCd); + + // URL 설정 + setURL${pageName}(taskSeCd); + } + + // 검색 버튼 이벤트 + fnSearchList${pageName} = () => { + // 검색조건 + ${pageName}Control.query = ${pageName}Fields.get(); + + ${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize; // 한번에 조회되는 자료 건수 + ${pageName}Control.query.sndngSeCdFrom = "11"; // 발송 구분 코드 - 11 계고장 + ${pageName}Control.query.sndngSeCdTo = "12"; // 발송 구분 코드 - 12 계고장 구형표지 + ${pageName}Control.query.delYN = "N"; // 삭제 여부 + + ${pageName}Control.load(1); + } + + // 엑셀 버튼 이벤트 + fnExcel${pageName} = () => { + if (${pageName}Control.dataset.empty) { + dialog.alert({ + content : "검색된 자료가 없습니다." + , onOK : () => { } + }); + + return; + } + + // DataTables(그리드) + let cellDefs = getCellDefs($("#theadTr--${pageName} th").not(".dummy-th").not(":eq(0)") + , $($("#${infoPrefix}Row--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)")); + ${pageName}Control.query.cellDefs = cellDefs; + + ${pageName}Control.download(); + } + + // 사용자 조회 버튼 이벤트 + fnFindUser${pageName} = () => { + getFindUser${pageName}(); + } + + /************************************************************************** + * 초기 셋팅 + **************************************************************************/ // 이벤트 setEvent${pageName} = () => { + // 동적검색에서 엔터(Enter) 키를 누르면 검색한다. + $("#term--${pageName}").keypress(function(e) { + if (e.keyCode == 13) { + fnSearchList${pageName}();    + }     + }); + // form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용 $("#frmSearch--${pageName}").find(".form-date").each(function() { $(this).on("input", function() { @@ -336,36 +497,14 @@ // DataTables width 변경 조정 $("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} ); - // DataTables 스크롤 이벤트 - $("#table-responsive--${pageName}").scroll(function() { - let el = $(this); - - if (el.scrollTop() == 0) { - return; - } - if (!${pageName}Control.tableRenderComplete) { - return; - } - - let itemsCnt = ${pageName}Control.dataset._items.length; - let totCnt = ${pageName}Control.dataset.getValue("TOT_CNT"); // let totCnt = ${pageName}Control.dataset.getCurrent("item").data.TOT_CNT; - - if (itemsCnt >= totCnt) { - return; - } - - if ((el[0].scrollHeight - el.scrollTop() + VERTICAL_SCROLL_HEIGHT) <= el.outerHeight()) { - ${pageName}Control.tableRenderComplete = false; // dataTables 에 자료 추가 완료 - - ${pageName}Control.load(${pageName}Control.query.pageNum + 1); - } - }); + // DataTables 스크롤 이벤트 생성 + fnMakeScrollableTable($("#table-responsive--${pageName}")[0], scrollDataList${pageName}); } - // 화면 초기값 셋팅 - setForm${pageName} = (taskSeCd) => { - // 업무 구분 코드 - $("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); + // 화면 초기 설정 + initForm${pageName} = () => { + // 화면 초기화 + $("#frmSearch--${pageName}")[0].reset(); // 최고 관리자 경우 업무구분을 선택할 수 있도록 하자. $("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) { @@ -375,78 +514,44 @@ // 달력 초기화 initDatepicker("frmSearch--${pageName}"); - $("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-365).date); + $("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date); $("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date()); - } - // URL 설정 - setURL${pageName} = (taskSeCd) => { - ${pageName}Control.urls.load = wctx.url("/" + taskSeCd + ${pageName}PrefixUrl + "/030/list.do"); // 조회 - ${pageName}Control.urls.getInfo = wctx.url("/" + taskSeCd + ${pageName}PrefixUrl + "/040/info.do"); // 계고장 세부내용 - } - - /************************************************************************** - * 버튼 clickEvent - **************************************************************************/ - // 업무 구분 변경 - fnResetAndChangeBiz${pageName} = (taskSeCd) => { - // 초기화 - initForm${pageName}(); - - // 업무 구분 코드 - if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") { - taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val(); - } - - // 화면 초기값 설정 - setForm${pageName}(taskSeCd); - - // URL 설정 - setURL${pageName}(taskSeCd); - } + // 사용자 이름 + $("#schRgtrNm--${pageName}").prop("readonly", true); - // 초기화 버튼 이벤트 - fnReset${pageName} = () => { - fnResetAndChangeBiz${pageName}(); + // dataset 초기화 + ${pageName}Control.dataset.clear(); } - // 검색 버튼 이벤트 - fnSearchList${pageName} = () => { - // 검색조건 - ${pageName}Control.query = ${pageName}Fields.get(); + // 기본 데이터 설정 + setFormData${pageName} = (taskSeCd) => { + // ${pageName}Control 설정 + ${pageName}Control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30 - ${pageName}Control.query.fetchSize = FETCH_XS; // 한번에 조회되는 자료 건수 FETCH_XS = 30 - ${pageName}Control.query.sndngSeCdFrom = "11"; // 발송 구분 코드 - 11 계고장 - ${pageName}Control.query.sndngSeCdTo = "12"; // 발송 구분 코드 - 12 계고장 구형표지 - ${pageName}Control.query.delYn = "N"; // 삭제 여부 - - ${pageName}Control.load(); + // 화면 데이터 설정 + $("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드 + $("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 } - // 엑셀 버튼 이벤트 - fnExcel${pageName} = () => { - + // URL 설정 + setURL${pageName} = (taskSeCd) => { + ${pageName}Control.urls.load = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/030/list.do"); // 조회 + ${pageName}Control.urls.getInfo = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/040/info.do"); // 계고장 발송 정보 } /************************************************************************** * script 진입 **************************************************************************/ $(document).ready(function() { - // 기본 데이터 설정 - $("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드 - // 이벤트 설정 setEvent${pageName}(); // 보안모드 fn_securityModeToggle($("#securityMode--top").is(":checked")); - // 업무 구분 설정 - let defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val(); - $("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked", true); - // 화면 초기 설정 및 업무 구분 변경 - fnResetAndChangeBiz${pageName}(defaultBizValue); + fnResetAndChangeBiz${pageName}($("#layout-navbar input[name='taskSeCd']:checked").val()); }); diff --git a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01040-info.jsp b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01040-info.jsp index fabb4413..7f65f72c 100644 --- a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01040-info.jsp +++ b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01040-info.jsp @@ -19,16 +19,12 @@ - -
- +
@@ -38,22 +34,26 @@ - - - 발송상태 등기번호 발송일자 납기일자 납부자명 - 납부자번호 + 납부자생일 우편번호 주소 상세주소 + 등기번호 + 배달일자 + 배달시각 + 미배달사유 + 수령인 + 수령인관계 단속일시 차량번호 + 단속법정동 단속장소 - 단속금액 + 과태료금액 등록일시 등록사용자 수정일시 @@ -65,9 +65,6 @@ @@ -110,22 +114,21 @@ **************************************************************************/ // URL var ${pageName}PrefixUrl = "/sndb/sndb01"; + // infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정) + var ${pageName}CallPurpose = "${callPurpose}"; // FormFields - var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}"); + var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}"); /************************************************************************** * DatasetControl **************************************************************************/ var ${pageName}Control = new DatasetControl({ prefix : "wrngSndngDtl" - , prefixName : "계고장 발송 상세 정보" + , prefixName : "계고장 발송 상세" , keymapper : info => info ? info.SNDNG_DTL_ID : "" , dataGetter : obj => obj.wrngSndngDtlList , appendData : true , tableRenderComplete : false // dataTables 에 자료 추가 완료 여부 - , urls : { - getInfo : wctx.url("/sprt/sprt02/010/main.do") // 개별총정보 - } , formats : { SNDNG_YMD : dateFormat , DUDT_YMD : dateFormat @@ -142,12 +145,7 @@ ${pageName}Control.onDatasetChange = obj => { renderList${pageName}(); - ${pageName}Control.select(true); // 전체 선택 되도록.. - - if (obj.length > 0) { - } - - ${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료 + ${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료 }; // 현재 선택 자료 변경 이벤트 @@ -171,18 +169,47 @@ }); }; + /************************************************************************** + * DataTables 이벤트 + **************************************************************************/ + // DataTables에 click, dbclick 이벤트 + renderList${pageName} = () => { + let ${infoPrefix}List = ${pageName}Control.dataset; + let empty = ${infoPrefix}List.empty; + + let trs = empty ? + [document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%> + ${infoPrefix}List.inStrings( + document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%> + (str, dataItem) => str + .replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');") + .replace(/{ondblclick}/gi, "getTotalInfo${pageName}('" + dataItem.getValue("CRDN_ID") + "');") + ); + + $("#tbody--${pageName}").html(trs.join()); + $("th input[type='checkbox']").prop("checked", false); + + //보안모드 + fn_securityModeToggle($("#securityMode--top").is(":checked")); + } + + /************************************************************************** + * 사용자 함수(function) + **************************************************************************/ // 개별총정보 dialog - ${pageName}Control.getInfo = (crdnId) => { + getTotalInfo${pageName} = (crdnId) => { if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return; let params = { callControlName : "${pageName}Control" , callPurpose : "view" + , sggCd : $("#sggCd--${pageName}").val() + , taskSeCd : $("#taskSeCd--${pageName}").val() , crdnId : crdnId } ajax.get({ - url : ${pageName}Control.urls.getInfo + url : wctx.url(params.taskSeCd + "/sprt/sprt02/010/main.do") , data : params , success : resp => { dialog.open({ @@ -195,28 +222,33 @@ }); } - /************************************************************************** - * - **************************************************************************/ - // DataTables에 click, dbclick 이벤트 - renderList${pageName} = () => { - let ${infoPrefix}List = ${pageName}Control.dataset; - let empty = ${infoPrefix}List.empty; + // 출력 + printWrng${pageName} = (info) => { + if (!info) return; - let trs = empty ? - [document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%> - ${infoPrefix}List.inStrings( - document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%> - (str, dataItem) => str - .replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');") - .replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("CRDN_ID") + "');") - ); + info.delYN = "N"; // 삭제 여부 - $("#tbody--${pageName}").html(trs.join()); - $("th input[type='checkbox']").prop("checked", false); +// ajax.post({ +// url : !create ? ${pageName}Control.urls.update : ${pageName}Control.urls.create +// , data : params +// , success : resp => ${pageName}Control.onSave(resp) +// }); + } - //보안모드 - fn_securityModeToggle($("#securityMode--top").is(":checked")); + /************************************************************************** + * 버튼 clickEvent + **************************************************************************/ + // 계고장 출력 + fnPrint${pageName} = () => { + // validate 확인 + if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return; + + dialog.alert({ + content : ${pageName}Control.prefixName + " 정보를 출력하시겠습니까?" + , onOK : () => { + printWrng${pageName}(${pageName}Fields.get()); + } + }); } /************************************************************************** @@ -241,43 +273,49 @@ $("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} ); } - /************************************************************************** - * 버튼 clickEvent - **************************************************************************/ - // 엑셀 - fnExcel${pageName} = () => { + // 화면 초기 설정 + initForm${pageName} = () => { + // 화면 초기화 + $("#frmEdit--${pageName}")[0].reset(); - } + // 달력 초기화 + initDatepicker("frmEdit--${pageName}"); - // 계고장 출력 - fnPrint${pageName} = () => { - let params = ${pageName}Fields.get(); - - // 선택된 자료의 발송 상세 ID 추가 - let selected = ${pageName}Control.dataset.getKeys("selected"); + } - if (selected.length < 1) return; + // 기본 데이터 설정 + setFormData${pageName} = () => { + // + $("#sggCd--${pageName}").val(${sggCd}); // 시군구 코드 + $("#taskSeCd--${pageName}").val(${taskSeCd}); // 업무 구분 코드 + } - params.sndngDtlIDs = selected.join(","); // 발송 상세 IDs - params.delYn = "N"; // 삭제 여부 + // 업무구분에 따른 url 설정 + setURL${pageName} = (taskSeCd) => { + // } /************************************************************************** * script 진입 **************************************************************************/ $(document).ready(function() { - // 기본 데이터 - $("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드 - $("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드 - - // 보안모드 - fn_securityModeToggle($("#securityMode--top").is(":checked")); - // 이벤트 설정 setEvent${pageName}(); - // Dataset 셋팅 - 화면이 열리면서 조회하는 경우 addData 하여 자료를 추가 + // 화면 초기화 + initForm${pageName}(); + + // Dataset 설정 ${pageName}Control.addData(${wrngSndngDtl}); + + // 기본 데이터 설정 + setFormData${pageName}(); + + // URL 설정 + setURL${pageName}(${taskSeCd}); + + // 보안모드 + fn_securityModeToggle($("#securityMode--top").is(":checked")); });