From 69d7f8aba61f0a119c282af7a09194d1cc39beee Mon Sep 17 00:00:00 2001 From: leeheejin Date: Mon, 10 Nov 2025 17:28:42 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=ED=96=89=EC=9D=B4=EB=9E=91=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=ED=95=84=ED=84=B0=20=EB=B0=94=EA=BE=B8=EA=B8=B0=20?= =?UTF-8?q?=EC=97=91=EC=85=80=EB=8F=84=20=EC=B6=9C=ED=95=98=EC=9D=BC=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EB=A7=9E=EC=B6=94=EA=B2=8C=20=EC=9D=BC?= =?UTF-8?q?=EB=8B=A8=20=EB=A1=9C=EC=A7=81=20=ED=95=B4=EB=86=A8=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pms/salesmgmt/mapper/contractMgmt.xml | 140 ++++--- .../salesmgmt/mapper/salesNcollectMgmt.xml | 378 +++++++++++------- .../view/contractMgmt/estimateList_new.jsp | 338 +++++++++------- .../view/contractMgmt/orderMgmtList.jsp | 348 ++++++++-------- .../view/contractMgmt/supplyMngList.jsp | 60 +-- .../salesmgmt/salesMgmt/revenueMgmtList.jsp | 178 ++++----- .../salesmgmt/salesMgmt/salesMgmtList.jsp | 268 ++++++++++--- WebContent/js/common.js | 6 +- .../SalesNcollectMgmtController.java | 57 ++- src/com/pms/salesmgmt/mapper/contractMgmt.xml | 140 ++++--- .../salesmgmt/mapper/salesNcollectMgmt.xml | 378 +++++++++++------- 11 files changed, 1370 insertions(+), 921 deletions(-) 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 968bf98..7779bd8 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml @@ -755,35 +755,39 @@ AND PAID_TYPE = #{paid_type} - - - AND EXISTS ( - SELECT 1 - FROM CONTRACT_ITEM CI - WHERE CI.CONTRACT_OBJID = T.OBJID - AND CI.STATUS = 'ACTIVE' - AND CI.PART_OBJID = #{search_partObjId} - ) - - - - AND UPPER(SERIAL_NO) LIKE UPPER('%${search_serialNo}%') - - - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD') - - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD') - + + + AND EXISTS ( + SELECT 1 + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + AND CI.PART_OBJID = #{search_partObjId} + ) + + + + AND UPPER(SERIAL_NO) LIKE UPPER('%${search_serialNo}%') + + + + AND UPPER(PO_NO) LIKE UPPER('%${search_poNo}%') + + + + AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{order_start_date}, 'YYYY-MM-DD') + + + AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') TO_DATE(#{order_end_date}, 'YYYY-MM-DD') + - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD') - - - AND TO_DATE(DUE_DATE,'YYYY-MM-DD') TO_DATE(#{due_end_date}, 'YYYY-MM-DD') - - ORDER BY REGDATE DESC + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD') + + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') TO_DATE(#{due_end_date}, 'YYYY-MM-DD') + + ORDER BY REGDATE DESC + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD') + + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') TO_DATE(#{due_end_date}, 'YYYY-MM-DD') + + ORDER BY REGDATE DESC + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_MGMT CM + WHERE CM.OBJID = T.CONTRACT_OBJID + AND UPPER(CM.PO_NO) LIKE UPPER(CONCAT('%', #{poNo}, '%')) + ) + + + AND T.DUE_DATE =]]> #{requestDateFrom} + + + AND T.DUE_DATE #{requestDateTo} + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_MGMT CM + WHERE CM.OBJID = T.CONTRACT_OBJID + AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') =]]> TO_DATE(#{orderDateFrom}, 'YYYY-MM-DD') + ) + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_MGMT CM + WHERE CM.OBJID = T.CONTRACT_OBJID + AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') TO_DATE(#{orderDateTo}, 'YYYY-MM-DD') + ) + + + AND SR.shipping_order_status = #{shippingStatus} + + + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') + + + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') + + + /* SHIPPING_METHOD 필드 없음 - 검색 조건 무시 */ + + + AND T.PM_USER_ID = #{manager} + + + /* INCOTERMS 필드 없음 - 검색 조건 무시 */ + + + + + AND (T.SALES_STATUS IS NULL OR T.SALES_STATUS = '' OR T.SALES_STATUS != '완료') + + + AND T.SALES_STATUS = #{salesStatus} + + + + + + AND T.SALES_DEADLINE_DATE IS NOT NULL + AND TO_DATE(T.SALES_DEADLINE_DATE, 'YYYY-MM-DD') =]]> TO_DATE(#{salesDeadlineFrom}, 'YYYY-MM-DD') + + + AND T.SALES_DEADLINE_DATE IS NOT NULL + AND TO_DATE(T.SALES_DEADLINE_DATE, 'YYYY-MM-DD') TO_DATE(#{salesDeadlineTo}, 'YYYY-MM-DD') + +-- 등록일 기준 최신순 정렬 (프로젝트 번호는 보조 정렬) +ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC + diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp index 5d0bfa1..0916623 100644 --- a/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp @@ -217,22 +217,37 @@ function addComma(num) { } var columns = [ - {title:'EST_OBJID' ,field:'EST_OBJID' ,visible:false, frozen:true}, - {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '영업번호', field : 'CONTRACT_NO', frozen:true, - formatter:fnc_createGridAnchorTag, - cellClick:function(e, cell){ - var objid = fnc_checkNull(cell.getData().OBJID); - fn_projectConceptDetail(objid); + {title:'EST_OBJID' ,field:'EST_OBJID' ,visible:false, frozen:true}, + {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '영업번호', field : 'CONTRACT_NO', frozen:true, + formatter:fnc_createGridAnchorTag, + cellClick:function(e, cell){ + var objid = fnc_checkNull(cell.getData().OBJID); + fn_projectConceptDetail(objid); + } + }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '주문유형', field : 'CATEGORY_NAME' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '접수일', field : 'RECEIPT_DATE' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '요청납기', field : 'EARLIEST_DUE_DATE', + formatter: function(cell, formatterParams, onRendered){ + var dueDate = fnc_checkNull(cell.getValue()); + var otherCount = fnc_checkNull(cell.getData().OTHER_DUE_DATE_COUNT); + + if(dueDate === '') return ''; + + // 다른 납기가 있으면 "날짜 외 N건" 형식으로 표시 + if(otherCount && parseInt(otherCount) > 0){ + return dueDate + ' 외 ' + otherCount + '건'; } - }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '주문유형', field : 'CATEGORY_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '제품구분', field : 'PRODUCT_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '88', title : '국내/해외', field : 'AREA_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '접수일', field : 'RECEIPT_DATE' }, - {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사', field : 'CUSTOMER_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '유/무상', field : 'PAID_TYPE' }, + + return dueDate; + } + }, + {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사', field : 'CUSTOMER_NAME' }, + {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'ITEM_SUMMARY' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '유/무상', field : 'PAID_TYPE' }, +// {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '제품구분', field : 'PRODUCT_NAME' }, +// {headerHozAlign : 'center', hozAlign : 'center', width : '88', title : '국내/해외', field : 'AREA_NAME' }, // {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '품번', field : 'PART_NO' }, - {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'ITEM_SUMMARY' }, // {headerHozAlign : 'center', hozAlign : 'center', width : '150', title : 'S/N', field : 'SERIAL_NO', // formatter: function(cell, formatterParams, onRendered){ // var value = fnc_checkNull(cell.getValue()); @@ -241,11 +256,11 @@ var columns = [ // // 쉼표로 구분된 S/N 개수 계산 // var serialNumbers = value.split(',').map(function(s){ return s.trim(); }).filter(function(s){ return s !== ''; }); // var count = serialNumbers.length; - + // if(count === 0) return ''; // if(count === 1) return '' + serialNumbers[0] + ''; - - // 2개 이상이면 "첫번째 외 N개" 형식 + + // 2개 이상이면 "첫번째 외 N개" 형식 // var displayText = serialNumbers[0] + ' 외 ' + (count - 1) + '개'; // return '' + displayText + ''; // }, @@ -255,38 +270,41 @@ var columns = [ // } // }, // {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '수량', field : 'QUANTITY' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '요청납기', field : 'EARLIEST_DUE_DATE', - formatter: function(cell, formatterParams, onRendered){ - var dueDate = fnc_checkNull(cell.getValue()); - var otherCount = fnc_checkNull(cell.getData().OTHER_DUE_DATE_COUNT); - - if(dueDate === '') return ''; - - // 다른 납기가 있으면 "날짜 외 N건" 형식으로 표시 - if(otherCount && parseInt(otherCount) > 0){ - return dueDate + ' 외 ' + otherCount + '건'; - } - - return dueDate; - } - }, - {headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '반납사유', field : 'RETURN_REASON_SUMMARY' }, -// {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객요청사항', field : 'CUSTOMER_REQUEST' }, +// {headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '반납사유', field : 'RETURN_REASON_SUMMARY' }, +// {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객요청사항', field : 'CUSTOMER_REQUEST' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '견적현황', field : 'EST_STATUS', - formatter:fnc_subInfoValueFormatter, - cellClick:function(e, cell){ - var objid = fnc_checkNull(cell.getData().OBJID); - fn_showEstimateList(objid); - } - }, + {headerHozAlign : 'center', hozAlign : 'right', width : '130', title : '공급가액', field : 'EST_TOTAL_AMOUNT', + formatter: function(cell, formatterParams, onRendered){ + var value = fnc_checkNull(cell.getValue()); + if(value === '' || value === '0') return ''; + // 통화 기호 제거 후 콤마 추가 + var numericValue = String(value).replace(/[^0-9.]/g, ''); + return addComma(numericValue); + } + }, + {headerHozAlign : 'center', hozAlign : 'right', width : '150', title : '원화환산공급가액', field : 'EST_TOTAL_AMOUNT_KRW', + formatter: function(cell, formatterParams, onRendered){ + var value = fnc_checkNull(cell.getValue()); + if(value === '' || value === '0') return ''; + // 통화 기호 제거 후 콤마 추가 + var numericValue = String(value).replace(/[^0-9.]/g, ''); + return addComma(numericValue); + } + }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '견적현황', field : 'EST_STATUS', + formatter:fnc_subInfoValueFormatter, + cellClick:function(e, cell){ + var objid = fnc_checkNull(cell.getData().OBJID); + fn_showEstimateList(objid); + } + }, {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '결재상태', field : 'APPR_STATUS', - formatter:fnc_createGridAnchorTag, - cellClick:function(e, cell){ - var APPROVAL_OBJID = fnc_checkNull(cell.getData().APPROVAL_OBJID); - var ROUTE_OBJID = fnc_checkNull(cell.getData().ROUTE_OBJID); - approval_form(APPROVAL_OBJID,ROUTE_OBJID); - } + formatter:fnc_createGridAnchorTag, + cellClick:function(e, cell){ + var APPROVAL_OBJID = fnc_checkNull(cell.getData().APPROVAL_OBJID); + var ROUTE_OBJID = fnc_checkNull(cell.getData().ROUTE_OBJID); + approval_form(APPROVAL_OBJID,ROUTE_OBJID); + } }, {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '메일발송', field : 'MAIL_SEND_STATUS', formatter: function(cell, formatterParams, onRendered){ @@ -309,27 +327,31 @@ var columns = [ // } } }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '견적단가', field : 'EST_PRICE' }, - {headerHozAlign : 'center', hozAlign : 'right', width : '130', title : '견적공급가액', field : 'EST_TOTAL_AMOUNT', + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환종', field : 'CONTRACT_CURRENCY_NAME' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환율', field : 'EXCHANGE_RATE' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '150', title : 'S/N', field : 'SERIAL_NO', formatter: function(cell, formatterParams, onRendered){ var value = fnc_checkNull(cell.getValue()); - if(value === '' || value === '0') return ''; - // 통화 기호 제거 후 콤마 추가 - var numericValue = String(value).replace(/[^0-9.]/g, ''); - return addComma(numericValue); - } - }, - {headerHozAlign : 'center', hozAlign : 'right', width : '150', title : '견적원화환산공급가액', field : 'EST_TOTAL_AMOUNT_KRW', - formatter: function(cell, formatterParams, onRendered){ - var value = fnc_checkNull(cell.getValue()); - if(value === '' || value === '0') return ''; - // 통화 기호 제거 후 콤마 추가 - var numericValue = String(value).replace(/[^0-9.]/g, ''); - return addComma(numericValue); + if(value === '') return ''; + + // 쉼표로 구분된 S/N 개수 계산 + var serialNumbers = value.split(',').map(function(s){ return s.trim(); }).filter(function(s){ return s !== ''; }); + var count = serialNumbers.length; + + if(count === 0) return ''; + if(count === 1) return '' + serialNumbers[0] + ''; + + // 2개 이상이면 "첫번째 외 N개" 형식 + var displayText = serialNumbers[0] + ' 외 ' + (count - 1) + '개'; + return '' + displayText + ''; + }, + cellClick:function(e, cell){ + var serialNo = fnc_checkNull(cell.getData().SERIAL_NO); + fn_showSerialNoPopup(serialNo); } }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '견적환종', field : 'CONTRACT_CURRENCY_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '견적환율', field : 'EXCHANGE_RATE' }, + {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '품번', field : 'PART_NO' }, +// {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '견적단가', field : 'EST_PRICE' }, // {title:"영업정보(상세)", headerHozAlign:'center', //고객정보 // columns:[ @@ -1111,106 +1133,112 @@ function openProjectFormPopUp(objId){
- - - - - - - +
- - - -
+ + + + + <%-- + + - - - - - - - - + + + --%> + + + + + <%-- + + + --%> - + + + + + + + - + + + - - - - - - - - - - - - - - + <%-- + + + --%> +
+ + + + - - - - - - + + + + + + - + + + + + + + + + +
+ - - + - + + + + + - + ~ +
- - - - - - - - - ~ - - - - - ~ - -
+ + + ~ + +
diff --git a/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp b/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp index ebe5f9e..611b9ce 100644 --- a/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp @@ -96,94 +96,88 @@ $(document).ready(function(){ }); var columns = [ - {formatter:"rowSelection", titleFormatter:"rowSelection", hozAlign:"center", headerSort:false, width:40, frozen:true}, - {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '영업번호', field : 'CONTRACT_NO', frozen:true, - formatter:fnc_createGridAnchorTag, - cellClick:function(e, cell){ - var objid = fnc_checkNull(cell.getData().OBJID); - fn_projectConceptDetail(objid); + {formatter:"rowSelection", titleFormatter:"rowSelection", hozAlign:"center", headerSort:false, width:40, frozen:true}, + {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '영업번호', field : 'CONTRACT_NO', frozen:true, + formatter:fnc_createGridAnchorTag, + cellClick:function(e, cell){ + var objid = fnc_checkNull(cell.getData().OBJID); + fn_projectConceptDetail(objid); + } + }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '주문유형', field : 'CATEGORY_NAME' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '발주일', field : 'ORDER_DATE' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '발주번호', field : 'PO_NO' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '요청납기', field : 'EARLIEST_DUE_DATE', + formatter: function(cell, formatterParams, onRendered){ + var dueDate = fnc_checkNull(cell.getValue()); + var otherCount = fnc_checkNull(cell.getData().OTHER_DUE_DATE_COUNT); + + if(dueDate === '') return ''; + + // 다른 납기가 있으면 "날짜 외 N건" 형식으로 표시 + if(otherCount && parseInt(otherCount) > 0){ + return dueDate + ' 외 ' + otherCount + '건'; } - }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '주문유형', field : 'CATEGORY_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '제품구분', field : 'PRODUCT_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '85', title : '국내/해외', field : 'AREA_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '접수일', field : 'RECEIPT_DATE' }, - {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사', field : 'CUSTOMER_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '유/무상', field : 'PAID_TYPE' }, - {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'ITEM_SUMMARY' }, - //품번, 품명 추가 시 사용 -// {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '품번', field : 'PART_NO' }, -// {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '품명', field : 'PART_NAME' }, - - //S/N 추가 시 사용 -// {headerHozAlign : 'center', hozAlign : 'center', width : '150', title : 'S/N', field : 'SERIAL_NO', -// formatter: function(cell, formatterParams, onRendered){ -// var value = fnc_checkNull(cell.getValue()); -// if(value === '') return ''; -// -// // 쉼표로 구분된 S/N 개수 계산 -// var serialNumbers = value.split(',').map(function(s){ return s.trim(); }).filter(function(s){ return s !== ''; }); -// var count = serialNumbers.length; -// -// if(count === 0) return ''; -// if(count === 1) return '' + serialNumbers[0] + ''; -// -// // 2개 이상이면 "첫번째 외 N개" 형식 -// var displayText = serialNumbers[0] + ' 외 ' + (count - 1) + '개'; -// return '' + displayText + ''; -// }, -// cellClick:function(e, cell){ -// var serialNo = fnc_checkNull(cell.getData().SERIAL_NO); -// fn_showSerialNoPopup(serialNo); -// } -// }, - {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '요청납기', field : 'EARLIEST_DUE_DATE', - formatter: function(cell, formatterParams, onRendered){ - var dueDate = fnc_checkNull(cell.getValue()); - var otherCount = fnc_checkNull(cell.getData().OTHER_DUE_DATE_COUNT); - - if(dueDate === '') return ''; - - // 다른 납기가 있으면 "날짜 외 N건" 형식으로 표시 - if(otherCount && parseInt(otherCount) > 0){ - return dueDate + ' 외 ' + otherCount + '건'; - } - - return dueDate; - } - }, + + return dueDate; + } + }, + {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사', field : 'CUSTOMER_NAME' }, + {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'ITEM_SUMMARY' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '유/무상', field : 'PAID_TYPE' }, + {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '수주상태', field : 'CONTRACT_RESULT_NAME' }, + {headerHozAlign : 'center', hozAlign : 'right', width : '120', title : '공급가액', field : 'ORDER_SUPPLY_PRICE_SUM', + formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, + }, + {headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '부가세', field : 'ORDER_VAT_SUM', + formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, + }, + {headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '총액', field : 'ORDER_TOTAL_AMOUNT_SUM', + formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, + }, + {headerHozAlign : 'center', hozAlign : 'right', width : '120', title : '원화총액', field : 'ORDER_TOTAL_AMOUNT_KRW', + formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, + }, + {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '주문서첨부', field : 'CU01_CNT' , + formatter:fnc_subInfoValueFormatter, + cellClick:function(e, cell){ + var objid = fnc_checkNull(cell.getData().OBJID); + fn_FileRegist(objid,"ORDER_DOC","ORDER_DOC"); + } + }, + {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사요청사항', field : 'CUSTOMER_REQUEST' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '결재상태', field : 'APPR_STATUS' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환종', field : 'CONTRACT_CURRENCY_NAME' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환율', field : 'EXCHANGE_RATE' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '150', title : 'S/N', field : 'SERIAL_NO', + formatter: function(cell, formatterParams, onRendered){ + var value = fnc_checkNull(cell.getValue()); + if(value === '') return ''; + + // 쉼표로 구분된 S/N 개수 계산 + var serialNumbers = value.split(',').map(function(s){ return s.trim(); }).filter(function(s){ return s !== ''; }); + var count = serialNumbers.length; + + if(count === 0) return ''; + if(count === 1) return '' + serialNumbers[0] + ''; + + // 2개 이상이면 "첫번째 외 N개" 형식 + var displayText = serialNumbers[0] + ' 외 ' + (count - 1) + '개'; + return '' + displayText + ''; + }, + cellClick:function(e, cell){ + var serialNo = fnc_checkNull(cell.getData().SERIAL_NO); + fn_showSerialNoPopup(serialNo); + } + }, + {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '품번', field : 'PART_NO' }, +// {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '제품구분', field : 'PRODUCT_NAME' }, +// {headerHozAlign : 'center', hozAlign : 'center', width : '85', title : '국내/해외', field : 'AREA_NAME' }, +// {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '접수일', field : 'RECEIPT_DATE' }, // {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '수량', field : 'QUANTITY' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '요청납기', field : 'DUE_DATE' }, -// {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객요청사항', field : 'CUSTOMER_REQUEST' }, - {headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '수주상태', field : 'CONTRACT_RESULT_NAME' }, - - {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '발주번호', field : 'PO_NO' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '발주일', field : 'ORDER_DATE' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '주문서첨부', field : 'CU01_CNT' , - formatter:fnc_subInfoValueFormatter, - cellClick:function(e, cell){ - var objid = fnc_checkNull(cell.getData().OBJID); - fn_FileRegist(objid,"ORDER_DOC","ORDER_DOC"); - } - }, - // {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '단가', field : 'ORDER_UNIT_PRICE', // formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, // }, - {headerHozAlign : 'center', hozAlign : 'right', width : '120', title : '수주공급가액', field : 'ORDER_SUPPLY_PRICE_SUM', - formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, - }, - {headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '수주부가세', field : 'ORDER_VAT_SUM', - formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, - }, - {headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '수주총액', field : 'ORDER_TOTAL_AMOUNT_SUM', - formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, - }, - {headerHozAlign : 'center', hozAlign : 'right', width : '120', title : '수주원화총액', field : 'ORDER_TOTAL_AMOUNT_KRW', - formatter:"money", formatterParams:{thousand:",", symbolAfter:"", precision:false,}, - }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '견적환종', field : 'CONTRACT_CURRENCY_NAME' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '견적환율', field : 'EXCHANGE_RATE' }, ]; //var grid; @@ -618,106 +612,108 @@ function openProjectFormPopUp(objId){
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - + + + + + + - + + + <%-- + + + + + + + + + --%> + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - +
+ + + - - + - + + + + + + + + + + + + + + + + + + +
+ + + + + + + - + ~ +
- - - - - - - - - - - - - ~ - - - - - ~ - + + + + ~ +
diff --git a/WebContent/WEB-INF/view/contractMgmt/supplyMngList.jsp b/WebContent/WEB-INF/view/contractMgmt/supplyMngList.jsp index 86d4488..a561dc6 100644 --- a/WebContent/WEB-INF/view/contractMgmt/supplyMngList.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/supplyMngList.jsp @@ -55,35 +55,35 @@