품의서관리_발주서생성

This commit is contained in:
2025-11-28 16:15:50 +09:00
parent 5c72cda6e6
commit 3b78871b74
7 changed files with 1615 additions and 330 deletions

View File

@@ -578,8 +578,8 @@
(
#{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 '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),
<!-- 기존: PO-YYMM-순번, 신규: RPSYY-MMDD-순번 (예: RPS25-0926-01) -->
(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 '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),
<!-- 기존: PO-YYMM-순번, 신규: RPSYY-MMDD-순번 (예: RPS25-0926-01) -->
#{PARTNER_OBJID},
#{DELIVERY_REQUEST_DATE},
#{DELIVERY_PLACE},
@@ -839,6 +839,64 @@
GROUP BY PARTNER_OBJID
</select>
<!-- 품의서용 공급업체 조회 (VENDOR_PM 사용) -->
<select id="getVendorListByProposalObjid" parameterType="map" resultType="map">
SELECT
VENDOR_PM as PARTNER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN SALES_REQUEST_MASTER SRM ON SRP.SALES_REQUEST_MASTER_OBJID = SRM.OBJID
WHERE SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND VENDOR_PM IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM PURCHASE_ORDER_MASTER AS P WHERE P.SALES_REQUEST_OBJID = SRM.OBJID AND P.PARTNER_OBJID = SRP.VENDOR_PM)
GROUP BY VENDOR_PM
</select>
<!-- 품의서의 공급업체별 품목 조회 (VENDOR_PM 기준) -->
<select id="getProposalPartsByVendor" parameterType="map" resultType="map">
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,
SRP.VENDOR_PM AS PARTNER_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
PM.UNIT,
PM.MAKER
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = SRP.PART_OBJID
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND SRP.VENDOR_PM = #{PARTNER_OBJID}
</select>
<!-- 구매요청서의 공급업체별 품목 조회 (PARTNER_OBJID 기준) -->
<select id="getSalesRequestPartsByVendor" parameterType="map" resultType="map">
SELECT
SRP.OBJID,
SRP.PART_OBJID,
SRP.QTY,
SRP.UNIT_PRICE AS PARTNER_PRICE,
SRP.TOTAL_PRICE,
SRP.PARTNER_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
PM.UNIT,
PM.MAKER
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = SRP.PART_OBJID
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND SRP.PARTNER_OBJID = #{PARTNER_OBJID}
</select>
<update id="mergePurchaseOrderMasterPrice" parameterType="map">
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
</if>
</select>
<select id="purchaseOrderMasterList_new" parameterType="map" resultType="map">
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
@@ -3030,6 +3087,255 @@ SELECT POM.OBJID
,A.APPROVAL_OBJID
,A.APPR_DATE
,SALES_REQUEST_OBJID
,SRM.REQUEST_MNG_NO AS PROPOSAL_NO
,CODE_NAME(SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME
,CODE_NAME(CM.PRODUCT) AS PRODUCT_NAME
,CODE_NAME(CM.CATEGORY_CD) AS CATEGORY_NAME
-- 발주서 품목 정보 (첫번째 품번/품명 + 외 N건)
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
) AS PART_NAME
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
WHEN 'cancel' THEN '취소'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
,TO_CHAR(B.REGDATE,'YYYY-MM-DD') AS APPR_DATE
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('PURCHASE_ORDER')
) AS A ON ( POM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
<!-- 동시발주건 조건 주석처리(속도)240813
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR)
-->
)
<!--
INNER JOIN PROJECT_MGMT AS CM
-->
LEFT OUTER JOIN PROJECT_MGMT AS CM
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'
<!-- 230907 outer join으로 변경
,PROJECT_MGMT AS CM
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
-->
WHERE 1=1
<!-- for test
-->
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
<!--
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND TO_CHAR(S_P.REGDATE,'YYYY') = #{Year}
)
-->
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND S_P.CUSTOMER_OBJID = #{customer_cd}
)
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND CM.CUSTOMER_PROJECT_NAME = #{customer_project_name}
</if>
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="purchase_order_no !=null and purchase_order_no != '' ">
AND POM.PURCHASE_ORDER_NO LIKE '%'||#{purchase_order_no}||'%'
</if>
<if test="type !=null and type != '' ">
AND POM.TYPE = #{type}
</if>
<if test="order_type_cd !=null and order_type_cd != '' ">
AND POM.ORDER_TYPE_CD = #{order_type_cd}
</if>
<if test="delivery_start_date !=null and delivery_start_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{delivery_start_date}, 'YYYY-MM-DD')
</if>
<if test="delivery_end_date !=null and delivery_end_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{delivery_end_date}, 'YYYY-MM-DD')
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<!--
<if test="sales_mng_user_id !=null and sales_mng_user_id != '' ">
AND POM.SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
-->
<if test="sales_mng_user_ids != null and sales_mng_user_ids != ''">
AND POM.SALES_MNG_USER_ID IN
<foreach item="value" collection="sales_mng_user_ids.split(',')"
open="(" separator="," close=")">
#{value}
</foreach>
</if>
<if test="reg_start_date !=null and reg_start_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{reg_start_date}, 'YYYY-MM-DD')
</if>
<if test="reg_end_date !=null and reg_end_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{reg_end_date}, 'YYYY-MM-DD')
</if>
<if test="appr_status !=null and appr_status != '' ">
<choose>
<when test="'cancel'.equals(appr_status)">
AND POM.STATUS = #{appr_status}
</when>
<when test="'complete'.equals(appr_status)">
AND POM.STATUS = 'approvalComplete'
</when>
<when test="'create'.equals(appr_status)">
AND ( POM.STATUS = #{appr_status}
AND NOT EXISTS (SELECT 1 FROM APPROVAL AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
AND NOT EXISTS (SELECT 1 FROM APPROVAL_TARGET AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
OR AT.MASTER_TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
)
</when>
<otherwise>
AND A.APPR_STATUS = #{appr_status}
</otherwise>
</choose>
</if>
<if test="SEARCH_PART_NO !=null and SEARCH_PART_NO != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NO)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NO}))||'%'
)
</if>
<if test="SEARCH_PART_NAME !=null and SEARCH_PART_NAME != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NAME)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NAME}))||'%'
)
</if>
<if test="SEARCH_PART_SPEC !=null and SEARCH_PART_SPEC != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.SPEC)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_SPEC}))||'%'
)
</if>
ORDER BY SPLIT_PART( PURCHASE_ORDER_NO, '-', 3)::NUMERIC DESC
</select>
<select id="purchaseOrderMasterList_new_old" parameterType="map" resultType="map">
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE POM.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,TO_CHAR(POM.REGDATE, 'YYYY') AS PO_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,CM.PROJECT_NO
,POM.PURCHASE_ORDER_NO
,(CASE WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN 'ㅡ'
WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN ' '
ELSE '' END)||POM.TITLE TITLE
,POM.DELIVERY_PLACE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME
,POM.INSPECT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.INSPECT_METHOD) AS INSPECT_METHOD_NAME
,POM.PAYMENT_TERMS
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME
,POM.DELIVERY_DATE
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,POM.TOTAL_PRICE_ALL
,POM.DISCOUNT_PRICE
,POM.DISCOUNT_PRICE_ALL
,POM.TOTAL_SUPPLY_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.TOTAL_REAL_SUPPLY_PRICE
,POM.NEGO_RATE
<!--
,POM.TOTAL_SUPPLY_UNIT_PRICE::NUMERIC - POM.DISCOUNT_PRICE::NUMERIC as TOTAL_SUPPLY_UNIT_PRICE_NEGO
-->
,POM.ORDER_TYPE_CD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,POM.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.MULTI_YN
,POM.MULTI_MASTER_YN
,POM.MULTI_MASTER_OBJID
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
,POM.STATUS
,A.APPR_STATUS
,CASE WHEN POM.STATUS = 'cancel' then '취소'
ELSE COALESCE(A.APPR_STATUS_NAME,'작성중')
END AS APPR_STATUS_NAME
,A.ROUTE_OBJID
,A.APPROVAL_OBJID
,A.APPR_DATE
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN(
SELECT B.OBJID AS ROUTE_OBJID
@@ -5414,7 +5720,8 @@ FROM(
-->
WHERE 1=1
AND SRM.OBJID = #{SALES_REQUEST_MASTER_OBJID}
AND PARTNER_OBJID = #{PARTNER_OBJID}
AND SRP.VENDOR_PM = #{PARTNER_OBJID}
<!-- AND PARTNER_OBJID = #{PARTNER_OBJID} -->
</select>
<select id="purchaseOrderStatusGoods" parameterType="map" resultType="map">

View File

@@ -3758,7 +3758,8 @@ ORDER BY V.PATH2
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
SRM.REGDATE,
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
SRM.REMARK
SRM.REMARK,
SRM.DOC_TYPE
FROM
SALES_REQUEST_MASTER SRM
WHERE

View File

@@ -1783,7 +1783,127 @@ public class PurchaseOrderService {
}
}
public void savePurchaseOrder_salesRequest(HttpServletRequest request,Map paramMap) throws Exception{
/**
* 구매요청서/품의서에서 발주서 생성 (신규)
* - 품의서(PROPOSAL): VENDOR_PM 기준으로 공급업체별 발주서 생성
* - 구매요청서(PURCHASE_REQUEST): PARTNER_OBJID 기준으로 공급업체별 발주서 생성
*/
public void savePurchaseOrder_salesRequest(HttpServletRequest request, Map paramMap) throws Exception{
SqlSession sqlSession = null;
try{
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
HttpSession session = request.getSession();
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
String writer = CommonUtils.checkNull(person.getUserId());
// 선택된 구매요청서/품의서 목록
List<Map<String, Object>> gridDataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("jqGrid")));
for(int i = 0; i < gridDataList.size(); i++){
Map<String, Object> selectedItem = gridDataList.get(i);
String salesRequestObjid = CommonUtils.checkNull((String) selectedItem.get("OBJID"));
if("".equals(salesRequestObjid)){
continue;
}
// DOC_TYPE 조회하여 품의서인지 구매요청서인지 구분
Map<String, Object> queryParam = new HashMap<>();
queryParam.put("PROPOSAL_OBJID", salesRequestObjid);
queryParam.put("SALES_REQUEST_OBJID", salesRequestObjid);
Map salesRequestInfo = (Map) sqlSession.selectOne("salesMng.getProposalInfo", queryParam);
String docType = CommonUtils.checkNull((String) salesRequestInfo.get("doc_type"));
// 품의서(PROPOSAL)인 경우 VENDOR_PM 사용, 구매요청서는 PARTNER_OBJID 사용
String queryId = "PROPOSAL".equals(docType)
? "purchaseOrder.getVendorListByProposalObjid"
: "purchaseOrder.grtPartnerObjidBySalesRequestObjid";
// 공급업체별 목록 조회
List<Map<String, Object>> vendorList = sqlSession.selectList(queryId, queryParam);
// 공급업체별로 발주서 마스터 생성
for(Map<String, Object> vendorMap : vendorList){
String partnerObjid = CommonUtils.checkNull((String) vendorMap.get("partner_objid"));
if("".equals(partnerObjid)){
continue;
}
// 발주서 마스터 OBJID 생성
String purchaseOrderMasterObjid = CommonUtils.createObjId();
// 발주서 마스터 생성
Map<String, Object> masterParam = new HashMap<>();
masterParam.put("OBJID", purchaseOrderMasterObjid);
masterParam.put("SALES_REQUEST_OBJID", salesRequestObjid);
masterParam.put("PARTNER_OBJID", partnerObjid);
masterParam.put("WRITER", writer);
masterParam.put("STATUS", "create");
// 원본 데이터의 프로젝트 정보 등 복사
masterParam.putAll(selectedItem);
masterParam.put("OBJID", purchaseOrderMasterObjid); // OBJID는 새로 생성한 것으로
masterParam.put("PARTNER_OBJID", partnerObjid); // PARTNER_OBJID 덮어쓰기
sqlSession.update("purchaseOrder.mergePurchaseOrderMasterBySalesRequest", masterParam);
// 해당 공급업체의 품목 조회
String partQueryId = "PROPOSAL".equals(docType)
? "purchaseOrder.getProposalPartsByVendor"
: "purchaseOrder.getSalesRequestPartsByVendor";
Map<String, Object> partQueryParam = new HashMap<>();
partQueryParam.put("SALES_REQUEST_OBJID", salesRequestObjid);
partQueryParam.put("PARTNER_OBJID", partnerObjid);
List<Map<String, Object>> partList = sqlSession.selectList(partQueryId, partQueryParam);
// 발주서 품목 생성
for(Map<String, Object> partMap : partList){
Map<String, Object> partParam = new HashMap<>();
partParam.put("OBJID", CommonUtils.createObjId());
partParam.put("PURCHASE_ORDER_MASTER_OBJID", purchaseOrderMasterObjid);
partParam.put("PART_OBJID", CommonUtils.checkNull((String) partMap.get("part_objid")));
partParam.put("QTY", CommonUtils.checkNull(partMap.get("qty"), "0"));
// ORDER_QTY는 쿼리에서 PO_QTY 우선으로 계산된 값 사용
partParam.put("ORDER_QTY", CommonUtils.checkNull(partMap.get("order_qty"), "0"));
partParam.put("PARTNER_PRICE", CommonUtils.checkNull(partMap.get("partner_price"), "0"));
partParam.put("PART_NO", CommonUtils.checkNull((String) partMap.get("part_no")));
partParam.put("PART_NAME", CommonUtils.checkNull((String) partMap.get("part_name")));
partParam.put("SPEC", CommonUtils.checkNull((String) partMap.get("spec")));
partParam.put("UNIT", CommonUtils.checkNull((String) partMap.get("unit")));
partParam.put("MAKER", CommonUtils.checkNull((String) partMap.get("maker")));
partParam.put("WRITER", writer);
partParam.put("STATUS", "create");
sqlSession.insert("purchaseOrder.mergePurchaseOrderPartInfo", partParam);
}
}
}
sqlSession.commit();
}catch(Exception e){
if(sqlSession != null){
sqlSession.rollback();
}
e.printStackTrace();
throw new Exception(e);
}finally{
if(sqlSession != null){
sqlSession.close();
}
}
}
/**
* 구매요청서/품의서에서 발주서 생성 (기존 백업)
* @deprecated 신규 메서드로 대체됨
*/
@Deprecated
public void savePurchaseOrder_salesRequest_old(HttpServletRequest request,Map paramMap) throws Exception{
SqlSession sqlSession = null;
try{
String MASTER_OBJID = CommonUtils.createObjId();