From 49cd6ddda1fb590a35c7a1ed2ddcf2b134362f5d Mon Sep 17 00:00:00 2001 From: hjjeong Date: Wed, 10 Dec 2025 14:21:18 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=9C=EC=A3=BC=EC=84=9C=20=EC=96=91?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD=20(=EC=9D=BC=EB=B0=98=EB=B0=9C?= =?UTF-8?q?=EC=A3=BC=EC=84=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../purchaseOrderFormPopup_general.jsp | 766 ++++++++++++++++++ .../purchaseOrderFormPopup_outsourcing.jsp | 578 +++++++++++++ .../purchaseOrder/purchaseOrderList_new.jsp | 44 +- .../WEB-INF/view/salesMng/proposalMngList.jsp | 106 ++- .../controller/PurchaseOrderController.java | 357 +++++++- src/com/pms/mapper/purchaseOrder.xml | 55 +- src/com/pms/service/PurchaseOrderService.java | 14 +- 7 files changed, 1853 insertions(+), 67 deletions(-) create mode 100644 WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_general.jsp create mode 100644 WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp diff --git a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_general.jsp b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_general.jsp new file mode 100644 index 0000000..08a0f44 --- /dev/null +++ b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_general.jsp @@ -0,0 +1,766 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ page import="com.pms.common.utils.*"%> +<%@ page import="java.util.*"%> +<%@include file="/init_jqGrid.jsp"%> +<% + Map info = (HashMap)(request.getAttribute("info")); + boolean isModify = true; + if(info!=null && + ( CommonUtils.checkNull(info.get("APPR_STATUS")).equals( "결재중" ) + ||CommonUtils.checkNull(info.get("APPR_STATUS")).equals( "결재완료" ) + ||CommonUtils.checkNull(info.get("STATUS")).equals( "cancel" ) + ) + ){ + isModify = false; //수정불가 + } + String actType = (String)request.getAttribute("actType"); + + // 담당자 목록 + List userList = (List)request.getAttribute("userList"); + if(userList == null) userList = new ArrayList(); + + // 현재 선택된 담당자 ID (SALES_MNG_USER_ID, SALES_MNG_USER_ID2에 저장) + String managerId = CommonUtils.checkNull(info != null ? info.get("SALES_MNG_USER_ID") : ""); + String managerId2 = CommonUtils.checkNull(info != null ? info.get("SALES_MNG_USER_ID2") : ""); +%> + + + + + +<%=Constants.SYSTEM_NAME%> - 일반 발주서 + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ RPS Logo + + 발 주 서 + + + + + + + + + + + + +
담당자부사장대표이사
전결전결
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1. 발 주 번 호 : + + +
2. 발 주 일 자 : + readonly<% } %> style="width:100%;"/> +
3. 수 신 업 체 : + +
4. 납 기 일 : + readonly<% } %> style="width:100%;"/> +
5. 납 품 장 소 : + +
6. 결 제 방 식 : + +
7. 합 계 금 액 :
+
+ + + + + + + + + + + + + + + + + + + + + + +
담 당 자 + <% if(isModify){ %> + + + + + + <% } else { %> + ${info.MANAGER_NAME} ${info.MANAGER_POSITION} + <% } %> +
+ (${info.MANAGER_PHONE} / ${info.MANAGER_EMAIL}) + + 직인 +
+ <% if(isModify){ %> + + + + + + <% } else { %> + ${info.MANAGER_NAME2} ${info.MANAGER_POSITION2} + <% } %> +
+ (${info.MANAGER_PHONE2} / ${info.MANAGER_EMAIL2}) +
㈜알피에스 대표이사 이 동 헌
대전광역시 유성구 국제과학10로8(둔곡동 402-4번지)
+ + +
+ 요청사항 :
+ +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
공 급 가 액
부 가 세
총 결 제 금 액 (VAT포함)
+ + +
+ <% if(isModify){ %> + + <% }else{ %> + + <% } %> + +
+ + +
+ + diff --git a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp new file mode 100644 index 0000000..39ff3cd --- /dev/null +++ b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp @@ -0,0 +1,578 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ page import="com.pms.common.utils.*"%> +<%@ page import="java.util.*"%> +<%@include file="/init_jqGrid.jsp"%> +<% + Map info = (HashMap)(request.getAttribute("info")); + boolean isModify = true; + if(info!=null && + ( CommonUtils.checkNull(info.get("APPR_STATUS")).equals( "결재중" ) + ||CommonUtils.checkNull(info.get("APPR_STATUS")).equals( "결재완료" ) + ||CommonUtils.checkNull(info.get("STATUS")).equals( "cancel" ) + ) + ){ + isModify = false; //수정불가 + } + String actType = (String)request.getAttribute("actType"); +%> + + + + + +<%=Constants.SYSTEM_NAME%> - 외주가공 발주서 + + + + + + +
+ +
+ +
+ + + + +
+ +
+ +
+
㈜ 알피에스
+
외주가공 발주서
+
+
+ + + + + + + + + + + +
담당자부사장대표이사
${info.MANAGER_NAME}전 결
+
+
+ + +
+
+ + + + + + + + + + + + + +
1. 발주번호 :
2. 발주일자 : + readonly<% } %> style="width:120px;"/> +
3. 수신업체 : + +
+
+ +
+ +
+
담 당 자
+
+ ${info.MANAGER_NAME} ${info.MANAGER_POSITION}
+ (${info.MANAGER_PHONE} / ${info.MANAGER_EMAIL})
+ ${info.MANAGER_NAME2} ${info.MANAGER_POSITION2}
+ (${info.MANAGER_PHONE2} / ${info.MANAGER_EMAIL2}) +
+
+ + +
+
㈜알피에스 대표이사 이 동 헌
+
대전광역시 유성구 국제과학10로8(둔곡동 402-4번지)
+
+
+
+ + +
[아래 상세내역 리스트 확인]
+ + +
+ <% if(isModify){ %> + + + + <% }else{ %> + + <% } %> + +
+ + +
+
+ +
+ + +
+ + + + + +
총 공 급 가 액
+
+ + +
+ ※ 보안문서(CONFIDENTIAL) : ㈜알피에스의 승인(APPROVAL) 없이 외부로 반출하거나 공유 할수 없습니다. +
+
+ + +
+ + diff --git a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp index e9db4ce..42b6205 100644 --- a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp +++ b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp @@ -17,6 +17,14 @@ String menuName = CommonUtils.getMenuName(menuObjId, "기본메뉴명"); <%=Constants.SYSTEM_NAME%> + @@ -290,6 +298,7 @@ var columns = [ {title:'ROUTE_OBJID',field:'ROUTE_OBJID', visible:false, frozen:true}, {title:'MULTI_MASTER_OBJID',field:'MULTI_MASTER_OBJID', visible:false, frozen:true}, {title:'SALES_REQUEST_OBJID',field:'SALES_REQUEST_OBJID', visible:false, frozen:true}, + {title:'FORM_TYPE',field:'FORM_TYPE', visible:false, frozen:true}, {headerHozAlign:'center', hozAlign:'center', width:120, title:'품의서 No', field:'PROPOSAL_NO', frozen:true, formatter:fn_createGridAnchorTag, @@ -307,12 +316,13 @@ var columns = [ var MULTI_MASTER_YN = cell.getData().MULTI_MASTER_YN; var MULTI_MASTER_OBJID = cell.getData().MULTI_MASTER_OBJID; var targetStatus = fnc_checkNull(cell.getData().APPR_STATUS).toUpperCase(); + var formType = fnc_checkNull(cell.getData().FORM_TYPE, 'general'); var objId = fnc_checkNull(cell.getData().OBJID); if(MULTI_YN == 'Y' && MULTI_MASTER_YN == 'N' && targetStatus != 'COMPLETE'){ objId = MULTI_MASTER_OBJID; }else{ - fn_formPopUp(objId); + fn_formPopUp(objId, null, formType); } } }, @@ -472,13 +482,35 @@ function fn_searchOld(){ } //등록,수정,뷰 -function fn_formPopUp(objId, copy){ +function fn_formPopUp(objId, copy, formType){ var popup_width = 1460; - var popup_height = 1050; - + var popup_height = 1050; + + // 양식 타입에 따라 다른 팝업 열기 + formType = fnc_checkNull(formType, 'general'); + var hiddenForm = document.hiddenForm; - var target = "purchaseOrderFormPopup_new"; - var url = "/purchaseOrder/purchaseOrderFormPopup_new.do"; + var target = ""; + var url = ""; + + if(formType == 'outsourcing'){ + // 외주가공 발주서 양식 + target = "purchaseOrderFormPopup_outsourcing"; + url = "/purchaseOrder/purchaseOrderFormPopup_outsourcing.do"; + popup_width = 1200; + popup_height = 900; + } else if(formType == 'general'){ + // 일반 발주서 양식 + target = "purchaseOrderFormPopup_general"; + url = "/purchaseOrder/purchaseOrderFormPopup_general.do"; + popup_width = 1000; + popup_height = 900; + } else { + // 기존 발주서 양식 (FORM_TYPE이 없거나 기존 데이터) + target = "purchaseOrderFormPopup_new"; + url = "/purchaseOrder/purchaseOrderFormPopup_new.do"; + } + fn_centerPopup(popup_width, popup_height, "", target); hiddenForm.PURCHASE_ORDER_MASTER_OBJID.value = objId; diff --git a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp index 7b8ed16..f828d4b 100644 --- a/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp +++ b/WebContent/WEB-INF/view/salesMng/proposalMngList.jsp @@ -111,7 +111,7 @@ $(document).ready(function(){ } }); - // 발주서생성 + // 발주서생성 - 양식 선택 팝업 $("#btnCreatePO").click(function(){ var selectedRowIds = _tabulGrid.getSelectedData(); if(selectedRowIds.length < 1){ @@ -125,48 +125,74 @@ $(document).ready(function(){ return false; } + // 발주서 양식 선택 팝업 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 버튼을 눌렀다면 - console.log("=== 발주서 생성 API 호출 ==="); - console.log("selectedRowIds:", selectedRowIds); - $.ajax({ - url:"/purchaseOrder/purchaseOrder_salesRequest_Save.do" - ,type:"POST" - ,data: $("#form1").serialize() + "&jqGrid="+ encodeURIComponent(JSON.stringify(selectedRowIds)) - ,dataType:"text" - ,success:function(data){ - console.log("발주서 생성 응답:", data); - if(data =="SUCCESS"){ - alert("저장되었습니다."); - } else { - alert("발주서 생성 결과: " + data); - } - /* if(typeof opener.fn_search =="function"){ opener.fn_search() }; */ - fn_search(); - //self.close(); - } - ,error: function(jqxhr, status, error){ - console.log("발주서 생성 에러:", status, error); - alert("발주서 생성 중 오류가 발생했습니다: " + error); - } - }); - } - }); + title: '발주서 양식을 선택하세요', + html: '
' + + '' + + '' + + '
', + showConfirmButton: false, + showCancelButton: true, + cancelButtonText: '취소', + cancelButtonColor: '#d33' + }); + + // 일반 발주서 양식으로 발주서 자동 생성 + window.openGeneralPO = function() { + Swal.close(); + fn_createPurchaseOrder(selectedRowIds, "general"); + }; + + // 외주가공 발주서 양식으로 발주서 자동 생성 + window.openOutsourcingPO = function() { + Swal.close(); + fn_createPurchaseOrder(selectedRowIds, "outsourcing"); + }; }); +// 발주서 자동 생성 (기존 로직 + 양식 타입 추가) +function fn_createPurchaseOrder(selectedRowIds, formType) { + Swal.fire({ + title: '발주서 생성', + text: '선택한 품의서로 ' + (formType == 'general' ? '일반' : '외주가공') + ' 발주서를 생성하시겠습니까?', + icon: 'question', + showCancelButton: true, + confirmButtonText: '생성', + cancelButtonText: '취소' + }).then((result) => { + if (result.isConfirmed) { + // 선택된 품의서 목록을 JSON으로 변환 + var jqGridData = JSON.stringify(selectedRowIds); + + $.ajax({ + url: "/purchaseOrder/purchaseOrder_salesRequest_Save.do", + type: "POST", + data: { + jqGrid: jqGridData, + FORM_TYPE: formType // 양식 타입 추가 + }, + success: function(result) { + if(result == "SUCCESS") { + Swal.fire({ + title: '완료', + text: '발주서가 생성되었습니다.', + icon: 'success' + }).then(() => { + fn_search(); // 목록 새로고침 + }); + } else { + Swal.fire('오류', '발주서 생성 중 오류가 발생했습니다.', 'error'); + } + }, + error: function() { + Swal.fire('오류', '서버 통신 중 오류가 발생했습니다.', 'error'); + } + }); + } + }); +} + fn_search(); _fnc_datepick(); }); diff --git a/src/com/pms/controller/PurchaseOrderController.java b/src/com/pms/controller/PurchaseOrderController.java index 3347bde..8853869 100644 --- a/src/com/pms/controller/PurchaseOrderController.java +++ b/src/com/pms/controller/PurchaseOrderController.java @@ -414,11 +414,15 @@ public class PurchaseOrderController { String type = CommonUtils.checkNull(paramMap.get("TYPE")); //System.out.println("type::"+type); - if("0001069".equals(type) || "0001787".equals(type)){ //일반부품 //구매품표준 - purchaseOrderService.saveDeliveryInfo(request, paramMap); - }else{ - purchaseOrderService.saveDeliveryETCInfo(request, paramMap); - } + // if("0001069".equals(type) || "0001787".equals(type)){ //일반부품 //구매품표준 + // purchaseOrderService.saveDeliveryInfo(request, paramMap); + // }else{ + // purchaseOrderService.saveDeliveryETCInfo(request, paramMap); + // } + + // 무조건 saveDeliveryInfo로 처리 (자재 생성 포함) + purchaseOrderService.saveDeliveryInfo(request, paramMap); + resultMap.put("message", "저장되었습니다."); }catch(Exception e){ resultMap.put("message", "오류가 발생하였습니다."); @@ -670,6 +674,349 @@ public class PurchaseOrderController { } } + /** + * 일반 발주서 양식 팝업 + */ + @RequestMapping("/purchaseOrder/purchaseOrderFormPopup_general.do") + public String purchaseOrderFormPopup_general(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ + Map code_map = new HashMap(); + Map info = new HashMap(); + List detailList = new ArrayList(); + HashMap oemInfo = new HashMap(); + + PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); + String objId = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"), ""); + String proposalObjId = CommonUtils.checkNull(paramMap.get("PROPOSAL_OBJID"), ""); + String writer = CommonUtils.checkNull(person.getUserId()); + String writerName = person.getUserName(); + + try{ + oemInfo = (HashMap)adminService.getSupMngInfo("-1130201617"); // RPS + + if(objId.equals("")){ + request.setAttribute("actType", "C"); // 등록 Create + objId = CommonUtils.createObjId(); + info.put("actType", "C"); + info.put("OBJID", objId); + info.put("PROPOSAL_OBJID", proposalObjId); + info.put("SALES_MNG_USER_ID", writer); + // 발주번호 자동생성 + info.put("PURCHASE_ORDER_NO", "RPS25-" + new java.text.SimpleDateFormat("MMdd").format(new java.util.Date()) + "-01"); + // 발주일자 기본값 오늘 + info.put("ORDER_DATE", new java.text.SimpleDateFormat("yyyy년 MM월 dd일").format(new java.util.Date())); + // 담당자 정보 기본값 + info.put("MANAGER_NAME", "안동윤"); + info.put("MANAGER_POSITION", "팀장"); + info.put("MANAGER_PHONE", "010-2313-2702"); + info.put("MANAGER_EMAIL", "ady1225@rps-korea.com"); + info.put("MANAGER_NAME2", "서동민"); + info.put("MANAGER_POSITION2", "주임"); + info.put("MANAGER_PHONE2", "010-9538-9513"); + info.put("MANAGER_EMAIL2", "sdm0927@rps-korea.com"); + + // 품의서(PROPOSAL) 품목 데이터 조회하여 그리드에 자동 세팅 + if(!"".equals(proposalObjId)){ + Map proposalParam = new HashMap(); + proposalParam.put("PROPOSAL_OBJID", proposalObjId); + List proposalPartList = commonService.selectList("salesMng.getProposalPartList", request, proposalParam); + if(proposalPartList != null && proposalPartList.size() > 0){ + // 품의서 품목을 발주서 그리드 형식으로 변환 + for(int i = 0; i < proposalPartList.size(); i++){ + Map partRow = (Map)proposalPartList.get(i); + Map detailRow = new HashMap(); + detailRow.put("OBJID", ""); + + // 대소문자 모두 체크 + String partObjId = CommonUtils.checkNull(partRow.get("PART_OBJID")); + if("".equals(partObjId)) partObjId = CommonUtils.checkNull(partRow.get("part_objid")); + detailRow.put("PART_OBJID", partObjId); + + detailRow.put("ROW_NUM", i + 1); + + String partName = CommonUtils.checkNull(partRow.get("PART_NAME")); + if("".equals(partName)) partName = CommonUtils.checkNull(partRow.get("part_name")); + detailRow.put("PART_NAME", partName); + + String spec = CommonUtils.checkNull(partRow.get("SPEC")); + if("".equals(spec)) spec = CommonUtils.checkNull(partRow.get("spec")); + detailRow.put("SPEC", spec); + + // 수량 (대소문자 모두 체크) + Object qtyObj = partRow.get("QTY"); + if(qtyObj == null) qtyObj = partRow.get("qty"); + String qtyStr = CommonUtils.checkNull(qtyObj, "0").toString().replaceAll(",", ""); + int qty = 0; + try { qty = (int)Double.parseDouble(qtyStr.equals("") ? "0" : qtyStr); } catch(Exception e) { qty = 0; } + detailRow.put("ORDER_QTY", qty); + + // 단위 (대소문자 모두 체크) + String unit = CommonUtils.checkNull(partRow.get("UNIT")); + if("".equals(unit)) unit = CommonUtils.checkNull(partRow.get("unit")); + detailRow.put("UNIT", "".equals(unit) ? "0001400" : unit); + + // 배송지 + detailRow.put("DELIVERY_PLACE", "RPS"); + + // 단가 (대소문자 모두 체크) + Object priceObj = partRow.get("UNIT_PRICE"); + if(priceObj == null) priceObj = partRow.get("unit_price"); + String priceStr = CommonUtils.checkNull(priceObj, "0").toString().replaceAll(",", ""); + int unitPrice = 0; + try { unitPrice = (int)Double.parseDouble(priceStr.equals("") ? "0" : priceStr); } catch(Exception e) { unitPrice = 0; } + detailRow.put("PARTNER_PRICE", unitPrice); + + // 공급가액 = 수량 * 단가 + detailRow.put("SUPPLY_UNIT_PRICE", qty * unitPrice); + + // 비고 (대소문자 모두 체크) + String remark = CommonUtils.checkNull(partRow.get("REMARK")); + if("".equals(remark)) remark = CommonUtils.checkNull(partRow.get("remark")); + detailRow.put("REMARK", remark); + + detailList.add(detailRow); + } + } + } + }else{ + info = purchaseOrderService.getPurchaseOrderMasterInfo(request, paramMap); + paramMap.put("MULTI_MASTER_OBJID", objId); + detailList = commonService.selectList("purchaseOrder.getPURCHASE_ORDER_PART", request, paramMap); + } + + // 공급업체 + code_map.put("partner_cd", commonService.bizMakeOptionList("", (String)info.get("PARTNER_OBJID"),"common.getClientMngSupplySelect")); + + // 단위 + Map param = new HashMap(); + param.put("code","0001399"); + code_map.put("unit_cd", commonService.getJqGridSelectBoxJsonData2("common.getCodeselect", param, "선택", "CODE", "NAME")); + + // 결제조건 + code_map.put("payment_terms_cd", commonService.bizMakeOptionList("0001074", (String)info.get("PAYMENT_TERMS"),"common.getCodeselect")); + + // 납품장소 + code_map.put("delivery_place_cd", commonService.bizMakeOptionList("0001146", (String)info.get("DELIVERY_PLACE"),"common.getCodeselect")); + + request.setAttribute("oemInfo", oemInfo); + request.setAttribute("info", info); + request.setAttribute("gridDetailList", JsonUtil.ListToJson(detailList)); + request.setAttribute("code_map", code_map); + request.setAttribute("objId", objId); + request.setAttribute("writer", writer); + request.setAttribute("writerName", writerName); + + // 담당자 목록 (사원 목록) + Map userParam = new HashMap(); + List userList = commonService.selectList("common.getUserList", request, userParam); + request.setAttribute("userList", userList); + + }catch(Exception e){ + e.printStackTrace(); + } + + if(CommonUtils.checkNull(paramMap.get("actType")).equals("DOWN")){ + request.setAttribute("detailList", detailList); + Map apprParam = new HashMap(); + apprParam.put("objId", objId); + request.setAttribute("apprList", commonService.getApprovalLine(apprParam)); + return "/purchaseOrder/purchaseOrderFormPopup_generalDOWN"; + }else{ + return "/purchaseOrder/purchaseOrderFormPopup_general"; + } + } + + /** + * 일반 발주서 저장 + */ + @RequestMapping("/purchaseOrder/purchaseOrderFormPopup_generalSave.do") + @ResponseBody + public Map purchaseOrderFormPopup_generalSave(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ + Map resultMap = new HashMap(); + try{ + PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); + paramMap.put("WRITER", CommonUtils.checkNull(person.getUserId())); + paramMap.put("FORM_TYPE", "general"); + + purchaseOrderService.savePurchaseOrder_new(request, paramMap); + CommonUtils.setReqResult(request, "", "S", null, resultMap); + }catch(Exception e){ + e.printStackTrace(); + CommonUtils.setReqResult(request, "", "F", e, resultMap); + } + return resultMap; + } + + /** + * 외주가공 발주서 양식 팝업 + */ + @RequestMapping("/purchaseOrder/purchaseOrderFormPopup_outsourcing.do") + public String purchaseOrderFormPopup_outsourcing(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ + Map code_map = new HashMap(); + Map info = new HashMap(); + List detailList = new ArrayList(); + HashMap oemInfo = new HashMap(); + + PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); + String objId = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"), ""); + String proposalObjId = CommonUtils.checkNull(paramMap.get("PROPOSAL_OBJID"), ""); + String writer = CommonUtils.checkNull(person.getUserId()); + String writerName = person.getUserName(); + + try{ + oemInfo = (HashMap)adminService.getSupMngInfo("-1130201617"); // RPS + + if(objId.equals("")){ + request.setAttribute("actType", "C"); // 등록 Create + objId = CommonUtils.createObjId(); + info.put("actType", "C"); + info.put("OBJID", objId); + info.put("PROPOSAL_OBJID", proposalObjId); + info.put("SALES_MNG_USER_ID", writer); + // 발주번호 자동생성 + info.put("PURCHASE_ORDER_NO", "RPS25-" + new java.text.SimpleDateFormat("MMdd").format(new java.util.Date()) + "-01"); + // 발주일자 기본값 오늘 + info.put("ORDER_DATE", new java.text.SimpleDateFormat("yyyy년 MM월 dd일").format(new java.util.Date())); + // 담당자 정보 기본값 + info.put("MANAGER_NAME", "안동윤"); + info.put("MANAGER_POSITION", "팀장"); + info.put("MANAGER_PHONE", "010-2313-2702"); + info.put("MANAGER_EMAIL", "ady1225@rps-korea.com"); + info.put("MANAGER_NAME2", "서동민"); + info.put("MANAGER_POSITION2", "주임"); + info.put("MANAGER_PHONE2", "010-9538-9513"); + info.put("MANAGER_EMAIL2", "sdm0927@rps-korea.com"); + + // 품의서(PROPOSAL) 품목 데이터 조회하여 그리드에 자동 세팅 + if(!"".equals(proposalObjId)){ + Map proposalParam = new HashMap(); + proposalParam.put("PROPOSAL_OBJID", proposalObjId); + List proposalPartList = commonService.selectList("salesMng.getProposalPartList", request, proposalParam); + if(proposalPartList != null && proposalPartList.size() > 0){ + // 품의서 품목을 외주가공 발주서 그리드 형식으로 변환 + for(int i = 0; i < proposalPartList.size(); i++){ + Map partRow = (Map)proposalPartList.get(i); + Map detailRow = new HashMap(); + detailRow.put("OBJID", ""); + + // 대소문자 모두 체크 + String partObjId = CommonUtils.checkNull(partRow.get("PART_OBJID")); + if("".equals(partObjId)) partObjId = CommonUtils.checkNull(partRow.get("part_objid")); + detailRow.put("PART_OBJID", partObjId); + + detailRow.put("ROW_NUM", i + 1); + + String vendorName = CommonUtils.checkNull(partRow.get("VENDOR_NAME")); + if("".equals(vendorName)) vendorName = CommonUtils.checkNull(partRow.get("vendor_name")); + detailRow.put("VENDOR_NAME", vendorName); + + String partName = CommonUtils.checkNull(partRow.get("PART_NAME")); + if("".equals(partName)) partName = CommonUtils.checkNull(partRow.get("part_name")); + detailRow.put("PART_NAME", partName); + + String spec = CommonUtils.checkNull(partRow.get("SPEC")); + if("".equals(spec)) spec = CommonUtils.checkNull(partRow.get("spec")); + detailRow.put("SPEC", spec); + + // 수량 (대소문자 모두 체크) + Object qtyObj = partRow.get("QTY"); + if(qtyObj == null) qtyObj = partRow.get("qty"); + String qtyStr = CommonUtils.checkNull(qtyObj, "0").toString().replaceAll(",", ""); + int qty = 0; + try { qty = (int)Double.parseDouble(qtyStr.equals("") ? "0" : qtyStr); } catch(Exception e) { qty = 0; } + detailRow.put("ORDER_QTY", qty); + + // 단위 (대소문자 모두 체크) + String unit = CommonUtils.checkNull(partRow.get("UNIT")); + if("".equals(unit)) unit = CommonUtils.checkNull(partRow.get("unit")); + detailRow.put("UNIT", "".equals(unit) ? "0001400" : unit); + + // 단가 (대소문자 모두 체크) + Object priceObj = partRow.get("UNIT_PRICE"); + if(priceObj == null) priceObj = partRow.get("unit_price"); + String priceStr = CommonUtils.checkNull(priceObj, "0").toString().replaceAll(",", ""); + int unitPrice = 0; + try { unitPrice = (int)Double.parseDouble(priceStr.equals("") ? "0" : priceStr); } catch(Exception e) { unitPrice = 0; } + detailRow.put("PARTNER_PRICE", unitPrice); + + // 합계 = 수량 * 단가 + detailRow.put("SUPPLY_UNIT_PRICE", qty * unitPrice); + + detailRow.put("WORK_ORDER_NO", ""); + + String partNo = CommonUtils.checkNull(partRow.get("PART_NO")); + if("".equals(partNo)) partNo = CommonUtils.checkNull(partRow.get("part_no")); + detailRow.put("PART_NO", partNo); + + String deliveryDate = CommonUtils.checkNull(partRow.get("DELIVERY_REQUEST_DATE")); + if("".equals(deliveryDate)) deliveryDate = CommonUtils.checkNull(partRow.get("delivery_request_date")); + detailRow.put("DELIVERY_REQUEST_DATE", deliveryDate); + + String remark = CommonUtils.checkNull(partRow.get("REMARK")); + if("".equals(remark)) remark = CommonUtils.checkNull(partRow.get("remark")); + detailRow.put("REMARK", remark); + + detailList.add(detailRow); + } + } + } + }else{ + info = purchaseOrderService.getPurchaseOrderMasterInfo(request, paramMap); + paramMap.put("MULTI_MASTER_OBJID", objId); + detailList = commonService.selectList("purchaseOrder.getPURCHASE_ORDER_PART", request, paramMap); + } + + // 공급업체 + code_map.put("partner_cd", commonService.bizMakeOptionList("", (String)info.get("PARTNER_OBJID"),"common.getClientMngSupplySelect")); + + // 단위 + Map param = new HashMap(); + param.put("code","0001399"); + code_map.put("unit_cd", commonService.getJqGridSelectBoxJsonData2("common.getCodeselect", param, "선택", "CODE", "NAME")); + + request.setAttribute("oemInfo", oemInfo); + request.setAttribute("info", info); + request.setAttribute("gridDetailList", JsonUtil.ListToJson(detailList)); + request.setAttribute("code_map", code_map); + request.setAttribute("objId", objId); + request.setAttribute("writer", writer); + request.setAttribute("writerName", writerName); + + }catch(Exception e){ + e.printStackTrace(); + } + + if(CommonUtils.checkNull(paramMap.get("actType")).equals("DOWN")){ + request.setAttribute("detailList", detailList); + Map apprParam = new HashMap(); + apprParam.put("objId", objId); + request.setAttribute("apprList", commonService.getApprovalLine(apprParam)); + return "/purchaseOrder/purchaseOrderFormPopup_outsourcingDOWN"; + }else{ + return "/purchaseOrder/purchaseOrderFormPopup_outsourcing"; + } + } + + /** + * 외주가공 발주서 저장 + */ + @RequestMapping("/purchaseOrder/purchaseOrderFormPopup_outsourcingSave.do") + @ResponseBody + public Map purchaseOrderFormPopup_outsourcingSave(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ + Map resultMap = new HashMap(); + try{ + PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); + paramMap.put("WRITER", CommonUtils.checkNull(person.getUserId())); + paramMap.put("FORM_TYPE", "outsourcing"); + + purchaseOrderService.savePurchaseOrder_new(request, paramMap); + CommonUtils.setReqResult(request, "", "S", null, resultMap); + }catch(Exception e){ + e.printStackTrace(); + CommonUtils.setReqResult(request, "", "F", e, resultMap); + } + return resultMap; + } + /** * 자재관리 - 발주관리 -발주서 저장 */ diff --git a/src/com/pms/mapper/purchaseOrder.xml b/src/com/pms/mapper/purchaseOrder.xml index 5cdeec9..5ad8195 100644 --- a/src/com/pms/mapper/purchaseOrder.xml +++ b/src/com/pms/mapper/purchaseOrder.xml @@ -544,11 +544,13 @@ EFFECTIVE_DATE, PAYMENT_TERMS, REMARK, + REQUEST_CONTENT, WRITER, REGDATE, STATUS, SALES_REQUEST_OBJID, - SALES_MNG_USER_ID + SALES_MNG_USER_ID, + SALES_MNG_USER_ID2 ,TITLE ,PURCHASE_DATE ,CONTRACT_MGMT_OBJID @@ -562,6 +564,7 @@ ,TOTAL_REAL_SUPPLY_PRICE ,DISCOUNT_PRICE ,TOTAL_PRICE + ,TOTAL_PRICE_ALL ,NEGO_RATE ,SUPPLY_BUS_NO ,SUPPLY_USER_NAME @@ -597,11 +600,13 @@ #{EFFECTIVE_DATE}, #{PAYMENT_TERMS}, #{REMARK}, + #{REQUEST_CONTENT}, #{WRITER}, NOW(), #{STATUS}, #{SALES_REQUEST_OBJID}, - #{SALES_MNG_USER_ID} + #{SALES_MNG_USER_ID}, + #{SALES_MNG_USER_ID2} ,#{TITLE} ,#{PURCHASE_DATE} ,#{CONTRACT_MGMT_OBJID}::NUMERIC @@ -615,6 +620,7 @@ ,#{TOTAL_REAL_SUPPLY_PRICE} ,#{DISCOUNT_PRICE } ,#{TOTAL_PRICE } + ,#{TOTAL_PRICE_ALL } ,#{NEGO_RATE } ,#{SUPPLY_BUS_NO } ,#{SUPPLY_USER_NAME } @@ -650,9 +656,11 @@ EFFECTIVE_DATE = #{EFFECTIVE_DATE}, PAYMENT_TERMS = #{PAYMENT_TERMS}, REMARK = #{REMARK}, + REQUEST_CONTENT = #{REQUEST_CONTENT}, WRITER = #{WRITER}, STATUS = #{STATUS}, - SALES_MNG_USER_ID = #{SALES_MNG_USER_ID} + SALES_MNG_USER_ID = #{SALES_MNG_USER_ID}, + SALES_MNG_USER_ID2 = #{SALES_MNG_USER_ID2} ,TITLE = #{TITLE} ,PURCHASE_DATE = #{PURCHASE_DATE} ,CONTRACT_MGMT_OBJID = #{CONTRACT_MGMT_OBJID}::NUMERIC @@ -669,6 +677,7 @@ ,TOTAL_REAL_SUPPLY_PRICE = #{TOTAL_REAL_SUPPLY_PRICE} ,DISCOUNT_PRICE = #{DISCOUNT_PRICE } ,TOTAL_PRICE = #{TOTAL_PRICE } + ,TOTAL_PRICE_ALL = #{TOTAL_PRICE_ALL } ,NEGO_RATE = #{NEGO_RATE } ,SUPPLY_BUS_NO = #{SUPPLY_BUS_NO } ,SUPPLY_USER_NAME = #{SUPPLY_USER_NAME } @@ -1157,6 +1166,7 @@ ,STOCK_QTY ,REAL_ORDER_QTY ,REAL_SUPPLY_PRICE + ,PART_DELIVERY_PLACE ) VALUES ( @@ -1196,6 +1206,7 @@ ,REPLACE(#{STOCK_QTY} ::VARCHAR, ',', '') ,REPLACE(#{REAL_ORDER_QTY} ::VARCHAR, ',', '') ,REPLACE(#{REAL_SUPPLY_PRICE} ::VARCHAR, ',', '') + ,#{PART_DELIVERY_PLACE} ) ON CONFLICT (OBJID) DO UPDATE SET @@ -1223,6 +1234,7 @@ ,STOCK_QTY = REPLACE(#{STOCK_QTY} ::VARCHAR, ',', '') ,REAL_ORDER_QTY = REPLACE(#{REAL_ORDER_QTY} ::VARCHAR, ',', '') ,REAL_SUPPLY_PRICE = REPLACE(#{REAL_SUPPLY_PRICE} ::VARCHAR, ',', '') + ,PART_DELIVERY_PLACE = #{PART_DELIVERY_PLACE}