1. 반송 현황 수정.

2. 수기 반송등록 검색 수정.
3. 기타 수정.
main
jjh 5 months ago
parent 2b11b50494
commit b570e2f72e

@ -91,7 +91,7 @@ public class Excl01Controller extends ApplicationController {
;
}
/** .<br />
/** .
* {@link LevyExclService#getLevyExclList(LevyExclQuery)}
* @param req
* @return jsonView

@ -28,42 +28,46 @@ public class SndbQuery extends CmmnQuery {
private String[] svbtcIds; // 공시송달 Ids
private String svbtcId; // 공시송달 ID
// 검색 조건
private String schLevyExclYmdFrom; // 부과제외_부과제외 일자 시작
private String schLevyExclYmdTo; // 부과제외_부과제외 일자 종료
private String schLevyExclSeCd; // 부과제외_부과제외 구분 코드
private String schLevyExclRsnCd; // 부과제외_부과제외 사유 코드
private String schLevyExclYmdFrom; // 부과제외 일자 시작
private String schLevyExclYmdTo; // 부과제외 일자 종료
private String schLevyExclSeCd; // 부과제외 구분 코드
private String schLevyExclRsnCd; // 부과제외 사유 코드
private String schVltnCd; // 위반 코드
private String schCrdnYmdFrom; // 단속(TB_CRDN)_단속 일자 시작
private String schCrdnYmdTo; // 단속(TB_CRDN)_단속 일자 종료
private String schVhrno; // 단속(TB_CRDN)_차량번호
private String schRtpyrNo; // 납부자(TB_PAYER)_납부자 번호
private String schRtpyrNm; // 납부자(TB_PAYER)_납부자 명
private String schSndngYmdFrom; // 발송(TB_SNDNG)_발송 일자 시작
private String schSndngYmdTo; // 발송(TB_SNDNG)_발송 일자 종료
private String schSndngRegSeCd; // 발송(TB_SNDNG)_발송 등록 구분 코드
private String schDlvrYmdFrom; // 발송상세(TB_SNDNG_DTL)_배달 일자 시작
private String schDlvrYmdTo; // 발송상세(TB_SNDNG_DTL)_배달 일자 종료
private String schSvbtcYmdFrom; // 공시송달(TB_SVBTC)_공시송달 일자 시작
private String schSvbtcYmdTo; // 공시송달(TB_SVBTC)_공시송달 일자 종료
private String schSndngSeCd; // 발송, 발송상세(TB_SNDNG_DTL)_발송 구분 코드
private String schUndlvrRsnCd; // 발송상세(TB_SNDNG_DTL)_미배달 사유 코드
private String schCrdnYmdFrom; // 단속 일자 시작
private String schCrdnYmdTo; // 단속 일자 종료
private String schVhrno; // 차량번호
private String schRtpyrNo; // 납부자 번호
private String schRtpyrNm; // 납부자 명
private String schSndngRegSeCd; // 발송 등록 구분 코드
private String schSndngYmd; // 발송 일자
private String schSndngYmdFrom; // 발송 일자 시작
private String schSndngYmdTo; // 발송 일자 종료
private String schSndngSeCd; // 발송 구분 코드
private String schRcpnNm; // 수령인 명
private String schDlvrYmdFrom; // 배달 일자 시작
private String schDlvrYmdTo; // 배달 일자 종료
private String schRgNo; // 등기번호
private String schSvbtcYmdFrom; // 공시송달 일자 시작
private String schSvbtcYmdTo; // 공시송달 일자 종료
private String schUndlvrRsnCd; // 미배달 사유 코드
private String schChcRgIndct; // 선택 등기 표시
private String schLevyYmd; // 부과(TB_LEVY)_부과일자
private String schFrstDudtYmd; // 부과(TB_LEVY)_최초납기일자
private String schFyr; // 부과(TB_LEVY)_회계연도
private String schLevyNoFrom; // 부과(TB_LEVY)_부과번호 시작
private String schLevyNoTo; // 부과(TB_LEVY)_부과번호 종료
private String schLevyYmd; // 부과일자
private String schFrstDudtYmd; // 최초납기일자
private String schFyr; // 회계연도
private String schLevyNoFrom; // 부과번호 시작
private String schLevyNoTo; // 부과번호 종료
// 상세 검색 조건
// 동적 검색 조건
private String levyExclSeCd; // 부과제외_부과 제외 구분 코드
private String levyExclSeNm; // 부과제외_부과 제외 구분 명
private String levyExclSeCd; // 부과 제외 구분 코드
private String levyExclSeNm; // 부과 제외 구분 명
private String vltnCd; // 위반 코드
private String vhrno; // 단속(TB_CRDN)_차량번호
private String rtpyrNm; // 납부자(TB_PAYER)_납부자
private String crdnSttsCd; // 단속(TB_CRDN)_단속 상태 코드
private String crdnSttsCdFrom; // 단속(TB_CRDN)_단속 상태 코드 시작
private String crdnSttsCdTo; // 단속(TB_CRDN)_단속 상태 코드 종료
private String vhrno; // 차량번호
private String rtpyrNm; // 납부자
private String crdnSttsCd; // 단속 상태 코드
private String crdnSttsCdFrom; // 단속 상태 코드 시작
private String crdnSttsCdTo; // 단속 상태 코드 종료
private String sndngSeCd; // 발송 구분 코드
private String sndngSeCdFrom; // 발송 구분 코드 시작
private String sndngSeCdTo; // 발송 구분 코드 종료
@ -262,6 +266,24 @@ public class SndbQuery extends CmmnQuery {
return self();
}
public String getSchSndngRegSeCd() {
return ifEmpty(schSndngRegSeCd, () -> null);
}
public <T extends SndbQuery> T setSchSndngRegSeCd(String schSndngRegSeCd) {
this.schSndngRegSeCd = schSndngRegSeCd;
return self();
}
public String getSchSndngYmd() {
return ifEmpty(schSndngYmd, () -> null);
}
public <T extends SndbQuery> T setSchSndngYmd(String schSndngYmd) {
this.schSndngYmd = schSndngYmd;
return self();
}
public String getSchSndngYmdFrom() {
return ifEmpty(schSndngYmdFrom, () -> null);
}
@ -280,12 +302,21 @@ public class SndbQuery extends CmmnQuery {
return self();
}
public String getSchSndngRegSeCd() {
return ifEmpty(schSndngRegSeCd, () -> null);
public String getSchSndngSeCd() {
return ifEmpty(schSndngSeCd, () -> null);
}
public <T extends SndbQuery> T setSchSndngRegSeCd(String schSndngRegSeCd) {
this.schSndngRegSeCd = schSndngRegSeCd;
public <T extends SndbQuery> T setSchSndngSeCd(String schSndngSeCd) {
this.schSndngSeCd = schSndngSeCd;
return self();
}
public String getSchRcpnNm() {
return ifEmpty(schRcpnNm, () -> null);
}
public <T extends SndbQuery> T setSchRcpnNm(String schRcpnNm) {
this.schRcpnNm = schRcpnNm;
return self();
}
@ -307,6 +338,15 @@ public class SndbQuery extends CmmnQuery {
return self();
}
public String getSchRgNo() {
return ifEmpty(schRgNo, () -> null);
}
public <T extends SndbQuery> T setSchRgNo(String schRgNo) {
this.schRgNo = schRgNo;
return self();
}
public String getSchSvbtcYmdFrom() {
return ifEmpty(schSvbtcYmdFrom, () -> null);
}
@ -327,15 +367,6 @@ public class SndbQuery extends CmmnQuery {
return self();
}
public String getSchSndngSeCd() {
return ifEmpty(schSndngSeCd, () -> null);
}
public <T extends SndbQuery> T setSchSndngSeCd(String schSndngSeCd) {
this.schSndngSeCd = schSndngSeCd;
return self();
}
public String getSchUndlvrRsnCd() {
return ifEmpty(schUndlvrRsnCd, () -> null);
}

@ -103,7 +103,8 @@ public class Sndb01Controller extends ApplicationController {
, getNoticeSheetSendingDetailInfo = "/120/info.do" // 고지서 발송 현황 화면
, getNoticeSheetSendingDetailList = "/120/list.do" // 고지서 발송 현황 상세 목록 조회
, unitySendBackTargetMain = "/210/main.do" // 통합 반송 등록 메인
, sendingDetailInfo = "/210/info.do" // 수기 반송 등록 상세
, getSendingDetailList = "/210/list.do" // 수기 반송 등록 조회
, sendBackMain = "/220/main.do" // 반송 현황 메인 화면
, getSendBackList = "/220/list.do" // 반송 현황 목록 조회
, removeSendBack = "/220/remove.do" // 반송 삭제
@ -1256,6 +1257,107 @@ public class Sndb01Controller extends ApplicationController {
.addObject("rtnMsg", rtnMsg);
}
/** (sndb/sndb01/210-info) .
*
* @return /sndb/sndb01/210-info
*/
@Task
@RequestMapping(name = "수기 반송 등록 정보 조회", value = METHOD_URL.sendingDetailInfo)
public ModelAndView sendingDetailInfo() {
ModelAndView mav = new ModelAndView("fims/sndb/sndb01210-info");
// 사용자 정보
ManagedUser managedUser = (ManagedUser)currentUser().getUser();
// View(jsp)에서 사용할 공통코드를 조회
Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM047", "FIM054", "FIM081");
return mav
.addObject("pageName", "sndb01210") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
.addObject("infoPrefix", "sndbkTrgt") // prefix
.addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
.addObject("sggCd", managedUser.getOrgID()) // 시군구 코드(SGG_CD)
.addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
.addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
.addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
;
}
/**
* {@link SndngService#getSndngList(SndngQuery)}
* @param req
* @return jsonView
* <pre><code> {
* "sndngDtlList": [ ]
* "sndngDtlStart":
* "sndngDtlFetch":
* "sndngDtlTotal":
* }</code></pre>
*/
@Task
@RequestMapping(name="반송 대상 목록 조회", value=METHOD_URL.getSendingDetailList)
public ModelAndView getSendingDetailList(SndbQuery req) {
if (!"xls".equals(req.getDownload())) {
List<?> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "sndbkTrgt");
} else {
// 현재 날짜 구하기
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String dateTime = dateFormat.format(System.currentTimeMillis());
List<CellDef> cellDefs = fromJson(req.getCellDefs(), CellDef.listType());
XLSWriter xlsx = new XLSWriter().worksheet(0);
Format format = new Format(xlsx);
CellStyle center = format.cellStyle(Style.CENTER);
CellStyle numeric = format.n_nn0();
CellStyle dateYMD = format.yyyy_mm_dd();
CellStyle dateDT = format.yyyy_mm_dd_hh_mm_ss();
List<DataObject> list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
Map<String,Object> valueMap = new HashMap<String,Object>();
valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
valueMap.put("등기번호", format.of("RG_NO").style(center));
valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
valueMap.put("성명", format.of("RCPN_NM"));
valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
valueMap.put("주소", format.of("RCPN_ADDR"));
valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
valueMap.put("배달시각", format.of("DLVR_TM").style(center));
valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
valueMap.put("단속일시", format.of("CRDN_DT").style(center));
valueMap.put("차량번호", format.of("VHRNO"));
valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
valueMap.put("단속장소", format.of("CRDN_PLC"));
valueMap.put("회계연도", format.of("FYR").style(center));
valueMap.put("부과번호", format.of("LEVY_NO").style(center));
valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
valueMap.put("본세", format.of("PCPTAX").style(numeric));
valueMap.put("가산금", format.of("ADAMT").style(numeric));
valueMap.put("미납금액", format.of("SUM_AMT").style(numeric));
valueMap.put("등록일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "REG_DT").style(dateDT));
valueMap.put("등록사용자", format.of("RGTR_NM").style(center));
valueMap.put("수정일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "MDFCN_DT").style(dateDT));
valueMap.put("수정사용자", format.of("MDFR_NM").style(center));
CellDef.setValues(cellDefs, valueMap);
xlsx.cell(0, 0).value("사전통지 발송 상세").value(center).merge(0, cellDefs.size() - 1)
.cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
.cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
return new ModelAndView("downloadView")
.addObject("download", xlsx.getDownloadable().setFilename("사전통지발송상세" + "_목록_" + dateTime + ".xlsx"));
}
}
/** (sndb/sndb01/220-main) .
*
* @return /sndb/sndb01/220-main
@ -1272,15 +1374,16 @@ public class Sndb01Controller extends ApplicationController {
addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
return mav.addObject("pageName", "sndb01220") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
return mav
.addObject("pageName", "sndb01220") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
.addObject("infoPrefix", "sndbk") // prefix
.addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
.addObject("sggCd", managedUser.getOrgID()) // 시군구 코드(SGG_CD)
.addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
.addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_ID)
.addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_ID)
.addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_ID)
.addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
.addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD)
.addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_ID)
.addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_ID)
.addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
@ -1369,8 +1472,7 @@ public class Sndb01Controller extends ApplicationController {
*/
@Task
@RequestMapping(name="발송상세의 반송(미배달) 정보 조회", value=METHOD_URL.getSendBackInfo)
public ModelAndView getSendBackInfo(SndbQuery req) {
//
public ModelAndView getSendBackInfo(HttpServletRequest hReq, SndbQuery req) {
DataObject info = sndngDtlService.getSndbkInfo(req);
// 등록을 호출하였지만 등록된 미배달 사유가 있는지 확인.
@ -1382,14 +1484,17 @@ public class Sndb01Controller extends ApplicationController {
;
} else {
boolean json = jsonResponse();
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sndb/sndb01230-info");
// View(jsp)에서 사용할 공통코드를 조회
Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM054", "FIM081");
return mav.addObject("pageName", "sndb01230")
return mav
.addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
.addObject("callPurpose", req.getCallPurpose()) // 호출 용도
.addObject("pageName", "sndb01230") // jsp pageName
.addObject("infoPrefix", "sndbk") // prefix
.addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
.addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD)
.addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
.addObject("sndbkInfo", json ? info : toJson(info)) // 반송 정보
@ -1858,7 +1963,6 @@ public class Sndb01Controller extends ApplicationController {
@Task
@RequestMapping(name="사전통지발송 현황 사전통지서 pdf 파일 생성", value=METHOD_URL.makeAdvntcePdf)
public ModelAndView makeAdvntcePdf(FimsPrintOption printOption, SndbQuery req) {
//
ModelAndView mav = new ModelAndView("downloadView");
List<DataObject> list = sndngDtlService.getSndngTrgtDtlIds(req);
@ -1885,9 +1989,9 @@ public class Sndb01Controller extends ApplicationController {
FileQuery fileQuery = new FileQuery();
fileQuery.setInfoType(Crdn.INF_TYPE);
fileQuery.setInfoKeys(crdnId);
List<DataObject> fileInfoList = fileBean.getFileList(fileQuery);
if (fileInfoList != null && fileInfoList.size() > 0) {
for (int j=0; j<fileInfoList.size(); j++) {
dataObject.set("CRDN_PHOTO"+(j+1), fileInfoList.get(j).string("URL"));
dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfoList.get(j).string("FILE_ID"));
@ -1896,11 +2000,8 @@ public class Sndb01Controller extends ApplicationController {
if (mosSet != null && !mosSet.isEmpty()) {
dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet);
}
}
}
}
}
@ -1949,6 +2050,7 @@ public class Sndb01Controller extends ApplicationController {
Map<String, Object> result = pdfFormat.makeFile();
mav.addAllObjects(result);
return mav;
}

@ -242,6 +242,33 @@
</if>
<if test="crdnId != null">
AND SD.CRDN_ID = #{crdnId} <!-- 단속 Id -->
</if>
<if test="sndngSeCd != null">
AND SD.SNDNG_SE_CD = #{sndngSeCd} <!-- 발송 구분 코드 -->
</if>
<if test="schSndngYmd != null">
AND SD.SNDNG_YMD = #{schSndngYmd} <!-- 발송 일자 -->
</if>
<if test="schRcpnNm != null">
AND SD.RCPN_NM = #{schRcpnNm} <!-- 수령인 명 -->
</if>
<if test="schRgNo != null">
AND SD.RG_NO = #{schRgNo} <!-- 등기번호 -->
</if>
<if test="schVhrno != null">
AND SD.VHRNO = #{schVhrno} <!-- 차량번호 -->
</if>
<if test="schFyr != null">
AND SD.FYR = #{schFyr} <!-- 회계연도 -->
</if>
<if test="schVhrno != null">
AND SD.VHRNO = #{schVhrno} <!-- 차량번호 -->
</if>
<if test="schLevyNoFrom != null">
AND SD.LEVY_NO <![CDATA[>=]]> #{schLevyNoFrom} <!-- 고지 번호 시작 -->
</if>
<if test="schSndngYmdTo != null">
AND SD.LEVY_NO <![CDATA[<=]]> #{schLevyNoTo} <!-- 고지 번호 종료 -->
</if>
<if test="delYn != null">
AND SD.DEL_YN = #{delYn} <!-- 삭제 여부 -->
@ -267,6 +294,33 @@
</if>
<if test="crdnId != null">
AND SD.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</if>
<if test="sndngSeCd != null">
AND SD.SNDNG_SE_CD = #{sndngSeCd} <!-- 발송 구분 코드 -->
</if>
<if test="schSndngYmd != null">
AND SD.SNDNG_YMD = #{schSndngYmd} <!-- 발송 일자 -->
</if>
<if test="schRcpnNm != null">
AND SD.RCPN_NM = #{schRcpnNm} <!-- 수령인 명 -->
</if>
<if test="schRgNo != null">
AND SD.RG_NO = #{schRgNo} <!-- 등기번호 -->
</if>
<if test="schVhrno != null">
AND SD.VHRNO = #{schVhrno} <!-- 차량번호 -->
</if>
<if test="schFyr != null">
AND SD.FYR = #{schFyr} <!-- 회계연도 -->
</if>
<if test="schVhrno != null">
AND SD.VHRNO = #{schVhrno} <!-- 차량번호 -->
</if>
<if test="schLevyNoFrom != null">
AND SD.LEVY_NO <![CDATA[>=]]> #{schLevyNoFrom} <!-- 고지 번호 시작 -->
</if>
<if test="schSndngYmdTo != null">
AND SD.LEVY_NO <![CDATA[<=]]> #{schLevyNoTo} <!-- 고지 번호 종료 -->
</if>
<if test="delYn != null">
AND SD.DEL_YN = #{delYn} <!-- 삭제 여부 -->

@ -373,8 +373,8 @@
UPDATE TB_SVBTC
SET SVBTC_YMD = #{svbtcYmd} <!-- 공시송달 일자 -->
, SVBTC_END_YMD= #{svbtcEndYmd} <!-- 공시송달 종료 일자 -->
, TTL_NM = #{ttlNm} <!-- 제목 명 -->
, DOC_NO = #{docNo} <!-- 문서 번호 -->
, TTL_NM = #{ttlNm} <!-- 제목 명 -->
, ETC_CN = #{etcCn} <!-- 기타 내용 -->
, TNOCS = #{tnocs} <!-- 총건수 -->
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정 일시 -->

@ -295,13 +295,13 @@
params.callPurpose = "create";
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
} else {
dialogTitle = $P.control.prefixName + " 수정";
params.callPurpose = "update";
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.gdccId = gdccId;
}
@ -321,7 +321,7 @@
}
// 삭제 callback
$P.control.onRemove = (selected, resp) => {
$P.control.onRemove = (resp) => {
let btnTitle = $("#btnRemove--${pageName}").attr("title");
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
@ -336,21 +336,12 @@
// 삭제
$P.control.remove = (params) => {
let selected = $P.control.dataset.getKeys("selected");
if (selected.length < 1) return;
if (!params) {
params = {};
params["GdccIds"] = selected.join(","); // params[$P.control.prefixed("IDs")] = selected.join(",");
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
}
if (!params) return;
ajax.post({
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/010/remove.do")
, data: params || {}
, success: resp => $P.control.onRemove(selected, resp)
, success: resp => $P.control.onRemove(resp)
});
}
@ -499,10 +490,19 @@
// 삭제 버튼 이벤트
$P.fnRemove = (title) => {
let selected = $P.control.dataset.getKeys("selected");
if (selected.length < 1) return;
let params = {};
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params["GdccIds"] = selected.join(","); // params[$P.control.prefixed("IDs")] = selected.join(",");
dialog.alert({
content: "선택한 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
$P.control.remove();
$P.control.remove(params);
}
});
}

@ -384,9 +384,9 @@
let params = {
callPurpose: callPurpose
, sggCd: $("#sggCd--${pageName}").val()
, taskSeCd: $("input[name=taskSeCd]:checked").val()
, conKey: conKey
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
, conKey: conKey //
}
let dialogTitle = "";
@ -462,7 +462,7 @@
params = {};
params["conKeys"] = selected.join(","); // params[$P.control.prefixed("IDs")] = selected.join(",");
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
}
ajax.post({

@ -535,7 +535,7 @@
let selected = $P.control.dataset.getKeys("selected");
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params[$P.control.prefixed("Ids")] = selected.join(","); // 부과 제외 IDs
params.delRsn = obj.reason; // 삭제 사유

@ -189,8 +189,8 @@
<ul class="pagination pagination-primary" id="paging--${pageName}">
</ul>
</div>
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<span class="container-window-btn-right">
<button type="button" class="btn btn-info w-px-120" id="btnDlbrMbr--${pageName}" title="심의위원 관리">
심의위원 관리
</button>
@ -588,7 +588,7 @@
params[$P.control.prefixed("Ids")] = selected.join(","); // IDs
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.delRsn = obj.reason; // 삭제 사유
$P.control.remove(params);
@ -683,7 +683,7 @@
title: title
, callPurpose: "update" // 호출용도: 수정
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd: $("input[name=taskSeCd]:checked").val() // 업무 구분 코드
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
};
ajax.get({

@ -607,7 +607,7 @@
params.title = title; // 타이틀
params.callPurpose = "create"; // 호출 용도 (등록)
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.tnocs = tnocs; // 총 건수
params.gramtFfnlgAmt = gramtFfnlgAmt; // 총 과태료 금액
params.gramtAdvntceAmt = gramtAdvntceAmt; // 총 사전 감경 금액
@ -632,7 +632,7 @@
params.title = title; // 타이틀
params.callPurpose = "create"; // 호출 용도 (등록)
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.tnocs = $P.control.dataset.getValue("TNOCS"); // 총 건수
params.gramtFfnlgAmt = $P.control.dataset.getValue("GRAMT_FFNLG_AMT"); // 총 과태료 금액
params.gramtAdvntceAmt = $P.control.dataset.getValue("GRAMT_ADVNTCE_AMT"); // 총 사전 감경 금액

@ -499,7 +499,7 @@
params[$P.control.prefixed("Ids")] = selected.join(","); // IDs
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.delRsn = obj.reason; // 삭제 사유
$P.control.remove(params);

@ -573,7 +573,7 @@
params[$P.control.prefixed("Ids")] = selected.join(","); // IDs
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.delRsn = obj.reason; // 삭제 사유
$P.control.remove(params);

@ -513,8 +513,8 @@
let params = {
callControlName: "pageObject['${pageName}'].control"
, sggCd : $("#sggCd--${pageName}").val()
, taskSeCd : $("input[name=taskSeCd]:checked").val()
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
, crdnId: crdnId
}

@ -631,14 +631,6 @@
// 선택 발송대상 등록 버튼 이벤트
$P.fnCreateSlctnTrgtInfo = () => {
if ($P.control.dataset.empty) {
dialog.alert({
content: "검색된 자료가 없습니다."
, onOK: () => { }
});
return;
}
// 선택 자료
let selected = $P.control.dataset.getKeys("selected");

@ -326,7 +326,7 @@
, callPurpose: "view" // 호출 용도
, pageNum: 1 // 페이지 번호
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd: $("input[name=taskSeCd]:checked").val() // 업무 구분 코드
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
, sndngId: sndngId // 발송 ID
}
@ -446,7 +446,7 @@
params[$P.control.prefixed("Ids")] = selected.join(","); // IDs
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.delRsn = obj.reason; // 삭제 사유
$P.control.remove(params);

@ -543,7 +543,7 @@
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
// 업무 구분 코드(TASK_SE_CD) 에 따른 검색 조건 설정
let taskSeCd = $("input[name=taskSeCd]:checked").val();
let taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
if (taskSeCd == "BPV" || taskSeCd == "PVS") { // 전용차로위반 , 주정차위반 과태료는 사전부과 후 의견제출 접수도 사전통지 대상
$P.control.query.crdnSttsCdFrom = "21"; // 단속 처리 상태(FIM010) 시작 - 21: 납부자 등록
$P.control.query.crdnSttsCdTo = "31"; // 단속 처리 상태(FIM010) 종료 - 31: 의견제출 접수
@ -576,14 +576,6 @@
// 선택 발송대상 등록 버튼 이벤트
$P.fnCreateSlctnTrgtInfo = (title) => {
if ($P.control.dataset.empty) {
dialog.alert({
content: "검색된 자료가 없습니다."
, onOK: () => { }
});
return;
}
// 선택 자료
let selected = $P.control.dataset.getKeys("selected");

@ -327,7 +327,7 @@
, callPurpose: "view" // 호출 용도
, pageNum: 1 // 페이지 번호
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd: $("input[name=taskSeCd]:checked").val() // 업무 구분 코드
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
, sndngId: sndngId // 발송 ID
}
@ -447,7 +447,7 @@
params[$P.control.prefixed("Ids")] = selected.join(","); // IDs
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.delRsn = obj.reason; // 삭제 사유
$P.control.remove(params);

@ -499,13 +499,14 @@
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
let submitParam = {
sggCd: $P.control.dataset.getValue("SGG_CD")
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
, sndngId: $P.control.dataset.getValue("SNDNG_ID") // 발송 ID
};
let url = "";
let fileTypeName = "";
if (fileType == "pdf") {
url = wctx.url("/" + submitParam.taskSeCd + "${infoPrefixUrl}" + "/080/makeAdvntcePdf.do");
fileTypeName = "PDF 파일";

@ -438,7 +438,7 @@
let params = {
callControlName : "pageObject['${pageName}'].control"
, sggCd : $("#sggCd--${pageName}").val()
, taskSeCd : $("input[name=taskSeCd]:checked").val()
, taskSeCd : $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val()
, crdnId : crdnId
}

@ -549,7 +549,7 @@
callPurpose: "create"
, title: title // 타이틀
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd: $("input[name=taskSeCd]:checked").val() // 업무 구분 코드
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
};
$P.getNhtSndngInfo(params);

@ -0,0 +1,650 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<c:set var="prefixName" scope="request">통합 반송 등록</c:set>
<!-- inner page html -->
<div class="content-wrapper">
<!-- Content -->
<div class="container-xxl flex-grow-1 px-0">
<!-- Page Body -->
<div class="card">
<div class="wrapper-list">
<!-- 상단 버튼 -->
<div class="container-page-btn">
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
초기화
</button>
<span class="container-window-btn-right">
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
검색
</button>
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
엑셀
</button>
</span>
</div> <!-- 상단 버튼 -->
<!-- 검색 조건 영역 -->
<form id="frmSearch--${pageName}" name="frmSearch">
<!-- hidden -->
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
<!-- 메인 조건 -->
<div class="container-search">
<div class="row g-1">
<!-- 업무구분 -->
<div class="col-12">
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
<span class="form-search-linebox">
<c:forEach items="${taskListForSgg}" var="item">
<label>
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
${item.value}
</label>
</c:forEach>
</span>
</div>
<!-- 발송 구분 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngSeCd--${pageName}">발송구분</label>
<select class="form-select w-px-140" id="schSndngSeCd--${pageName}" name="schSndngSeCd">
<option value="">전체</option>
<c:forEach items="${FIM047List}" var="item">
<option value="${item.code}">${item.value}</option>
</c:forEach>
</select>
</div>
<!-- 발송 일자 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmd--${pageName}">발송일자</label>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schSndngYmd--${pageName}" name="schSndngYmd"
data-fmt-type="day" title="시작 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
</span>
</div>
<!-- 발송 상세 ID -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="sndngDtlId--${pageName}">발송번호</label>
<input type="text" class="form-control w-px-200" id="sndngDtlId--${pageName}" name="sndngDtlId" autocomplete="off" />
</div>
<!-- 회계연도 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schFyr--${pageName}">회계연도</label>
<input type="text" class="form-control w-px-60" id="schFyr--${pageName}" name="schFyr" maxlength="4" autocomplete="off" />
</div>
<!-- 고지 번호 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyNoFrom--${pageName}">고지번호</label>
<input type="text" class="form-control w-px-80" id="schLevyNoFrom--${pageName}" name="schLevyNoFrom" maxlength="6" autocomplete="off" />
~
<input type="text" class="form-control w-px-80" id="schLevyNoTo--${pageName}" name="schLevyNoTo" maxlength="6" autocomplete="off" />
</div>
<!-- 수령인 명 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRcpnNm--${pageName}">수령인명</label>
<input type="text" class="form-control w-px-200" id="schRcpnNm--${pageName}" name="schRcpnNm" autocomplete="off" />
</div>
<!-- 차량번호 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
</div>
<!-- 등기 번호 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRgNo--${pageName}">등기번호</label>
<input type="text" class="form-control w-px-160" id="schRgNo--${pageName}" name="schRgNo" autocomplete="off" />
</div>
</div>
</div> <!-- 메인 조건 -->
</form>
<!-- 검색 조건 영역 -->
<!-- 업무 버튼 및 건수 표시 -->
<div>
<span class="container-page-btn">
<!-- 건수, 페이지 표시 -->
<div class="d-flex flex-row justify-content-between">
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
<ul class="pagination pagination-primary" id="paging--${pageName}">
</ul>
</div>
</span>
</div> <!-- 업무 버튼 및 건수 표시 -->
<!-- DataTables(그리드) -->
<div class="card-datatable text-nowrap">
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
<div class="table-responsive ox-scroll oy-scroll h-px-400" id="table-responsive--${pageName}">
<table class="table-layout-fixed dataTable datatables-ajax table table-bordered no-footer" id="dataTables_Table_0--${pageName}" aria-describedby="DataTables_Table_0_info">
<thead class="sticky-thead">
<tr id="theadTr--${pageName}">
<th class="cmn" style="width: 72px;">No.</th>
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
<th class="cmn" style="width: 200px;">발송번호</th>
<th class="cmn" style="width: 200px;">발송구분</th>
<th class="cmn" style="width: 120px;">발송일자</th>
<th class="cmn" style="width: 120px;">발송종료일자</th>
<th class="cmn" style="width: 160px;">등기번호</th>
<th class="cmn" style="width: 120px;">수납</th>
<th class="cmn" style="width: 160px;">발송상세상태</th>
<th class="cmn" style="width: 200px;">수령인</th>
<th class="cmn" style="width: 120px;">수령인생일</th>
<th class="cmn" style="width: 100px;">우편번호</th>
<th class="cmn" style="width: 280px;">주소</th>
<th class="cmn" style="width: 320px;">상세주소</th>
<th class="cmn" style="width: 180px;">단속일시</th>
<th class="cmn" style="width: 140px;">차량번호</th>
<th class="cmn" style="width: 160px;">법정동</th>
<th class="cmn" style="width: 280px;">단속장소</th>
<th class="cmn" style="width: 100px;">회계연도</th>
<th class="cmn" style="width: 100px;">부과번호</th>
<th class="cmn" style="width: 120px;">부과일자</th>
<th class="cmn" style="width: 120px;">납기일자</th>
<th class="cmn" style="width: 120px;">과태료금액</th>
<th class="cmn" style="width: 120px;">본세</th>
<th class="cmn" style="width: 120px;">가산금</th>
<th class="cmn" style="width: 200px;">전자납부번호</th>
<th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th>
<th class="cmn" style="width: 180px;">수정일시</th>
<th class="cmn" style="width: 140px;">수정사용자</th>
<th class="cmn dummy-th"></th>
</tr>
</thead>
<tbody id="tbody--${pageName}">
</tbody>
<template id="${infoPrefix}Row--${pageName}">
<tr data-key="{SNDNG_DTL_ID}">
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{SNDNG_DTL_ID}" onchange="pageObject['${pageName}'].control.select('{SNDNG_DTL_ID}', this.checked);" /></td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_DTL_ID}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_SE_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_YMD}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RG_NO}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_RCVMT_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_DTL_STTS_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_BRDT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ZIP}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ADDR}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_DTL_ADDR}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_DT}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FYR}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_NO}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_YMD}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DUDT_YMD}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{PCPTAX}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADAMT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{EPAYNO}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{REG_DT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RGTR_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
<td class="cmn dummy-td"></td>
</tr>
</template>
<template id="${infoPrefix}NotFound--${pageName}">
<tr class="odd">
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr>
</template>
</table>
</div>
</div>
</div> <!-- DataTables(그리드) -->
<p></p>
<!-- 입력 영역 -->
<form id="frmEdit--${pageName}" name="frmEdit">
<div class="container-search-detail">
<!-- 업무 버튼 및 건수 표시 -->
<div>
<span class="container-page-btn">
<!-- 건수, 페이지 표시 -->
<div class="d-flex flex-row justify-content-between">
<!-- 배달 일자 -->
<label class="form-label fw-bold form-search-title w-px-120 text-end required" for="dlvrYmd--${pageName}">발송일자</label>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="dlvrYmd--${pageName}" name="dlvrYmd"
data-fmt-type="day" title="시작 날짜 선택" required />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
</span>
<!-- 미배달 사유 코드 -->
<label class="form-label fw-bold form-search-title w-px-120 text-end required" for="undlvrRsnCd--${pageName}">미배달사유</label>
<select class="form-select w-px-160" id="undlvrRsnCd--${pageName}" name="undlvrRsnCd" required>
<option value="">선택하세요</option>
<c:forEach items="${FIM081List}" var="item">
<option value="${item.code}">${item.value}</option>
</c:forEach>
</select>
</div>
<!-- 업무 버튼 -->
<span class="container-window-btn-right">
<button type="button" class="btn btn-primary w-px-120" id="btnSave--${pageName}" title="반송 등록">
반송 등록
</button>
</span>
</span>
</div> <!-- 업무 버튼 및 건수 표시 -->
</div>
</form>
<!-- 입력 영역 -->
</div> <!-- <div class="wrapper-list"> -->
</div> <!-- <div class="card"> -->
<!-- Page Body -->
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
<!-- Content -->
<div class="content-backdrop fade"></div>
</div>
<!-- / inner page html <div class="content-wrapper"> -->
<script>
/**************************************************************************
* Global Variable
**************************************************************************/
pageObject["${pageName}"] = {};
/**************************************************************************
* script 진입
**************************************************************************/
$(document).ready(function() {
// pageObject
let $P = pageObject["${pageName}"];
// FormFields
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
/**************************************************************************
* DatasetControl
**************************************************************************/
$P.control = new DatasetControl({
prefix: "sndbkTrgt"
, prefixName: "반송"
, keymapper: info => info ? info.SNDNG_DTL_ID : ""
, dataGetter: obj => obj.${infoPrefix}List
, appendData: true
, formats: {
SNDNG_YMD: dateFormat
, SNDNG_END_YMD: dateFormat
, LEVY_YMD: dateFormat
, DUDT_YMD: dateFormat
, FFNLG_AMT: numberFormat
, PCPTAX: numberFormat
, ADAMT: numberFormat
, REG_DT: datetimeFormat
, MDFCN_DT: datetimeFormat
}
});
// $P.control 설정
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
$P.control.untilPageNum = 0; // 현재 페이지 번호
$P.control.beforeCurrent = null;
$P.control.tableRenderComplete = false; // dataTables 에 자료 추가 완료 여부
/**************************************************************************
* DatasetControl 이벤트
**************************************************************************/
// Dataset 변경
$P.control.onDatasetChange = (obj) => {
$P.renderList(obj.${infoPrefix}Total);
$("#paging--${pageName}").setPagingInfo({
list: $P.control.dataset
, prefix: "paging--${pageName}"
, start: obj.${infoPrefix}Start
, totalSize: obj.${infoPrefix}Total
, fetchSize: obj.${infoPrefix}Fetch
, func: "pageObject['${pageName}'].control.load({index})"
});
$P.control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
};
// 현재 선택 자료 변경 이벤트
$P.control.onCurrentChange = (item) => {
if (!item) return;
let key = item.data.SNDNG_DTL_ID;
$("#tbody--${pageName}").setCurrentRow(key);
};
// 선택(체크) 변경 이벤트
$P.control.onSelectionChange = (selected) => {
let ${infoPrefix}List = $P.control.dataset;
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
$("#tbody--${pageName} input[type='checkbox']").each(function() {
let checkbox = $(this);
checkbox.prop("checked", keys.includes(checkbox.val()));
});
// DataTables(그리드) 전체 선택(checkbox)
if (keys.length < 1) {
$("th input[type='checkbox']").prop("checked", false); // 체크 해제
} else if (keys.length == ${infoPrefix}List.length) {
$("th input[type='checkbox']").prop("checked", true); // 체크 설정
} else {
$("th input[type='checkbox']").prop("checked", false); // 체크 해제
}
};
// 저장 callback
$P.control.onSave = (resp) => {
let dialogTitle = $("#" + $P.control.prefix + "Dialog--${openerPageName}").find("h5.modal-title").html();
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, dialogTitle);
// 메시지 출력
dialog.alert({
content: showMessage
, init: () => { setDialogZindex(); }
, onOK: () => { }
});
if (resp.saved) {
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
if ("${savedCallbackFuncName}" != "") {
${savedCallbackFuncName}(resp.saved);
}
}
}
// 저장
$P.control.save = (info) => {
if (!info) return;
let create = ($P.callPurpose == "create");
ajax.post({
url: !create ? $P.control.urls.update : $P.control.urls.create
, data: info || {}
, success: resp => $P.control.onSave(resp)
});
}
/**************************************************************************
* DataTables 이벤트
**************************************************************************/
// DataTables에 click, dbclick 이벤트
$P.renderList = (totalSize) => {
let ${infoPrefix}List = $P.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, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');")
);
let noMore = (totalSize == ${infoPrefix}List.length);
let initScroll = ($P.control.query.pageNum < 2) && ($P.control.untilPageNum == 0);
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
if ($P.control.untilPageNum != 0) {
$P.control.query.fetchSize = $P.control.defaultFetchSize;
$P.control.query.pageNum = $P.control.untilPageNum;
$P.control.untilPageNum = 0;
}
// checkbox 체크 해제
$("th input[type='checkbox']").prop("checked", false);
//보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
}
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
$P.scrollDataList = () => {
$P.control.tableRenderComplete = false; // dataTables 에 자료 추가 false
$P.control.load($P.control.query.pageNum + 1);
}
// DataTables에 더블 클릭시 개별총정보 dialog
$P.getTotalInfo = (crdnId) => {
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
let params = {
callControlName: "pageObject['${pageName}'].control"
, sggCd: $P.control.dataset.getValue("SGG_CD")
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
, 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"
});
}
});
}
/**************************************************************************
* 사용자 함수(function)
**************************************************************************/
// 검색 자료 재조회
$P.fnRefreshList = () => {
$P.control.untilPageNum = $P.control.query.pageNum;
$P.control.query.fetchSize = $P.control.defaultFetchSize * $P.control.query.pageNum;
$P.control.load(1);
}
// 사용자검색 callback
$P.callbackFindUser = (userId, userNm) => {
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
}
/**************************************************************************
* 버튼 clickEvent
**************************************************************************/
// 업무 구분 변경 이벤트
$P.fnResetAndChangeBiz = (taskSeCd) => {
// 업무 구분 코드
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
}
// 초기 기본 설정
$P.initForm(taskSeCd);
// 업무 구분별 설정
$P.setTask(taskSeCd);
// dataset 초기화
$P.control.dataset.clear();
}
// 사용자검색 버튼 클릭 이벤트
$P.fnGetFindUser = () => {
let params = {
openerPageName: "${pageName}"
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
}
ajax.get({
url: wctx.url("/user/user02/010/main.do")
, data: params || {}
, success: resp => {
dialog.open({
id: "userDialog"
, title: "사용자 검색"
, content: resp
, size: "lg"
, init: () => { setDialogZindex(); }
});
}
});
}
// 검색 버튼 이벤트
$P.fnSearchList = () => {
// 검색조건
$P.control.query = $P.formFields.get(); // 검색 조건
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
$P.control.query.delYn = "N"; // 삭제 여부
$P.control.load(1);
}
// 엑셀 버튼 이벤트
$P.fnExcel = () => {
if ($P.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)"));
$P.control.query.cellDefs = cellDefs;
$P.control.download();
}
// 반송 등록 버튼 이벤트
$P.fnSave = () => {
// 선택 자료
let selected = $P.control.dataset.getKeys("selected");
if (selected.length < 1) {
dialog.alert({
content: "선택하신 " + $P.control.prefixName + " 정보가 없습니다."
, init: () => { setDialogZindex(); }
, onOK: () => { }
});
return;
}
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
let params = {};
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.sndngDtlIds = selected.join(","); // 발송 상세 Ids
dialog.alert({
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 등록하시겠습니까?"
, onOK: () => {
$P.control.save(params);
}
});
}
/**************************************************************************
* 초기 설정
**************************************************************************/
// 이벤트 설정
$P.setEvent = () => {
// 기본 버튼 이벤트
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
$("#term--${pageName}").keypress(function(e) {
if (e.keyCode == 13) {
$P.fnSearchList();
}    
});
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
$("#frmSearch--${pageName}").find(".form-date").each(function() {
$(this).on("input", function() {
let value = this.value.replaceAll("-", "");
if (value.length > 7) {
this.value = value.substring(0, 4) + "-" + value.substring(4, 6) + "-" + value.substring(6);
} else if(value.length > 5) {
this.value = value.substring(0, 4) + "-" + value.substring(4);
}
});
});
// 버튼 이벤트
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
// DataTables 스크롤 이벤트 생성
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
}
// 초기 화면 설정
$P.initForm = (taskSeCd) => {
// 화면 초기화
$("#frmSearch--${pageName}")[0].reset();
// input, select 초기화
let searchForm = $("#frmSearch--${pageName}");
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
searchForm.find("input[type='checkbox']").prop("checked", false);
searchForm.find("input[type='text']").val("");
searchForm.find("input[type='hidden']").val("");
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
$(this).prop("disabled", "true");
});
// 기본 데이터 설정
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
$("#schSndngYmd--${pageName}").datepicker("setDate", new Date()); // 발송 일자
$("#dlvrYmd--${pageName}").datepicker("setDate", new Date()); // 배달 일자
}
// 업무 구분별 설정
$P.setTask = (taskSeCd) => {
// 업무구분에 따른 URL 설정
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/210/list.do"); // 검색
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/210/create.do"); // 등록
$P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/210/updatet.do"); // 수정
}
/**************************************************************************
* 최초 실행 함수
**************************************************************************/
// 1. 이벤트 설정
$P.setEvent();
// 2. 초기 설정 및 업무 구분 변경
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
// 3. 보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
});
</script>

