diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml
index 27b856e..23f88e6 100644
--- a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml
+++ b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml
@@ -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,
diff --git a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
index 403bdde..5be9443 100644
--- a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
+++ b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
@@ -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 "" + val + "";
+ if(val == "결재완료") return "" + val + "";
+ if(val == "반려") return "" + val + "";
+ 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);
diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml
index 27b856e..23f88e6 100644
--- a/src/com/pms/mapper/salesMng.xml
+++ b/src/com/pms/mapper/salesMng.xml
@@ -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,
diff --git a/src/com/pms/salesmgmt/controller/SalesMngController.java b/src/com/pms/salesmgmt/controller/SalesMngController.java
index 9103273..4bdaf25 100644
--- a/src/com/pms/salesmgmt/controller/SalesMngController.java
+++ b/src/com/pms/salesmgmt/controller/SalesMngController.java
@@ -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;
}
diff --git a/src/com/pms/service/ApprovalService.java b/src/com/pms/service/ApprovalService.java
index 348d86a..d850986 100644
--- a/src/com/pms/service/ApprovalService.java
+++ b/src/com/pms/service/ApprovalService.java
@@ -1947,11 +1947,7 @@ public class ApprovalService {
}
} else if("ECR".equals(targetType)){
Map ecrParam = new HashMap();
- try {
- ecrParam.put("OBJID", Long.parseLong(targetObjId));
- } catch(NumberFormatException nfe){
- ecrParam.put("OBJID", targetObjId);
- }
+ ecrParam.put("OBJID", targetObjId);
Map ecrInfo = sqlSession.selectOne("quality.getEcrInfo", ecrParam);
if(ecrInfo != null){
@@ -2562,11 +2558,7 @@ public class ApprovalService {
}
} else if("ECR".equals(targetType) && !targetObjId.isEmpty()){
Map 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 ecrInfo = sqlSession.selectOne("quality.getEcrInfo", ecrParam);
System.out.println("ECR 조회 결과: " + (ecrInfo != null ? "데이터 있음" : "null"));