부과예고 수정, 삭제 부분진행 업로드...

추가 작업 진행중...
dev
박성영 3 months ago
parent 6c323e77e7
commit eace8a444e

@ -339,79 +339,139 @@ public class CrdnLevyPrvntcController {
}
/**
* (AJAX)
* (ID)
* @param crdnYr
* @param crdnNo
* @param impltTaskSeCd
* @param actInfoId ID
* @return
*/
@Operation(summary = "기존 부과정보 조회", description = "행위정보ID로 기존 부과정보를 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@GetMapping("/selectLevyInfoByActInfoId.ajax")
@ResponseBody
public ResponseEntity<?> selectLevyInfoByActInfoId(
@Parameter(description = "단속 연도") @RequestParam String crdnYr,
@Parameter(description = "단속 번호") @RequestParam String crdnNo,
@Parameter(description = "이행업무구분코드") @RequestParam String impltTaskSeCd,
@Parameter(description = "행위정보ID") @RequestParam String actInfoId) {
log.debug("기존 부과정보 조회 요청 - 단속연도: {}, 단속번호: {}, 이행업무구분코드: {}, 행위정보ID: {}",
crdnYr, crdnNo, impltTaskSeCd, actInfoId);
try {
CrdnLevyInfoVO searchVO = new CrdnLevyInfoVO();
searchVO.setCrdnYr(crdnYr);
searchVO.setCrdnNo(crdnNo);
searchVO.setImpltTaskSeCd(impltTaskSeCd);
searchVO.setActInfoId(actInfoId);
CrdnLevyInfoVO existingLevyInfo = crdnLevyPrvntcService.selectLevyInfoByActInfoId(searchVO);
if (existingLevyInfo != null) {
return ApiResponseUtil.success(existingLevyInfo, "기존 부과정보를 조회했습니다.");
} else {
return ApiResponseUtil.success(null, "기존 부과정보가 없습니다. 신규 등록 모드입니다.");
}
} catch (Exception e) {
log.error("기존 부과정보 조회 중 오류 발생", e);
return ApiResponseUtil.error("기존 부과정보 조회 중 오류가 발생했습니다: " + e.getMessage());
}
}
/**
* (/ )
* @param vo VO
* @return
* @return
*/
@Operation(summary = "부과정보 신규 등록", description = "부과정보를 신규 등록합니다.")
@Operation(summary = "부과정보 저장", description = "신규/수정을 자동 판단하여 부과정보를 저장합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "200", description = "저장 성공"),
@ApiResponse(responseCode = "400", description = "잘못된 요청"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@PostMapping("/insertLevyInfo.ajax")
@PostMapping("/saveLevyInfo.ajax")
@ResponseBody
public ResponseEntity<?> insertLevyInfo(@ModelAttribute CrdnLevyInfoVO vo) {
log.debug("부과정보 신규 등록 요청: {}", vo);
public ResponseEntity<?> saveLevyInfo(@ModelAttribute CrdnLevyInfoVO vo) {
log.debug("부과정보 저장 요청: {}", vo);
try {
CrdnActInfoVO actInfoVO = crdnActInfoService.selectActInfoByPk(vo.getActInfoId());
if( actInfoVO == null ){
return ApiResponseUtil.error("행위정보가 존재하지 않습니다.");
}
vo.setSggCd(actInfoVO.getSggCd());
int result = crdnLevyPrvntcService.insertLevyInfo(vo);
// 기존 부과정보 존재 여부 확인
CrdnLevyInfoVO searchVO = new CrdnLevyInfoVO();
searchVO.setCrdnYr(vo.getCrdnYr());
searchVO.setCrdnNo(vo.getCrdnNo());
searchVO.setImpltTaskSeCd(vo.getImpltTaskSeCd()); // 부과예고 고정값
searchVO.setActInfoId(vo.getActInfoId());
CrdnLevyInfoVO existingLevyInfo = crdnLevyPrvntcService.selectLevyInfoByActInfoId(searchVO);
int result;
String message;
if (existingLevyInfo != null) {
// 수정 처리
vo.setLevyInfoId(existingLevyInfo.getLevyInfoId()); // 기존 ID 설정
result = crdnLevyPrvntcService.updateLevyInfo(vo);
message = "부과정보가 성공적으로 수정되었습니다.";
log.debug("부과정보 수정 처리 완료 - levyInfoId: {}", vo.getLevyInfoId());
} else {
// 신규 등록 처리
result = crdnLevyPrvntcService.insertLevyInfo(vo);
message = "부과정보가 성공적으로 등록되었습니다.";
log.debug("부과정보 신규 등록 처리 완료 - levyInfoId: {}", vo.getLevyInfoId());
}
if (result > 0) {
return ApiResponseUtil.success(result, "부과정보가 성공적으로 등록되었습니다.");
return ApiResponseUtil.success(result, message);
} else {
return ApiResponseUtil.error("부과정보 등록에 실패했습니다.");
return ApiResponseUtil.error("부과정보 저장에 실패했습니다.");
}
} catch (Exception e) {
log.error("부과정보 등록 중 오류 발생", e);
return ApiResponseUtil.error("부과정보 등록 중 오류가 발생했습니다: " + e.getMessage());
log.error("부과정보 저장 중 오류 발생", e);
return ApiResponseUtil.error("부과정보 저장 중 오류가 발생했습니다: " + e.getMessage());
}
}
/**
* (AJAX)
*
* @param vo VO
* @return
* @return
*/
@Operation(summary = "부과정보 수정", description = "부과정보를 수정합니다.")
@Operation(summary = "부과정보 삭제", description = "부과정보를 삭제합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "수정 성공"),
@ApiResponse(responseCode = "200", description = "삭제 성공"),
@ApiResponse(responseCode = "400", description = "잘못된 요청"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@PostMapping("/updateLevyInfo.ajax")
@PostMapping("/delLevyInfo.ajax")
@ResponseBody
public ResponseEntity<?> updateLevyInfo(@ModelAttribute CrdnLevyInfoVO vo) {
log.debug("부과정보 수정 요청: {}", vo);
public ResponseEntity<?> delLevyInfo(@ModelAttribute CrdnLevyInfoVO vo) {
log.debug("부과정보 삭제 요청: {}", vo);
try {
CrdnActInfoVO actInfoVO = crdnActInfoService.selectActInfoByPk(vo.getActInfoId());
if( actInfoVO == null ){
return ApiResponseUtil.error("행위정보가 존재하지 않습니다.");
}
int result = crdnLevyPrvntcService.deleteLevyInfo(vo);
vo.setSggCd(actInfoVO.getSggCd());
int result = crdnLevyPrvntcService.updateLevyInfo(vo);
if (result > 0) {
return ApiResponseUtil.success(result, "부과정보가 성공적으로 수정되었습니다.");
return ApiResponseUtil.success(result, "부과정보 삭제에 성공했습니다.");
} else {
return ApiResponseUtil.error("부과정보 수정에 실패했습니다.");
return ApiResponseUtil.error("부과정보 삭제에 실패했습니다.");
}
} catch (Exception e) {
log.error("부과정보 수정 중 오류 발생", e);
return ApiResponseUtil.error("부과정보 수정 중 오류가 발생했습니다: " + e.getMessage());
log.error("부과정보 삭제 중 오류 발생", e);
return ApiResponseUtil.error("부과정보 삭제 중 오류가 발생했습니다: " + e.getMessage());
}
}
}

@ -45,4 +45,13 @@ public interface CrdnLevyPrvntcMapper {
*/
int updateLevyInfo(CrdnLevyInfoVO vo);
/**
* ( ID)
* @param vo VO (crdnYr, crdnNo, impltTaskSeCd, actInfoId )
* @return VO
*/
CrdnLevyInfoVO selectLevyInfoByActInfoId(CrdnLevyInfoVO vo);
int deleteLevyInfo(CrdnLevyInfoVO vo);
}

@ -78,4 +78,63 @@ public class CrdnLevyInfoVO extends PagingVO {
/** 삭제자 */
private String dltr;
// ========== 조회 시 조인으로 가져오는 화면 표시용 필드들 ==========
/** 구조지수명 */
private String strctIdxCdNm;
/** 용도지수명 */
private String usgIdxCdNm;
/** 건축물용도명 (건물기준시가액 표시용) */
private String bldgNewPrcCrtrAmtDisplay;
/** 기초공사구분명 */
private String bscsCstrnSeCdNm;
/** 행위유형명 */
private String actTypeCdNm;
/** 산정률2 표시명 */
private String cmpttnRt2Display;
// ========== 계산에 필요한 Rate 값들 (소수점 비율값) ==========
/** 산정률1 비율값 (계산용) */
private BigDecimal cmpttnRtRate;
/** 산정률2 비율값 (계산용) */
private BigDecimal cmpttnRt2Rate;
/** 가산율 비율값 (계산용) */
private BigDecimal adtnRtRate;
/** 감산율 비율값 (계산용) */
private BigDecimal sbtrRtRate;
/** 가감산시행령률 비율값 (계산용) */
private BigDecimal adsbmtnEnfcRtRate;
// ========== 기초공사율 계산을 위한 기준 비율들 ==========
/** 기초공사Y건축물산정비율 */
private BigDecimal bscsCstrnYBdstCmpttnRt;
/** 기초공사N건축물산정비율 */
private BigDecimal bscsCstrnNBdstCmpttnRt;
/** 복측증축건축물산정비율 */
private BigDecimal dupEtbldgBdstCmpttnRt;
// ========== 추가 표시용 데이터 ==========
/** 행위시작일자 */
private String actBgngYmd;
/** 경과년수별잔가율 년도 */
private String elpsYrRdvlrtYr;
/** 공시지가 (위치지수 표시용) */
private BigDecimal oalp;
}

@ -41,9 +41,18 @@ public interface CrdnLevyPrvntcService {
/**
*
* @param vo VO
* @param vo VO
* @return
*/
int updateLevyInfo(CrdnLevyInfoVO vo);
/**
* ( ID)
* @param vo VO (crdnYr, crdnNo, impltTaskSeCd, actInfoId )
* @return VO
*/
CrdnLevyInfoVO selectLevyInfoByActInfoId(CrdnLevyInfoVO vo);
int deleteLevyInfo(CrdnLevyInfoVO vo);
}

@ -93,4 +93,15 @@ public class CrdnLevyPrvntcServiceImpl extends EgovAbstractServiceImpl implement
return crdnLevyPrvntcMapper.updateLevyInfo(vo);
}
@Override
public CrdnLevyInfoVO selectLevyInfoByActInfoId(CrdnLevyInfoVO vo) {
log.debug("부과정보 조회 서비스 호출: {}", vo);
return crdnLevyPrvntcMapper.selectLevyInfoByActInfoId(vo);
}
@Override
public int deleteLevyInfo(CrdnLevyInfoVO vo) {
return crdnLevyPrvntcMapper.deleteLevyInfo(vo);
}
}

@ -240,4 +240,89 @@
AND DEL_YN = 'N'
</update>
<!-- 부과정보 조회 (특정 행위정보ID로) -->
<select id="selectLevyInfoByActInfoId" parameterType="CrdnLevyInfoVO" resultType="CrdnLevyInfoVO">
SELECT tli.LEVY_INFO_ID,
tli.SGG_CD,
tli.CRDN_YR,
tli.CRDN_NO,
tli.IMPLT_INFO_ID,
tli.IMPLT_TASK_SE_CD,
tli.ACT_INFO_ID,
tli.DOC_NO,
tli.IMPLT_CPSR_AMT,
tli.MPRC_STD_AMT,
tli.VLTN_AREA,
tli.ADTN_RT_CD,
tli.ADTN_RT,
tli.SBTR_RT_CD,
tli.SBTR_RT,
tli.ADSBMTN_ENFC_RT,
tli.CMPTTN_RT_CD,
tli.CMPTTN_RT,
tli.CMPTTN_RT_2_CD,
tli.CMPTTN_RT_2,
tli.CMPTTN_AMT,
tli.LEVY_WHOL_AMT,
tli.BLDG_CRTR_MPRC_AMT,
tli.STRCT_IDX_CD,
tli.STRCT_IDX,
tli.USG_IDX_CD,
tli.USG_IDX,
tli.PSTN_IDX_NO,
tli.PSTN_IDX,
tli.ELPS_YR_RDVLRT,
tli.BSCS_CSTRN_SE_CD,
tli.BSCS_CSTRN_RT,
tli.BLDG_NEW_PRC_CRTR_AMT_NO,
tli.BDST_TXTN_MPRC,
tli.REG_DT,
tli.RGTR,
tli.MDFCN_DT,
tli.MDFR,
tli.DEL_YN,
-- 화면 표시용 코드명들
strct.STRCT_NM AS STRCT_IDX_CD_NM,
usg.USG_NM AS USG_IDX_CD_NM,
bnpca.BDST_USG AS BLDG_NEW_PRC_CRTR_AMT_DISPLAY,
bscs_cd.CD_NM AS BSCS_CSTRN_SE_CD_NM,
act.VLTN_BDST AS ACT_TYPE_CD_NM,
cmpttn2.VLTN_MTTR AS CMPTTN_RT_2_DISPLAY,
-- 계산에 필요한 rate 값들
CAST(tli.CMPTTN_RT AS DECIMAL(10,2)) / 100 AS CMPTTN_RT_RATE,
CAST(tli.CMPTTN_RT_2 AS DECIMAL(10,2)) / 100 AS CMPTTN_RT_2_RATE,
CAST(tli.ADTN_RT AS DECIMAL(10,2)) / 100 AS ADTN_RT_RATE,
CAST(tli.SBTR_RT AS DECIMAL(10,2)) / 100 AS SBTR_RT_RATE,
CAST(tli.ADSBMTN_ENFC_RT AS DECIMAL(10,2)) / 100 AS ADSBMTN_ENFC_RT_RATE,
-- 기초공사율 계산을 위한 기준 비율들
strct.BSCS_CSTRN_Y_BDST_CMPTTN_RT,
strct.BSCS_CSTRN_N_BDST_CMPTTN_RT,
strct.DUP_ETBLDG_BDST_CMPTTN_RT,
-- 경과년수별잔가율 년도
tai.ACT_BGNG_YMD,
substring(tai.ACT_BGNG_YMD,1,4) as ELPS_YR_RDVLRT_YR,
-- 공시지가 (위치지수 표시용)
tpi.OALP
FROM tb_levy_info tli
INNER JOIN tb_act_info tai ON tli.ACT_INFO_ID = tai.ACT_INFO_ID AND tai.DEL_YN = 'N'
INNER JOIN tb_pstn_info tpi ON tai.PSTN_INFO_ID = tpi.PSTN_INFO_ID AND tpi.DEL_YN = 'N'
LEFT JOIN tb_strct_idx strct ON strct.STRCT_IDX_CD = tli.STRCT_IDX_CD AND strct.DEL_YN = 'N'
LEFT JOIN tb_usg_idx usg ON usg.USG_IDX_CD = tli.USG_IDX_CD AND usg.DEL_YN = 'N'
LEFT JOIN tb_bldg_new_prc_crtr_amt bnpca ON bnpca.YR = tli.CRDN_YR AND bnpca.no = tli.BLDG_NEW_PRC_CRTR_AMT_NO
LEFT JOIN tb_cd_detail bscs_cd ON bscs_cd.CD_GROUP_ID = 'BSCS_CSTRN_SE_CD' AND bscs_cd.CD_ID = tli.BSCS_CSTRN_SE_CD
LEFT JOIN TB_ACT_TYPE act ON act.ACT_TYPE_CD = tli.CMPTTN_RT_CD
LEFT JOIN tb_cmpttn_rt_2 cmpttn2 ON cmpttn2.CMPTTN_RT_2_CD = tli.CMPTTN_RT_2_CD AND cmpttn2.USE_YN = 'Y'
WHERE tli.CRDN_YR = #{crdnYr}
AND tli.CRDN_NO = #{crdnNo}
AND tli.IMPLT_TASK_SE_CD = #{impltTaskSeCd}
AND tli.ACT_INFO_ID = #{actInfoId}
AND tli.DEL_YN = 'N'
ORDER BY tli.REG_DT DESC
LIMIT 1
</select>
<delete id="deleteLevyInfo" parameterType="CrdnLevyInfoVO">
DELETE FROM tb_levy_info WHERE LEVY_INFO_ID = #{levyInfoId}
</delete>
</mapper>

@ -175,7 +175,7 @@
</td>
<td rowspan="2" class="op-cell b-right-0 b-bottom-0">X</td>
<td rowspan="2" class="b-right-0 b-bottom-0">
<input type="text" id="vltnArea" class="input decimalMask" value=""/><!-- 위반면적 -->
<input type="text" id="vltnArea" class="input decimalMask" value="" readonly/><!-- 위반면적 -->
</td>
<td rowspan="2" class="op-cell b-right-0 b-bottom-0">X</td>
<td class="b-right-0 b-bottom-0 pad-0">
@ -244,6 +244,7 @@
<div class="popup_foot">
<c:if test="${mode ne 'V'}">
<button type="button" id="btnSave" class="newbtns bg1">저장</button>
<button type="button" id="btnDel" class="newbtns bg6" style="display: none;">삭제</button>
</c:if>
<button type="button" class="newbtns bg2 modalclose" id="btnClose">닫기</button>
</div>
@ -266,6 +267,7 @@
crdnNo: '${crdnNo}',
impltTaskSeCd: '${impltTaskSeCd}',
impltTaskSeCdNm: '${impltTaskSeCdNm}',
levyInfoIdSelect: null,
/**
* 그리드 관련 객체
@ -423,11 +425,162 @@
/**
* 중요로직: 행 선택 시 공통 처리 함수
* rowData를 통해 actInfoId 설정 및 다른 그리드 새로고침
* 기존 부과정보가 있는 경우 snapshot 데이터로 화면 복원
* @param {Object} rowData - 선택된 행의 데이터
*/
var handleRowSelection = function(rowData) {
LevyPrvntcPopup.levyInfoIdSelect = null;
if (!rowData) return;
console.log('행 선택됨:', rowData);
$('#actInfoId').val(rowData.actInfoId); // 위반행위 키 먼저 설정
// 기존 부과정보 조회
var existingLevyInfoUrl = '<c:url value="/crdn/crndRegistAndView/crdnLevyPrvntc/selectLevyInfoByActInfoId.ajax"/>';
var requestData = {
crdnYr: LevyPrvntcPopup.crdnYr,
crdnNo: LevyPrvntcPopup.crdnNo,
impltTaskSeCd: LevyPrvntcPopup.impltTaskSeCd, // 부과예고 고정값
actInfoId: rowData.actInfoId
};
$.ajax({
url: existingLevyInfoUrl,
type: 'GET',
data: requestData,
dataType: 'json',
success: function(response) {
console.log('기존 부과정보 조회 결과:', response);
if (response.success && response.data) {
// 기존 부과정보가 있는 경우 - snapshot 데이터로 화면 복원
var existingData = response.data;
setLevyInfoToForm(existingData);
$("#btnSave").text('수정');
console.log('기존 부과정보로 화면 복원 완료');
} else {
// 기존 부과정보가 없는 경우 - 행위정보로 기본값 설정
setActInfoToForm(rowData);
$("#btnSave").text('등록');
console.log('신규 등록 모드 - 행위정보로 기본값 설정 완료');
}
},
error: function(xhr, status, error) {
console.error('기존 부과정보 조회 중 오류 발생:', error);
// 오류 발생 시 행위정보로 기본값 설정
setActInfoToForm(rowData);
}
});
};
/**
* 기존 부과정보로 화면 설정
* @param {Object} existingData - 기존 부과정보 데이터
*/
var setLevyInfoToForm = function(existingData) {
LevyPrvntcPopup.levyInfoIdSelect = existingData.levyInfoId;
// 위반면적 설정
$('#vltnArea').val(existingData.vltnArea || '').trigger('change');
// 산정률1 설정 (행위유형)
$('#cmpttnRtDisplay').val((existingData.cmpttnRt || '') + ' %');
$('#cmpttnRtCd').val(existingData.cmpttnRtCd || '');
$('#cmpttnRt').val(existingData.cmpttnRt || '');
$('#cmpttnRtRate').val(existingData.cmpttnRtRate || ''); // 계산용 비율값
// 기초공사구분 및 비율
$('#bscsCstrnSeCd').val(existingData.bscsCstrnSeCd || '');
$('#bscsCstrnRt').val(existingData.bscsCstrnRt || '');
// 건물기준시가액
$('#bldgNewPrcCrtrAmtNo').val(existingData.bldgNewPrcCrtrAmtNo || '');
$('#bldgNewPrcCrtrAmtDisplay').val(existingData.bldgNewPrcCrtrAmtDisplay || ''); // 건축물용도명
$('#bldgNewPrcCrtrAmt').val(existingData.bldgCrtrMprcAmt || '').trigger('focus');
// 구조지수
$('#strctIdxCd').val(existingData.strctIdxCd || '');
$('#strctIdx_nm').val(existingData.strctIdxCdNm || ''); // 구조지수명
$('#strctIdx').val(existingData.strctIdx || '');
// 용도지수
$('#usgIdxCd').val(existingData.usgIdxCd || '');
$('#usgIdx_nm').val(existingData.usgIdxCdNm || ''); // 용도지수명
$('#usgIdx').val(existingData.usgIdx || '');
// 위치지수
$('#pstnIdxNo').val(existingData.pstnIdxNo || '');
$('#pstnIdx_nm').val(existingData.oalp || '').trigger('focus'); // 공시지가
$('#pstnIdx').val(existingData.pstnIdx || '');
// 경과년수별잔가율
$('#elpsYrRdvlrt_yr').val((existingData.elpsYrRdvlrtYr || '') + ' 년'); // 행위시작년도
$('#elpsYrRdvlrt').val(existingData.elpsYrRdvlrt || '');
// 산정률2
$('#cmpttnRt2Cd').val(existingData.cmpttnRt2Cd || '');
$('#cmpttnRt2').val(existingData.cmpttnRt2 || '');
$('#cmpttnRt2Display').val((existingData.cmpttnRt2 || '') + ' %');
$('#cmpttnRt2Rate').val(existingData.cmpttnRt2Rate || ''); // 계산용 비율값
// 가감산 정보
$('#adtnRtCd').val(existingData.adtnRtCd || '');
$('#adtnRt').val(existingData.adtnRt || '');
$('#adtnRtRate').val(existingData.adtnRtRate || ''); // 계산용 비율값
$('#sbtrRtCd').val(existingData.sbtrRtCd || '');
$('#sbtrRt').val(existingData.sbtrRt || '');
$('#sbtrRtRate').val(existingData.sbtrRtRate || ''); // 계산용 비율값
// 가감산시행령률
$('#adsbmtnEnfcRt').val(existingData.adsbmtnEnfcRt || '100');
$('#adsbmtnEnfcRtDisplay').val((existingData.adsbmtnEnfcRt || '100') + ' %');
// 산정액 및 부과총액
$('#cmpttnAmt').val(existingData.cmpttnAmt || '').trigger('focus');
$('#levyWholAmt').val(existingData.levyWholAmt || '');
$('#levyWholAmtDisplay').text((existingData.levyWholAmt ? Number(existingData.levyWholAmt).toLocaleString() : '0') + ' 원');
// 시가표준액
$('#standardMarketPrice').val(existingData.mprcStdAmt || '');
$('#standardMarketPrice_top').val(existingData.mprcStdAmt || '').trigger('focus');
// 건축물과세시가
$('#taxableMarketPrice').val(existingData.bdstTxtnMprc || '');
// 기초공사율 계산을 위한 기준 비율들 저장 (hidden으로)
if (!$('#bscsCstrnYBdstCmpttnRt').length) {
$('<input type="hidden" id="bscsCstrnYBdstCmpttnRt">').appendTo('body');
$('<input type="hidden" id="bscsCstrnNBdstCmpttnRt">').appendTo('body');
$('<input type="hidden" id="dupEtbldgBdstCmpttnRt">').appendTo('body');
}
$('#bscsCstrnYBdstCmpttnRt').val(existingData.bscsCstrnYBdstCmpttnRt || '');
$('#bscsCstrnNBdstCmpttnRt').val(existingData.bscsCstrnNBdstCmpttnRt || '');
$('#dupEtbldgBdstCmpttnRt').val(existingData.dupEtbldgBdstCmpttnRt || '');
// 가감산 버튼 텍스트 업데이트
if (existingData.adtnRt && parseFloat(existingData.adtnRt) > 0) {
$('#btnOpenAddPopup').text('+ 가산 [' + existingData.adtnRt + '%]');
} else {
$('#btnOpenAddPopup').text('+ 가산 [0%]');
}
if (existingData.sbtrRt && parseFloat(existingData.sbtrRt) > 0) {
$('#btnOpenMinusPopup').text('- 감산 [' + existingData.sbtrRt + '%]');
} else {
$('#btnOpenMinusPopup').text('- 감산 [0%]');
}
$('#btnDel').show();
console.log('기존 부과정보로 화면 복원 완료:', existingData);
};
/**
* 행위정보로 기본값 설정 (신규 등록 모드)
* @param {Object} rowData - 선택된 행의 데이터
*/
var setActInfoToForm = function(rowData) {
var vltnArea = rowData.calcArea; // 면적 - 조치면적 : 위반면적
$('#vltnArea').val(vltnArea).trigger('change'); // 위반면적, change 이벤트 트리거
@ -463,8 +616,6 @@
// 산정액 계산 함수 호출
calculateLevyAmount();
$('#actInfoId').val(rowData.actInfoId); // 위반행위 키
};
this.instance.on('focusChange', function(ev) {
@ -506,6 +657,11 @@
self.save();
});
// 저장 버튼
$('#btnDel').on('click', function () {
self.del();
});
// 닫기 버튼 이벤트 바인딩
$('.modalclose').on('click', function (e) {
e.preventDefault();
@ -523,27 +679,45 @@
});
$('#bscsCstrnSeCd').on('change', function () { // 기초공사구분 변경 시
var focusedCell = self.grid.instance.getFocusedCell();
if (focusedCell && focusedCell.rowKey !== null) {
var rowData = self.grid.instance.getRow(focusedCell.rowKey);
if (rowData) {
var selectedValue = $(this).val();
var rate = 0;
if (selectedValue === '1') {
rate = rowData.bscsCstrnYBdstCmpttnRt;
} else if (selectedValue === '2') {
rate = rowData.bscsCstrnNBdstCmpttnRt;
} else if (selectedValue === '3') {
rate = rowData.dupEtbldgBdstCmpttnRt;
} else {
rate = "";
var selectedValue = $(this).val();
var rate = '';
// 먼저 기존 부과정보에서 온 hidden 값들 확인
var bscsCstrnYRate = $('#bscsCstrnYBdstCmpttnRt').val();
var bscsCstrnNRate = $('#bscsCstrnNBdstCmpttnRt').val();
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 || '';
}
} else {
// 그리드에서 현재 선택된 행 데이터 사용
var focusedCell = self.grid.instance.getFocusedCell();
if (focusedCell && focusedCell.rowKey !== null) {
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 || '';
}
}
$('#bscsCstrnRt').val(rate).trigger('focus'); // 기초공사율 설정
// 자동계산 함수 호출
calculateAuto();
}
}
$('#bscsCstrnRt').val(rate).trigger('focus'); // 기초공사율 설정
// 자동계산 함수 호출
calculateAuto();
});
// 산정률2 선택 시 산정률2 input에 값 설정
@ -607,9 +781,8 @@
// 폼 데이터 수집
var formData = this.collectFormData();
var url = this.mode === 'C' ?
'<c:url value="/crdn/crndRegistAndView/crdnLevyPrvntc/insertLevyInfo.ajax"/>' :
'<c:url value="/crdn/crndRegistAndView/crdnLevyPrvntc/updateLevyInfo.ajax"/>';
// 신규/수정 자동 판단 API 사용
var url = '<c:url value="/crdn/crndRegistAndView/crdnLevyPrvntc/saveLevyInfo.ajax"/>';
$.ajax({
url: url,
@ -617,13 +790,10 @@
data: formData,
success: function(response) {
if (response && response.success) {
alert(response.message || '부과예고가 성공적으로 저장되었습니다.');
if (window.opener && window.opener.refreshCrdnList) {
window.opener.refreshCrdnList();
}
window.close();
alert(response.message || '부과예고 [이행강제금 산출조사서 정보]가 성공적으로 저장되었습니다.');
} else {
alert(response.message || '저장 중 오류가 발생했습니다.');
alert(response.message || '부과예고 [이행강제금 산출조사서 정보] 저장 중 오류가 발생했습니다.');
}
}
});
@ -636,7 +806,7 @@
collectFormData: function() {
return {
mode: $('#mode').val(),
levyInfoId: $('#levyInfoId').val() || null,
levyInfoId: LevyPrvntcPopup.levyInfoIdSelect || null,
crdnYr: $('#crdnYr').val(),
crdnNo: $('#crdnNo').val(),
impltInfoId: $('#impltInfoId').val(),
@ -706,6 +876,31 @@
return true;
},
/**
* 저장
* 중요한 로직 주석: 폼 데이터와 그리드에서 선택된 이행 대상자 정보를 수집하여 저장 요청을 보냅니다.
*/
del: function() {
var self = this;
if( !confirm("선택한 [이행강제금 산출조사서 정보] 를 삭제 하시겠습니까?") ) return false;
// 신규/수정 자동 판단 API 사용
var url = '<c:url value="/crdn/crndRegistAndView/crdnLevyPrvntc/delLevyInfo.ajax"/>';
$.ajax({
url: url,
type: 'POST',
data: {"levyInfoId":LevyPrvntcPopup.levyInfoIdSelect},
success: function(response) {
if (response && response.success) {
alert(response.message || '부과예고 [이행강제금 산출조사서 정보]가 성공적으로 삭제되었습니다.');
} else {
alert(response.message || '삭제 중 오류가 발생했습니다.');
}
}
});
},
};
/**

Loading…
Cancel
Save