diff --git a/WebContent/WEB-INF/view/salesMng/purchaseRequestRegList.jsp b/WebContent/WEB-INF/view/salesMng/purchaseRequestRegList.jsp new file mode 100644 index 0000000..10fdff3 --- /dev/null +++ b/WebContent/WEB-INF/view/salesMng/purchaseRequestRegList.jsp @@ -0,0 +1,714 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ page import="com.pms.common.utils.*"%> +<%@ page import="java.util.*" %> +<%@include file= "/init.jsp" %> + + +<% +// DB에서 메뉴명 조회 (공통 유틸 사용) +String menuObjId = request.getParameter("menuObjId"); +String menuName = CommonUtils.getMenuName(menuObjId, "구매관리_구매요청서작성"); +%> + + + + +<%=Constants.SYSTEM_NAME%> + + + + +
+ +
+
+ +
+
+
+
+

+ <%=menuName%> +

+
+ + + +
+
+
+ + + + <%-- 품번 활성화 --%> + + + <%-- 품명 활성화 --%> + + + <%-- 작성일 활성화 --%> + + + + +
+ + + + + + + + + + ~ + +
+
+ + <%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %> +
+
+
+
+ + + diff --git a/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp b/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp index e79a02a..09da6a9 100644 --- a/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp +++ b/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp @@ -10,6 +10,7 @@ ( CommonUtils.checkNull(info.get("STATUS_TITLE")).equals( "결재중" ) ||CommonUtils.checkNull(info.get("STATUS_TITLE")).equals( "결재완료" ) ||CommonUtils.checkNull(info.get("STATUS_TITLE")).equals( "접수" ) + ||CommonUtils.checkNull(info.get("STATUS")).equals( "confirmed" ) ) ){ isModify = false; //수정불가 @@ -84,6 +85,11 @@ $(function(){ fn_deleteRow(); }); + // 확정 버튼 클릭 + $("#btnConfirm").click(function(){ + fn_confirm(); + }); + $("#btnAppr").click(function(){ //결재상신 if(fnc_valitate("form1")){ var objId = "${resultMap.OBJID}"; @@ -285,17 +291,16 @@ function fn_getSalesRequestTargetPartList(masterObjId,bomObjId){ appendText += " "; appendText += " "; appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; + // 공급업체 + appendText += " "; + appendText += " "; + appendText += " "; + // 단가 + var PARTNER_PRICE = fnc_checkNull(resultData[i].PARTNER_PRICE); + appendText += " "; + appendText += " "; + appendText += " "; appendText += " "; @@ -316,10 +321,9 @@ function fn_getSalesRequestTargetPartList(masterObjId,bomObjId){ var PART_NO = fnc_checkNull(resultData[i].PART_NO); var PART_NAME = fnc_checkNull(resultData[i].PART_NAME); - // 공급업체 제거로 주석처리 - // var PARTNER_OBJID = fnc_checkNull(resultData[i].PARTNER_OBJID); - // fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, PARTNER_OBJID); - // $("#PARTNER_OBJID_"+rowObjId).val(PARTNER_OBJID); + // 공급업체 셋팅 + var PARTNER_OBJID = fnc_checkNull(resultData[i].PARTNER_OBJID); + fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, PARTNER_OBJID); fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId,""); @@ -377,31 +381,29 @@ function fn_AddRow(){ //appendText += " "; //appendText += " "; //appendText += " "; - //appendText += " "; - appendText += " "; - appendText += " "; - appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - //appendText += " "; - appendText += " "; - - if(0 < $("#partListArea tr:first").lenght || typeof $("#partListArea tr:first").lenght != "undefined") { - $("#partListArea tr:first").before(appendText); - }else{ - $("#partListArea").append(appendText); - } - // 공급업체 제거로 주석처리 - // fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, ""); - fn_addBomPart("PART_OBJID_"+rowObjId, "", "PART_NAME_"+rowObjId, ""); + //appendText += " "; + appendText += " "; + appendText += " "; + appendText += " "; + // 공급업체 + appendText += " "; + appendText += " "; + appendText += " "; + // 단가 + appendText += " "; + appendText += " "; + appendText += " "; + appendText += " "; + +if(0 < $("#partListArea tr:first").lenght || typeof $("#partListArea tr:first").lenght != "undefined") { + $("#partListArea tr:first").before(appendText); +}else{ + $("#partListArea").append(appendText); +} +// 공급업체 셋팅 +fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, ""); +fn_addBomPart("PART_OBJID_"+rowObjId, "", "PART_NAME_"+rowObjId, ""); fnc_datepick(); $(".select2").select2(); } @@ -498,6 +500,61 @@ function fn_Supply_save(){ } } +// 구매요청서 확정 처리 +function fn_confirm(){ + var masterObjId = $("#SALES_REQUEST_MASTER_OBJID").val(); + + if(fnc_checkNull(masterObjId) == ""){ + Swal.fire("먼저 저장해주세요."); + return; + } + + // 품목이 있는지 확인 + if($("#partListArea tr").length < 1){ + Swal.fire("품목이 없습니다. 먼저 품목을 추가하고 저장해주세요."); + return; + } + + Swal.fire({ + title: '확정', + text: '확정하시겠습니까? 확정 후에는 수정이 불가능합니다.', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#5cb85c', + cancelButtonColor: '#d33', + confirmButtonText: '확정', + cancelButtonText: '취소' + }).then((result) => { + if (result.isConfirmed) { + $.ajax({ + type: "POST", + url: "/salesMng/confirmSalesRequest.do", + data: { "SALES_REQUEST_MASTER_OBJID": masterObjId }, + dataType: "json", + success: function(data){ + if(data.result){ + Swal.fire({ + title: '완료', + text: '확정되었습니다.', + icon: 'success' + }).then(() => { + if(typeof opener.fn_search == "function"){ + opener.fn_search(); + } + self.close(); + }); + } else { + Swal.fire('오류', data.msg || '확정 처리 중 오류가 발생했습니다.', 'error'); + } + }, + error: function(jqxhr, status, error){ + Swal.fire('오류', '서버 통신 중 오류가 발생했습니다.', 'error'); + } + }); + } + }); +} + // ★★★ 프로젝트 선택 시 M-BOM 품목 자동 로드 ★★★ function fn_loadMbomParts(projectObjId){ if(fnc_checkNull(projectObjId) == "") return; @@ -539,12 +596,23 @@ function fn_loadMbomParts(projectObjId){ appendText += " "; appendText += " "; appendText += " "; + // 공급업체 + appendText += " "; + appendText += " "; + appendText += " "; + // 단가 + appendText += " "; + appendText += " "; + appendText += " "; appendText += ""; $("#partListArea").append(appendText); // 품번 드롭다운에 M-BOM 전체 품목 옵션 추가 fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId, ""); + // 공급업체 셋팅 + fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, ""); }); $(".select2").select2(); @@ -633,6 +701,7 @@ function fn_callbackFnc(){
+
@@ -731,12 +800,14 @@ function fn_callbackFnc(){ - <% }else{ %> - - <% } %> - + +
- + <% }else{ %> +
+ +
+ <% } %>
@@ -748,36 +819,42 @@ function fn_callbackFnc(){ --> -
- - - - - - - - - - - - - - - -
품번품명수량
-
-
- - - - - - - - - -
-
+
+ + + + + + + + + + + + + + + + + + + +
품번품명수량공급업체단가
+
+
+ + + + + + + + + + + +
+
diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml index e2a542e..0b1ea83 100644 --- a/src/com/pms/mapper/salesMng.xml +++ b/src/com/pms/mapper/salesMng.xml @@ -633,7 +633,7 @@ VALUES #{AREA_CD }, #{CUSTOMER_OBJID }, #{PAID_TYPE }, - 'PURCHASE_REQUEST' + COALESCE(NULLIF(#{DOC_TYPE}, ''), 'PURCHASE_REQUEST') ) ON CONFLICT (OBJID) DO UPDATE SET @@ -757,7 +757,7 @@ VALUES INSERT INTO SALES_REQUEST_PART - ( + ( OBJID, SALES_BOM_QTY_OBJID, PART_OBJID, @@ -771,8 +771,8 @@ VALUES REGDATE, STATUS - ) - VALUES + ) + VALUES ( #{SALES_REQUEST_PART_OBJID }, #{SALES_BOM_QTY_OBJID }, @@ -788,8 +788,8 @@ VALUES #{STATUS} ) ON CONFLICT (OBJID) DO - UPDATE - SET + UPDATE + SET SALES_BOM_QTY_OBJID = #{SALES_BOM_QTY_OBJID }, PART_OBJID = #{PART_OBJID }, SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}, @@ -1117,6 +1117,15 @@ VALUES (SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = SRM.UNIT_NAME) AS UNIT_CODE_NAME, SRM.STATUS, CASE + -- PURCHASE_REG(구매요청서작성) 페이지용 상태 + WHEN SRM.DOC_TYPE = 'PURCHASE_REG' THEN + CASE + -- 품의서 생성 여부 확인 (PROPOSAL 타입의 SALES_REQUEST_MASTER가 연결되어 있는지) + WHEN EXISTS (SELECT 1 FROM SALES_REQUEST_MASTER P WHERE P.DOC_TYPE = 'PROPOSAL' AND P.PROJECT_NO = SRM.OBJID::VARCHAR) THEN '품의서생성' + WHEN SRM.STATUS = 'confirmed' THEN '확정' + ELSE '작성중' + END + -- 기존 PURCHASE_REQUEST용 상태 WHEN ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) >= (SELECT COUNT(1) FROM SALES_REQUEST_PART AS SRP WHERE srp.SALES_REQUEST_master_OBJID = SRM.OBJID )) and ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) > 0) THEN '발주완료' WHEN ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) < (SELECT COUNT(1) FROM SALES_REQUEST_PART AS SRP WHERE srp.SALES_REQUEST_master_OBJID = SRM.OBJID )) and ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) > 0) THEN '발주부분완료' WHEN SRM.STATUS = 'create' THEN '등록' @@ -1125,7 +1134,7 @@ VALUES WHEN SRM.STATUS = 'approvalRequest' THEN '결재중' WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료' WHEN SRM.STATUS = 'reject' THEN '반려' - + WHEN SRM.STATUS = 'confirmed' THEN '확정' ELSE '' END STATUS_TITLE, SRM.RECEIPT_USER_ID, @@ -1224,7 +1233,15 @@ VALUES AND SRP.SUB_RNUM = 1 --> WHERE 1=1 -- 구매요청서만 조회 (품의서 제외) - AND (SRM.DOC_TYPE = 'PURCHASE_REQUEST' OR SRM.DOC_TYPE IS NULL) + -- DOC_TYPE_FILTER가 있으면 해당 값으로 필터링, 없으면 기존 조건 적용 + + + AND SRM.DOC_TYPE = #{DOC_TYPE_FILTER} + + + AND (SRM.DOC_TYPE = 'PURCHASE_REQUEST' OR SRM.DOC_TYPE IS NULL) + + AND TO_CHAR(REGDATE,'YYYY') = #{Year} @@ -1403,24 +1420,24 @@ VALUES