|
|
|
|
@ -4,6 +4,87 @@
|
|
|
|
|
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
|
|
|
|
<%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %>
|
|
|
|
|
|
|
|
|
|
<!--
|
|
|
|
|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
|
|
|
|
|
■ 부과예고 이행강제금 산출조사서 계산 로직 상세 명세서 (VO 컬럼명 기준)
|
|
|
|
|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
|
|
|
|
|
|
|
|
|
|
1. 건축물과세시가(bdstTxtnMprc) 계산
|
|
|
|
|
- 공식: bldgCrtrMprcAmt × strctIdx × usgIdx × pstnIdx × elpsYrRdvlrt × bscsCstrnRt
|
|
|
|
|
- 설명: 건물신축가격기준액 × 구조지수 × 용도지수 × 위치지수 × 경과년수별잔가율 × 기초공사율
|
|
|
|
|
- 반올림: 소수점 없이 반올림 (RoundingMode.HALF_UP)
|
|
|
|
|
- 처리위치: CrdnLevyPrvntcController.calculateTaxableMarketPrice()
|
|
|
|
|
|
|
|
|
|
2. 시가표준액(mprcStdAmt) 계산
|
|
|
|
|
- 공식: Math.floor(bdstTxtnMprc / 1000) × 1000
|
|
|
|
|
- 설명: 건축물과세시가에서 1,000원 미만 절사
|
|
|
|
|
- 처리위치: JavaScript calculateAuto()
|
|
|
|
|
|
|
|
|
|
3. 가감산시행령률(adsbmtnEnfcRt) 계산
|
|
|
|
|
- 기본값: 100%
|
|
|
|
|
- 가산 적용 시: 100 + adtnRt (가산율)
|
|
|
|
|
- 감산 적용 시: 100 - sbtrRt (감산율)
|
|
|
|
|
- 가감산율 범위: 0 ≤ rate ≤ 100
|
|
|
|
|
- 처리위치: JavaScript 팝업을 통한 수동 설정
|
|
|
|
|
|
|
|
|
|
4. 산정률(cmpttnRt) / 산정률 비율값(cmpttnRtRate)
|
|
|
|
|
- 표시용 값(cmpttnRt): 행위유형별 고정값 (예: 40.00%)
|
|
|
|
|
- 계산용 값(cmpttnRtRate): 소수점 비율 (예: 0.40)
|
|
|
|
|
- 변환: cmpttnRtRate = cmpttnRt ÷ 100
|
|
|
|
|
- 데이터 출처: 행위정보에서 자동 설정
|
|
|
|
|
|
|
|
|
|
5. 산정률2(cmpttnRt2) / 산정률2 비율값(cmpttnRt2Rate)
|
|
|
|
|
- 표시용 값(cmpttnRt2): 위반사항별 값 (예: 50.00%)
|
|
|
|
|
- 계산용 값(cmpttnRt2Rate): 소수점 비율 (예: 0.50)
|
|
|
|
|
- 변환: cmpttnRt2Rate = cmpttnRt2 ÷ 100
|
|
|
|
|
- 선택: 담당자가 드롭다운에서 선택
|
|
|
|
|
|
|
|
|
|
6. 산정액(cmpttnAmt) 계산
|
|
|
|
|
- 공식: Math.floor(mprcStdAmt × vltnArea × (adsbmtnEnfcRt ÷ 100) × cmpttnRtRate × cmpttnRt2Rate)
|
|
|
|
|
- 설명: 시가표준액 × 위반면적 × 가감산시행령률(%) × 산정률(비율) × 산정률2(비율)
|
|
|
|
|
- 반올림: 소수점 버림 (Math.floor)
|
|
|
|
|
- 처리위치: JavaScript calculateLevyAmount()
|
|
|
|
|
|
|
|
|
|
7. 부과총액(levyWholAmt) 계산
|
|
|
|
|
- 공식: Math.floor(cmpttnAmt ÷ 10) × 10
|
|
|
|
|
- 설명: 산정액에서 1의 자리 절사 (10원 단위 버림)
|
|
|
|
|
- 예시: 1,234,567원 → 1,234,560원
|
|
|
|
|
- 처리위치: JavaScript calculateLevyAmount()
|
|
|
|
|
|
|
|
|
|
8. 이행강제금(impltCpsrAmt) 계산
|
|
|
|
|
- 공식: SUM(levyWholAmt) WHERE crdnYr = ? AND crdnNo = ? AND impltTaskSeCd = ?
|
|
|
|
|
- 설명: 해당 단속의 모든 행위정보별 부과총액 합계
|
|
|
|
|
- 조건: 모든 행위정보에 대한 부과정보가 등록된 경우에만 계산
|
|
|
|
|
- 처리위치: CrdnLevyPrvntcServiceImpl.updateImpltCpsrAmt()
|
|
|
|
|
|
|
|
|
|
■ 주요 VO 컬럼 설명
|
|
|
|
|
- bldgCrtrMprcAmt: 건물신축가격기준액 (BigDecimal)
|
|
|
|
|
- strctIdx: 구조지수 (BigDecimal)
|
|
|
|
|
- usgIdx: 용도지수 (BigDecimal)
|
|
|
|
|
- pstnIdx: 위치지수 (BigDecimal)
|
|
|
|
|
- elpsYrRdvlrt: 경과년수별잔가율 (BigDecimal)
|
|
|
|
|
- bscsCstrnRt: 기초공사율 (BigDecimal)
|
|
|
|
|
- bdstTxtnMprc: 건축물과세시가 (BigDecimal)
|
|
|
|
|
- mprcStdAmt: 시가표준액 (BigDecimal)
|
|
|
|
|
- vltnArea: 위반면적 (BigDecimal)
|
|
|
|
|
- adsbmtnEnfcRt: 가감산시행령률 (BigDecimal)
|
|
|
|
|
- cmpttnRt: 산정률 (BigDecimal)
|
|
|
|
|
- cmpttnRt2: 산정률2 (BigDecimal)
|
|
|
|
|
- cmpttnRtRate: 산정률 비율값 (BigDecimal)
|
|
|
|
|
- cmpttnRt2Rate: 산정률2 비율값 (BigDecimal)
|
|
|
|
|
- cmpttnAmt: 산정액 (BigDecimal)
|
|
|
|
|
- levyWholAmt: 부과총액 (BigDecimal)
|
|
|
|
|
- impltCpsrAmt: 이행강제금 (BigDecimal)
|
|
|
|
|
|
|
|
|
|
■ 계산 처리 흐름
|
|
|
|
|
1단계: 서버 API로 건축물과세시가 계산 (CrdnLevyPrvntcController)
|
|
|
|
|
2단계: JavaScript로 시가표준액 자동 설정 (calculateAuto)
|
|
|
|
|
3단계: JavaScript로 산정액/부과총액 계산 (calculateLevyAmount)
|
|
|
|
|
4단계: 서버에서 모든 행위별 부과총액 합산하여 이행강제금 계산 (Service Layer)
|
|
|
|
|
|
|
|
|
|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
<!-- 부과예고 관리 팝업 -->
|
|
|
|
|
<div class="popup_wrap">
|
|
|
|
|
<div class="popup_inner">
|
|
|
|
|
@ -272,17 +353,36 @@
|
|
|
|
|
(function(window, $) {
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 부과예고 이행강제금 산출조사서 팝업 관리 네임스페이스
|
|
|
|
|
* 중요로직: 부과예고 관련 행위정보 목록 조회, 이행강제금 산출 및 저장 기능을 제공합니다.
|
|
|
|
|
*/
|
|
|
|
|
var LevyPrvntcPopup = {
|
|
|
|
|
// 팝업 모드 및 기본 정보
|
|
|
|
|
|
|
|
|
|
// ========================================
|
|
|
|
|
// 1. 기본 속성 및 상태 관리
|
|
|
|
|
// ========================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 팝업 모드 및 기본 정보
|
|
|
|
|
*/
|
|
|
|
|
mode: '${mode}',
|
|
|
|
|
crdnYr: '${crdnYr}',
|
|
|
|
|
crdnNo: '${crdnNo}',
|
|
|
|
|
impltTaskSeCd: '${impltTaskSeCd}',
|
|
|
|
|
impltTaskSeCdNm: '${impltTaskSeCdNm}',
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 선택된 데이터 관리
|
|
|
|
|
*/
|
|
|
|
|
levyInfoIdSelect: null,
|
|
|
|
|
actInfoIdSelect: null,
|
|
|
|
|
isAllLevyInfoCompleted: false,
|
|
|
|
|
|
|
|
|
|
// ========================================
|
|
|
|
|
// 2. 그리드 관리 객체
|
|
|
|
|
// ========================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 그리드 관련 객체
|
|
|
|
|
*/
|
|
|
|
|
@ -294,6 +394,7 @@
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 그리드 설정 초기화
|
|
|
|
|
* 중요로직: TOAST UI Grid 초기화를 위한 컬럼, 데이터소스, 페이징 등 전체 설정을 구성합니다.
|
|
|
|
|
* @returns {Object} 그리드 설정 객체
|
|
|
|
|
*/
|
|
|
|
|
initConfig: function() {
|
|
|
|
|
@ -318,6 +419,7 @@
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 그리드 컬럼 정의
|
|
|
|
|
* 중요로직: 부과예고 행위정보 그리드의 컬럼 구조를 정의합니다. 이행강제금산출 여부, 행위정보, 위치정보, 산정률 등을 표시합니다.
|
|
|
|
|
* @returns {Array} 그리드 컬럼 배열
|
|
|
|
|
*/
|
|
|
|
|
getGridColumns: function() {
|
|
|
|
|
@ -384,6 +486,7 @@
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 데이터 소스 생성
|
|
|
|
|
* 중요로직: 그리드 데이터 로딩을 위한 AJAX 설정 및 파라미터 직렬화 로직을 구성합니다.
|
|
|
|
|
* @returns {Object} 데이터 소스 설정 객체
|
|
|
|
|
*/
|
|
|
|
|
createDataSource: function() {
|
|
|
|
|
@ -747,8 +850,13 @@
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// ========================================
|
|
|
|
|
// 3. 초기화 및 이벤트 관리
|
|
|
|
|
// ========================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 초기화
|
|
|
|
|
* 팝업 초기화
|
|
|
|
|
* 중요로직: 그리드 생성, 이벤트 바인딩, 탭 설정 등 팝업의 전체 초기화를 수행합니다.
|
|
|
|
|
*/
|
|
|
|
|
init: function() {
|
|
|
|
|
// 그리드 생성
|
|
|
|
|
@ -760,7 +868,8 @@
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 이벤트 초기화
|
|
|
|
|
* 이벤트 바인딩
|
|
|
|
|
* 중요로직: 버튼 클릭, 탭 전환, 폼 필드 변경 등 모든 UI 이벤트를 바인딩합니다.
|
|
|
|
|
*/
|
|
|
|
|
eventBindEvents: function() {
|
|
|
|
|
var self = this;
|
|
|
|
|
@ -866,9 +975,13 @@
|
|
|
|
|
$(document).on('change', calculationInputs, calculateAuto);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// ========================================
|
|
|
|
|
// 4. 탭 및 팝업 관리
|
|
|
|
|
// ========================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 팝업 취소 처리
|
|
|
|
|
* 중요한 로직 주석: 팝업창을 닫는 기능을 제공합니다.
|
|
|
|
|
* 중요로직: 팝업창을 닫는 기능을 제공합니다.
|
|
|
|
|
*/
|
|
|
|
|
cancel: function () {
|
|
|
|
|
window.close();
|
|
|
|
|
@ -876,6 +989,7 @@
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 탭 전환 처리
|
|
|
|
|
* 중요로직: 이행강제금 산출조사서와 이행정보 탭 간 전환을 처리하며, 완료 상태에 따라 접근을 제어합니다.
|
|
|
|
|
* @param {string} tabType - 전환할 탭 타입 ('levy' 또는 'implt')
|
|
|
|
|
*/
|
|
|
|
|
switchTab: function(tabType) {
|
|
|
|
|
@ -916,6 +1030,11 @@
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 가감산 팝업 열기
|
|
|
|
|
* 중요로직: 가산 또는 감산 설정을 위한 팝업을 열어 관련 정보를 설정합니다.
|
|
|
|
|
* @param {string} type - 가감산 타입 ('add' 또는 'minus')
|
|
|
|
|
*/
|
|
|
|
|
openAddMinusPopup: function (type) {
|
|
|
|
|
var adsbmtnRtCd = "";
|
|
|
|
|
if( type === '1' ){
|
|
|
|
|
@ -932,9 +1051,13 @@
|
|
|
|
|
openPopup(url, 800, 700, 'LevyAddMinusPopup');
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// ========================================
|
|
|
|
|
// 5. 데이터 처리 (CRUD)
|
|
|
|
|
// ========================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 저장
|
|
|
|
|
* 중요한 로직 주석: 폼 데이터와 그리드에서 선택된 이행 대상자 정보를 수집하여 저장 요청을 보냅니다.
|
|
|
|
|
* 부과정보 저장
|
|
|
|
|
* 중요로직: 폼 데이터와 그리드에서 선택된 행위정보를 수집하여 부과정보 저장 요청을 처리합니다.
|
|
|
|
|
*/
|
|
|
|
|
save: function() {
|
|
|
|
|
var self = this;
|
|
|
|
|
@ -967,7 +1090,8 @@
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 폼 데이터 수집
|
|
|
|
|
* 중요한 로직 주석: 부과예고 등록/수정에 필요한 폼 데이터를 수집합니다.
|
|
|
|
|
* 중요로직: 부과예고 등록/수정에 필요한 모든 폼 데이터를 수집하여 객체로 반환합니다.
|
|
|
|
|
* @returns {Object} 수집된 폼 데이터 객체
|
|
|
|
|
*/
|
|
|
|
|
collectFormData: function() {
|
|
|
|
|
return {
|
|
|
|
|
@ -1012,6 +1136,8 @@
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 폼 유효성 검증
|
|
|
|
|
* 중요로직: 필수 입력 필드 및 데이터 유효성을 검증하여 저장 가능 여부를 판단합니다.
|
|
|
|
|
* @returns {boolean} 유효성 검증 결과
|
|
|
|
|
*/
|
|
|
|
|
validateForm: function() {
|
|
|
|
|
// 필수 필드 검증
|
|
|
|
|
@ -1043,8 +1169,8 @@
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 저장
|
|
|
|
|
* 중요한 로직 주석: 폼 데이터와 그리드에서 선택된 이행 대상자 정보를 수집하여 저장 요청을 보냅니다.
|
|
|
|
|
* 부과정보 삭제
|
|
|
|
|
* 중요로직: 선택된 부과정보를 삭제하고 관련 데이터를 초기화합니다.
|
|
|
|
|
*/
|
|
|
|
|
del: function() {
|
|
|
|
|
var self = this;
|
|
|
|
|
@ -1075,11 +1201,16 @@
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// ========================================
|
|
|
|
|
// 6. 계산 관련 유틸리티 함수들
|
|
|
|
|
// ========================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 중요로직: 이행강제금 산정액 및 부과총액 자동 계산
|
|
|
|
|
* @description 시가표준액, 위반면적, 가감산시행령률, 산정률, 산정률2가 모두 입력되었을 때 산정액과 부과총액을 자동으로 계산합니다.
|
|
|
|
|
* - 산정액 = 시가표준액 * 위반면적 * (가감산시행령률 / 100) * 산정률(비율) * 산정률2(비율)
|
|
|
|
|
* - 부과총액 = 산정액의 1의 자리 절사 (10원 단위 버림)
|
|
|
|
|
* 이행강제금 산정액 및 부과총액 계산
|
|
|
|
|
* 중요로직: 시가표준액, 위반면적, 가감산시행령률, 산정률, 산정률2가 모두 입력되었을 때 산정액과 부과총액을 자동으로 계산합니다.
|
|
|
|
|
* @description
|
|
|
|
|
* - 산정액 = 시가표준액 * 위반면적 * (가감산시행령률 / 100) * 산정률(비율) * 산정률2(비율)
|
|
|
|
|
* - 부과총액 = 산정액의 1의 자리 절사 (10원 단위 버림)
|
|
|
|
|
*/
|
|
|
|
|
function calculateLevyAmount() {
|
|
|
|
|
var standardMarketPrice = parseFloat($('#standardMarketPrice_top').inputmask('unmaskedvalue')) || 0;
|
|
|
|
|
@ -1118,10 +1249,11 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 자동 계산 (서버 API 호출)
|
|
|
|
|
* @description 각 항목의 값을 서버로 보내 건축물과세시가를 계산하고, 그 결과를 받아 시가표준액을 계산합니다.
|
|
|
|
|
* - 건축물과세시가 = 서버 API를 통해 계산
|
|
|
|
|
* - 시가표준액 = 건축물과세시가에서 1,000원 미만 절사
|
|
|
|
|
* 건축물과세시가 자동 계산 (서버 API 호출)
|
|
|
|
|
* 중요로직: 각 항목의 값을 서버로 보내 건축물과세시가를 계산하고, 그 결과를 받아 시가표준액을 계산합니다.
|
|
|
|
|
* @description
|
|
|
|
|
* - 건축물과세시가 = 서버 API를 통해 계산
|
|
|
|
|
* - 시가표준액 = 건축물과세시가에서 1,000원 미만 절사
|
|
|
|
|
*/
|
|
|
|
|
function calculateAuto() {
|
|
|
|
|
var bldgNewPrcCrtrAmt = $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0'; // 건물기준시가액
|
|
|
|
|
@ -1206,7 +1338,14 @@
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 초기화 실행
|
|
|
|
|
// ========================================
|
|
|
|
|
// 7. 초기화 실행
|
|
|
|
|
// ========================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* DOM Ready 이벤트
|
|
|
|
|
* 중요로직: 페이지 로드 완료 후 LevyPrvntcPopup 객체를 초기화합니다.
|
|
|
|
|
*/
|
|
|
|
|
$(document).ready(function() {
|
|
|
|
|
LevyPrvntcPopup.init();
|
|
|
|
|
});
|
|
|
|
|
|