@ -1,550 +0,0 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<!-- inner page html -->
<div class="content-wrapper">
<!-- Content -->
<div class="container-xxl flex-grow-1 px-0">
<c:set var="prefixName" scope="request">통합 반송 등록</c:set>
<!-- Page Body -->
<div class="card">
<div class="wrapper-list">
<div>
<!-- 상단 버튼 -->
<div class="container-page-btn">
<button type="button" class="btn btn-outline-dark" id="btnReset--${pageName}" title="초기화" onclick="fnReset${pageName}();">
초기화
</button>
<span class="container-window-btn-right">
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색" onclick="fnSearchList${pageName}();">
검색
</button>
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀 저장" onclick="fnExcel${pageName}();">
엑셀
</button>
</span>
</div>
<!-- / 상단 버튼 -->
<!-- 검색 조건 영역 -->
<form id="frmSearch--${pageName}" name="frmSearch">
<!-- hidden -->
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
<!-- 메인 조건 -->
<div class="container-search">
<div class="row g-1">
<!-- 업무구분 -->
<div class="col-12">
<span class="form-label fw-bold form-search-title text-end">업무구분</span>
<span class="form-search-linebox">
<c:forEach items="${taskListForSgg}" var="item">
<label>
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
value="${item.code}" onchange="fnResetAndChangeBiz${pageName}(this.value);">
${item.value}
</label>
</c:forEach>
</span>
</div>
<!-- 단속일자 -->
<div class="col-6">
<span class="form-label fw-bold form-search-title text-end">단속일자</span>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
data-fmt-type="day" title="시작 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
~
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
data-fmt-type="day" title="종료 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
</span>
</div>
<!-- 차량번호 -->
<div class="col-6">
<label class="form-label fw-bold form-search-title text-end" for="schVhrno--${pageName}">차량번호</label>
<input type="text" class="form-control w-px-150" id="schVhrno--${pageName}" name="schVhrno" />
</div>
<!-- 납부자명 -->
<div class="col-6">
<label class="form-label fw-bold form-search-title text-end" for="schRtpyrNm--${pageName}">납부자명</label>
<input type="text" class="form-control w-px-150" id="schRtpyrNm--${pageName}" name="schRtpyrNm" />
</div>
<!-- 동적검색 -->
<div class="col-6">
<input type="hidden" id="by--${pageName}" name="by" />
<input type="text" class="form-control" id="byOutput--${pageName}" value="동적 검색" readonly />
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
<input type="hidden" id="subOption--${pageName}" name="subOption" />
<input type="text" class="form-control w-px-300" id="term--${pageName}" name="term" />
<!-- 상세 검색조건 버튼 -->
<span class="flr">
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
<i class="bx bx-chevron-down"></i>
상세검색
</button>
</span>
</div>
</div>
</div> <!-- / 메인 조건 -->
<!-- 상세 조건 -->
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
<div class="row g-1">
<!-- 단속 등록일자, 단속 수정일자 -->
<div class="col-6">
<select class="form-select text-center" id="schDetailCrdnRegDtOpt--${pageName}" name="schDetailCrdnRegDtOpt">
<option value="regDt">단속 등록일자</option>
<option value="mdfcnDt">단속 수정일자</option>
</select>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schDetailCrdnRegDtFrom--${pageName}" name="schDetailCrdnRegDtFrom"
data-fmt-type="day" title="시작 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
~
<input type="text" class="form-control form-date" id="schDetailCrdnRegDtTo--${pageName}" name="schDetailCrdnRegDtTo"
data-fmt-type="day" title="종료 날짜 선택">
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
</span>
</div>
<!-- 단속 등록자명, 단속 수정자명 -->
<div class="col-6">
<select class="form-select text-center" id="schDetailCrdnRgtrOpt--${pageName}" name="schDetailCrdnRgtrOpt">
<option value="rgtr">단속 등록자</option>
<option value="mdfr">단속 수정자</option>
</select>
<input type="text" class="form-control" id="schDetailCrdnRgtrNm--${pageName}" name="schDetailCrdnRgtrNm" />
</div>
</div>
</div>
<!-- / 상세 조건 -->
</form>
<!-- / 검색 조건 영역 -->
<!-- 업무 버튼 및 건수 표시 -->
<div>
<span class="container-page-btn">
<!-- 건수, 페이지 표시 -->
<div class="d-flex flex-row justify-content-between">
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
<ul class="pagination pagination-primary" id="paging--${pageName}">
</ul>
</div>
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<button type="button" class="btn btn-search w-px-120" id="btnCreateRductLevy--${pageName}" title="검색" onclick="fnCreateRductLevy${pageName}();">
감경부과 등록
</button>
</span>
</span>
</div>
<!-- / 업무 버튼 및 건수 표시 -->
<!-- DataTables(그리드) -->
<div class="card-datatable text-nowrap">
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
<table class="table-layout-fixed dataTable datatables-ajax table table-bordered no-footer" id="dataTables_Table_0--${pageName}" aria-describedby="DataTables_Table_0_info">
<thead class="sticky-thead">
<tr id="theadTr--${pageName}"
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
<th class="cmn" style="width: 72px;">No.</th>
<th class="cmn" style="width: 56px;">
<input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="${pageName}Control.select(this.checked);">
</th>
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">법정동</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_CRDN_AMT', this.innerText, 'match', 'part');">단속금액</th>
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">과태료금액</th>
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('ADVNTCE_AMT', this.innerText, 'match', 'part');">사전통지금액</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_APLY_NO', this.innerText, 'match', 'part');">민원신청번호</th>
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_RCPT_NO', this.innerText, 'match', 'part');">민원접수번호</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('CVLCPT_RCPT_YMD', this.innerText, 'ymd', '');">민원접수일자</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('CVLCPT_TRSM_CD', this.innerText, 'codeValue', 'FIM018');">민원전송결과</th>
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_BRDT', this.innerText, 'match', 'part');">납부자생일</th>
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ZIP', this.innerText, 'match', 'part');">우편번호</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ADDR', this.innerText, 'match', 'part');">주소</th>
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
<th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th>
<th class="cmn" style="width: 180px;">수정일시</th>
<th class="cmn" style="width: 140px;">수정사용자</th>
<th class="cmn dummy-th"></th>
</tr>
</thead>
<tbody id="tbody--${pageName}">
</tbody>
<template id="${infoPrefix}Row--${pageName}">
<tr data-key="{CRDN_ID}">
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
<td class="cmn text-center">
<input type="checkbox" class="form-check-input" name="gridCheckbox" value="{CRDN_ID}" onchange="${pageName}Control.select('{CRDN_ID}', this.checked);">
</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_CRDN_AMT}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADVNTCE_AMT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_APLY_NO}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_NO}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_YMD}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_TRSM_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_BRDT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{REG_DT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RGTR_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
<td class="cmn dummy-td"></td>
</tr>
</template>
<template id="${infoPrefix}NotFound--${pageName}">
<tr class="odd">
<td valign="top" colspan="25" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr>
</template>
</table>
</div>
</div>
</div>
<!-- / DataTables(그리드) -->
</div>
</div> <!-- <div class="wrapper-list"> -->
</div> <!-- <div class="card"> -->
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
<div class="content-backdrop fade"></div>
</div>
<!-- / inner page html <div class="content-wrapper"> -->
<script>
/**************************************************************************
* Global Variable
**************************************************************************/
// URL
var ${pageName}PrefixUrl = "/levy/levy01";
// FormFields
var ${pageName}Fields = new FimsFormFields("#frmSearch--${pageName}");
/**************************************************************************
* DatasetControl
**************************************************************************/
var ${pageName}Control = new DatasetControl({
prefix : "rductLevyTrgt"
, prefixName : "감경부과대상"
, infoSize : "lg"
, keymapper : info => info ? info.CRDN_ID : ""
, dataGetter : obj => obj.rductLevyTrgtList
, appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, formats : {
CRDN_YMD_TM : datetimeFormat
, CVLCPT_RCPT_YMD : dateFormat
, FFNLG_CRDN_AMT : numberFormat
, FFNLG_AMT : numberFormat
, ADVNTCE_AMT : numberFormat
, REG_DT : datetimeFormat
, MDFCN_DT : datetimeFormat
}
});
/**************************************************************************
* DatasetControl 이벤트
**************************************************************************/
// Dataset 변경 이벤트
${pageName}Control.onDatasetChange = obj => {
renderList${pageName}();
$("#paging--${pageName}").setPagingInfo({
list : ${pageName}Control.dataset
, prefix : "paging--${pageName}"
, start : obj.${infoPrefix}Start
, totalSize : obj.${infoPrefix}Total
, fetchSize : obj.${infoPrefix}Fetch
, func : "${pageName}Control.load({index})"
});
${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
};
// 현재 선택 자료 변경 이벤트
${pageName}Control.onCurrentChange = item => {
if (!item) return;
let key = item.data.CRDN_ID;
$("#tbody--${pageName}").setCurrentRow(key);
};
// 선택(체크) 변경 이벤트
${pageName}Control.onSelectionChange = selected => {
let ${infoPrefix}List = ${pageName}Control.dataset;
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
$("#tbody--${pageName} input[type='checkbox']").each(function() {
let checkbox = $(this);
checkbox.prop("checked", keys.includes(checkbox.val()));
});
};
// 개별총정보 dialog
${pageName}Control.getInfo = (crdnId) => {
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") {
return;
}
let params = {
callControlName : "${pageName}Control"
, crdnId : crdnId
}
ajax.get({
url : ${pageName}Control.urls.getInfo
, data : params || {}
, success : resp => {
dialog.open({
id : "totalInfoMainDialog"
, title : "개별총정보"
, content : resp
, size : "xxl"
});
}
});
}
/**************************************************************************
*
**************************************************************************/
// 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("CRDN_ID") + "');")
.replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("CRDN_ID") + "');")
);
$("#tbody--${pageName}").html(trs.join());
$("th input[type='checkbox']").prop("checked", false);
//보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
}
createRductLevy${pageName} = (obj) => {
let btnTitle = $("#btnCreateSndngLink--${pageName}").attr("title");
// 선택된 자료의 발송 상세 ID 추가
let selected = ${pageName}Control.dataset.getKeys("selected");
if (selected.length < 1) return;
let params = {
sggCd : $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd : $("#taskSeCd--${pageName}").val() // 업무 구분 코드
, crdnIds = selected.join(","); // 단속 IDs
, sndngYmd : obj.sndngYmd // 부과 일자
, dudtYmd : obj.dudtYmd // 납기 일자
};
// ajax.post({
// url : wctx.url("/" + params.taskSeCd + ${pageName}PrefixUrl + "/080/createSndngLink.do")
// , data : params || {}
// , success : resp => {
// let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
// dialog.alert(showMessage);
// }
// });
}
/**************************************************************************
* 초기 설정
**************************************************************************/
// 이벤트
setEvent${pageName} = () => {
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
$("#frmSearch--${pageName}").find(".form-date").each(function() {
$(this).on("input", function() {
let value = this.value.replaceAll("-", "");
if (value.length > 7) {
this.value = value.substring(0, 4) + "-" + value.substring(4, 6) + "-" + value.substring(6);
} else if(value.length > 5) {
this.value = value.substring(0, 4) + "-" + value.substring(4);
}
});
});
// 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);
}
});
}
// 화면 초기값 설정
setForm${pageName} = (taskSeCd) => {
// 업무 구분 코드
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true);
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
$(this).prop("disabled", "true");
});
// 달력 초기화
initDatepicker("frmSearch--${pageName}");
$("#schCrdnYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-90).date);
$("#schCrdnYmdTo--${pageName}").datepicker("setDate", new Date());
// DataTables width 변경 조정
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
}
// URL 설정
setURL${pageName} = (taskSeCd) => {
${pageName}Control.urls.load = wctx.url("/" + taskSeCd + ${pageName}PrefixUrl + "/010/list.do"); // 조회
${pageName}Control.urls.getInfo = wctx.url("/" + taskSeCd + "/sprt/sprt02/010/main.do"); // 개별총정보
}
/**************************************************************************
* 버튼 clickEvent
**************************************************************************/
// 초기화 버튼 이벤트
fnReset${pageName} = () => {
fnResetAndChangeBiz${pageName}();
}
// 검색 버튼 이벤트
fnSearchList${pageName} = () => {
// 검색조건
${pageName}Control.query = ${pageName}Fields.get();
${pageName}Control.query.fetchSize = FETCH_XS; // 한번에 조회되는 자료 건수 FETCH_XS = 30
${pageName}Control.query.delYn = "N"; // 삭제 여부
${pageName}Control.query.crdnDelYn = "N"; // 단속 대장 삭제 여부
${pageName}Control.load();
}
// 엑셀 버튼 이벤트
fnExcel${pageName} = () => {
}
// 업무 구분 변경
fnResetAndChangeBiz${pageName} = (taskSeCd) => {
// 화면 초기화
$("#frmSearch--${pageName}")[0].reset();
// dataset 초기화
${pageName}Control.dataset.clear();
// 업무 구분 코드
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
}
// 화면 초기값 설정
setForm${pageName}(taskSeCd);
// URL 설정
setURL${pageName}(taskSeCd);
}
// 감경부과등록 버튼 이벤트
fnCreateRductLevy${pageName} = async() => {
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
let sndngYmd = DateUtil.getDateDay().date;
let dudtYmd = DateUtil.getDateDay(20).date;
var resp = await fetch(wctx.url("/resources/html/inputDateDialog.html"));
var template = await resp.text();
dialog.open({
id : "inputRductLevyDateDialog",
title: "감경부과등록",
size : "md",
content: template,
init : () => {
setDialogZindex();
$("#divPostSndng").hide();
initDatepicker("frmInputDate");
$("#sndngYmd").datepicker("setDate", sndngYmd);
$("#sndngEndYmd").datepicker("setDate", sndngEndYmd);
},
onOK : () => {
if (!inputDateComparison($("#sndngYmd").val(), $("#sndngEndYmd").val())) {
return;
}
$P.callbackDate({
"sndngYmd" : $("#sndngYmd").val(),
"dudtYmd" : $("#sndngEndYmd").val()
});
}
});
}
/**************************************************************************
* script 진입
**************************************************************************/
$(document).ready(function() {
// 보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
// 이벤트 설정
setEvent${pageName}();
// 시군구 코드 설정
$("#sggCd--${pageName}").val("${sggCd}");
// 업무 구분 설정
let defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked", true);
// 업무 구분 및 화면 초기 설정
fnResetAndChangeBiz${pageName}(defaultBizValue);
});
</script>

