Merge remote-tracking branch 'origin/main' into V20260210
This commit is contained in:
@@ -4455,20 +4455,25 @@ ORDER BY V.PATH2
|
||||
-- (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID AND MAIL_SENT = 'Y') AS MAIL_SENT,
|
||||
-- 발주일 (일단 주석처리)
|
||||
-- (SELECT TO_CHAR(MAX(ORDER_DATE), 'YYYY-MM-DD') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS ORDER_DATE,
|
||||
-- 상태: 결재 테이블 상태 우선, 없으면 SRM.STATUS
|
||||
-- 상태: 아마란스 결재 > 내부 결재 > SRM.STATUS 순서로 우선
|
||||
CASE
|
||||
WHEN AMR.STATUS = 'complete' THEN 'approvalComplete'
|
||||
WHEN AMR.STATUS = 'inProcess' THEN 'inProcess'
|
||||
WHEN AMR.STATUS = 'reject' THEN 'reject'
|
||||
WHEN A.ROUTE_STATUS = 'complete' THEN 'approvalComplete'
|
||||
WHEN A.ROUTE_STATUS = 'inProcess' THEN 'inProcess'
|
||||
WHEN A.ROUTE_STATUS = 'reject' THEN 'reject'
|
||||
ELSE SRM.STATUS
|
||||
END AS STATUS,
|
||||
CASE
|
||||
WHEN AMR.STATUS = 'complete' THEN '결재완료'
|
||||
WHEN AMR.STATUS = 'inProcess' THEN '결재 상신중'
|
||||
WHEN AMR.STATUS = 'reject' THEN '반려'
|
||||
WHEN A.APPR_STATUS IS NOT NULL THEN A.APPR_STATUS
|
||||
WHEN SRM.STATUS = 'create' THEN '작성중'
|
||||
-- WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
|
||||
-- WHEN SRM.STATUS = 'reject' THEN '반려'
|
||||
WHEN SRM.STATUS = 'create' THEN '등록중'
|
||||
ELSE ''
|
||||
END AS STATUS_TITLE,
|
||||
COALESCE(AMR.STATUS, '') AS AMARANTH_STATUS,
|
||||
SRM.WRITER,
|
||||
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
|
||||
SRM.REGDATE,
|
||||
@@ -4477,6 +4482,9 @@ ORDER BY V.PATH2
|
||||
A.ROUTE_OBJID
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
LEFT OUTER JOIN AMARANTH_APPROVAL AMR
|
||||
ON SRM.OBJID::VARCHAR = AMR.TARGET_OBJID
|
||||
AND AMR.TARGET_TYPE = 'PROPOSAL'
|
||||
LEFT OUTER JOIN (
|
||||
SELECT
|
||||
B.OBJID AS ROUTE_OBJID,
|
||||
|
||||
@@ -82,7 +82,7 @@ $(document).ready(function(){
|
||||
fn_search();
|
||||
});
|
||||
|
||||
// 결재상신
|
||||
// 결재상신 (Amaranth10 전자결재 SSO 방식)
|
||||
$("#btnApproval").click(function(){
|
||||
var selectedData = _tabulGrid.getSelectedData();
|
||||
if(selectedData.length<1){
|
||||
@@ -92,19 +92,18 @@ $(document).ready(function(){
|
||||
Swal.fire("한번에 한개의 결재만 가능합니다.");
|
||||
return false;
|
||||
}else{
|
||||
|
||||
var targetStatus = fnc_checkNull(selectedData[0].STATUS_TITLE);
|
||||
var status = fnc_checkNull(selectedData[0].STATUS);
|
||||
var amaranthStatus = fnc_checkNull(selectedData[0].AMARANTH_STATUS);
|
||||
|
||||
if(targetStatus == "결재완료" || targetStatus == "결재중" || status == "cancel"){
|
||||
Swal.fire("작성중/결재반려인 상태만 결재상신 가능합니다.");
|
||||
if(amaranthStatus == "inProcess"){
|
||||
Swal.fire("결재 진행중인 건은 상신할 수 없습니다.");
|
||||
return false;
|
||||
}else if(amaranthStatus == "complete"){
|
||||
Swal.fire("결재 완료된 건은 상신할 수 없습니다.");
|
||||
return false;
|
||||
}else{
|
||||
if(confirm("결재상신 하시겠습니까?")){
|
||||
var objId = fnc_checkNull(selectedData[0].OBJID);
|
||||
//var title = encodeURIComponent(fnc_checkNull(selectedData[0].CONTRACT_NO));
|
||||
var title = encodeURIComponent("품의서 결재");
|
||||
window.open("/approval/registApproval.do?targetType=PROPOSAL&targetObjId="+objId+"&approvalTitle="+title,"registApproval","width=700,height=700");
|
||||
fn_openAmaranthApproval(objId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -212,13 +211,14 @@ var columns = [
|
||||
{headerHozAlign:'center', hozAlign:'center', title:"제품구분", field:"PRODUCT_NAME_TITLE", widthGrow:1.0},
|
||||
{headerHozAlign:'center', hozAlign:'left', title:"품번", field:"PART_NO", widthGrow:1.5},
|
||||
{headerHozAlign:'center', hozAlign:'left', title:"품명", field:"PART_NAME", widthGrow:1.8},
|
||||
{title:'AMARANTH_STATUS', field:'AMARANTH_STATUS', visible: false},
|
||||
{headerHozAlign:'center', hozAlign:'center', title:"결재상태", field:"STATUS_TITLE", widthGrow:1.0,
|
||||
formatter:fnc_createGridAnchorTag,
|
||||
cellClick:function(e, cell){
|
||||
var statusTitle = fnc_checkNull(cell.getData().STATUS_TITLE);
|
||||
if(statusTitle == "결재중" || statusTitle == "결재완료" || statusTitle == "반려"){
|
||||
fnc_approvalDetail(cell.getData().APPROVAL_OBJID, cell.getData().ROUTE_OBJID);
|
||||
}
|
||||
formatter:function(cell){
|
||||
var val = fnc_checkNull(cell.getValue());
|
||||
if(val == "결재 상신중") return "<span style='color:#e67e22; font-weight:bold;'>" + val + "</span>";
|
||||
if(val == "결재완료") return "<span style='color:#27ae60; font-weight:bold;'>" + val + "</span>";
|
||||
if(val == "반려") return "<span style='color:#e74c3c; font-weight:bold;'>" + val + "</span>";
|
||||
return val;
|
||||
}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'center', title:"작성일", field:"REGDATE_TITLE", widthGrow:1.0},
|
||||
@@ -243,6 +243,40 @@ function fn_search(){
|
||||
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/salesMng/proposalMngGridList.do", columns, true);
|
||||
}
|
||||
|
||||
// Amaranth10 전자결재 SSO 팝업 열기
|
||||
function fn_openAmaranthApproval(objId){
|
||||
var selectedData = _tabulGrid.getSelectedData();
|
||||
var proposalNo = fnc_checkNull(selectedData[0].PROPOSAL_NO);
|
||||
var title = "품의서 결재" + (proposalNo ? " - " + proposalNo : "");
|
||||
|
||||
$.ajax({
|
||||
url: "/approval/getAmaranthSsoUrl.do",
|
||||
type: "POST",
|
||||
data: {
|
||||
"targetType": "PROPOSAL",
|
||||
"targetObjId": objId,
|
||||
"approvalTitle": title,
|
||||
"outProcessCode": "${AMARANTH_OUT_PROCESS_CODE}",
|
||||
"formId": "",
|
||||
"compSeq": "1000",
|
||||
"deptSeq": ""
|
||||
},
|
||||
dataType: "json",
|
||||
success: function(data){
|
||||
if(data.resultCode == 0 && data.resultData && data.resultData.fullUrl){
|
||||
var fullUrl = data.resultData.fullUrl;
|
||||
window.open(fullUrl, "amaranthApproval", "width=1200,height=900,scrollbars=yes,resizable=yes");
|
||||
} else {
|
||||
Swal.fire("결재 연동 오류: " + (data.resultMsg || "알 수 없는 오류"));
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error){
|
||||
console.error("Amaranth SSO URL 요청 오류:", error);
|
||||
Swal.fire("결재 시스템 연동 중 오류가 발생했습니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 품의서 상세 팝업
|
||||
function fn_openProposalFormPopUp(objId){
|
||||
var url = "/salesMng/proposalFormPopUp.do?PROPOSAL_OBJID=" + fnc_checkNull(objId);
|
||||
|
||||
@@ -4535,20 +4535,25 @@ ORDER BY V.PATH2
|
||||
-- (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID AND MAIL_SENT = 'Y') AS MAIL_SENT,
|
||||
-- 발주일 (일단 주석처리)
|
||||
-- (SELECT TO_CHAR(MAX(ORDER_DATE), 'YYYY-MM-DD') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS ORDER_DATE,
|
||||
-- 상태: 결재 테이블 상태 우선, 없으면 SRM.STATUS
|
||||
-- 상태: 아마란스 결재 > 내부 결재 > SRM.STATUS 순서로 우선
|
||||
CASE
|
||||
WHEN AMR.STATUS = 'complete' THEN 'approvalComplete'
|
||||
WHEN AMR.STATUS = 'inProcess' THEN 'inProcess'
|
||||
WHEN AMR.STATUS = 'reject' THEN 'reject'
|
||||
WHEN A.ROUTE_STATUS = 'complete' THEN 'approvalComplete'
|
||||
WHEN A.ROUTE_STATUS = 'inProcess' THEN 'inProcess'
|
||||
WHEN A.ROUTE_STATUS = 'reject' THEN 'reject'
|
||||
ELSE SRM.STATUS
|
||||
END AS STATUS,
|
||||
CASE
|
||||
WHEN AMR.STATUS = 'complete' THEN '결재완료'
|
||||
WHEN AMR.STATUS = 'inProcess' THEN '결재 상신중'
|
||||
WHEN AMR.STATUS = 'reject' THEN '반려'
|
||||
WHEN A.APPR_STATUS IS NOT NULL THEN A.APPR_STATUS
|
||||
WHEN SRM.STATUS = 'create' THEN '작성중'
|
||||
-- WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
|
||||
-- WHEN SRM.STATUS = 'reject' THEN '반려'
|
||||
WHEN SRM.STATUS = 'create' THEN '등록중'
|
||||
ELSE ''
|
||||
END AS STATUS_TITLE,
|
||||
COALESCE(AMR.STATUS, '') AS AMARANTH_STATUS,
|
||||
SRM.WRITER,
|
||||
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
|
||||
SRM.REGDATE,
|
||||
@@ -4557,6 +4562,9 @@ ORDER BY V.PATH2
|
||||
A.ROUTE_OBJID
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
LEFT OUTER JOIN AMARANTH_APPROVAL AMR
|
||||
ON SRM.OBJID::VARCHAR = AMR.TARGET_OBJID
|
||||
AND AMR.TARGET_TYPE = 'PROPOSAL'
|
||||
LEFT OUTER JOIN (
|
||||
SELECT
|
||||
B.OBJID AS ROUTE_OBJID,
|
||||
|
||||
@@ -1336,6 +1336,7 @@ public class SalesMngController {
|
||||
}
|
||||
|
||||
request.setAttribute("code_map", code_map);
|
||||
request.setAttribute("AMARANTH_OUT_PROCESS_CODE", Constants.AMARANTH_OUT_PROCESS_CODE);
|
||||
return returnUrl;
|
||||
}
|
||||
|
||||
|
||||
@@ -1949,11 +1949,7 @@ public class ApprovalService {
|
||||
}
|
||||
} else if("ECR".equals(targetType)){
|
||||
Map<String, Object> ecrParam = new HashMap<String, Object>();
|
||||
try {
|
||||
ecrParam.put("OBJID", Long.parseLong(targetObjId));
|
||||
} catch(NumberFormatException nfe){
|
||||
ecrParam.put("OBJID", targetObjId);
|
||||
}
|
||||
ecrParam.put("OBJID", targetObjId);
|
||||
Map<String, Object> ecrInfo = sqlSession.selectOne("quality.getEcrInfo", ecrParam);
|
||||
|
||||
if(ecrInfo != null){
|
||||
@@ -3005,11 +3001,7 @@ public class ApprovalService {
|
||||
}
|
||||
} else if("ECR".equals(targetType) && !targetObjId.isEmpty()){
|
||||
Map<String, Object> ecrParam = new HashMap();
|
||||
try {
|
||||
ecrParam.put("OBJID", Long.parseLong(targetObjId));
|
||||
} catch(NumberFormatException nfe){
|
||||
ecrParam.put("OBJID", targetObjId);
|
||||
}
|
||||
ecrParam.put("OBJID", targetObjId);
|
||||
System.out.println("ECR 본문 조회 - OBJID: " + targetObjId);
|
||||
Map<String, Object> ecrInfo = sqlSession.selectOne("quality.getEcrInfo", ecrParam);
|
||||
System.out.println("ECR 조회 결과: " + (ecrInfo != null ? "데이터 있음" : "null"));
|
||||
@@ -3082,9 +3074,21 @@ public class ApprovalService {
|
||||
String changeTypeName = CommonUtils.checkNull(ecrInfo.get("CHANGE_TYPE_NAME"));
|
||||
String ecrDocSummary = CommonUtils.checkNull(ecrInfo.get("ECR_DOC_SUMMARY"));
|
||||
String ecrDocReason = CommonUtils.checkNull(ecrInfo.get("ECR_DOC_REASON"));
|
||||
String ecrDocFormNo = CommonUtils.checkNull(ecrInfo.get("ECR_DOC_FORM_NO"));
|
||||
String ecrRevNo = CommonUtils.checkNull(ecrInfo.get("ECR_REV_NO"));
|
||||
String ecrRevDate = CommonUtils.checkNull(ecrInfo.get("ECR_REV_DATE"));
|
||||
String ecrDocAuthor = CommonUtils.checkNull(ecrInfo.get("ECR_DOC_AUTHOR"));
|
||||
|
||||
html.append("<div style='font-family:맑은 고딕,Malgun Gothic,sans-serif; padding:10px;'>");
|
||||
html.append("<h2 style='text-align:center; margin-bottom:15px;'>ECR (Engineering Change Request)</h2>");
|
||||
html.append("<table style='width:100%; margin-bottom:5px;'><tr>");
|
||||
html.append("<td style='text-align:center; vertical-align:middle;'><h2 style='margin:0;'>ECR (Engineering Change Request)</h2></td>");
|
||||
html.append("<td style='width:180px; vertical-align:top;'>");
|
||||
html.append("<table style='width:100%; border-collapse:collapse; border:1px solid #333;'>");
|
||||
html.append("<tr><td style='border:1px solid #333; padding:4px 8px; background:#f0f0f0; font-weight:bold; width:80px;'>Form no.</td><td style='border:1px solid #333; padding:4px 8px;'>").append(ecrDocFormNo).append("</td></tr>");
|
||||
html.append("<tr><td style='border:1px solid #333; padding:4px 8px; background:#f0f0f0; font-weight:bold;'>Rev.no</td><td style='border:1px solid #333; padding:4px 8px;'>").append(ecrRevNo).append("</td></tr>");
|
||||
html.append("<tr><td style='border:1px solid #333; padding:4px 8px; background:#f0f0f0; font-weight:bold;'>Rev. date</td><td style='border:1px solid #333; padding:4px 8px;'>").append(ecrRevDate).append("</td></tr>");
|
||||
html.append("<tr><td style='border:1px solid #333; padding:4px 8px; background:#f0f0f0; font-weight:bold;'>Author</td><td style='border:1px solid #333; padding:4px 8px;'>").append(ecrDocAuthor).append("</td></tr>");
|
||||
html.append("</table></td></tr></table>");
|
||||
|
||||
html.append("<table style='width:100%; border-collapse:collapse; border:1px solid #333; margin-bottom:15px;'>");
|
||||
html.append("<tr>");
|
||||
@@ -3177,7 +3181,6 @@ public class ApprovalService {
|
||||
String ecrDocAuthor = CommonUtils.checkNull(ecrInfo.get("ECR_DOC_AUTHOR"));
|
||||
String ecrDocSummary = CommonUtils.checkNull(ecrInfo.get("ECR_DOC_SUMMARY"));
|
||||
String ecrDocReason = CommonUtils.checkNull(ecrInfo.get("ECR_DOC_REASON"));
|
||||
|
||||
html.append("<!DOCTYPE html><html><head><meta charset='UTF-8'>");
|
||||
html.append("<title>ECR - ").append(ecrNo).append("</title>");
|
||||
html.append("<style>");
|
||||
|
||||
Reference in New Issue
Block a user