- $("#PO_CLIENT_ID").val('-1130201617'); //우성 default
+
+ $("#PO_CLIENT_ID").val('-1130201617'); //RPS default
$("#PO_CLIENT_ID").trigger("change");
diff --git a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp
index af19ad0..d26a567 100644
--- a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp
+++ b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp
@@ -7,6 +7,11 @@
<%--Expression Language ::: ${fn:escapeXml(str1)} --%>
+<%
+// DB에서 메뉴명 조회 (공통 유틸 사용)
+String menuObjId = request.getParameter("menuObjId");
+String menuName = CommonUtils.getMenuName(menuObjId, "기본메뉴명");
+%>
@@ -16,29 +21,8 @@
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
index 0ec25b4..6a0c85f 100644
--- a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
+++ b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
@@ -85,28 +85,31 @@ $(document).ready(function(){
// 결재상신
$("#btnApproval").click(function(){
- var selectedRowIds = _tabulGrid.getSelectedData();
- if(selectedRowIds.length < 1){
- Swal.fire("결재상신할 행을 선택해주십시오.");
- return false;
- }
-
- if(selectedRowIds.length > 1){
- Swal.fire("결재상신은 한 건씩만 가능합니다.");
- return false;
- }
-
- var objId = fnc_checkNull(selectedRowIds[0].OBJID);
- var status = fnc_checkNull(selectedRowIds[0].STATUS);
-
- if(status != 'create' && status != 'reject'){
- Swal.fire("미결재 또는 반려 상태만 결재상신 가능합니다.");
- return false;
- }
-
- var title = encodeURIComponent("품의서 결재");
- window.open("/approval/registApproval.do?targetType=PROPOSAL&targetObjId="+objId+"&approvalTitle="+title+"&callbackFnc=fn_search","registApproval","width=700,height=700");
- });
+ var selectedData = _tabulGrid.getSelectedData();
+ if(selectedData.length<1){
+ Swal.fire("결재상신할 행을 선택해주십시오.");
+ return false;
+ }else if(selectedData.length>1){
+ Swal.fire("한번에 한개의 결재만 가능합니다.");
+ return false;
+ }else{
+
+ var targetStatus = fnc_checkNull(selectedData[0].STATUS_TITLE);
+ var status = fnc_checkNull(selectedData[0].STATUS);
+
+ if(targetStatus == "결재완료" || targetStatus == "결재중" || status == "cancel"){
+ 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");
+ }
+ }
+ }
+ });
// 발주서생성
$("#btnCreatePO").click(function(){
@@ -116,25 +119,45 @@ $(document).ready(function(){
return false;
}
- var status = fnc_checkNull(selectedRowIds[0].STATUS);
- if(status != 'approvalComplete'){
+ var statusTitle = fnc_checkNull(selectedRowIds[0].STATUS_TITLE);
+ if(statusTitle != '결재완료'){
Swal.fire("결재완료 상태만 발주서 생성이 가능합니다.");
return false;
}
- // TODO: 발주서 생성 로직 구현
- Swal.fire("발주서 생성 기능은 준비 중입니다.");
- });
-
- // 초기화
- $("#btnReset").click(function(){
- $("#form1")[0].reset();
- $('.select2').val('').trigger('change');
- });
-
- // 엑셀 다운로드
- $("#btnExcel").click(function(){
- fn_excelExport($("#mainGrid"), "품의서관리");
+ Swal.fire({
+ title: '발주서를 작성 하시겠습니까?',
+ text: '',
+ icon: 'warning',
+
+ showCancelButton: true, // cancel버튼 보이기. 기본은 원래 없음
+ confirmButtonColor: '#3085d6', // confrim 버튼 색깔 지정
+ cancelButtonColor: '#d33', // cancel 버튼 색깔 지정
+ confirmButtonText: '확인', // confirm 버튼 텍스트 지정
+ cancelButtonText: '취소', // cancel 버튼 텍스트 지정
+ reverseButtons: false, // 버튼 순서 거꾸로
+
+ }).then(result => {
+ // 만약 Promise리턴을 받으면,
+ if (result.isConfirmed) { // 만약 모달창에서 confirm 버튼을 눌렀다면
+ $.ajax({
+ url:"/purchaseOrder/purchaseOrder_salesRequest_Save.do"
+ ,type:"POST"
+ ,data: $("#form1").serialize() + "&jqGrid="+ encodeURIComponent(JSON.stringify(selectedRowIds))
+ ,dataType:"json"
+ ,success:function(data){
+ if(data =="SUCCESS"){
+ alert("저장되었습니다.");
+ };
+ /* if(typeof opener.fn_search =="function"){ opener.fn_search() }; */
+ fn_search();
+ //self.close();
+ }
+ ,error: function(jqxhr, status, error){
+ }
+ });
+ }
+ });
});
fn_search();
@@ -158,14 +181,12 @@ var columns = [
{headerHozAlign:'center', hozAlign:'left', title:"품번", field:"PART_NO", widthGrow:1.5},
{headerHozAlign:'center', hozAlign:'left', title:"품명", field:"PART_NAME", widthGrow:1.8},
{headerHozAlign:'center', hozAlign:'center', title:"결재상태", field:"STATUS_TITLE", widthGrow:1.0,
- formatter: function(cell){
- var value = cell.getValue();
- var color = '';
- if(value == '결재완료') color = '#28a745';
- else if(value == '결재중') color = '#007bff';
- else if(value == '반려') color = '#dc3545';
- else color = '#6c757d';
- return '' + fnc_checkNull(value) + '';
+ 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);
+ }
}
},
{headerHozAlign:'center', hozAlign:'center', title:"작성일", field:"REGDATE_TITLE", widthGrow:1.0}
@@ -182,6 +203,16 @@ function fn_openProposalFormPopUp(objId){
window.open(url, "proposalFormPopUp", "width=1200,height=700,scrollbars=yes,resizable=yes");
}
+function _fnc_datepick(){
+ var $dateinput = $("input.date_icon");
+ for(var i=0; i<$dateinput.length; i++){
+ $dateinput.eq(i).attr("size","10");
+ $dateinput.eq(i).datepicker({
+ changeMonth:true,
+ changeYear:true
+ });
+ }
+}
@@ -198,8 +229,6 @@ function fn_openProposalFormPopUp(objId){
- <%--
- --%>
diff --git a/src/com/pms/mapper/productionplanning.xml b/src/com/pms/mapper/productionplanning.xml
index 1de19ca..578b953 100644
--- a/src/com/pms/mapper/productionplanning.xml
+++ b/src/com/pms/mapper/productionplanning.xml
@@ -2963,6 +2963,18 @@
LIMIT 1
)
LIMIT 1) AS PURCHASE_LIST_OBJID,
+ -- 구매리스트 생성일
+ (SELECT TO_CHAR(SRM.REGDATE, 'YYYY-MM-DD')
+ FROM SALES_REQUEST_MASTER SRM
+ WHERE SRM.MBOM_HEADER_OBJID = (
+ SELECT MH.OBJID::VARCHAR
+ FROM MBOM_HEADER MH
+ WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
+ AND MH.STATUS = 'Y'
+ ORDER BY MH.REGDATE DESC
+ LIMIT 1
+ )
+ LIMIT 1) AS PURCHASE_LIST_DATE,
-- M-BOM 상태: 새 MBOM_HEADER 테이블에서 조회
COALESCE(
(SELECT
@@ -2993,7 +3005,29 @@
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
AND MH.STATUS = 'Y'
ORDER BY COALESCE(MH.EDIT_DATE, MH.REGDATE) DESC
- LIMIT 1) AS MBOM_REGDATE
+ LIMIT 1) AS MBOM_REGDATE,
+ -- M-BOM 작성자: 새 MBOM_HEADER 테이블에서 조회
+ (SELECT USER_NAME(COALESCE(MH.EDITER, MH.WRITER))
+ FROM MBOM_HEADER MH
+ WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
+ AND MH.STATUS = 'Y'
+ ORDER BY COALESCE(MH.EDITER, MH.WRITER) DESC
+ LIMIT 1) AS MBOM_EDITOR,
+ -- M-BOM 히스토리 카운트 (버전, 0이면 NULL)
+ NULLIF(
+ (
+ SELECT COUNT(1)::INTEGER
+ FROM MBOM_HISTORY MHI
+ WHERE MHI.MBOM_HEADER_OBJID = (
+ SELECT MH.OBJID::VARCHAR
+ FROM MBOM_HEADER MH
+ WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
+ AND MH.STATUS = 'Y'
+ ORDER BY MH.REGDATE DESC
+ LIMIT 1
+ )
+ ), 0
+ ) AS MBOM_VERSION
FROM
PROJECT_MGMT PM
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
diff --git a/src/com/pms/mapper/purchaseOrder.xml b/src/com/pms/mapper/purchaseOrder.xml
index 499e730..f999a60 100644
--- a/src/com/pms/mapper/purchaseOrder.xml
+++ b/src/com/pms/mapper/purchaseOrder.xml
@@ -578,8 +578,8 @@
(
#{OBJID},
#{PO_CLIENT_ID},
-
- (SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||(COALESCE(MAX(case when SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) = '' or PURCHASE_ORDER_NO is null then '0' else SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) end ::numeric ))::INTEGER+1)::TEXT FROM PURCHASE_ORDER_MASTER),
+
+ (SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
#{CATEGORY_CD},
#{PRODUCT_GROUP},
#{PRODUCT},
@@ -757,8 +757,8 @@
(
#{OBJID},
#{PO_CLIENT_ID},
- (SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||(COALESCE(MAX(case when SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) = '' or PURCHASE_ORDER_NO is null then '0' else SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) end ::numeric ))::INTEGER+1)::TEXT FROM PURCHASE_ORDER_MASTER),
-
+ (SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
+
#{PARTNER_OBJID},
#{DELIVERY_REQUEST_DATE},
#{DELIVERY_PLACE},
@@ -839,6 +839,64 @@
GROUP BY PARTNER_OBJID
+
+
+
+
+
+
+
+
+
INSERT INTO PURCHASE_ORDER_MASTER
(
@@ -887,7 +945,7 @@
(
#{OBJID},
#{PO_CLIENT_ID},
- (SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||LPAD((COALESCE(MAX(SUBSTR(PURCHASE_ORDER_NO,9,11)),'0')::INTEGER+1)::TEXT,3,'0') FROM PURCHASE_ORDER_MASTER),
+ (SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
#{CATEGORY_CD},
#{PRODUCT_GROUP},
#{PRODUCT},
@@ -2969,7 +3027,6 @@ SELECT
-
+
+