강제 반려 기능 추가

- 삭제된 승인자 있는 승인 요청 강제 반려 로직 추가
- JSP/JS: 강제 반려 버튼 추가 및 승인 상태별 표시 로직 구현
This commit is contained in:
Rinjae
2026-07-24 17:22:10 +09:00
parent c224f80cdf
commit e7297458f6
5 changed files with 137 additions and 7 deletions
@@ -101,6 +101,32 @@
}
});
$("#btn_app_force_reject").click(function () {
if (!confirm("승인자 목록에 삭제된 사용자가 있어 승인 진행이 불가능한 건입니다.\n강제 반려하시겠습니까?")) {
return;
}
var rejectReason = prompt("강제 반려 사유를 입력해 주세요");
if (rejectReason != null) {
$.ajax({
type: "POST",
url: url,
data: {cmd: "FORCE_REJECT", id: key, rejectReason: rejectReason},
success: function (args) {
alert("강제 반려되었습니다.");
if (window.dialogArguments && window.dialogArguments.self) {
window.dialogArguments.self.location.reload();
} else if (window.opener) {
window.opener.location.reload();
}
window.close();
},
error: function (e) {
alert(e.responseText);
}
});
}
});
$('#btn_app_redeploy').click(function () {
if (confirm("재배포 하시겠습니까?")) {
$.ajax({
@@ -178,10 +204,11 @@
$("#createdDate").text(data.createdDate).inputmask("9999-99-99 99:99:99.999", {'autoUnmask': true});
$("#expectEndDate").val(data.expectEndDate);
if (data.approvers.some(approver =>
var isCurrentApprover = data.approvers.some(approver =>
approver.approverStatus === 'CURRENT' &&
approver.user.USERID === loginUser
)) {
approver.user && approver.user.USERID === loginUser
);
if (isCurrentApprover) {
document.getElementById("btn_app_approve").style.display = "";
document.getElementById("btn_app_reject").style.display = "";
} else {
@@ -189,6 +216,14 @@
document.getElementById("btn_app_reject").style.display = "none";
}
// 삭제된 승인자(USERID 없음)로 진행 불가한 건: 요청됨/진행중 상태면 승인자가 아니어도 강제 반려 허용
var hasDeletedApprover = data.approvers.some(approver =>
!approver.user || !approver.user.USERID
);
var isProgressStatus = data.approvalStatus.code === 'REQUESTED' || data.approvalStatus.code === 'PROCESSING';
document.getElementById("btn_app_force_reject").style.display =
(hasDeletedApprover && isProgressStatus && !isCurrentApprover) ? "" : "none";
if (data.approvalStatus.code === 'FAILED') {
document.getElementById("btn_app_redeploy").style.display = "";
}
@@ -345,6 +380,9 @@
<button type="button" class="cssbtn" style="display: none;" id="btn_app_reject" level="W"><i
class="material-icons">close</i>반려
</button>
<button type="button" class="cssbtn" style="display: none;" id="btn_app_force_reject" level="W"><i
class="material-icons">block</i>강제 반려
</button>
<button type="button" class="cssbtn" style="display: none;" id="btn_app_redeploy" level="W"><i
class="material-icons">close</i>재처리
</button>
@@ -150,6 +150,32 @@
}
});
$("#btn_user_force_reject").click(function() {
if (!confirm("승인자 목록에 삭제된 사용자가 있어 승인 진행이 불가능한 건입니다.\n강제 반려하시겠습니까?")) {
return;
}
var rejectReason = prompt("강제 반려 사유를 입력해 주세요");
if (rejectReason != null) {
$.ajax({
type: "POST",
url: url,
data: {cmd: "FORCE_REJECT", id: key, rejectReason: rejectReason},
success: function(args) {
alert("강제 반려되었습니다.");
if (window.dialogArguments && window.dialogArguments.self) {
window.dialogArguments.self.location.reload();
} else if (window.opener) {
window.opener.location.reload();
}
window.close();
},
error: function(e) {
alert(e.responseText);
}
});
}
});
$('#btn_user_redeploy').click(function() {
if (confirm("재배포 하시겠습니까?")) {
$.ajax({
@@ -222,10 +248,11 @@
$("#mobileNumber").text(portalUser.mobileNumber);
$("#userStatusDescription").text(portalUser.userStatusDescription);
$("#roleCodeDescription").text(portalUser.roleCodeDescription);
if (data.approvers.some(approver =>
var isCurrentApprover = data.approvers.some(approver =>
approver.approverStatus === 'CURRENT' &&
approver.user.USERID === loginUser
)) {
approver.user && approver.user.USERID === loginUser
);
if (isCurrentApprover) {
document.getElementById("btn_user_approve").style.display = "";
document.getElementById("btn_user_reject").style.display = "";
} else {
@@ -233,6 +260,14 @@
document.getElementById("btn_user_reject").style.display = "none";
}
// 삭제된 승인자(USERID 없음)로 진행 불가한 건: 요청됨/진행중 상태면 승인자가 아니어도 강제 반려 허용
var hasDeletedApprover = data.approvers.some(approver =>
!approver.user || !approver.user.USERID
);
var isProgressStatus = data.approvalStatus.code === 'REQUESTED' || data.approvalStatus.code === 'PROCESSING';
document.getElementById("btn_user_force_reject").style.display =
(hasDeletedApprover && isProgressStatus && !isCurrentApprover) ? "" : "none";
if (data.approvalStatus.description === '배포실패'){
document.getElementById("btn_user_redeploy").style.display = "";
}
@@ -486,6 +521,7 @@
<div class="popup_button">
<button type="button" class="cssbtn" style="display: none;" id="btn_user_approve" level="W"><i class="material-icons">check</i>승인</button>
<button type="button" class="cssbtn" style="display: none;" id="btn_user_reject" level="W"><i class="material-icons">close</i>반려</button>
<button type="button" class="cssbtn" style="display: none;" id="btn_user_force_reject" level="W"><i class="material-icons">block</i>강제 반려</button>
<button type="button" class="cssbtn" style="display: none;" id="btn_user_redeploy" level="W"><i class="material-icons">close</i>재처리</button>
<button type="button" class="cssbtn" id="btn_close" level="R"><i class="material-icons">cancel</i> <%= localeMessage.getString("button.close") %>
</button>