diff --git a/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java b/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java
index 555a0c1c..ba877071 100644
--- a/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java
+++ b/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java
@@ -110,7 +110,7 @@ public class Levy02Bean extends AbstractComponent {
// 단속 ID로 단속, 감경 정보 조회
DataObject infoCrdnRduct = rductMapper.selectCrdnInfo(rduct.getCrdnId());
- // 부과제외 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
+ // 감경 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
if (!infoCrdnRduct.string("RDUCT_ID").equals("")) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("과태료 감경 정보가 이미 존재합니다.");
@@ -153,36 +153,44 @@ public class Levy02Bean extends AbstractComponent {
throw new RuntimeException("감경 등록 중 단속대장 금액 수정에 실패하였습니다.");
}
- // 부과(TB_LEVY) 대장을 수정 한다.
- Levy levy = new Levy();
+ // 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정 한다.
+ if (!infoCrdnRduct.string("LEVY_ID").equals("")) {
+ // 가산금이 존재하는 확인
+ if (infoCrdnRduct.number("LEVY_ADAMT").intValue() != 0 ) {
+ // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
+ throw new RuntimeException("감경 등록 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다.");
+ }
+
+ Levy levy = new Levy();
- levy.setLevyId(infoCrdnRduct.string("LEVY_ID")); // 부과 ID
- levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액
+ levy.setLevyId(infoCrdnRduct.string("LEVY_ID")); // 부과 ID
+ levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액
- // 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로..
- if (infoCrdnRduct.number("CRDN_STTS_CD").intValue() == 51) {
- levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
- } else {
- // 주정차위반, 전용차로위반 과태료
- if (infoCrdnRduct.string("TASK_SE_CD").equals("BPV") || infoCrdnRduct.string("TASK_SE_CD").equals("PVS")) {
- if (infoCrdnRduct.number("DUDT_YMD").intValue() >= infoCrdnRduct.number("TODAY").intValue()) {
- levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
+ // 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로..
+ if (infoCrdnRduct.number("CRDN_STTS_CD").intValue() == 51) {
+ levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
+ } else {
+ // 주정차위반, 전용차로위반 과태료
+ if (infoCrdnRduct.string("TASK_SE_CD").equals("BPV") || infoCrdnRduct.string("TASK_SE_CD").equals("PVS")) {
+ // 납기 일자 확인
+ if (infoCrdnRduct.number("DUDT_YMD").intValue() >= infoCrdnRduct.number("TODAY").intValue()) {
+ levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
+ } else {
+ levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
+ }
} else {
- levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
+ levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
}
- } else {
- levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
}
- }
-
- int sumAmt = levy.getLevyPcptax() - infoCrdnRduct.number("RCVMT_PCPTAX").intValue() - infoCrdnRduct.number("RDCAMT_PCPTAX").intValue();
- levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 - 수납 본세 - 감액 본세
+ int sumAmt = levy.getLevyPcptax() - infoCrdnRduct.number("RCVMT_PCPTAX").intValue() - infoCrdnRduct.number("RDCAMT_PCPTAX").intValue();
+ levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 - 수납 본세 - 감액 본세
- retSuccess = rductMapper.updateLevy(levy);
- if (!retSuccess) {
- // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
- throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다.");
+ retSuccess = rductMapper.updateLevy(levy);
+ if (!retSuccess) {
+ // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
+ throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다.");
+ }
}
return true;
@@ -207,7 +215,86 @@ public class Levy02Bean extends AbstractComponent {
*
*/
public boolean removeRduct(Rduct rduct) {
- return rductMapper.delete(rduct);
+ // 변수 선언
+ boolean retSuccess = false; // DB 처리 결과
+
+ // 감경(TB_RDUCT) 자료 조회
+
+
+ // 감경(TB_RDUCT) 대장을 삭제 한다.
+ retSuccess = rductMapper.delete(rduct);
+ if (!retSuccess) {
+ // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
+ throw new RuntimeException("감경 대장 삭제에 실패하였습니다.");
+ }
+
+ // 단속 자료 조회
+ DataObject infoCrdnRduct = rductMapper.selectCrdnInfo(rduct.getCrdnId());
+
+ // 과태료 금액 변경
+ int ffnlgAmt = 0; // 과태료 금액
+ int advntceAmt = 0; // 사전통지 금액
+
+ ffnlgAmt = infoCrdnRduct.number("FFNLG_CRDN_AMT").intValue(); // 과태료 단속 금액 - 감경 금액
+ advntceAmt = ffnlgAmt - (ffnlgAmt * infoCrdnRduct.number("ADVNTCE_RDUCT_RT").intValue() / 100); // 과태료 금액 - (과태료 금액 * 사전통지 감경 율 / 100)
+
+ // 단속(TB_CRDN) 대장을 수정 한다.
+ Crdn crdn = new Crdn();
+
+ crdn.setCrdnId(infoCrdnRduct.string("CRDN_ID")); // 단속 ID
+ crdn.setFfnlgRductRt("0"); // 과태료 감경 율
+ crdn.setFfnlgAmt(ffnlgAmt); // 과태료 금액
+ crdn.setAdvntceAmt(advntceAmt); // 사전통지 금액
+
+ retSuccess = rductMapper.updateCrdn(crdn);
+ if (!retSuccess) {
+ // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
+ throw new RuntimeException("감경 취소 중 단속대장 금액 수정에 실패하였습니다.");
+ }
+
+ // 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정 한다.
+ if (!infoCrdnRduct.string("LEVY_ID").equals("")) {
+ // 가산금이 존재하는 확인
+ if (infoCrdnRduct.number("LEVY_ADAMT").intValue() != 0 ) {
+ // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
+ throw new RuntimeException("감경 취소 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다.");
+ }
+
+ Levy levy = new Levy();
+
+ levy.setLevyId(infoCrdnRduct.string("LEVY_ID")); // 부과 ID
+ levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액
+
+ // 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로..
+ if (infoCrdnRduct.number("CRDN_STTS_CD").intValue() == 51) {
+ levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
+ } else {
+ // 주정차위반, 전용차로위반 과태료
+ if (infoCrdnRduct.string("TASK_SE_CD").equals("BPV") || infoCrdnRduct.string("TASK_SE_CD").equals("PVS")) {
+ // 납기 일자 확인
+ if (infoCrdnRduct.number("DUDT_YMD").intValue() >= infoCrdnRduct.number("TODAY").intValue()) {
+ levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
+ } else {
+ levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
+ }
+ } else {
+ levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
+ }
+ }
+
+ int sumAmt = levy.getLevyPcptax() + infoCrdnRduct.number("LEVY_ADAMT").intValue() + infoCrdnRduct.number("INSPY_INT").intValue()
+ - infoCrdnRduct.number("RCVMT_PCPTAX").intValue() - infoCrdnRduct.number("RCVMT_ADAMT").intValue()
+ - infoCrdnRduct.number("RDCAMT_PCPTAX").intValue() - infoCrdnRduct.number("RDCAMT_ADAMT").intValue();
+ levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 + 부과 가산금 + 분납 이자 - 수납 본세 - 수납 가산금 - 감액 본세 - 감액 가산금
+
+ retSuccess = rductMapper.updateLevy(levy);
+ if (!retSuccess) {
+ // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
+ throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다.");
+ }
+ }
+
+ return true;
}
}
diff --git a/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml b/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml
index f2afe9f0..cf47746b 100644
--- a/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml
@@ -428,7 +428,7 @@
FROM TB_OPNN_SBMSN
WHERE RCPT_NO LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%') ) AS NEW_RCPT_NO /* 신규 접수 번호 */
, AS TODAY /* 오늘 일자 */
- FROM TB_CRDN C
+ FROM TB_CRDN C
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_OPNN_SBMSN OS ON (C.CRDN_ID = OS.CRDN_ID AND OS.DEL_YN = 'N')
WHERE C.CRDN_ID = #{crdnId} /* 단속 ID */
diff --git a/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml b/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml
index 8653f10f..e0c75d3a 100644
--- a/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml
@@ -54,13 +54,15 @@
, C.MINUS_AMT
, C.ADTN_AMT
, C.RCVMT_AMT
- , C.CRDN_STTS_CD /* 처리상태 */
+ , C.CRDN_STTS_CD /* 단속 상태 코드 */
+ , (SELECT FN_GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, P.RTPYR_NO /* 납부자 번호 */
, P.RTPYR_NM /* 납부자 명 */
+ , L.LEVY_ID /* 부과 ID */
FROM TB_RDUCT R
INNER JOIN TB_CRDN C ON (R.CRDN_ID = C.CRDN_ID)
- INNER JOIN TB_TASK_INFO TI ON (C.SGG_CD = TI.SGG_CD AND C.TASK_SE_CD = TI.TASK_SE_CD)
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
+ LEFT OUTER JOIN TB_LEVY L ON (C.LEVY_ID = L.LEVY_ID)
/* 단속 대장 과태료 감경 금액 수정(rductMapper.updateCrdnRduct) */
diff --git a/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp b/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp
index a30b8c28..cdfb10c8 100644
--- a/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp
+++ b/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp
@@ -163,6 +163,14 @@
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
+ // 감경 사유 확인
+ let rductRsn = $("#rductRsnCd--${pageName}").val();
+ if (rductRsn == "00") {
+ dialog.alert("다른 감경 사유를 선택하여 주시기 바랍니다.");
+
+ return;
+ }
+
dialog.alert({
content : "현재 " + ${pageName}Control.prefixName + " 정보를 저장하시겠습니까?"
, onOK : () => {