diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml index dbe32bc..fe570e4 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml @@ -335,7 +335,7 @@ UPDATE tb_levy_info SET DEL_YN = 'Y', DEL_DT = NOW(), - DLTR = #{userId} + DLTR = #{dltr} WHERE LEVY_INFO_ID = #{levyInfoId} diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp index 20f0f5d..1fb9d30 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp @@ -722,64 +722,64 @@ $('#vltnArea').val(existingData.vltnArea || '').trigger('focus'); // 산정률1 설정 (행위유형) - $('#cmpttnRtDisplay').val((existingData.cmpttnRt || '') + ' %'); - $('#cmpttnRtCd').val(existingData.cmpttnRtCd || ''); - $('#cmpttnRt').val(existingData.cmpttnRt || ''); + $('#cmpttnRtDisplay').val((existingData.cmpttnRt || '') + ' %'); // 산정률 표시 필드 (퍼센트 포함) + $('#cmpttnRtCd').val(existingData.cmpttnRtCd || ''); // 산정률 코드 설정 + $('#cmpttnRt').val(existingData.cmpttnRt || ''); // 산정률 값 설정 $('#cmpttnRtRate').val(existingData.cmpttnRtRate || ''); // 계산용 비율값 // 기초공사구분 및 비율 - $('#bscsCstrnSeCd').val(existingData.bscsCstrnSeCd || ''); - $('#bscsCstrnRt').val(existingData.bscsCstrnRt || ''); + $('#bscsCstrnSeCd').val(existingData.bscsCstrnSeCd || ''); // 기초공사구분 코드 설정 + $('#bscsCstrnRt').val(existingData.bscsCstrnRt || ''); // 기초공사율 값 설정 // 건물기준시가액 - $('#bldgNewPrcCrtrAmtNo').val(existingData.bldgNewPrcCrtrAmtNo || ''); + $('#bldgNewPrcCrtrAmtNo').val(existingData.bldgNewPrcCrtrAmtNo || ''); // 건물기준시가액 번호 설정 $('#bldgNewPrcCrtrAmtDisplay').val(existingData.bldgNewPrcCrtrAmtDisplay || ''); // 건축물용도명 - $('#bldgNewPrcCrtrAmt').val(existingData.bldgCrtrMprcAmt || '').trigger('focus'); + $('#bldgNewPrcCrtrAmt').val(existingData.bldgCrtrMprcAmt || '').trigger('focus'); // 건물기준시가액 값 설정 // 구조지수 - $('#strctIdxCd').val(existingData.strctIdxCd || ''); + $('#strctIdxCd').val(existingData.strctIdxCd || ''); // 구조지수 코드 설정 $('#strctIdx_nm').val(existingData.strctIdxCdNm || ''); // 구조지수명 - $('#strctIdx').val(existingData.strctIdx || ''); + $('#strctIdx').val(existingData.strctIdx || ''); // 구조지수 값 설정 // 용도지수 - $('#usgIdxCd').val(existingData.usgIdxCd || ''); + $('#usgIdxCd').val(existingData.usgIdxCd || ''); // 용도지수 코드 설정 $('#usgIdx_nm').val(existingData.usgIdxCdNm || ''); // 용도지수명 - $('#usgIdx').val(existingData.usgIdx || ''); + $('#usgIdx').val(existingData.usgIdx || ''); // 용도지수 값 설정 // 위치지수 - $('#pstnIdxNo').val(existingData.pstnIdxNo || ''); + $('#pstnIdxNo').val(existingData.pstnIdxNo || ''); // 위치지수 번호 설정 $('#pstnIdx_nm').val(existingData.oalp || '').trigger('focus').trigger('change'); // 공시지가 - $('#pstnIdx').val(existingData.pstnIdx || ''); + $('#pstnIdx').val(existingData.pstnIdx || ''); // 위치지수 값 설정 // 경과년수별잔가율 $('#elpsYrRdvlrt_yr').val((existingData.elpsYrRdvlrtYr || '') + ' 년'); // 행위시작년도 - $('#elpsYrRdvlrt').val(existingData.elpsYrRdvlrt || ''); + $('#elpsYrRdvlrt').val(existingData.elpsYrRdvlrt || ''); // 경과년수별잔가율 값 설정 // 산정률2 - $('#cmpttnRt2Cd').val(existingData.cmpttnRt2Cd || ''); - $('#cmpttnRt2').val(existingData.cmpttnRt2 || ''); - $('#cmpttnRt2Display').val((existingData.cmpttnRt2 || '') + ' %'); + $('#cmpttnRt2Cd').val(existingData.cmpttnRt2Cd || ''); // 산정률2 코드 설정 + $('#cmpttnRt2').val(existingData.cmpttnRt2 || ''); // 산정률2 값 설정 + $('#cmpttnRt2Display').val((existingData.cmpttnRt2 || '') + ' %'); // 산정률2 표시 필드 (퍼센트 포함) $('#cmpttnRt2Rate').val(existingData.cmpttnRt2Rate || ''); // 계산용 비율값 // 가감산 정보 - $('#adtnRtCd').val(existingData.adtnRtCd || ''); - $('#adtnRt').val(existingData.adtnRt || ''); + $('#adtnRtCd').val(existingData.adtnRtCd || ''); // 가산율 코드 설정 + $('#adtnRt').val(existingData.adtnRt || ''); // 가산율 값 설정 $('#adtnRtRate').val(existingData.adtnRtRate || ''); // 계산용 비율값 - $('#sbtrRtCd').val(existingData.sbtrRtCd || ''); - $('#sbtrRt').val(existingData.sbtrRt || ''); + $('#sbtrRtCd').val(existingData.sbtrRtCd || ''); // 감산율 코드 설정 + $('#sbtrRt').val(existingData.sbtrRt || ''); // 감산율 값 설정 $('#sbtrRtRate').val(existingData.sbtrRtRate || ''); // 계산용 비율값 // 가감산시행령률 - $('#adsbmtnEnfcRt').val(existingData.adsbmtnEnfcRt || '100'); - $('#adsbmtnEnfcRtDisplay').val((existingData.adsbmtnEnfcRt || '100') + ' %'); + $('#adsbmtnEnfcRt').val(existingData.adsbmtnEnfcRt || '100'); // 가감산시행령률 값 설정 + $('#adsbmtnEnfcRtDisplay').val((existingData.adsbmtnEnfcRt || '100') + ' %'); // 가감산시행령률 표시 필드 (퍼센트 포함) // 산정액 및 부과총액 - $('#cmpttnAmt').val(existingData.cmpttnAmt || '').trigger('focus'); - $('#levyWholAmt').val(existingData.levyWholAmt || ''); + $('#cmpttnAmt').val(existingData.cmpttnAmt || '').trigger('focus'); // 산정액 값 설정 + $('#levyWholAmt').val(existingData.levyWholAmt || ''); // 부과총액 값 설정 $('#levyWholAmtDisplay').text((existingData.levyWholAmt ? Number(existingData.levyWholAmt).toLocaleString() : '0') + ' 원'); // 기존 데이터 로딩 시 계산하기 버튼 숨김 (이미 계산된 결과가 있으므로) - hideCalculateButton(); + LevyPrvntcPopup.hideCalculateButton(); // 기존 부과정보 로드 시 계산하기 버튼 숨김 // 시가표준액 $('#standardMarketPrice').val(existingData.mprcStdAmt || '').trigger('focus'); @@ -825,10 +825,10 @@ $('#vltnArea').val(vltnArea).trigger('focus').trigger('change'); // 위반면적, change 이벤트 트리거 // 행위유형에 따른 산정률1 설정 - $('#cmpttnRtDisplay').val(rowData.actCmpttnRt+ ' %'); - $('#cmpttnRtCd').val(rowData.actTypeCd); - $('#cmpttnRt').val(rowData.actCmpttnRt); - $('#cmpttnRtRate').val(rowData.actCmpttnRtRate); + $('#cmpttnRtDisplay').val(rowData.actCmpttnRt+ ' %'); // 산정률 표시 필드 (퍼센트 포함) + $('#cmpttnRtCd').val(rowData.actTypeCd); // 산정률 코드 설정 + $('#cmpttnRt').val(rowData.actCmpttnRt); // 산정률 값 설정 + $('#cmpttnRtRate').val(rowData.actCmpttnRtRate); // 산정률 계산용 비율값 설정 $('#bscsCstrnRt').val(''); // 기초공사율 $('#bscsCstrnSeCd').val(''); // 기초공사구분 @@ -865,7 +865,7 @@ $('#bscsCstrnSeCd').trigger('change'); // 기초공사구분 변경 이벤트 트리거 // 계산하기 버튼 표시 (값이 변경된 경우) - showCalculateButton(); + LevyPrvntcPopup.showCalculateButton(); // 신규 행위정보 선택 시 계산하기 버튼 표시 }; @@ -936,36 +936,36 @@ }); $('#bscsCstrnSeCd').on('change', function () { // 기초공사구분 변경 시 - var selectedValue = $(this).val(); - var rate = ''; + var selectedValue = $(this).val(); // 선택된 기초공사구분 값 가져오기 + var rate = ''; // 기초공사율 값 저장 변수 // 먼저 기존 부과정보에서 온 hidden 값들 확인 - var bscsCstrnYRate = $('#bscsCstrnYBdstCmpttnRt').val(); - var bscsCstrnNRate = $('#bscsCstrnNBdstCmpttnRt').val(); - var dupEtbldgRate = $('#dupEtbldgBdstCmpttnRt').val(); + var bscsCstrnYRate = $('#bscsCstrnYBdstCmpttnRt').val(); // 기초공사Y건축물산정비율 값 + var bscsCstrnNRate = $('#bscsCstrnNBdstCmpttnRt').val(); // 기초공사N건축물산정비율 값 + var dupEtbldgRate = $('#dupEtbldgBdstCmpttnRt').val(); // 복측증축건축물산정비율 값 // 기존 부과정보에서 온 값이 있으면 사용, 없으면 그리드에서 조회 if (bscsCstrnYRate || bscsCstrnNRate || dupEtbldgRate) { // 기존 부과정보 기준 비율 사용 - if (selectedValue === '1') { - rate = bscsCstrnYRate || ''; - } else if (selectedValue === '2') { - rate = bscsCstrnNRate || ''; - } else if (selectedValue === '3') { - rate = dupEtbldgRate || ''; + if (selectedValue === '1') { // 기초공사Y인 경우 + rate = bscsCstrnYRate || ''; // 기초공사Y건축물산정비율 사용 + } else if (selectedValue === '2') { // 기초공사N인 경우 + rate = bscsCstrnNRate || ''; // 기초공사N건축물산정비율 사용 + } else if (selectedValue === '3') { // 복측증축인 경우 + rate = dupEtbldgRate || ''; // 복측증축건축물산정비율 사용 } } else { // 그리드에서 현재 선택된 행 데이터 사용 - var focusedCell = self.grid.instance.getFocusedCell(); + var focusedCell = self.grid.instance.getFocusedCell(); // 현재 포커스된 셀 정보 가져오기 if (focusedCell && focusedCell.rowKey !== null) { - var rowData = self.grid.instance.getRow(focusedCell.rowKey); + var rowData = self.grid.instance.getRow(focusedCell.rowKey); // 해당 행의 데이터 가져오기 if (rowData) { - if (selectedValue === '1') { - rate = rowData.bscsCstrnYBdstCmpttnRt || ''; - } else if (selectedValue === '2') { - rate = rowData.bscsCstrnNBdstCmpttnRt || ''; - } else if (selectedValue === '3') { - rate = rowData.dupEtbldgBdstCmpttnRt || ''; + if (selectedValue === '1') { // 기초공사Y인 경우 + rate = rowData.bscsCstrnYBdstCmpttnRt || ''; // 그리드에서 기초공사Y건축물산정비율 사용 + } else if (selectedValue === '2') { // 기초공사N인 경우 + rate = rowData.bscsCstrnNBdstCmpttnRt || ''; // 그리드에서 기초공사N건축물산정비율 사용 + } else if (selectedValue === '3') { // 복측증축인 경우 + rate = rowData.dupEtbldgBdstCmpttnRt || ''; // 그리드에서 복측증축건축물산정비율 사용 } } } @@ -974,37 +974,37 @@ $('#bscsCstrnRt').val(rate).trigger('focus'); // 기초공사율 설정 // 계산하기 버튼 표시 (값이 변경된 경우) - showCalculateButton(); + LevyPrvntcPopup.showCalculateButton(); // 기초공사구분 선택 시 계산하기 버튼 표시 }); // 산정률2 선택 시 산정률2 input에 값 설정 $('#cmpttnRt2Cd').on('change', function () { - var selectedOption = $(this).find('option:selected'); - var rateValue = selectedOption.attr('rateValueAttribute'); - var rateValue2 = selectedOption.attr('rateValueAttribute2'); - $('#cmpttnRt2').val(rateValue || ''); - $('#cmpttnRt2Rate').val(rateValue2 || ''); - $('#cmpttnRt2Display').val((rateValue || '') + ' %').trigger('focus'); + var selectedOption = $(this).find('option:selected'); // 선택된 옵션 가져오기 + var rateValue = selectedOption.attr('rateValueAttribute'); // 산정률2 값 가져오기 + var rateValue2 = selectedOption.attr('rateValueAttribute2'); // 산정률2 계산용 비율값 가져오기 + $('#cmpttnRt2').val(rateValue || ''); // 산정률2 값 설정 + $('#cmpttnRt2Rate').val(rateValue2 || ''); // 산정률2 계산용 비율값 설정 + $('#cmpttnRt2Display').val((rateValue || '') + ' %').trigger('focus'); // 산정률2 표시 필드 설정 // 계산하기 버튼 표시 (값이 변경된 경우) - showCalculateButton(); + LevyPrvntcPopup.showCalculateButton(); // 산정률2 선택 시 계산하기 버튼 표시 }); // 위반면적 변경 시 계산하기 버튼 표시 $('#vltnArea').on('change keyup', function() { - showCalculateButton(); + LevyPrvntcPopup.showCalculateButton(); // 위반면적 변경 시 계산하기 버튼 표시 }); // 계산에 사용되는 입력 필드 변경 시 계산하기 버튼 표시 (기초공사율 포함) - var calculationInputs = '#bldgNewPrcCrtrAmt, #strctIdx, #usgIdx, #pstnIdx, #elpsYrRdvlrt, #bscsCstrnRt'; + var calculationInputs = '#bldgNewPrcCrtrAmt, #strctIdx, #usgIdx, #pstnIdx, #elpsYrRdvlrt, #bscsCstrnRt'; // 계산 관련 입력 필드들 $(document).on('change', calculationInputs, function() { - showCalculateButton(); + LevyPrvntcPopup.showCalculateButton(); // 계산 관련 필드 변경 시 계산하기 버튼 표시 }); // 계산하기 버튼 클릭 이벤트 $('#btnCalculate').on('click', function() { - performCalculation(); + LevyPrvntcPopup.performCalculation(); // 계산하기 버튼 클릭 시 통합 계산 실행 }); }, @@ -1128,42 +1128,42 @@ */ collectFormData: function() { return { - mode: $('#mode').val(), - levyInfoId: LevyPrvntcPopup.levyInfoIdSelect || null, - crdnYr: $('#crdnYr').val(), - crdnNo: $('#crdnNo').val(), - impltInfoId: $('#impltInfoId').val(), - impltTaskSeCd: this.impltTaskSeCd, - actInfoId: $('#actInfoId').val(), - pstnInfoId: $('#pstnInfoId').val(), - sggCd: $('#sggCd').val() || '000', - docNo: $('#docNo').val() || null, - impltCpsrAmt: $('#impltCpsrAmt').val() || null, - mprcStdAmt: $('#standardMarketPrice').inputmask('unmaskedvalue') || '0', - vltnArea: $('#vltnArea').inputmask('unmaskedvalue') || '0', - adtnRtCd: $('#adtnRtCd').val() || null, - adtnRt: $('#adtnRt').val() || null, - sbtrRtCd: $('#sbtrRtCd').val() || null, - sbtrRt: $('#sbtrRt').val() || null, - adsbmtnEnfcRt: $('#adsbmtnEnfcRt').val() || '100', - cmpttnRtCd: $('#cmpttnRtCd').val() || null, - cmpttnRt: $('#cmpttnRt').val() || null, - cmpttnRt2Cd: $('#cmpttnRt2Cd').val() || null, - cmpttnRt2: $('#cmpttnRt2').val() || null, - cmpttnAmt: $('#cmpttnAmt').inputmask('unmaskedvalue') || '0', - levyWholAmt: $('#levyWholAmt').val() || '0', - bldgNewPrcCrtrAmtNo: $('#bldgNewPrcCrtrAmtNo').val() || null, - bldgCrtrMprcAmt: $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0', - strctIdxCd: $('#strctIdxCd').val() || null, - strctIdx: $('#strctIdx').inputmask('unmaskedvalue') || '0', - usgIdxCd: $('#usgIdxCd').val() || null, - usgIdx: $('#usgIdx').inputmask('unmaskedvalue') || '0', - pstnIdxNo: $('#pstnIdxNo').val() || null, - pstnIdx: $('#pstnIdx').inputmask('unmaskedvalue') || '0', - elpsYrRdvlrt: $('#elpsYrRdvlrt').inputmask('unmaskedvalue') || '0', - bscsCstrnSeCd: $('#bscsCstrnSeCd').val() || null, - bscsCstrnRt: $('#bscsCstrnRt').inputmask('unmaskedvalue') || '0', - bdstTxtnMprc: $('#taxableMarketPrice').inputmask('unmaskedvalue') || '0' + mode: $('#mode').val(), // 모드 (C:등록, U:수정, V:보기) + levyInfoId: LevyPrvntcPopup.levyInfoIdSelect || null, // 부과정보 ID (수정 시 사용) + crdnYr: $('#crdnYr').val(), // 단속연도 + crdnNo: $('#crdnNo').val(), // 단속번호 + impltInfoId: $('#impltInfoId').val(), // 이행정보 ID + impltTaskSeCd: this.impltTaskSeCd, // 이행업무구분코드 + actInfoId: $('#actInfoId').val(), // 행위정보 ID + pstnInfoId: $('#pstnInfoId').val(), // 위치정보 ID + sggCd: $('#sggCd').val() || '000', // 시군구코드 + docNo: $('#docNo').val() || null, // 문서번호 + impltCpsrAmt: $('#impltCpsrAmt').val() || null, // 이행강제금액 + mprcStdAmt: $('#standardMarketPrice').inputmask('unmaskedvalue') || '0', // 시가표준액 + vltnArea: $('#vltnArea').inputmask('unmaskedvalue') || '0', // 위반면적 + adtnRtCd: $('#adtnRtCd').val() || null, // 가산율 코드 + adtnRt: $('#adtnRt').val() || null, // 가산율 값 + sbtrRtCd: $('#sbtrRtCd').val() || null, // 감산율 코드 + sbtrRt: $('#sbtrRt').val() || null, // 감산율 값 + adsbmtnEnfcRt: $('#adsbmtnEnfcRt').val() || '100', // 가감산시행령률 + cmpttnRtCd: $('#cmpttnRtCd').val() || null, // 산정률 코드 + cmpttnRt: $('#cmpttnRt').val() || null, // 산정률 값 + cmpttnRt2Cd: $('#cmpttnRt2Cd').val() || null, // 산정률2 코드 + cmpttnRt2: $('#cmpttnRt2').val() || null, // 산정률2 값 + cmpttnAmt: $('#cmpttnAmt').inputmask('unmaskedvalue') || '0', // 산정액 + levyWholAmt: $('#levyWholAmt').val() || '0', // 부과총액 + bldgNewPrcCrtrAmtNo: $('#bldgNewPrcCrtrAmtNo').val() || null, // 건물기준시가액 번호 + bldgCrtrMprcAmt: $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0', // 건물기준시가액 + strctIdxCd: $('#strctIdxCd').val() || null, // 구조지수 코드 + strctIdx: $('#strctIdx').inputmask('unmaskedvalue') || '0', // 구조지수 값 + usgIdxCd: $('#usgIdxCd').val() || null, // 용도지수 코드 + usgIdx: $('#usgIdx').inputmask('unmaskedvalue') || '0', // 용도지수 값 + pstnIdxNo: $('#pstnIdxNo').val() || null, // 위치지수 번호 + pstnIdx: $('#pstnIdx').inputmask('unmaskedvalue') || '0', // 위치지수 값 + elpsYrRdvlrt: $('#elpsYrRdvlrt').inputmask('unmaskedvalue') || '0', // 경과년수별잔가율 + bscsCstrnSeCd: $('#bscsCstrnSeCd').val() || null, // 기초공사구분 코드 + bscsCstrnRt: $('#bscsCstrnRt').inputmask('unmaskedvalue') || '0', // 기초공사율 값 + bdstTxtnMprc: $('#taxableMarketPrice').inputmask('unmaskedvalue') || '0' // 건축물과세시가 }; }, @@ -1282,273 +1282,264 @@ let rateForTotal = 100; if (type === '1') { // '1' for 가산(add) - $('#adtnRtCd').val(selectedRow.adsbmtnRtCd); - $('#adtnRt').val(rate); - $('#adtnRtRate').val(rateForCalc); - $('#btnOpenAddPopup').text('+ 가산 [' + rateForDisplay + ']'); + $('#adtnRtCd').val(selectedRow.adsbmtnRtCd); // 가산율 코드 설정 + $('#adtnRt').val(rate); // 가산율 값 설정 + $('#adtnRtRate').val(rateForCalc); // 가산율 계산용 비율값 설정 + $('#btnOpenAddPopup').text('+ 가산 [' + rateForDisplay + ']'); // 가산 버튼 텍스트 업데이트 } else if (type === '2') { // '2' for 감산(minus) - $('#sbtrRtCd').val(selectedRow.adsbmtnRtCd); - $('#sbtrRt').val(rate); - $('#sbtrRtRate').val(rateForCalc); - $('#btnOpenMinusPopup').text('- 감산 [' + rateForDisplay + ']'); + $('#sbtrRtCd').val(selectedRow.adsbmtnRtCd); // 감산율 코드 설정 + $('#sbtrRt').val(rate); // 감산율 값 설정 + $('#sbtrRtRate').val(rateForCalc); // 감산율 계산용 비율값 설정 + $('#btnOpenMinusPopup').text('- 감산 [' + rateForDisplay + ']'); // 감산 버튼 텍스트 업데이트 } - var addRate = $('#adtnRt').val(); - var minusRate = $('#sbtrRt').val(); - const totalRateCalcAdd = parseFloat(addRate) || 0; - const totalRateCalcMinus = parseFloat(minusRate) || 0; - const totalRateCalc = 100 + totalRateCalcAdd - totalRateCalcMinus; + var addRate = $('#adtnRt').val(); // 현재 설정된 가산율 값 가져오기 + var minusRate = $('#sbtrRt').val(); // 현재 설정된 감산율 값 가져오기 + const totalRateCalcAdd = parseFloat(addRate) || 0; // 가산율을 숫자로 변환 + const totalRateCalcMinus = parseFloat(minusRate) || 0; // 감산율을 숫자로 변환 + const totalRateCalc = 100 + totalRateCalcAdd - totalRateCalcMinus; // 최종 가감산시행령률 계산 (100% + 가산율 - 감산율) - $("#adsbmtnEnfcRt").val( totalRateCalc ); - $("#adsbmtnEnfcRtDisplay").val( totalRateCalc+" %" ); + $("#adsbmtnEnfcRt").val( totalRateCalc ); // 가감산시행령률 hidden 필드에 계산된 비율 값 설정 + $("#adsbmtnEnfcRtDisplay").val( totalRateCalc+" %" ); // 가감산시행령률 표시 필드에 퍼센트 포함하여 설정 // 계산하기 버튼 표시 (값이 변경된 경우) - showCalculateButton(); - } - - }; + LevyPrvntcPopup.showCalculateButton(); // 가감산시행령률 표시 영역 업데이트 후 계산하기 버튼 표시 + }, - // ======================================== - // 6. 계산 관련 유틸리티 함수들 - // ======================================== + /** + * 계산하기 버튼 표시 함수 + * 중요로직: select box 값이 변경되었을 때 계산하기 버튼을 표시합니다. + */ + showCalculateButton: function() { + var btnCalculate = $('#btnCalculate'); // 계산하기 버튼 DOM 요소 + if (btnCalculate.length > 0) { + btnCalculate.show().addClass('btn-highlight'); - // ======================================== - // 🧮 계산하기 버튼 방식 계산 시스템 - // ======================================== + // 건축물 과세시가, 시가표준액(상단), 시가표준액(하단), 산정액 값 초기화 처리 + // 오류 시 필드 초기화 + $('#taxableMarketPrice').val('').trigger('focus'); // 건축물과세시가 필드 초기화 + $('#standardMarketPrice').val('').trigger('focus'); // 시가표준액(상단) 필드 초기화 + $('#standardMarketPrice_bottom').val('').trigger('focus'); // 시가표준액(하단) 필드 초기화 + $('#cmpttnAmt').val('').trigger('focus'); // 산정액 필드 초기화 + $('#levyWholAmt').val(''); // 부과총액 hidden 필드 초기화 + $('#levyWholAmtDisplay').text('0 원'); // 부과총액 표시 영역 초기화 + + console.log('🔄 계산하기 버튼 표시됨 - 값이 변경됨'); + } + }, - /** - * 계산하기 버튼 표시 함수 - * 중요로직: select box 값이 변경되었을 때 계산하기 버튼을 표시합니다. - */ - function showCalculateButton() { - var btnCalculate = $('#btnCalculate'); - if (btnCalculate.length > 0) { - btnCalculate.show().addClass('btn-highlight'); - - //건축물 과세시가, 시가표준액(상단), 시가표준액(하단), 산정액 값 초기화 처리 - // 오류 시 필드 초기화 - $('#taxableMarketPrice').val('').trigger('focus'); - $('#standardMarketPrice').val('').trigger('focus'); - $('#standardMarketPrice_bottom').val('').trigger('focus'); - $('#cmpttnAmt').val('').trigger('focus'); - $('#levyWholAmt').val(''); - $('#levyWholAmtDisplay').text('0 원'); - - console.log('🔄 계산하기 버튼 표시됨 - 값이 변경됨'); - } - } + /** + * 계산하기 버튼 숨김 함수 + * 중요로직: 계산이 완료되었을 때 계산하기 버튼을 숨깁니다. + */ + hideCalculateButton: function() { + var btnCalculate = $('#btnCalculate'); // 계산하기 버튼 DOM 요소 + if (btnCalculate.length > 0) { + btnCalculate.hide().removeClass('btn-highlight'); - /** - * 계산하기 버튼 숨김 함수 - * 중요로직: 계산이 완료되었을 때 계산하기 버튼을 숨깁니다. - */ - function hideCalculateButton() { - var btnCalculate = $('#btnCalculate'); - if (btnCalculate.length > 0) { - btnCalculate.hide().removeClass('btn-highlight'); - console.log('✅ 계산하기 버튼 숨김됨 - 계산 완료'); - } - } + console.log('✅ 계산하기 버튼 숨김 - 계산 완료됨'); + } + }, - /** - * 계산 수행 함수 - 단일 API 호출 - * 중요로직: 모든 필수값 validation 후 단일 API로 모든 계산을 한번에 수행합니다. - * - 감산, 가산은 선택사항 (기본 100%) - * - 나머지는 모두 필수 - */ - function performCalculation() { - console.log('🧮 통합 계산하기 버튼 클릭됨'); - - // 1. 필수값 validation - var validationResult = validateCalculationInputs(); - if (!validationResult.isValid) { - alert(validationResult.message); - if (validationResult.focusElement) { - $(validationResult.focusElement).focus(); + /** + * 통합 계산 함수 - 건축물과세시가부터 부과총액까지 한번에 계산 + * 중요로직: 모든 필수값 validation 후 단일 API로 모든 계산을 한번에 수행합니다. + */ + performCalculation: function() { + console.log('🧮 통합 계산하기 버튼 클릭됨'); + + // 1. 필수값 validation + var validationResult = this.validateCalculationInputs(); // validation 함수 호출 + if (!validationResult.isValid) { + alert(validationResult.message); // 오류 메시지 표시 + if (validationResult.focusElement) { + $(validationResult.focusElement).focus(); // 문제 필드로 포커스 이동 + } + return; } - return; - } - // 2. 입력값 수집 - var params = collectAllCalculationInputs(); - console.log('📊 수집된 통합 계산 파라미터:', params); - - // 3. 로딩 상태 표시 - $('#levyWholAmtDisplay').text('계산 중...'); - $('#btnCalculate').prop('disabled', true).text('계산 중...'); - - // 4. 단일 API 호출로 모든 계산 수행 - $.ajax({ - url: '', - type: 'POST', - data: params, - success: function(response) { - if (response && response.success && response.data) { - var data = response.data; - - // 모든 결과값을 한번에 설정 - // 1. 건축물과세시가 - $('#taxableMarketPrice').val(data.bdstTxtnMprc).trigger('focus'); - - // 2. 시가표준액 - $('#standardMarketPrice').val(data.mprcStdAmt).trigger('focus'); - $('#standardMarketPrice_bottom').val(data.mprcStdAmt).trigger('focus'); - - // 3. 산정액 - $('#cmpttnAmt').val(parseInt(data.cmpttnAmt)).trigger('focus'); - - // 4. 부과총액 - $('#levyWholAmt').val(parseInt(data.levyWholAmt)); - $('#levyWholAmtDisplay').text(data.levyWholAmtDisplay); - - console.log('✅ 통합 계산 완료!', { - 건축물과세시가: data.bdstTxtnMprc, - 시가표준액: data.mprcStdAmt, - 산정액: data.cmpttnAmt, - 부과총액: data.levyWholAmt - }); + // 2. 입력값 수집 + var params = this.collectAllCalculationInputs(); // 계산 파라미터 수집 + console.log('📊 수집된 통합 계산 파라미터:', params); - // 계산하기 버튼 숨김 - hideCalculateButton(); + // 3. UI 로딩 상태 표시 + $('#levyWholAmtDisplay').text('계산 중...'); // 부과총액 표시 영역에 로딩 메시지 + $('#btnCalculate').prop('disabled', true).text('계산 중...'); // 계산하기 버튼 비활성화 - } else { - throw new Error(response.message || '서버에서 올바른 계산 결과를 받지 못했습니다.'); + // 4. 단일 API 호출로 모든 계산 수행 + $.ajax({ + url: '', + type: 'POST', + data: params, + success: function(response) { + if (response && response.success && response.data) { + var data = response.data; // 계산 결과 데이터 + + // 모든 결과값을 한번에 설정 + // 1. 건축물과세시가 + $('#taxableMarketPrice').val(data.bdstTxtnMprc).trigger('focus'); // 건축물과세시가 결과값 설정 + + // 2. 시가표준액 + $('#standardMarketPrice').val(data.mprcStdAmt).trigger('focus'); // 시가표준액(상단) 결과값 설정 + $('#standardMarketPrice_bottom').val(data.mprcStdAmt).trigger('focus'); // 시가표준액(하단) 결과값 설정 + + // 3. 산정액 + $('#cmpttnAmt').val(parseInt(data.cmpttnAmt)).trigger('focus'); // 산정액 결과값 설정 + + // 4. 부과총액 + $('#levyWholAmt').val(parseInt(data.levyWholAmt)); // 부과총액 hidden 필드 설정 + $('#levyWholAmtDisplay').text(data.levyWholAmtDisplay); // 부과총액 표시 영역 설정 + + console.log('✅ 통합 계산 완료!', { + 건축물과세시가: data.bdstTxtnMprc, + 시가표준액: data.mprcStdAmt, + 산정액: data.cmpttnAmt, + 부과총액: data.levyWholAmt + }); + + // 계산하기 버튼 숨김 + LevyPrvntcPopup.hideCalculateButton(); + + } else { + throw new Error(response.message || '서버에서 올바른 계산 결과를 받지 못했습니다.'); + } + }, + error: function(xhr, status, error) { + console.error('❌ 통합 계산 오류:', error); + alert('계산 중 오류가 발생했습니다.'); + + // 오류 시 필드 초기화 + $('#taxableMarketPrice').val('').trigger('focus'); // 건축물과세시가 필드 초기화 + $('#standardMarketPrice').val('').trigger('focus'); // 시가표준액(상단) 필드 초기화 + $('#standardMarketPrice_bottom').val('').trigger('focus'); // 시가표준액(하단) 필드 초기화 + $('#cmpttnAmt').val('').trigger('focus'); // 산정액 필드 초기화 + $('#levyWholAmt').val(''); // 부과총액 hidden 필드 초기화 + $('#levyWholAmtDisplay').text('0 원'); // 부과총액 표시 영역 초기화 + }, + complete: function() { + // 버튼 상태 복원 + $('#btnCalculate').prop('disabled', false).text('계산하기'); // 계산하기 버튼 활성화 복원 } - }, - error: function(xhr, status, error) { - console.error('❌ 통합 계산 오류:', error); - alert('계산 중 오류가 발생했습니다.'); + }); + }, - // 오류 시 필드 초기화 - $('#taxableMarketPrice').val('').trigger('focus'); - $('#standardMarketPrice').val('').trigger('focus'); - $('#standardMarketPrice_bottom').val('').trigger('focus'); - $('#cmpttnAmt').val('').trigger('focus'); - $('#levyWholAmt').val(''); - $('#levyWholAmtDisplay').text('0 원'); - }, - complete: function() { - // 로딩 상태 해제 - $('#btnCalculate').prop('disabled', false).text('계산하기'); + /** + * 통합 계산 필수값 검증 함수 + * 중요로직: 건축물과세시가 계산부터 부과총액까지 전체 계산에 필요한 모든 필수값을 검증합니다. + */ + validateCalculationInputs: function() { + // 1. 건축물과세시가 계산에 필요한 값들 검증 + var bldgNewPrcCrtrAmt = $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0'; // 건물기준시가액 + if (!bldgNewPrcCrtrAmt || parseFloat(bldgNewPrcCrtrAmt) <= 0) { + return { + isValid: false, + message: '건물기준시가액을 입력해주세요.', + focusElement: '#bldgNewPrcCrtrAmt' + }; } - }); - } - /** - * 통합 계산 입력값 validation 함수 - * 중요로직: 건축물과세시가 계산부터 부과총액까지 전체 계산에 필요한 모든 필수값을 검증합니다. - */ - function validateCalculationInputs() { - // 1. 건축물과세시가 계산에 필요한 값들 검증 - var bldgNewPrcCrtrAmt = $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0'; - if (!bldgNewPrcCrtrAmt || parseFloat(bldgNewPrcCrtrAmt) <= 0) { - return { - isValid: false, - message: '건물기준시가액을 입력해주세요.', - focusElement: '#bldgNewPrcCrtrAmt' - }; - } + var strctIdx = $('#strctIdx').inputmask('unmaskedvalue') || '0'; // 구조지수 + if (!strctIdx || parseFloat(strctIdx) <= 0) { + return { + isValid: false, + message: '구조지수를 입력해주세요.', + focusElement: '#strctIdx' + }; + } - var strctIdx = $('#strctIdx').inputmask('unmaskedvalue') || '0'; - if (!strctIdx || parseFloat(strctIdx) <= 0) { - return { - isValid: false, - message: '구조지수를 입력해주세요.', - focusElement: '#strctIdx' - }; - } + var usgIdx = $('#usgIdx').inputmask('unmaskedvalue') || '0'; // 용도지수 + if (!usgIdx || parseFloat(usgIdx) <= 0) { + return { + isValid: false, + message: '용도지수를 입력해주세요.', + focusElement: '#usgIdx' + }; + } - var usgIdx = $('#usgIdx').inputmask('unmaskedvalue') || '0'; - if (!usgIdx || parseFloat(usgIdx) <= 0) { - return { - isValid: false, - message: '용도지수를 입력해주세요.', - focusElement: '#usgIdx' - }; - } + var pstnIdx = $('#pstnIdx').inputmask('unmaskedvalue') || '0'; // 위치지수 + if (!pstnIdx || parseFloat(pstnIdx) <= 0) { + return { + isValid: false, + message: '위치지수를 입력해주세요.', + focusElement: '#pstnIdx' + }; + } - var pstnIdx = $('#pstnIdx').inputmask('unmaskedvalue') || '0'; - if (!pstnIdx || parseFloat(pstnIdx) <= 0) { - return { - isValid: false, - message: '위치지수를 입력해주세요.', - focusElement: '#pstnIdx' - }; - } + var elpsYrRdvlrt = $('#elpsYrRdvlrt').inputmask('unmaskedvalue') || '0'; // 경과년수별잔가율 + if (!elpsYrRdvlrt || parseFloat(elpsYrRdvlrt) <= 0) { + return { + isValid: false, + message: '경과년수별잔가율을 입력해주세요.', + focusElement: '#elpsYrRdvlrt' + }; + } - var elpsYrRdvlrt = $('#elpsYrRdvlrt').inputmask('unmaskedvalue') || '0'; - if (!elpsYrRdvlrt || parseFloat(elpsYrRdvlrt) <= 0) { - return { - isValid: false, - message: '경과년수별잔가율을 입력해주세요.', - focusElement: '#elpsYrRdvlrt' - }; - } + var bscsCstrnRt = $('#bscsCstrnRt').inputmask('unmaskedvalue') || '0'; // 기초공사율 + if (!bscsCstrnRt || parseFloat(bscsCstrnRt) <= 0) { + return { + isValid: false, + message: '기초공사율을 선택해주세요.', + focusElement: '#bscsCstrnSeCd' + }; + } - var bscsCstrnRt = $('#bscsCstrnRt').inputmask('unmaskedvalue') || '0'; - if (!bscsCstrnRt || parseFloat(bscsCstrnRt) <= 0) { - return { - isValid: false, - message: '기초공사율을 선택해주세요.', - focusElement: '#bscsCstrnSeCd' - }; - } + // 2. 위반면적 검증 + var vltnArea = $('#vltnArea').inputmask('unmaskedvalue') || '0'; // 위반면적 + if (!vltnArea || parseFloat(vltnArea) <= 0) { + return { + isValid: false, + message: '위반면적을 입력해주세요.', + focusElement: '#vltnArea' + }; + } - // 2. 위반면적 검증 - var vltnArea = $('#vltnArea').inputmask('unmaskedvalue') || '0'; - if (!vltnArea || parseFloat(vltnArea) <= 0) { - return { - isValid: false, - message: '위반면적을 입력해주세요.', - focusElement: '#vltnArea' - }; - } + // 3. 산정률 검증 + var cmpttnRtRate = $('#cmpttnRtRate').val(); // 산정률 비율값 + if (!cmpttnRtRate || parseFloat(cmpttnRtRate) <= 0) { + return { + isValid: false, + message: '산정률을 선택해주세요.', + focusElement: '#cmpttnRtCd' + }; + } - // 3. 산정률 검증 - var cmpttnRtRate = $('#cmpttnRtRate').val(); - if (!cmpttnRtRate || parseFloat(cmpttnRtRate) <= 0) { - return { - isValid: false, - message: '산정률을 선택해주세요.', - focusElement: '#cmpttnRtCd' - }; - } + // 4. 산정률2 검증 + var cmpttnRt2Rate = $('#cmpttnRt2Rate').val(); // 산정률2 비율값 + if (!cmpttnRt2Rate || parseFloat(cmpttnRt2Rate) <= 0) { + return { + isValid: false, + message: '산정률2를 선택해주세요.', + focusElement: '#cmpttnRt2Cd' + }; + } - // 4. 산정률2 검증 - var cmpttnRt2Rate = $('#cmpttnRt2Rate').val(); - if (!cmpttnRt2Rate || parseFloat(cmpttnRt2Rate) <= 0) { + return { isValid: true }; // 모든 검증 통과 + }, + + /** + * 통합 계산에 필요한 모든 입력값 수집 함수 + * 중요로직: 건축물과세시가부터 부과총액까지 계산에 필요한 모든 파라미터를 수집합니다. + */ + collectAllCalculationInputs: function() { return { - isValid: false, - message: '산정률2를 선택해주세요.', - focusElement: '#cmpttnRt2Cd' + // 건축물과세시가 계산용 파라미터 + bldgNewPrcCrtrAmt: $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0', // 건물기준시가액 + strctIdx: $('#strctIdx').inputmask('unmaskedvalue') || '0', // 구조지수 + usgIdx: $('#usgIdx').inputmask('unmaskedvalue') || '0', // 용도지수 + pstnIdx: $('#pstnIdx').inputmask('unmaskedvalue') || '0', // 위치지수 + elpsYrRdvlrt: $('#elpsYrRdvlrt').inputmask('unmaskedvalue') || '0', // 경과년수별잔가율 + bscsCstrnRt: $('#bscsCstrnRt').inputmask('unmaskedvalue') || '0', // 기초공사율 + + // 산정액/부과총액 계산용 파라미터 + vltnArea: $('#vltnArea').inputmask('unmaskedvalue') || '0', // 위반면적 + adsbmtnEnfcRt: $('#adsbmtnEnfcRt').val() || '100', // 가감산시행령률 + cmpttnRtRate: $('#cmpttnRtRate').val() || '0', // 산정률 비율값 + cmpttnRt2Rate: $('#cmpttnRt2Rate').val() || '0' // 산정률2 비율값 }; } - return { isValid: true }; - } - - /** - * 통합 계산용 입력값 수집 함수 - * 중요로직: 모든 계산에 필요한 파라미터를 한번에 수집합니다. - */ - function collectAllCalculationInputs() { - return { - // 건축물과세시가 계산용 파라미터 - bldgNewPrcCrtrAmt: $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0', - strctIdx: $('#strctIdx').inputmask('unmaskedvalue') || '0', - usgIdx: $('#usgIdx').inputmask('unmaskedvalue') || '0', - pstnIdx: $('#pstnIdx').inputmask('unmaskedvalue') || '0', - elpsYrRdvlrt: $('#elpsYrRdvlrt').inputmask('unmaskedvalue') || '0', - bscsCstrnRt: $('#bscsCstrnRt').inputmask('unmaskedvalue') || '0', - - // 산정액/부과총액 계산용 파라미터 - vltnArea: $('#vltnArea').inputmask('unmaskedvalue') || '0', - adsbmtnEnfcRt: $('#adsbmtnEnfcRt').val() || '100', - cmpttnRtRate: $('#cmpttnRtRate').val() || '0', - cmpttnRt2Rate: $('#cmpttnRt2Rate').val() || '0' - }; - } + }; // ========================================