diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/project.xml b/WebContent/WEB-INF/classes/com/pms/mapper/project.xml index f8d6dc3..78f3f2f 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/project.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/project.xml @@ -7627,29 +7627,65 @@ SELECT UPDATE PROJECT_MGMT - SET - DUE_DATE = #{due_date} - ,CUSTOMER_PROJECT_NAME = #{customer_project_name} - ,LOCATION = #{location} - ,SETUP = #{setup} - ,FACILITY = #{facility} - ,FACILITY_TYPE = #{facility_type} - ,FACILITY_DEPTH = #{facility_depth} - ,CONTRACT_DATE = #{contract_date} - ,PO_NO = #{po_no} - ,PM_USER_ID = #{pm_user_id} - ,CONTRACT_CURRENCY = #{contract_currency} - ,CONTRACT_PRICE_CURRENCY = #{contract_price_currency} - ,CONTRACT_PRICE = #{contract_price} - ,PROJECT_NAME = #{project_name} - ,CONTRACT_DEL_DATE = #{contract_del_date} - ,REQ_DEL_DATE = #{req_del_date} - ,CONTRACT_COMPANY = #{contract_company} - ,MANUFACTURE_PLANT = #{manufacture_plant} - ,PART_OBJID = #{part_objid} - ,PART_NO = #{part_no} - ,PART_NAME = #{part_name} - ,QUANTITY = #{quantity} + + + DUE_DATE = #{due_date}, + + + CUSTOMER_PROJECT_NAME = #{customer_project_name}, + + + LOCATION = #{location}, + + + SETUP = #{setup}, + + + FACILITY = #{facility}, + + + FACILITY_TYPE = #{facility_type}, + + + FACILITY_DEPTH = #{facility_depth}, + + + CONTRACT_DATE = #{contract_date}, + + + PO_NO = #{po_no}, + + + PM_USER_ID = #{pm_user_id}, + + + CONTRACT_CURRENCY = #{contract_currency}, + + + CONTRACT_PRICE_CURRENCY = #{contract_price_currency}, + + + CONTRACT_PRICE = #{contract_price}, + + + PROJECT_NAME = #{project_name}, + + + CONTRACT_DEL_DATE = #{contract_del_date}, + + + REQ_DEL_DATE = #{req_del_date}, + + + CONTRACT_COMPANY = #{contract_company}, + + + MANUFACTURE_PLANT = #{manufacture_plant}, + + + QUANTITY = #{quantity} + + WHERE CONTRACT_OBJID = #{objId} AND PART_OBJID = #{part_objid} diff --git a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml index 4765e7f..b453411 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml @@ -1514,8 +1514,11 @@ SELECT A.OBJID ,A.CATEGORY_CD + ,CODE_NAME(A.CATEGORY_CD) AS CATEGORY_NAME ,A.CUSTOMER_OBJID + ,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = A.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME ,A.PRODUCT + ,CODE_NAME(A.PRODUCT) AS PRODUCT_NAME ,A.CUSTOMER_PROJECT_NAME ,A.STATUS_CD ,A.DUE_DATE @@ -1558,12 +1561,14 @@ ,A.EST_COMP_DATE ,A.EST_RESULT_CD ,A.AREA_CD + ,CODE_NAME(A.AREA_CD) AS AREA_NAME ,A.TARGET_PROJECT_NO ,A.TARGET_PROJECT_NO_DIRECT ,A.CUSTOMER_PRODUCTION_NO ,A.MECHANICAL_TYPE ,A.OVERHAUL_ORDER ,A.PAID_TYPE + ,(case when A.PAID_TYPE = 'paid' then '유상' when A.PAID_TYPE = 'free' then '무상' else A.PAID_TYPE end) AS PAID_TYPE_NAME ,A.RECEIPT_DATE ,A.PART_NO ,A.PART_NAME @@ -3614,7 +3619,9 @@ ORDER BY ASM.SUPPLY_NAME SELECT - PROJECT_NAME + OBJID, + PROJECT_NAME, + PROJECT_NO FROM PROJECT_MGMT WHERE CONTRACT_OBJID = #{objId} diff --git a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index 9da6a5b..27cd7b0 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -1660,11 +1660,50 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC - /* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 CONTRACT_OBJID 조회 (최신 1개) */ - SELECT CONTRACT_OBJID - FROM PROJECT_MGMT - WHERE PROJECT_NO = #{orderNo} - ORDER BY REGDATE DESC + /* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 상세 정보 조회 (최신 1개) */ + SELECT + PM.CONTRACT_OBJID, + PM.PART_NO, + PM.PART_NAME, + -- 요청납기 (CONTRACT_ITEM의 DUE_DATE 우선, 없으면 PROJECT_MGMT.DUE_DATE) + COALESCE( + (SELECT CI.DUE_DATE + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + LIMIT 1), + PM.DUE_DATE + ) AS REQ_DEL_DATE, + -- S/N 조회 (CONTRACT_ITEM_SERIAL에서) + (SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO) + FROM CONTRACT_ITEM CI + JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + AND UPPER(CIS.STATUS) = 'ACTIVE' + AND CIS.SERIAL_NO IS NOT NULL + ) AS SERIAL_NO, + -- 고객요청사항 (CONTRACT_ITEM에서) + (SELECT CI.CUSTOMER_REQUEST + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + LIMIT 1 + ) AS CUSTOMER_REQUEST, + -- 반납사유 (CONTRACT_ITEM에서) + (SELECT CI.RETURN_REASON + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + LIMIT 1 + ) AS RETURN_REASON + FROM PROJECT_MGMT PM + WHERE PM.PROJECT_NO = #{orderNo} + ORDER BY PM.REGDATE DESC LIMIT 1 diff --git a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp index d467ff0..1dacc89 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp @@ -61,7 +61,7 @@ var columns = [ {title:'CONTRACT_OBJID', field:'CONTRACT_OBJID', visible: false}, {title:'BOM_REPORT_OBJID', field:'BOM_REPORT_OBJID', visible: false}, - // 체크박스 + // 1. 체크박스 { headerHozAlign: 'center', hozAlign: 'center', @@ -74,7 +74,7 @@ var columns = [ headerSort: false }, - // 프로젝트번호 + // 2. 프로젝트번호 { headerHozAlign: 'center', hozAlign: 'left', @@ -83,7 +83,7 @@ var columns = [ field: 'PROJECT_NO' }, - // 주문유형 + // 3. 주문유형 { headerHozAlign: 'center', hozAlign: 'center', @@ -92,7 +92,7 @@ var columns = [ field: 'CATEGORY_NAME' }, - // 제품구분 + // 4. 제품구분 { headerHozAlign: 'center', hozAlign: 'center', @@ -101,7 +101,7 @@ var columns = [ field: 'PRODUCT_NAME' }, - // 국내/해외 + // 5. 국내/해외 { headerHozAlign: 'center', hozAlign: 'center', @@ -110,7 +110,7 @@ var columns = [ field: 'AREA_NAME' }, - // 접수일 + // 6. 접수일 { headerHozAlign: 'center', hozAlign: 'center', @@ -119,7 +119,7 @@ var columns = [ field: 'RECEIPT_DATE' }, - // 고객사 + // 7. 고객사 { headerHozAlign: 'center', hozAlign: 'left', @@ -128,7 +128,7 @@ var columns = [ field: 'CUSTOMER_NAME' }, - // 유/무상 + // 8. 유/무상 { headerHozAlign: 'center', hozAlign: 'center', @@ -137,7 +137,7 @@ var columns = [ field: 'PAID_TYPE_NAME' }, - // 품번 + // 9. 품번 { headerHozAlign: 'center', hozAlign: 'left', @@ -146,7 +146,7 @@ var columns = [ field: 'PART_NO' }, - // 품명 + // 10. 품명 { headerHozAlign: 'center', hozAlign: 'left', @@ -155,7 +155,7 @@ var columns = [ field: 'PART_NAME' }, - // S/N + // 11. S/N { headerHozAlign: 'center', hozAlign: 'center', @@ -164,7 +164,7 @@ var columns = [ field: 'SERIAL_NO' }, - // 수주수량 + // 12. 수주수량 { headerHozAlign: 'center', hozAlign: 'right', @@ -173,7 +173,7 @@ var columns = [ field: 'QUANTITY' }, - // 요청납기 + // 13. 요청납기 { headerHozAlign: 'center', hozAlign: 'center', @@ -182,7 +182,7 @@ var columns = [ field: 'REQ_DEL_DATE' }, - // 고객사요청사항 + // 14. 고객사요청사항 { headerHozAlign: 'center', hozAlign: 'left', @@ -191,35 +191,7 @@ var columns = [ field: 'CUSTOMER_REQUEST' }, - // E-BOM - { - headerHozAlign: 'center', - hozAlign: 'center', - width: 100, - title: 'E-BOM', - field: 'EBOM_STATUS', - formatter: fnc_subInfoValueFormatter, - cellClick: function(e, cell) { - var bomReportObjid = fnc_checkNull(cell.getData().BOM_REPORT_OBJID); - var projectMgmtObjid = fnc_checkNull(cell.getData().OBJID); - var partNo = fnc_checkNull(cell.getData().PART_NO); - var partName = fnc_checkNull(cell.getData().PART_NAME); - - // E-BOM이 있든 없든 선택 팝업 열기 (할당된 경우 상세 + 변경 가능) - fn_openEBomSelectPopup(projectMgmtObjid, partNo, partName, bomReportObjid); - } - }, - - // E-BOM 작성일 - { - headerHozAlign: 'center', - hozAlign: 'center', - width: 100, - title: '작성일', - field: 'EBOM_REGDATE' - }, - - // M-BOM + // 15. M-BOM { headerHozAlign: 'center', hozAlign: 'center', @@ -233,28 +205,20 @@ var columns = [ } }, - // M-BOM Version + // 16. 최종저장일 (M-BOM 작성일) { headerHozAlign: 'center', hozAlign: 'center', - width: 80, - title: 'Version', - field: 'MBOM_VERSION' - }, - - // M-BOM 작성일 - { - headerHozAlign: 'center', - hozAlign: 'center', - width: 100, - title: '작성일', + width: 120, + title: '최종저장일', field: 'MBOM_REGDATE' } ]; // 검색 함수 function fn_search(){ - _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/productionplanning/mBomMgmtGridList.do", columns, true); + // showCheck를 false로 설정하여 자동 체크박스 제거 (columns에 이미 체크박스 정의되어 있음) + _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/productionplanning/mBomMgmtGridList.do", columns, false); } // E-BOM 팝업 diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/projectDetailView.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/projectDetailView.jsp index 574402a..ff1d88c 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/projectDetailView.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/projectDetailView.jsp @@ -114,10 +114,17 @@ 1 ${info.PART_NO} ${info.PART_NAME} - - - - - - - - + ${info.SERIAL_NO} + ${info.REQ_DEL_DATE} + ${info.CUSTOMER_REQUEST} + + + + ${info.RETURN_REASON} + + - + + diff --git a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java index fca5778..808bb46 100644 --- a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java +++ b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java @@ -307,6 +307,33 @@ public class SalesNcollectMgmtController { contractParam.put("objId", contractObjId); Map contractInfo = commonService.selectOne("contractMgmt.getContractInfo", request, contractParam); + // PROJECT_MGMT에서 품번/품명/S/N/요청납기/고객요청사항/반납사유 조회 + if(projectInfo != null) { + // 품번 + if(contractInfo.get("PART_NO") == null || "".equals(contractInfo.get("PART_NO"))) { + contractInfo.put("PART_NO", projectInfo.get("part_no") != null ? projectInfo.get("part_no") : projectInfo.get("PART_NO")); + } + // 품명 + if(contractInfo.get("PART_NAME") == null || "".equals(contractInfo.get("PART_NAME"))) { + contractInfo.put("PART_NAME", projectInfo.get("part_name") != null ? projectInfo.get("part_name") : projectInfo.get("PART_NAME")); + } + // S/N + Object serialNo = projectInfo.get("serial_no") != null ? projectInfo.get("serial_no") : projectInfo.get("SERIAL_NO"); + contractInfo.put("SERIAL_NO", serialNo != null ? serialNo : "-"); + + // 요청납기 + Object reqDelDate = projectInfo.get("req_del_date") != null ? projectInfo.get("req_del_date") : projectInfo.get("REQ_DEL_DATE"); + contractInfo.put("REQ_DEL_DATE", reqDelDate != null ? reqDelDate : "-"); + + // 고객요청사항 + Object customerRequest = projectInfo.get("customer_request") != null ? projectInfo.get("customer_request") : projectInfo.get("CUSTOMER_REQUEST"); + contractInfo.put("CUSTOMER_REQUEST", customerRequest != null ? customerRequest : "-"); + + // 반납사유 + Object returnReason = projectInfo.get("return_reason") != null ? projectInfo.get("return_reason") : projectInfo.get("RETURN_REASON"); + contractInfo.put("RETURN_REASON", returnReason != null ? returnReason : "-"); + } + // 결재 라인 정보 조회 Map approvalParam = new HashMap(); approvalParam.put("objId", contractObjId); @@ -318,6 +345,8 @@ public class SalesNcollectMgmtController { System.out.println("=== 주문서 관리 데이터 조회 완료 ==="); System.out.println("CATEGORY_NAME: " + contractInfo.get("CATEGORY_NAME")); System.out.println("PRODUCT_NAME: " + contractInfo.get("PRODUCT_NAME")); + System.out.println("PART_NO: " + contractInfo.get("PART_NO")); + System.out.println("PART_NAME: " + contractInfo.get("PART_NAME")); System.out.println("결재 라인 개수: " + (approvalLine != null ? approvalLine.size() : 0)); // 별도의 JSP로 이동 diff --git a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index 9da6a5b..27cd7b0 100644 --- a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -1660,11 +1660,50 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC - /* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 CONTRACT_OBJID 조회 (최신 1개) */ - SELECT CONTRACT_OBJID - FROM PROJECT_MGMT - WHERE PROJECT_NO = #{orderNo} - ORDER BY REGDATE DESC + /* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 상세 정보 조회 (최신 1개) */ + SELECT + PM.CONTRACT_OBJID, + PM.PART_NO, + PM.PART_NAME, + -- 요청납기 (CONTRACT_ITEM의 DUE_DATE 우선, 없으면 PROJECT_MGMT.DUE_DATE) + COALESCE( + (SELECT CI.DUE_DATE + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + LIMIT 1), + PM.DUE_DATE + ) AS REQ_DEL_DATE, + -- S/N 조회 (CONTRACT_ITEM_SERIAL에서) + (SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO) + FROM CONTRACT_ITEM CI + JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + AND UPPER(CIS.STATUS) = 'ACTIVE' + AND CIS.SERIAL_NO IS NOT NULL + ) AS SERIAL_NO, + -- 고객요청사항 (CONTRACT_ITEM에서) + (SELECT CI.CUSTOMER_REQUEST + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + LIMIT 1 + ) AS CUSTOMER_REQUEST, + -- 반납사유 (CONTRACT_ITEM에서) + (SELECT CI.RETURN_REASON + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID + AND CI.PART_OBJID = PM.PART_OBJID + AND CI.STATUS = 'ACTIVE' + LIMIT 1 + ) AS RETURN_REASON + FROM PROJECT_MGMT PM + WHERE PM.PROJECT_NO = #{orderNo} + ORDER BY PM.REGDATE DESC LIMIT 1