diff --git a/WebContent/WEB-INF/view/salesMng/purchaseRegProposalMngList.jsp b/WebContent/WEB-INF/view/salesMng/purchaseRegProposalMngList.jsp
new file mode 100644
index 0000000..d351bd7
--- /dev/null
+++ b/WebContent/WEB-INF/view/salesMng/purchaseRegProposalMngList.jsp
@@ -0,0 +1,227 @@
+<%@ 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.jsp" %>
+
+
+<%
+// DB에서 메뉴명 조회 (공통 유틸 사용)
+String menuObjId = request.getParameter("menuObjId");
+String menuName = CommonUtils.getMenuName(menuObjId, "구매요청_품의서관리");
+%>
+
+
+
+' +
@@ -569,7 +548,7 @@ function fn_createProposal() {
cancelButtonText: '취소'
}).then((result) => {
if (result.isConfirmed) {
- fn_executeCreateProposal(salesRequestObjid, targetParts);
+ fn_executeCreateProposal(salesRequestObjid);
}
});
} else {
@@ -579,7 +558,7 @@ function fn_createProposal() {
if(excludedParts && excludedParts.length > 0) {
var excludedListHtml = excludedParts.map(function(part) {
- return '- ' + fnc_checkNull(part.PART_NO) + ' / ' + fnc_checkNull(part.PART_NAME);
+ return '- ' + fnc_checkNull(part.PART_NO || part.part_no) + ' / ' + fnc_checkNull(part.PART_NAME || part.part_name);
}).join('
');
excludedHtml = '
' +
@@ -600,7 +579,7 @@ function fn_createProposal() {
error: function(xhr, status, error) {
Swal.fire({
title: '오류',
- text: '서버 통신 중 오류가 발생했습니다.22',
+ text: '서버 통신 중 오류가 발생했습니다.',
icon: 'error'
});
}
@@ -608,22 +587,21 @@ function fn_createProposal() {
}
/**
- * 품의서 생성 실행
+ * 품의서 생성 실행 (구매요청서 전용)
*/
-function fn_executeCreateProposal(salesRequestObjid, targetParts) {
+function fn_executeCreateProposal(salesRequestObjid) {
$.ajax({
- url: "/salesMng/createProposalFromPurchaseList.do",
+ url: "/salesMng/createProposalFromPurchaseReg.do",
type: "POST",
data: {
- SALES_REQUEST_MASTER_OBJID: salesRequestObjid,
- TARGET_PARTS: JSON.stringify(targetParts)
+ SALES_REQUEST_MASTER_OBJID: salesRequestObjid
},
dataType: "json",
success: function(response) {
if(response.resultFlag === "S") {
Swal.fire({
title: '생성 완료',
- text: '품의서가 생성되었습니다.\n품의서 관리에서 확인하세요.',
+ html: response.message || '품의서가 생성되었습니다.',
icon: 'success'
}).then(() => {
fn_search(); // 목록 새로고침
diff --git a/src/com/pms/mapper/purchaseOrder.xml b/src/com/pms/mapper/purchaseOrder.xml
index b509da5..c580968 100644
--- a/src/com/pms/mapper/purchaseOrder.xml
+++ b/src/com/pms/mapper/purchaseOrder.xml
@@ -879,10 +879,15 @@
SELECT
SRP.OBJID,
SRP.PART_OBJID,
- SRP.QTY,
- COALESCE(SRP.PO_QTY, SRP.QTY::NUMERIC, 0) AS ORDER_QTY, -- 발주수량 (PO_QTY 우선, 없으면 QTY)
- SRP.UNIT_PRICE AS PARTNER_PRICE,
- SRP.TOTAL_PRICE,
+ COALESCE(NULLIF(SRP.QTY::VARCHAR, ''), '0') AS QTY,
+ -- 발주수량: PO_QTY가 있고 0보다 크면 사용, 아니면 QTY 사용
+ CASE
+ WHEN SRP.PO_QTY IS NOT NULL AND SRP.PO_QTY::NUMERIC > 0 THEN SRP.PO_QTY::VARCHAR
+ WHEN SRP.QTY IS NOT NULL THEN SRP.QTY::VARCHAR
+ ELSE '0'
+ END AS ORDER_QTY,
+ COALESCE(SRP.UNIT_PRICE, 0) AS PARTNER_PRICE,
+ COALESCE(SRP.TOTAL_PRICE, 0) AS TOTAL_PRICE,
SRP.VENDOR_PM AS PARTNER_OBJID,
PM.PART_NO,
PM.PART_NAME,
@@ -3317,7 +3322,7 @@ SELECT POM.OBJID
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
left outer join SALES_REQUEST_MASTER as SRM
on POM.SALES_REQUEST_OBJID = SRM.OBJID
- and SRM.DOC_TYPE = 'PROPOSAL'
+ and SRM.DOC_TYPE IN ('PROPOSAL', 'PURCHASE_REG_PROPOSAL')
+ AND (
+ SRM.DOC_TYPE = 'PROPOSAL'
+ OR (SRM.DOC_TYPE = 'PURCHASE_REG_PROPOSAL' AND A.ROUTE_STATUS = 'complete')
+ )
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
@@ -4138,6 +4143,130 @@ ORDER BY V.PATH2
ORDER BY SRM.REGDATE DESC
+
+
+