@ -1,16 +1,16 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<c:set var="prefixName" scope="request">반송 현황</c:set>
<!-- inner page html -->
<div class="content-wrapper">
<!-- Content -->
<div class="container-xxl flex-grow-1 px-0">
<c:set var="prefixName" scope="request">반송 현황</c:set>
<!-- Page Body -->
<div class="card">
<div class="wrapper-list">
<div>
<!-- 상단 버튼 -->
<div class="container-page-btn">
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
@ -24,25 +24,24 @@
엑셀
</button>
</span>
</div>
<!-- / 상단 버튼 -->
</div> <!-- 상단 버튼 -->
<!-- 검색 조건 영역 -->
<form id="frmSearch--${pageName}" name="frmSearch">
<!-- hidden -->
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
<!-- 메인 조건 -->
<div class="container-search">
<div class="row g-1">
<!-- 업무 구분 -->
<div class="col-12">
<span class="form-label fw-bold form-search-title text-end">업무구분</span>
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
<span class="form-search-linebox">
<c:forEach items="${taskListForSgg}" var="item">
<label>
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
value="${item.code}" onchange="fnResetAndChangeBiz${pageName}(this.value);">
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
${item.value}
</label>
</c:forEach>
@ -50,7 +49,7 @@
</div>
<!-- 배달 일자 -->
<div class="col-6">
<span class="form-label fw-bold form-search-title text-end">배달일자</span>
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schDlvrYmdFrom--${pageName}">배달일자</label>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schDlvrYmdFrom--${pageName}" name="schDlvrYmdFrom"
data-fmt-type="day" title="시작 날짜 선택" />
@ -61,9 +60,19 @@
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
</span>
</div>
<!-- 미배달 사유 코드 -->
<div class="col-6">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schUndlvrRsnCd--${pageName}">미배달사유</label>
<select class="form-select w-px-160" id="schUndlvrRsnCd--${pageName}" name="schUndlvrRsnCd">
<option value="">전체</option>
<c:forEach items="${FIM081List}" var="item">
<option value="${item.code}">${item.value}</option>
</c:forEach>
</select>
</div>
<!-- 발송일자 -->
<div class="col-6">
<span class="form-label fw-bold form-search-title text-end">발송일자</span>
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmdFrom--${pageName}">발송일자</label>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schSndngYmdFrom--${pageName}" name="schSndngYmdFrom"
data-fmt-type="day" title="시작 날짜 선택" />
@ -76,51 +85,27 @@
</div>
<!-- 발송 구분 -->
<div class="col-6">
<label class="form-label fw-bold form-search-title text-end" for="schSndngSeCd--${pageName}">발송구분</label>
<select class="form-select w-px-150" id="schSndngSeCd--${pageName}" name="schSndngSeCd">
<c:forEach items="${FIM047List}" var="item">
<option value="${item.code}">${item.value}</option>
</c:forEach>
</select>
</div>
<!-- 미배달 사유 코드 -->
<div class="col-6">
<label class="form-label fw-bold form-search-title text-end" for="schUndlvrRsnCd--${pageName}">미배달사유</label>
<select class="form-select w-px-150" id="schUndlvrRsnCd--${pageName}" name="schUndlvrRsnCd">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngSeCd--${pageName}">발송구분</label>
<select class="form-select w-px-160" id="schSndngSeCd--${pageName}" name="schSndngSeCd">
<option value="">전체</option>
<c:forEach items="${FIM081List}" var="item">
<c:forEach items="${FIM047List}" var="item">
<option value="${item.code}">${item.value}</option>
</c:forEach>
</select>
</div>
<!-- 단속일자 -->
<div class="col-6">
<span class="form-label fw-bold form-search-title text-end">단속일자</span>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
~
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
</span>
<!-- 선택등기 표시 -->
<div class="col-6 form-check">
<input type="checkbox" class="form-check-input" id="schChcRgIndct--${pageName}" name="schChcRgIndct" value="Y" />
<label class="form-check-label" for="schChcRgIndct--${pageName}">선택등기표시</label>
</div>
<!-- 동적검색 -->
<div class="col-6">
<input type="hidden" id="by--${pageName}" name="by" />
<input type="text" class="form-control" id="byOutput--${pageName}" value="동적 검색" readonly />
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
<input type="hidden" id="subOption--${pageName}" name="subOption" />
<input type="text" class="form-control w-px-320" id="term--${pageName}" name="term" autocomplete="off" />
</div>
<!-- 선택등기 표시 -->
<div class="col-6 form-check">
<input type="checkbox" class="form-check-input" id="schChcRgIndct--${pageName}" name="schChcRgIndct" value="Y" />
<label class="form-check-label" for="schChcRgIndct--${pageName}">선택등기표시</label>
</div>
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
<!-- 상세 검색조건 버튼 -->
<div class="col-6">
<span class="flr">
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
<i class="bx bx-chevron-down"></i>
@ -130,14 +115,27 @@
</div>
</div>
</div>
<!-- / 메인 조건 -->
<!-- 메인 조건 -->
<!-- 상세 조건 -->
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
<div class="row g-1">
<!-- 단속일자 -->
<div class="col-4">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
~
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
<button type="button" class="bx bx-sm bx-calendar bg-white"></button>
</span>
</div>
<!-- 등록일자, 수정일자 -->
<div class="col-6">
<select class="form-select text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
<div class="col-4">
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
<option value="regDt">등록일자</option>
<option value="mdfcnDt">수정일자</option>
</select>
@ -152,21 +150,19 @@
</span>
</div>
<!-- 등록자명, 수정자명 -->
<div class="col-6">
<select class="form-select text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
<div class="col-4">
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
<option value="rgtr">등록자</option>
<option value="mdfr">수정자</option>
</select>
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
<input type="text" class="form-control" id="schRgtrNm--${pageName}" name="schRgtrNm" />
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">
검색
</button>
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
</div>
</div>
</div> <!-- / 상세 조건 -->
</div> <!-- 상세 조건 -->
</form>
<!-- / 검색 조건 영역 -->
<!-- 검색 조건 영역 -->
<!-- 업무 버튼 및 건수 표시 -->
<div>
@ -177,21 +173,23 @@
<ul class="pagination pagination-primary" id="paging--${pageName}">
</ul>
</div>
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<span class="container-window-btn-right">
<button type="button" class="btn btn-primary w-px-160" id="btnCreateSndbk--${pageName}" title="반송 등록">
수기 반송 등록
</button>
<button type="button" class="btn btn-primary w-px-160" id="btnCreateWholSvbtc--${pageName}" title="전체 공시송달 등록">
전체 공시송달 등록
</button>
<button type="button" class="btn btn-primary w-px-160" id="btnCreateSlctnSndngLink--${pageName}" title="선택 통합우편 발송">
선택 통합우편 발송
</button>
<button type="button" class="btn btn-primary w-px-160" id="btnCreateWholSndngLink--${pageName}" title="전체 통합우편 발송">
전체 통합우편 발송
</button>
<button type="button" class="btn btn-primary w-px-160" id="btnCreateWholSvbtc--${pageName}" title="전체 공시송달 등록">
전체 공시송달 등록
</button>
</span>
</span>
</div>
<!-- / 업무 버튼 및 건수 표시 -->
</div> <!-- 업무 버튼 및 건수 표시 -->
<!-- DataTables(그리드) -->
<div class="card-datatable text-nowrap">
@ -208,7 +206,7 @@
<template id="${infoPrefix}Col--${pageName}">
<th class="cmn" style="width: 72px;">No.</th>
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
<th class="cmn" style="width: 160px;">업무구분</th>
<th class="cmn" style="width: 140px;">고지번호</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RG_NO', this.innerText, 'match', 'part');">등기번호</th>
@ -292,13 +290,13 @@
</table>
</div>
</div>
</div>
<!-- / DataTables(그리드) -->
</div>
</div> <!-- / Wrapper-list -->
</div> <!-- / Card -->
</div>
<!-- / Content -->
</div> <!-- DataTables(그리드) -->
</div> <!-- <div class="wrapper-list"> -->
</div> <!-- <div class="card"> -->
<!-- Page Body -->
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
<!-- Content -->
<div class="content-backdrop fade"></div>
</div>
@ -322,10 +320,8 @@
**************************************************************************/
$(document).ready(function() {
// pageObject
var $P = pageObject["${pageName}"];
let $P = pageObject["${pageName}"];
// URL
$P.PrefixUrl = "/sndb/sndb01";
// FormFields
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
@ -335,10 +331,10 @@
$P.control = new DatasetControl({
prefix: "sndbk"
, prefixName: "반송"
, infoSize : "xl"
, keymapper: info => info ? info.SNDNG_DTL_ID : ""
, dataGetter: obj => obj.${infoPrefix}List
, appendData: true
, infoSize: "xl"
, formats: {
DLVR_YMD: dateFormat
, DLVR_TM: timeFormat
@ -352,8 +348,8 @@
// $P.control 설정
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
$P.control.untilPageNum = 0; // 현재 페이지 번호
$P.control.tableRenderComplete = false; // dataTables 에 자료 추가 완료 여부
$P.control.beforeCurrent = null;
$P.control.tableRenderComplete = false; // dataTables 에 자료 추가 완료 여부
/**************************************************************************
* DatasetControl 이벤트
@ -378,7 +374,7 @@
$P.control.onCurrentChange = (item) => {
if (!item) return;
let key = item.data.CRDN_ID;
let key = item.data.SNDNG_DTL_ID;
$("#tbody--${pageName}").setCurrentRow(key);
};
@ -390,11 +386,11 @@
$("#tbody--${pageName} input[type='checkbox']").each(function() {
let checkbox = $(this);
checkbox.prop("checked", keys.includes(checkbox.val()));
});
$("#btnCreateSlctnSndngLink--${pageName}").prop("disabled", keys.length < 1); // 선택 대상 통합우편 발송 버튼
// 선택 대상 통합우편 발송 버튼
$("#btnCreateSlctnSndngLink--${pageName}").prop("disabled", keys.length < 1);
// DataTables(그리드) 전체 선택(checkbox)
if (keys.length < 1) {
@ -426,7 +422,7 @@
//
let replacer = (str, dataItem) => str
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("CRDN_ID") + "');")
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
@ -457,44 +453,14 @@
$P.control.load($P.control.query.pageNum + 1);
}
/**************************************************************************
* 사용자 함수(function)
**************************************************************************/
// callback 사용자 검색
$P.callbackFindUser = (userId, userNm) => {
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
}
// 사용자 검색
$P.getFindUser = () => {
let params = {
openerPageName : "${pageName}"
, callbackFuncName : "pageObject['${pageName}']['callbackFindUser']"
}
ajax.get({
url : wctx.url("/user/user02/010/main.do")
, data : params || {}
, success : resp => {
dialog.open({
id : "userDialog"
, title : "사용자 검색"
, content : resp
, size : "lg"
});
}
});
}
// 개별총정보 dialog
// DataTables에 더블 클릭시 개별총정보 dialog
$P.getTotalInfo = (crdnId) => {
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
let params = {
callControlName: "pageObject['${pageName}'].control"
, sggCd : $("#sggCd--${pageName}").val()
, taskSeCd : $("input[name=taskSeCd]:checked").val()
, sggCd: $P.control.dataset.getValue("SGG_CD")
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
, crdnId: crdnId
}
@ -512,8 +478,11 @@
});
}
/**************************************************************************
* 사용자 함수(function)
**************************************************************************/
// 검색 자료 재조회
$P.refreshList = () => {
$P.fnRefreshList = () => {
$P.control.untilPageNum = $P.control.query.pageNum;
$P.control.query.fetchSize = $P.control.defaultFetchSize * $P.control.query.pageNum;
$P.control.query.crdnIds = null;
@ -521,20 +490,46 @@
$P.control.load(1);
}
// 사용자검색 callback
$P.callbackFindUser = (userId, userNm) => {
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
}
// 수기 반송 등록
$P.getSndbkInfo = (params) => {
if (!params) return;
ajax.get({
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/210/info.do") // 등록
, data: params || {}
, success: resp => {
dialog.open({
id: $P.control.prefixed("Dialog--${pageName}")
, title: params.title
, content: resp
, size: "xxl"
, onClose: () => { }
// , onClose: () => { $P.fnRefreshList(); }
});
}
});
}
// 공시송달 등록
$P.getSvbtcInfo = (params) => {
if (!params) return;
ajax.get({
url : wctx.url("/" + params.taskSeCd + $P.PrefixUrl + "/260/info.do") // 등록
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/260/info.do") // 등록
, data: params || {}
, success: resp => {
dialog.open({
id : "svbtcDialog"
id: "svbtcDialog--${pageName}"
, title: params.title
, content: resp
, size: "md"
, onClose : () => { $P.refreshList(); }
, onClose: () => { $P.fnRefreshList(); }
});
}
});
@ -551,9 +546,7 @@
}
// 초기 기본 설정
$P.initForm();
// 기본 데이터 설정
$P.initData(taskSeCd);
$P.initForm(taskSeCd);
// 업무 구분별 설정
$P.setTask(taskSeCd);
@ -561,11 +554,34 @@
$P.control.dataset.clear();
}
// 사용자검색 버튼 클릭 이벤트
$P.fnGetFindUser = () => {
let params = {
openerPageName: "${pageName}"
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
}
ajax.get({
url: wctx.url("/user/user02/010/main.do")
, data: params || {}
, success: resp => {
dialog.open({
id: "userDialog"
, title: "사용자 검색"
, content: resp
, size: "lg"
, init: () => { setDialogZindex(); }
});
}
});
}
// 검색 버튼 이벤트
$P.fnSearchList = () => {
// 검색조건
$P.control.query = $P.formFields.get();
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
$P.control.query.sndngDtlSttsCd = "05"; // FIM050 - 05 반송
$P.control.query.rcpnRelNm1 = "무인배달"; // 13
$P.control.query.rcpnRelNm2 = "우편수취함"; // 14
@ -580,10 +596,9 @@
$P.fnExcel = () => {
if ($P.control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
conten : "검색된 자료가 없습니다."
, onOK: () => { }
});
return;
}
@ -595,46 +610,52 @@
$P.control.download();
}
// 사용자 조회 버튼 이벤트
$P.fnFindUser = () => {
$P.getFindUser();
}
// 수기 반송 등록 버튼 이벤트
$P.fnCreateSndbk = (title) => {
// 파라미터 설정
let params = $P.control.query; // 검색 조건
params.title = title; // 타이틀
params.callPurpose = "create"; // 호출 용도 (등록)
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
// 선택 통합우편 발송 버튼 이벤트
$P.fnCreateSlctnSndngLink = (title) => {
// 선택 자료
let selected = $P.control.dataset.getKeys("selected");
$P.getSndbkInfo(params);
}
if (selected.length < 1) return;
// 공시송달 등록 버튼 이벤트
$P.fnCreateWholSvbtc = (title) => {
if ($P.control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
return;
}
// 파라미터 설정
let params = $P.control.query; // 검색 조건
params.title = title; // 타이틀
params.callPurpose = "create"; // 호출 용도 (등록)
params.sndngDtlIds = selected.join(","); // 발송 상세 Ids
params.sggCd = $P.control.dataset.getValue("SGG_CD") // 시군구 코드
params.deptCd = $P.control.dataset.getValue("DEPT_CD") // 부서코드
params.taskSeCd = $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
params.sndngSeCd = $P.control.dataset.getValue("SNDNG_SE_CD") // 발송 구분 코드
params.tnocs = $P.control.dataset.getValue("TOT_CNT") // 총건수
$P.getSvbtcInfo(params);
}
// 전체 통합우편 발송 버튼 이벤트
$P.fnCreateWholSndngLink = (title) => {
if ($P.control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
// 선택 통합우편 발송 버튼 이벤트
$P.fnCreateSlctnSndngLink = (title) => {
// 선택 자료
let selected = $P.control.dataset.getKeys("selected");
return;
}
if (selected.length < 1) return;
// 파라미터 설정
let params = $P.control.query; // 검색 조건
params.title = title; // 타이틀
params.callPurpose = "create"; // 호출 용도 (등록)
params.sndngDtlIds = selected.join(","); // 발송 상세 Ids
params.sggCd = $P.control.dataset.getValue("SGG_CD") // 시군구 코드
params.deptCd = $P.control.dataset.getValue("DEPT_CD") // 부서코드
params.taskSeCd = $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
@ -642,14 +663,13 @@
params.tnocs = $P.control.dataset.getValue("TOT_CNT") // 총건수
}
// 공시송달 등록 버튼 이벤트
$P.fnCreateWholSvbtc = (title) => {
// 전체 통합우편 발송 버튼 이벤트
$P.fnCreateWholSndngLink = (title) => {
if ($P.control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
return;
}
@ -658,11 +678,10 @@
params.title = title; // 타이틀
params.callPurpose = "create"; // 호출 용도 (등록)
params.sggCd = $P.control.dataset.getValue("SGG_CD") // 시군구 코드
params.deptCd = $P.control.dataset.getValue("DEPT_CD") // 부서코드
params.taskSeCd = $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
params.sndngSeCd = $P.control.dataset.getValue("SNDNG_SE_CD") // 발송 구분 코드
params.tnocs = $P.control.dataset.getValue("TOT_CNT") // 총건수
$P.getSvbtcInfo(params);
}
/**************************************************************************
@ -674,7 +693,7 @@
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
$("#btnFindUser--${pageName}").on("click", () => $P.fnFindUser()); // 사용자 검색
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
$("#term--${pageName}").keypress(function(e) {
@ -696,17 +715,18 @@
});
});
// 선택 통합우편 발송 버튼 이벤트
// 업무 버튼 이벤트
$("#btnCreateSndbk--${pageName}").on("click", function() {
$P.fnCreateSndbk($(this).attr("title")); // 수기 반송 등록
});
$("#btnCreateWholSvbtc--${pageName}").on("click", function() {
$P.fnCreateWholSvbtc($(this).attr("title")); // 전체 공시송달 등록
});
$("#btnCreateSlctnSndngLink--${pageName}").on("click", function() {
$P.fnCreateSlctnSndngLink($(this).attr("title"));
$P.fnCreateSlctnSndngLink($(this).attr("title")); // 선택 통합우편 발송
});
// 전체 통합우편 발송 버튼 이벤트
$("#btnCreateWholSndngLink--${pageName}").on("click", function() {
$P.fnCreateWholSndngLink($(this).attr("title"));
});
// 전체 공시송달 등록 버튼 이벤트
$("#btnCreateWholSvbtc--${pageName}").on("click", function() {
$P.fnCreateWholSvbtc($(this).attr("title"));
$P.fnCreateWholSndngLink($(this).attr("title")); // 전체 통합우편 발송
});
// DataTables width 변경 조정
@ -717,7 +737,7 @@
}
// 초기 화면 설정
$P.initForm = () => {
$P.initForm = (taskSeCd) => {
// 화면 초기화
$("#frmSearch--${pageName}")[0].reset();
@ -734,40 +754,25 @@
$(this).prop("disabled", "true");
});
// 달력 초기화
initDatepicker("frmSearch--${pageName}");
$("#schDlvrYmdFrom--${pageName}").datepicker("setDate", new Date());
$("#schDlvrYmdTo--${pageName}").datepicker("setDate", new Date());
// 동적 검색
$("#byOutput--${pageName}").val("동적 검색");
// 사용자 이름
$("#schRgtrNm--${pageName}").prop("readonly", true);
}
// 기본 데이터 설정
$P.initData = (taskSeCd) => {
// 시군구 코드
$("#sggCd--${pageName}").val("${sggCd}");
// 업무 구분 코드
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true);
// 일자
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
$("#schDlvrYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
$("#schDlvrYmdTo--${pageName}").datepicker("setDate", new Date());
// 발송구분
$("#schSndngSeCd--${pageName}").val("02").prop("selected", true);
// 선택등기표시
$("#schChcRgIndct--${pageName}").prop("checked", true);
$("#schSndngSeCd--${pageName}").val("02").prop("selected", true); // 발송구분
$("#schChcRgIndct--${pageName}").prop("checked", true); // 선택등기표시
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
}
// 업무 구분별 설정
$P.setTask = (taskSeCd) => {
// 업무별 조회조건
let clsForTask = taskSeCd.toLowerCase();
// 업무구분에 따른 URL 설정
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/220/list.do"); // 검색
renderForTask("frmSearch--${pageName}", clsForTask);
// 업무별 조회조건
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
// 업무에 따른 위반 내용
let vltnCode = [];
@ -794,21 +799,13 @@
// 업무별 그리드 th
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
let cols = $(colContent).find("." + clsForTask + ",.cmn");
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
let colsOuterHTML = "";
cols.each(function() {
colsOuterHTML += this.outerHTML;
});
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
// URL 설정
$P.setURL(taskSeCd);
}
// 업무구분에 따른 URL 설정
$P.setURL = (taskSeCd) => {
$P.control.urls.load = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/220/list.do"); // 검색
}
/**************************************************************************

@ -2,7 +2,7 @@
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<!-- inner page html -->
<div class="content-wrapper">
<div class="content-pop">
<!-- Content -->
<div class="container flex-grow-1 px-0">
<c:set var="prefixName" scope="request">반송 정보</c:set>
@ -56,7 +56,7 @@
<!-- / 업무 버튼 표시 -->
</div> <!-- / Content <div class="container flex-grow-1 px-0"> -->
</div> <!-- / inner page html <div class="content-wrapper"> -->
</div> <!-- / inner page html <div class="content-pop"> -->
<script>
/**************************************************************************

@ -29,7 +29,7 @@
<!-- 검색 조건 영역 -->
<form id="frmSearch--${pageName}" name="frmSearch">
<!-- hidden -->
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
<!-- 메인 조건 -->
<div class="container-search">
@ -49,7 +49,7 @@
</div>
<!-- 공시송달 일자 -->
<div class="col-6">
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSvbtcYmdFrom--${pageName}">송달일자</label>
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSvbtcYmdFrom--${pageName}">공시송달일자</label>
<span class="form-search-linebox">
<input type="text" class="form-control form-date" id="schSvbtcYmdFrom--${pageName}" name="schSvbtcYmdFrom"
data-fmt-type="day" title="시작 날짜 선택" />
@ -314,7 +314,7 @@
, callPurpose: "view" // 호출 용도
, pageNum: 1 // 페이지 번호
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
, taskSeCd: $("input[name=taskSeCd]:checked").val() // 업무 구분 코드
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
, svbtcId: svbtcId // 공시송달 ID
}
@ -446,7 +446,7 @@
let selected = $P.control.dataset.getKeys("selected");
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params[$P.control.prefixed("Ids")] = selected.join(","); // 공시송달 IDs
params.delRsn = obj.reason; // 삭제 사유

@ -271,7 +271,6 @@
$P.renderList = (totalSize) => {
let ${infoPrefix}List = $P.control.dataset;
let empty = ${infoPrefix}List.empty;
let clsForTask = $("input[name=taskSeCd]:checked").val()
let trs = empty ?
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>

@ -23,13 +23,20 @@
<label for=tnocs" class="w-px-80 bg-lighter pe-2 col-form-label text-sm-end">총건수</label>
<input type="text" class="form-control w-px-80 text-end" id="tnocs" name="tnocs" data-map="TNOCS" readonly />
</div>
<!-- 일자 -->
<!-- 공시송달 일자 -->
<div class="col-md-12">
<label for="svbtcYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">공시송달일자</label>
<input type="text" class="form-control form-date" id="svbtcYmd--${pageName}" name="svbtcYmd" data-map="SVBTC_YMD"
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
<button type="button" class="bx bx-sm bx-calendar bg-white" id="btnSvbtcYmd--${pageName}"></button>
</div>
<!-- 공시송달 종료 일자 -->
<div class="col-md-12">
<label for="svbtcYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">공시송달종료일자</label>
<input type="text" class="form-control form-date" id="svbtcEndYmd--${pageName}" name="svbtcEndYmd" data-map="SVBTC_END_YMD"
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
<button type="button" class="bx bx-sm bx-calendar bg-white" id="btnSvbtcYmd--${pageName}"></button>
</div>
<!-- 문서 번호 -->
<div class="col-md-12">
<label for="docNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">문서번호</label>
@ -175,14 +182,11 @@
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
// 파리미터 설정
let params = $.extend({}, $P.mainQuery, $P.formFields.get()); // 객체를 합친다.
dialog.alert({
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
, init: () => { setDialogZindex(); }
, onOK: () => {
$P.control.save(params);
$P.control.save($P.formFields.get());
}
});
}

@ -417,7 +417,7 @@
params[$P.control.prefixed("Ids")] = selected.join(","); // Ids
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
params.taskSeCd = $("input[name=taskSeCd]:checked").val(); // 업무 구분 코드
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
params.delRsn = obj.reason; // 삭제 사유
$P.control.remove(params);

Loading…
Cancel
Save