diff --git a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
index 6a0c85f..aabba3c 100644
--- a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
+++ b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
@@ -247,7 +247,7 @@ function _fnc_datepick(){
- ~
-
+ ~
+
diff --git a/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp b/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp
index 1808499..f42f843 100644
--- a/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp
+++ b/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp
@@ -324,12 +324,12 @@ function fn_initGrid() {
title: '표면처리',
field: 'SURFACE_TREATMENT'
},
- // 14. 공급업체
+ // 14. 메이커
{
headerHozAlign: 'center',
hozAlign: 'left',
width: 150,
- title: '공급업체',
+ title: '메이커',
field: 'VENDOR'
},
// 15. 범주 이름
diff --git a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp
index b3f6dd0..e6f6109 100644
--- a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp
+++ b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp
@@ -164,7 +164,9 @@ var columns = [
{title:'PURCHASE_ORDER_MASTER_OBJID', field:'PURCHASE_ORDER_MASTER_OBJID' ,visible: false},
{title:'APPROVAL_OBJID' , field:'APPROVAL_OBJID' ,visible:false},
{title:'ROUTE_OBJID' , field:'ROUTE_OBJID' ,visible:false},
- {title:'MBOM_HEADER_OBJID' , field:'MBOM_HEADER_OBJID' ,visible:false}
+ {title:'MBOM_HEADER_OBJID' , field:'MBOM_HEADER_OBJID' ,visible:false},
+ {title:'DOC_TYPE' , field:'DOC_TYPE' ,visible:false},
+ {title:'HAS_PURCHASE_REQUEST' , field:'HAS_PURCHASE_REQUEST' ,visible:false}
,{headerHozAlign : 'center', hozAlign : 'center', title : "요청번호", field :"REQUEST_MNG_NO" , widthGrow:1.3,
formatter: fnc_createGridAnchorTag,
@@ -173,31 +175,42 @@ var columns = [
}
}
,{headerHozAlign : 'center', hozAlign : 'center', title : "구매유형", field :"PURCHASE_TYPE_NAME" , widthGrow:1.1 }
- ,{headerHozAlign : 'center', hozAlign : 'left' , title : "프로젝트번호", field :"PROJECT_NUMBER" , widthGrow:1.4 }
+ ,{headerHozAlign : 'center', hozAlign : 'left' , title : "프로젝트번호", field :"PROJECT_NUMBER" , widthGrow:1.4,
+ formatter: fnc_createGridAnchorTag,
+ cellClick: function(e, cell){
+ var orderNo = fnc_checkNull(cell.getData().PROJECT_NUMBER);
+ // 프로젝트 번호가 없으면 팝업 열지 않음
+ if(orderNo == '' || orderNo == null) {
+ return;
+ }
+ // 프로젝트 번호 클릭 시: 결재 정보 조회 모드 (saleNo에 "detail" 전달)
+ fn_openSaleRegPopup(orderNo, "detail");
+ }
+ }
,{headerHozAlign : 'center', hozAlign : 'center', title : "주문유형", field :"ORDER_TYPE_NAME" , widthGrow:1.1 }
,{headerHozAlign : 'center', hozAlign : 'center', title : "제품구분", field :"PRODUCT_NAME_FULL" , widthGrow:1.1}
,{headerHozAlign : 'center', hozAlign : 'left' , title : "고객사", field :"CUSTOMER_NAME" , widthGrow:1.5 }
,{headerHozAlign : 'center', hozAlign : 'center', title : "유/무상", field :"PAID_TYPE_NAME" , widthGrow:0.9 }
,{headerHozAlign : 'center', hozAlign : 'left', title : "품번", field :"PART_NO" , widthGrow:1.4}
,{headerHozAlign : 'center', hozAlign : 'left' , title : "품명", field :"PART_NAME" , widthGrow:1.8 }
- ,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"REQUEST_MNG_NO" , widthGrow:1.1,
+ ,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"HAS_PURCHASE_REQUEST" , widthGrow:1.1,
formatter: function(cell, formatterParams, onRendered){
- // 구매요청서 작성 여부: PART_NO가 있으면 품목이 저장된 것 (구매요청서 작성됨)
+ // 구매요청서 작성 여부: HAS_PURCHASE_REQUEST가 'Y'이면 구매요청서 작성됨
var data = cell.getData();
- var partNo = fnc_checkNull(data.PART_NO);
- var iconClass = (partNo != '' && partNo != null) ? 'file_icon' : 'file_empty_icon';
+ var hasPurchaseRequest = fnc_checkNull(data.HAS_PURCHASE_REQUEST);
+ var iconClass = (hasPurchaseRequest == 'Y') ? 'file_icon' : 'file_empty_icon';
return '';
},
cellClick : function(e, cell) {
var data = cell.getData();
- var partNo = fnc_checkNull(data.PART_NO);
+ var hasPurchaseRequest = fnc_checkNull(data.HAS_PURCHASE_REQUEST);
// 구매요청서가 작성된 경우(파란색 아이콘)만 팝업 열기
- if(partNo != '' && partNo != null) {
+ if(hasPurchaseRequest == 'Y') {
fn_openSalesRequestFormPopUp(data.OBJID);
}
+ }
}
- }
,{headerHozAlign : 'center', hozAlign : 'center', title : "요청인", field :"REQUEST_USER_NAME" , widthGrow:1.1 }
,{headerHozAlign : 'center', hozAlign : 'center', title : "입고요청일", field :"DELIVERY_REQUEST_DATE" , widthGrow:1.1 }
,{headerHozAlign : 'center', hozAlign : 'center', title : "작성일", field :"REGDATE_TITLE" , widthGrow:1.1 }
@@ -416,6 +429,14 @@ function fn_salesMngBOMOpenPopUp(bom_report_objid){
window.open("/salesMng/salesRequestDetailPopUp.do?"+param, "_strListPopup", "width=1200, height=800, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes, resizable=yes");
}
+function fn_openSaleRegPopup(orderNo, saleNo){
+ var popup_width = 1000;
+ var popup_height = 550;
+ // 한글 프로젝트 번호 인코딩 처리
+ var url = "/salesMgmt/salesRegForm.do?orderNo=" + encodeURIComponent(orderNo) + "&saleNo=" + (saleNo ? encodeURIComponent(saleNo) : "");
+ fn_centerPopup(popup_width, popup_height, url);
+}
+
function _fnc_datepick(){
var $dateinput = $("input.date_icon");
for(var i=0; i<$dateinput.length; i++){
@@ -640,14 +661,14 @@ function fn_executeCreateProposal(salesRequestObjid, targetParts) {
-
+
<%-- 품명 활성화 --%>
-
+
<%-- 상태 주석처리
@@ -662,11 +683,11 @@ function fn_executeCreateProposal(salesRequestObjid, targetParts) {
--%>
- <%--
--%>
+ <%--
--%>
<%-- 접수자 주석처리
-
+
@@ -677,8 +698,8 @@ function fn_executeCreateProposal(salesRequestObjid, targetParts) {
<%-- 작성일 활성화 --%>
- ~
-
+ ~
+
diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml
index 7aebd7e..7449abc 100644
--- a/src/com/pms/mapper/salesMng.xml
+++ b/src/com/pms/mapper/salesMng.xml
@@ -961,17 +961,31 @@ VALUES
SRM.REQUEST_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME,
- -- 구매요청서 작성 여부 (SALES_REQUEST_PART에 데이터가 있으면 'Y')
- (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) AS HAS_PURCHASE_REQUEST,
+ -- 문서유형 (PURCHASE_REQUEST: 구매요청서, PROPOSAL: 품의서)
+ SRM.DOC_TYPE,
+
+ -- 구매요청서 작성 여부 (SALES_REQUEST_PART에 DOC_TYPE이 PURCHASE_REQUEST인 데이터가 있으면 'Y')
+ (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END
+ FROM SALES_REQUEST_PART
+ WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
+ AND (DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL)) AS HAS_PURCHASE_REQUEST,
-- M-BOM 관련 컬럼
SRM.MBOM_HEADER_OBJID,
-- 추가된 컬럼들
SRM.PURCHASE_TYPE,
- (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
- SRM.ORDER_TYPE,
- (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
+ CODE_NAME(SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
+
+ -- 주문유형: 프로젝트 정보(CATEGORY_CD) 우선, 없으면 SALES_REQUEST_MASTER 값
+ COALESCE(
+ (SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
+ SRM.ORDER_TYPE
+ ) AS ORDER_TYPE,
+ CODE_NAME(COALESCE(
+ (SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
+ SRM.ORDER_TYPE
+ )) AS ORDER_TYPE_NAME,
-- 제품구분: 프로젝트 정보 우선, 없으면 SALES_REQUEST_MASTER 값
COALESCE(
@@ -1010,28 +1024,51 @@ VALUES
) AS PAID_TYPE_NAME,
-- 품번/품명 ("외 N건" 형태로 표시)
- (
- SELECT
- CASE
- WHEN COUNT(*) > 1 THEN
- (SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
- ELSE
- (SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
- END
- FROM SALES_REQUEST_PART
- WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
- ) AS PART_NO,
- (
- SELECT
- CASE
- WHEN COUNT(*) > 1 THEN
- (SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
- ELSE
- (SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
- END
- FROM SALES_REQUEST_PART
- WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
- ) AS PART_NAME,
+ -- M-BOM이 있으면 MBOM_DETAIL에서, 없으면 SALES_REQUEST_PART에서 조회
+ CASE
+ WHEN SRM.MBOM_HEADER_OBJID IS NOT NULL AND SRM.MBOM_HEADER_OBJID != '' THEN
+ (SELECT
+ CASE
+ WHEN COUNT(*) > 1 THEN
+ (SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
+ WHEN COUNT(*) = 1 THEN
+ (SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1))
+ ELSE NULL
+ END
+ FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID)
+ ELSE
+ (SELECT
+ CASE
+ WHEN COUNT(*) > 1 THEN
+ (SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
+ WHEN COUNT(*) = 1 THEN
+ (SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
+ ELSE NULL
+ END
+ FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID)
+ END AS PART_NO,
+ CASE
+ WHEN SRM.MBOM_HEADER_OBJID IS NOT NULL AND SRM.MBOM_HEADER_OBJID != '' THEN
+ (SELECT
+ CASE
+ WHEN COUNT(*) > 1 THEN
+ (SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
+ WHEN COUNT(*) = 1 THEN
+ (SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1))
+ ELSE NULL
+ END
+ FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID)
+ ELSE
+ (SELECT
+ CASE
+ WHEN COUNT(*) > 1 THEN
+ (SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
+ WHEN COUNT(*) = 1 THEN
+ (SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
+ ELSE NULL
+ END
+ FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID)
+ END AS PART_NAME,
SRM.PROJECT_NO,
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
@@ -1190,26 +1227,40 @@ VALUES
- AND SRM.OBJID IN (
- SELECT
- SRP.SALES_REQUEST_MASTER_OBJID
- FROM
- SALES_REQUEST_PART SRP
- LEFT OUTER JOIN PART_MNG PM
- ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
- WHERE PM.PART_NO LIKE '%${SEARCH_PART_NO}%'
- )
+ AND (
+ -- SALES_REQUEST_PART에서 검색
+ SRM.OBJID IN (
+ SELECT SRP.SALES_REQUEST_MASTER_OBJID
+ FROM SALES_REQUEST_PART SRP
+ LEFT OUTER JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
+ WHERE PM.PART_NO LIKE UPPER('%${SEARCH_PART_NO}%')
+ )
+ -- MBOM_DETAIL에서 검색 (M-BOM이 있는 경우)
+ OR SRM.MBOM_HEADER_OBJID IN (
+ SELECT MD.MBOM_HEADER_OBJID
+ FROM MBOM_DETAIL MD
+ LEFT OUTER JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
+ WHERE PM.PART_NO LIKE UPPER('%${SEARCH_PART_NO}%')
+ )
+ )
- AND SRM.OBJID IN (
- SELECT
- SRP.SALES_REQUEST_MASTER_OBJID
- FROM
- SALES_REQUEST_PART SRP
- LEFT OUTER JOIN PART_MNG PM
- ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
- WHERE PM.PART_NAME LIKE '%${SEARCH_PART_NAME}%'
- )
+ AND (
+ -- SALES_REQUEST_PART에서 검색
+ SRM.OBJID IN (
+ SELECT SRP.SALES_REQUEST_MASTER_OBJID
+ FROM SALES_REQUEST_PART SRP
+ LEFT OUTER JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
+ WHERE PM.PART_NAME LIKE UPPER('%${SEARCH_PART_NAME}%')
+ )
+ -- MBOM_DETAIL에서 검색 (M-BOM이 있는 경우)
+ OR SRM.MBOM_HEADER_OBJID IN (
+ SELECT MD.MBOM_HEADER_OBJID
+ FROM MBOM_DETAIL MD
+ LEFT OUTER JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
+ WHERE PM.PART_NAME LIKE UPPER('%${SEARCH_PART_NAME}%')
+ )
+ )
@@ -3567,10 +3618,17 @@ ORDER BY V.PATH2
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
SRM.PURCHASE_TYPE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
- SRM.ORDER_TYPE,
- (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
+ -- 주문유형: 프로젝트 정보(CATEGORY_CD) 우선, 없으면 SALES_REQUEST_MASTER 값
+ COALESCE(
+ (SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
+ SRM.ORDER_TYPE
+ ) AS ORDER_TYPE,
+ CODE_NAME(COALESCE(
+ (SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
+ SRM.ORDER_TYPE
+ )) AS ORDER_TYPE_NAME,
SRM.PRODUCT_NAME,
- (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
+ CODE_NAME(SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
-- 품번/품명 ("외 N건" 형태로 표시) - 품의서는 항상 SALES_REQUEST_PART에 데이터가 있음
(
SELECT
@@ -3612,7 +3670,13 @@ 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 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 A.APPR_STATUS IS NOT NULL THEN A.APPR_STATUS
WHEN SRM.STATUS = 'create' THEN '작성중'
@@ -3631,6 +3695,7 @@ ORDER BY V.PATH2
LEFT OUTER JOIN (
SELECT
B.OBJID AS ROUTE_OBJID,
+ B.STATUS AS ROUTE_STATUS,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
@@ -3675,7 +3740,14 @@ ORDER BY V.PATH2
- AND SRM.STATUS = #{SEARCH_STATUS}
+ AND (
+ CASE
+ 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
+ ) = #{SEARCH_STATUS}