diff --git a/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp b/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp
index 9636055..9690de4 100644
--- a/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp
+++ b/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp
@@ -1061,10 +1061,11 @@ function fn_createQuotationRequest() {
checkedRows.forEach(function(item) {
var vendorPm = item.VENDOR_PM || '';
var processingVendor = item.PROCESSING_VENDOR || '';
+ var originalObjids = item.ORIGINAL_OBJIDS || item.OBJID;
if(vendorPm && vendorPm !== '') {
supplyItems.push({
- objid: item.OBJID,
+ originalObjids: originalObjids,
vendorObjid: vendorPm,
partNo: item.PART_NO,
partName: item.PART_NAME
@@ -1073,7 +1074,7 @@ function fn_createQuotationRequest() {
if(processingVendor && processingVendor !== '') {
processingItems.push({
- objid: item.OBJID,
+ originalObjids: originalObjids,
vendorObjid: processingVendor,
partNo: item.PART_NO,
partName: item.PART_NAME
@@ -1098,14 +1099,14 @@ function fn_createQuotationRequest() {
if(!supplyVendorGroups[item.vendorObjid]) {
supplyVendorGroups[item.vendorObjid] = [];
}
- supplyVendorGroups[item.vendorObjid].push(item.objid);
+ supplyVendorGroups[item.vendorObjid].push(item.originalObjids);
});
processingItems.forEach(function(item) {
if(!processingVendorGroups[item.vendorObjid]) {
processingVendorGroups[item.vendorObjid] = [];
}
- processingVendorGroups[item.vendorObjid].push(item.objid);
+ processingVendorGroups[item.vendorObjid].push(item.originalObjids);
});
// 생성할 견적요청서 목록 표시
diff --git a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp
index b933c9f..6ef76f4 100644
--- a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp
+++ b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp
@@ -893,14 +893,12 @@ function fn_processQuotationRequestCreation(salesRequestObjid, purchaseList) {
// 대소문자 모두 처리 (서버에서 소문자로 반환될 수 있음)
var vendorPm = fnc_checkNull(item.VENDOR_PM || item.vendor_pm);
var processingVendor = fnc_checkNull(item.PROCESSING_VENDOR || item.processing_vendor);
- var objid = fnc_checkNull(item.OBJID || item.objid);
+ var originalObjids = fnc_checkNull(item.ORIGINAL_OBJIDS || item.original_objids || item.OBJID || item.objid);
var vendorName = fnc_checkNull(item.VENDOR_NAME || item.vendor_name);
var processingVendorName = fnc_checkNull(item.PROCESSING_VENDOR_NAME || item.processing_vendor_name);
- // 견적요청서 생성 가능 여부 플래그
var canCreateSupply = fnc_checkNull(item.CAN_CREATE_SUPPLY || item.can_create_supply);
var canCreateProcessing = fnc_checkNull(item.CAN_CREATE_PROCESSING || item.can_create_processing);
- // 공급업체 견적요청서 생성 가능한 경우
if(vendorPm !== '' && canCreateSupply === 'Y') {
if(!supplyVendorGroups[vendorPm]) {
supplyVendorGroups[vendorPm] = {
@@ -908,10 +906,9 @@ function fn_processQuotationRequestCreation(salesRequestObjid, purchaseList) {
parts: []
};
}
- supplyVendorGroups[vendorPm].parts.push(objid);
+ supplyVendorGroups[vendorPm].parts.push(originalObjids);
}
- // 가공업체 견적요청서 생성 가능한 경우
if(processingVendor !== '' && canCreateProcessing === 'Y') {
if(!processingVendorGroups[processingVendor]) {
processingVendorGroups[processingVendor] = {
@@ -919,7 +916,7 @@ function fn_processQuotationRequestCreation(salesRequestObjid, purchaseList) {
parts: []
};
}
- processingVendorGroups[processingVendor].parts.push(objid);
+ processingVendorGroups[processingVendor].parts.push(originalObjids);
}
});
diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml
index 41c86ce..917ec11 100644
--- a/src/com/pms/mapper/salesMng.xml
+++ b/src/com/pms/mapper/salesMng.xml
@@ -4956,6 +4956,35 @@ ORDER BY V.PATH2
WHERE MD.OBJID = #{OBJID}
+
+
+
@@ -5301,71 +5330,89 @@ ORDER BY V.PATH2
WHERE MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID}
-
+
diff --git a/src/com/pms/salesmgmt/service/SalesMngService.java b/src/com/pms/salesmgmt/service/SalesMngService.java
index b55c19e..c39f1b5 100644
--- a/src/com/pms/salesmgmt/service/SalesMngService.java
+++ b/src/com/pms/salesmgmt/service/SalesMngService.java
@@ -11,6 +11,7 @@ package com.pms.salesmgmt.service;
import java.io.FileInputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -2382,54 +2383,52 @@ public class SalesMngService {
sqlSession.insert("salesMng.insertQuotationRequestMaster", quotationMaster);
// 4. 선택된 품목들로 견적요청서 상세 생성
- List partObjids = new ArrayList();
+ // PART_OBJIDS: 각 항목이 ORIGINAL_OBJIDS (콤마구분 MBOM_DETAIL.OBJID) 형태
+ List partOriginalObjidsList = new ArrayList();
if(partObjidsJson != null && !partObjidsJson.isEmpty()) {
org.codehaus.jackson.map.ObjectMapper mapper = new org.codehaus.jackson.map.ObjectMapper();
- partObjids = mapper.readValue(partObjidsJson, List.class);
+ partOriginalObjidsList = mapper.readValue(partObjidsJson, List.class);
}
- for(String partObjid : partObjids) {
- // 구매리스트 품목 정보 조회
+ for(String originalObjids : partOriginalObjidsList) {
+ // ORIGINAL_OBJIDS를 개별 OBJID 리스트로 분리하여 그룹핑 조회
+ List objidList = Arrays.asList(originalObjids.split(","));
+
Map partParam = new HashMap();
- partParam.put("OBJID", partObjid);
- Map partInfo = (Map)sqlSession.selectOne("salesMng.getSalesRequestPartInfo", partParam);
+ partParam.put("OBJID_LIST", objidList);
+ Map partInfo = (Map)sqlSession.selectOne("salesMng.getGroupedSalesRequestPartInfo", partParam);
if(partInfo != null) {
Map detailParam = new HashMap();
detailParam.put("OBJID", CommonUtils.createObjId());
detailParam.put("QUOTATION_REQUEST_MASTER_OBJID", quotationMasterObjid);
- detailParam.put("SALES_REQUEST_PART_OBJID", partObjid); // MBOM_DETAIL.OBJID
+ detailParam.put("SALES_REQUEST_PART_OBJID", partInfo.get("OBJID"));
detailParam.put("PART_OBJID", partInfo.get("PART_OBJID"));
- // 업체유형에 따라 다른 정보 저장 (단가는 0으로, 견적 수신 후 입력)
if("PROCESSING".equals(vendorType)) {
- // 가공업체: 품번, 품명, 제작수량
detailParam.put("PART_NO", partInfo.get("PART_NO"));
detailParam.put("PART_NAME", partInfo.get("PART_NAME"));
detailParam.put("RAW_MATERIAL", "");
detailParam.put("SIZE", "");
detailParam.put("QTY", partInfo.get("PRODUCTION_QTY"));
- } else {
- // 공급업체: 소재품번 유무에 따라 분기
- String rawMaterialNo = CommonUtils.checkNull(partInfo.get("RAW_MATERIAL_NO"));
-
- if(!rawMaterialNo.isEmpty()) {
- // 소재품번이 있는 경우: 소재품번, 소재재질, 규격, 발주수량
- detailParam.put("PART_NO", partInfo.get("RAW_MATERIAL_NO"));
- detailParam.put("PART_NAME", partInfo.get("RAW_MATERIAL"));
- detailParam.put("RAW_MATERIAL", partInfo.get("RAW_MATERIAL"));
- detailParam.put("SIZE", partInfo.get("SIZE"));
- detailParam.put("QTY", partInfo.get("PO_QTY"));
} else {
- // 소재품번이 없는 경우: 부품품번, 부품명, 제작수량
- detailParam.put("PART_NO", partInfo.get("PART_NO"));
- detailParam.put("PART_NAME", partInfo.get("PART_NAME"));
- detailParam.put("RAW_MATERIAL", "");
- detailParam.put("SIZE", "");
- detailParam.put("QTY", partInfo.get("PRODUCTION_QTY"));
+ String rawMaterialNo = CommonUtils.checkNull(partInfo.get("RAW_MATERIAL_NO"));
+
+ if(!rawMaterialNo.isEmpty()) {
+ detailParam.put("PART_NO", partInfo.get("RAW_MATERIAL_NO"));
+ detailParam.put("PART_NAME", partInfo.get("RAW_MATERIAL"));
+ detailParam.put("RAW_MATERIAL", partInfo.get("RAW_MATERIAL"));
+ detailParam.put("SIZE", partInfo.get("SIZE"));
+ detailParam.put("QTY", partInfo.get("PO_QTY"));
+ } else {
+ detailParam.put("PART_NO", partInfo.get("PART_NO"));
+ detailParam.put("PART_NAME", partInfo.get("PART_NAME"));
+ detailParam.put("RAW_MATERIAL", "");
+ detailParam.put("SIZE", "");
+ detailParam.put("QTY", partInfo.get("PRODUCTION_QTY"));
+ }
}
- }
- detailParam.put("UNIT_PRICE", 0); // 단가는 견적 수신 후 입력
+ detailParam.put("UNIT_PRICE", 0);
detailParam.put("REMARK", "");
sqlSession.insert("salesMng.insertQuotationRequestDetail", detailParam);