Compare commits
9 Commits
V202512220
...
V202512230
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c27c71dbb | ||
| 4ed18d9f11 | |||
| 29671cb26a | |||
|
|
138e178005 | ||
| eea2f67983 | |||
| d20382e717 | |||
| 5b0850f919 | |||
| bfc9d768c8 | |||
| 2ee76a8f20 |
@@ -3969,6 +3969,17 @@
|
||||
ORDER BY REGDATE DESC, MBOM_NO
|
||||
</select>
|
||||
|
||||
<!-- M-BOM 목록 (품명 포함, 원자재소요량/반제품소요량용) -->
|
||||
<select id="getMbomListWithPartName" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
SELECT
|
||||
OBJID,
|
||||
MBOM_NO,
|
||||
COALESCE(PART_NAME, '') AS PART_NAME
|
||||
FROM MBOM_HEADER
|
||||
WHERE STATUS = 'Y'
|
||||
ORDER BY REGDATE DESC, MBOM_NO
|
||||
</select>
|
||||
|
||||
<!-- M-BOM 헤더 정보 조회 (OBJID로) -->
|
||||
<select id="getMbomHeaderByObjid" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
SELECT
|
||||
|
||||
@@ -4293,17 +4293,20 @@ SELECT POM.OBJID
|
||||
,POM.TOTAL_PRICE
|
||||
,POM.DISCOUNT_PRICE
|
||||
,POM.TOTAL_SUPPLY_UNIT_PRICE
|
||||
,POM.TOTAL_SUPPLY_PRICE
|
||||
-- ,POM.TOTAL_SUPPLY_PRICE
|
||||
,S1.TOTAL_SUPPLY_PRICE
|
||||
,POM.NEGO_RATE
|
||||
,POM.MULTI_MASTER_YN
|
||||
,POM.MULTI_YN
|
||||
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
|
||||
,COALESCE(POM.FORM_TYPE, '') AS FORM_TYPE
|
||||
<!-- ,S1.TOTAL_PO_QTY -->
|
||||
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY
|
||||
<!--,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY -->
|
||||
,S1.CUR_DELIVERY_DATE
|
||||
,S1.TOTAL_DELIVERY_QTY
|
||||
,S1.TOTAL_DELIVERY_PRICE
|
||||
,S1.TOTAL_NOT_DELIVERY_PRICE
|
||||
<!-- ,(S1.TOTAL_PO_QTY - S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY) AS NON_DELIVERY_QTY -->
|
||||
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY <!-- - S1.TOTAL_DEFECT_QTY --> )) AS NON_DELIVERY_QTY
|
||||
<!-- ,S1.TOTAL_DEFECT_QTY -->
|
||||
@@ -4355,19 +4358,23 @@ SELECT POM.OBJID
|
||||
LEFT OUTER JOIN(
|
||||
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
|
||||
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
|
||||
,MAX(DH.RECEIPT_DATE) AS CUR_DELIVERY_DATE
|
||||
,SUM(DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
|
||||
,SUM(pop.partner_price::NUMERIC * DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_PRICE
|
||||
|
||||
<!-- ,SUM(DH.ERROR_QTY::NUMERIC) AS TOTAL_DEFECT_QTY -->
|
||||
<!-- ,MAX(DH.DELIVERY_DATE) AS CUR_DELIVERY_DATE
|
||||
,SUM(DH.DELIVERY_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
|
||||
,SUM(DH.DEFECT_QTY::NUMERIC) AS TOTAL_DEFECT_QTY -->
|
||||
,MAX(AP_AGG.MAX_RECEIPT_DATE) AS CUR_DELIVERY_DATE
|
||||
,SUM(COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_QTY
|
||||
-- 발주금액 = 단가 × 발주수량
|
||||
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(POP.ORDER_QTY::NUMERIC, 0)) AS TOTAL_SUPPLY_PRICE
|
||||
-- 입고금액 = 단가 × 입고수량
|
||||
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_PRICE
|
||||
-- 미입고금액 = 단가 × (발주수량 - 입고수량)
|
||||
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * (COALESCE(POP.ORDER_QTY::NUMERIC, 0) - COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0))) AS TOTAL_NOT_DELIVERY_PRICE
|
||||
FROM PURCHASE_ORDER_PART POP
|
||||
LEFT OUTER JOIN ARRIVAL_PLAN DH
|
||||
ON POP.OBJID = DH.ORDER_PART_OBJID
|
||||
<!-- LEFT OUTER JOIN DELIVERY_HISTORY DH -->
|
||||
<!-- ON POP.PART_OBJID = DH.PART_OBJID -->
|
||||
LEFT OUTER JOIN (
|
||||
-- ARRIVAL_PLAN을 ORDER_PART_OBJID별로 먼저 집계
|
||||
SELECT ORDER_PART_OBJID
|
||||
,SUM(RECEIPT_QTY::NUMERIC) AS SUM_RECEIPT_QTY
|
||||
,MAX(RECEIPT_DATE) AS MAX_RECEIPT_DATE
|
||||
FROM ARRIVAL_PLAN
|
||||
GROUP BY ORDER_PART_OBJID
|
||||
) AP_AGG ON POP.OBJID = AP_AGG.ORDER_PART_OBJID
|
||||
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
|
||||
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
|
||||
LEFT OUTER JOIN PROJECT_MGMT AS CM
|
||||
|
||||
@@ -41,6 +41,12 @@
|
||||
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
||||
overflow: auto !important;
|
||||
}
|
||||
body, html {
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
@@ -104,8 +110,8 @@
|
||||
{title:"자재목록", headerHozAlign:'center',
|
||||
//frozen:false,
|
||||
columns:[
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '프로젝트번호', field : 'PROJECT_NO' },
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '200', title : '유닛명', field : 'UNIT_NAME' },
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '130', title : '프로젝트번호', field : 'PROJECT_NO' },
|
||||
//{headerHozAlign : 'center', hozAlign : 'left', width : '200', title : '유닛명', field : 'UNIT_NAME' },
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품번', field : 'PART_NO' },
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'PART_NAME' },
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '재질', field : 'MATERIAL' },
|
||||
|
||||
@@ -46,8 +46,10 @@ var resultGrid;
|
||||
var grid;
|
||||
// 입력 행 번호
|
||||
var rowSeq = 0;
|
||||
// M-BOM 옵션 데이터
|
||||
// M-BOM 옵션 데이터 (셀렉트박스용)
|
||||
var mbomOptionsData = {};
|
||||
// M-BOM 품명 데이터 (OBJID -> PART_NAME 매핑)
|
||||
var mbomPartNameData = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
@@ -87,7 +89,14 @@ function fn_initMbomOptions() {
|
||||
mbomOptionsData[val] = text;
|
||||
}
|
||||
});
|
||||
|
||||
// M-BOM 품명 데이터 초기화 (서버에서 전달받은 데이터)
|
||||
<c:forEach var="item" items="${mbom_part_name_list}">
|
||||
mbomPartNameData["${item.OBJID}"] = "${item.PART_NAME}";
|
||||
</c:forEach>
|
||||
|
||||
console.log("M-BOM 옵션:", mbomOptionsData);
|
||||
console.log("M-BOM 품명:", mbomPartNameData);
|
||||
}
|
||||
|
||||
// 입력 그리드 초기화
|
||||
@@ -136,12 +145,12 @@ function fn_initInputGrid() {
|
||||
return mbomOptionsData[value] || "";
|
||||
},
|
||||
cellEdited: function(cell) {
|
||||
// M-BOM 선택 시 품명 자동 입력
|
||||
// M-BOM 선택 시 품명 자동 입력 (MBOM_HEADER.PART_NAME 사용)
|
||||
var mbomObjid = cell.getValue();
|
||||
var row = cell.getRow();
|
||||
if(mbomObjid) {
|
||||
var mbomName = mbomOptionsData[mbomObjid] || "";
|
||||
row.update({PART_NAME: mbomName});
|
||||
var partName = mbomPartNameData[mbomObjid] || "";
|
||||
row.update({PART_NAME: partName});
|
||||
} else {
|
||||
row.update({PART_NAME: ""});
|
||||
}
|
||||
|
||||
@@ -46,8 +46,10 @@ var resultGrid;
|
||||
var grid;
|
||||
// 입력 행 번호
|
||||
var rowSeq = 0;
|
||||
// M-BOM 옵션 데이터
|
||||
// M-BOM 옵션 데이터 (셀렉트박스용)
|
||||
var mbomOptionsData = {};
|
||||
// M-BOM 품명 데이터 (OBJID -> PART_NAME 매핑)
|
||||
var mbomPartNameData = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
@@ -87,7 +89,14 @@ function fn_initMbomOptions() {
|
||||
mbomOptionsData[val] = text;
|
||||
}
|
||||
});
|
||||
|
||||
// M-BOM 품명 데이터 초기화 (서버에서 전달받은 데이터)
|
||||
<c:forEach var="item" items="${mbom_part_name_list}">
|
||||
mbomPartNameData["${item.OBJID}"] = "${item.PART_NAME}";
|
||||
</c:forEach>
|
||||
|
||||
console.log("M-BOM 옵션:", mbomOptionsData);
|
||||
console.log("M-BOM 품명:", mbomPartNameData);
|
||||
}
|
||||
|
||||
// 입력 그리드 초기화
|
||||
@@ -136,12 +145,12 @@ function fn_initInputGrid() {
|
||||
return mbomOptionsData[value] || "";
|
||||
},
|
||||
cellEdited: function(cell) {
|
||||
// M-BOM 선택 시 품명 자동 입력
|
||||
// M-BOM 선택 시 품명 자동 입력 (MBOM_HEADER.PART_NAME 사용)
|
||||
var mbomObjid = cell.getValue();
|
||||
var row = cell.getRow();
|
||||
if(mbomObjid) {
|
||||
var mbomName = mbomOptionsData[mbomObjid] || "";
|
||||
row.update({PART_NAME: mbomName});
|
||||
var partName = mbomPartNameData[mbomObjid] || "";
|
||||
row.update({PART_NAME: partName});
|
||||
} else {
|
||||
row.update({PART_NAME: ""});
|
||||
}
|
||||
|
||||
@@ -89,7 +89,9 @@ $(document).ready(function(){
|
||||
var columns = [
|
||||
// 요구사항: 품의서 No, 발주서 No, 프로젝트번호, 품번, 품명, 공급업체, 발주수량, 입고수량, 미입고수량, 검사성적서, 입고결과
|
||||
{title:'TOTAL_SUPPLY_PRICE' ,field:'TOTAL_SUPPLY_PRICE' ,visible:false, frozen:true},
|
||||
{title:'TOTAL_DELIVERY_PRICE' ,field:'TOTAL_DELIVERY_PRICE' ,visible:false, frozen:true},
|
||||
{title:'TOTAL_DELIVERY_PRICE' ,field:'TOTAL_DELIVERY_PRICE' ,visible:false, frozen:true},
|
||||
{title:'TOTAL_NOT_DELIVERY_PRICE',field:'TOTAL_NOT_DELIVERY_PRICE',visible:false, frozen:true},
|
||||
{title:'FORM_TYPE' ,field:'FORM_TYPE' ,visible:false, frozen:true},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', minWidth : 130, widthGrow : 1, title : '품의서 No', field : 'PROPOSAL_NO',
|
||||
formatter: fnc_createGridAnchorTag,
|
||||
cellClick : function(e, cell) {
|
||||
@@ -100,7 +102,8 @@ var columns = [
|
||||
formatter:fnc_createGridAnchorTag,
|
||||
cellClick:function(e, cell){
|
||||
var objId = fnc_checkNull(cell.getData().OBJID);
|
||||
fn_formPopUp(objId);
|
||||
var formType = fnc_checkNull(cell.getData().FORM_TYPE, 'general');
|
||||
fn_formPopUp(objId, formType);
|
||||
}
|
||||
},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', minWidth : 140, widthGrow : 1, title : '프로젝트번호', field : 'PROJECT_NO'},
|
||||
@@ -182,17 +185,18 @@ function fn_calculateTotalAmount(){
|
||||
|
||||
// 현재 그리드에 표시된 데이터 가져오기
|
||||
var data = _tabulGrid.getData();
|
||||
var totalOrderAmount = 0; // 총 발주금액
|
||||
var totalOrderAmount = 0; // 총 발주금액
|
||||
var totalDeliveredAmount = 0; // 입고금액
|
||||
var totalNotDeliveredAmount = 0; // 미입고금액
|
||||
|
||||
if(data.length > 0) {
|
||||
data.forEach(function(row) {
|
||||
var rowTotalPrice = parseFloat(row.TOTAL_SUPPLY_PRICE || 0);
|
||||
// SQL에서 계산된 값 사용
|
||||
var rowSupplyPrice = parseFloat(row.TOTAL_SUPPLY_PRICE || 0);
|
||||
var rowDeliveredPrice = parseFloat(row.TOTAL_DELIVERY_PRICE || 0);
|
||||
var rowNotDeliveredPrice = rowTotalPrice - rowDeliveredPrice;
|
||||
var rowNotDeliveredPrice = parseFloat(row.TOTAL_NOT_DELIVERY_PRICE || 0);
|
||||
|
||||
totalOrderAmount += rowTotalPrice;
|
||||
totalOrderAmount += rowSupplyPrice;
|
||||
totalDeliveredAmount += rowDeliveredPrice;
|
||||
totalNotDeliveredAmount += rowNotDeliveredPrice;
|
||||
});
|
||||
@@ -326,14 +330,36 @@ function fn_deliveryResultPopUp(objId,purchaseOrderNo){
|
||||
fn_centerPopup(popup_width, popup_height, url, target);
|
||||
}
|
||||
|
||||
//등록,수정,뷰
|
||||
function fn_formPopUp(objId){
|
||||
//등록,수정,뷰 - 발주서 타입에 따라 다른 팝업 열기
|
||||
function fn_formPopUp(objId, 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;
|
||||
|
||||
@@ -1863,6 +1863,10 @@ public class ProductionPlanningController extends BaseService {
|
||||
// M-BOM 목록 (셀렉트박스용)
|
||||
code_map.put("mbom_list", commonService.bizMakeOptionList("", "", "productionplanning.getMbomListForSelect2"));
|
||||
|
||||
// M-BOM 목록 (품명 포함) - 품명 자동 입력용
|
||||
List<Map> mbomListWithPartName = productionPlanningService.getMbomListWithPartName();
|
||||
request.setAttribute("mbom_part_name_list", mbomListWithPartName);
|
||||
|
||||
request.setAttribute("code_map", code_map);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -1902,6 +1906,10 @@ public class ProductionPlanningController extends BaseService {
|
||||
// M-BOM 목록 (셀렉트박스용)
|
||||
code_map.put("mbom_list", commonService.bizMakeOptionList("", "", "productionplanning.getMbomListForSelect2"));
|
||||
|
||||
// M-BOM 목록 (품명 포함) - 품명 자동 입력용
|
||||
List<Map> mbomListWithPartName = productionPlanningService.getMbomListWithPartName();
|
||||
request.setAttribute("mbom_part_name_list", mbomListWithPartName);
|
||||
|
||||
request.setAttribute("code_map", code_map);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -3969,6 +3969,17 @@
|
||||
ORDER BY REGDATE DESC, MBOM_NO
|
||||
</select>
|
||||
|
||||
<!-- M-BOM 목록 (품명 포함, 원자재소요량/반제품소요량용) -->
|
||||
<select id="getMbomListWithPartName" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
SELECT
|
||||
OBJID,
|
||||
MBOM_NO,
|
||||
COALESCE(PART_NAME, '') AS PART_NAME
|
||||
FROM MBOM_HEADER
|
||||
WHERE STATUS = 'Y'
|
||||
ORDER BY REGDATE DESC, MBOM_NO
|
||||
</select>
|
||||
|
||||
<!-- M-BOM 헤더 정보 조회 (OBJID로) -->
|
||||
<select id="getMbomHeaderByObjid" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
SELECT
|
||||
|
||||
@@ -4293,17 +4293,20 @@ SELECT POM.OBJID
|
||||
,POM.TOTAL_PRICE
|
||||
,POM.DISCOUNT_PRICE
|
||||
,POM.TOTAL_SUPPLY_UNIT_PRICE
|
||||
,POM.TOTAL_SUPPLY_PRICE
|
||||
-- ,POM.TOTAL_SUPPLY_PRICE
|
||||
,S1.TOTAL_SUPPLY_PRICE
|
||||
,POM.NEGO_RATE
|
||||
,POM.MULTI_MASTER_YN
|
||||
,POM.MULTI_YN
|
||||
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
|
||||
,COALESCE(POM.FORM_TYPE, '') AS FORM_TYPE
|
||||
<!-- ,S1.TOTAL_PO_QTY -->
|
||||
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY
|
||||
<!--,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY -->
|
||||
,S1.CUR_DELIVERY_DATE
|
||||
,S1.TOTAL_DELIVERY_QTY
|
||||
,S1.TOTAL_DELIVERY_PRICE
|
||||
,S1.TOTAL_NOT_DELIVERY_PRICE
|
||||
<!-- ,(S1.TOTAL_PO_QTY - S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY) AS NON_DELIVERY_QTY -->
|
||||
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY <!-- - S1.TOTAL_DEFECT_QTY --> )) AS NON_DELIVERY_QTY
|
||||
<!-- ,S1.TOTAL_DEFECT_QTY -->
|
||||
@@ -4355,19 +4358,23 @@ SELECT POM.OBJID
|
||||
LEFT OUTER JOIN(
|
||||
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
|
||||
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
|
||||
,MAX(DH.RECEIPT_DATE) AS CUR_DELIVERY_DATE
|
||||
,SUM(DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
|
||||
,SUM(pop.partner_price::NUMERIC * DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_PRICE
|
||||
|
||||
<!-- ,SUM(DH.ERROR_QTY::NUMERIC) AS TOTAL_DEFECT_QTY -->
|
||||
<!-- ,MAX(DH.DELIVERY_DATE) AS CUR_DELIVERY_DATE
|
||||
,SUM(DH.DELIVERY_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
|
||||
,SUM(DH.DEFECT_QTY::NUMERIC) AS TOTAL_DEFECT_QTY -->
|
||||
,MAX(AP_AGG.MAX_RECEIPT_DATE) AS CUR_DELIVERY_DATE
|
||||
,SUM(COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_QTY
|
||||
-- 발주금액 = 단가 × 발주수량
|
||||
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(POP.ORDER_QTY::NUMERIC, 0)) AS TOTAL_SUPPLY_PRICE
|
||||
-- 입고금액 = 단가 × 입고수량
|
||||
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_PRICE
|
||||
-- 미입고금액 = 단가 × (발주수량 - 입고수량)
|
||||
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * (COALESCE(POP.ORDER_QTY::NUMERIC, 0) - COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0))) AS TOTAL_NOT_DELIVERY_PRICE
|
||||
FROM PURCHASE_ORDER_PART POP
|
||||
LEFT OUTER JOIN ARRIVAL_PLAN DH
|
||||
ON POP.OBJID = DH.ORDER_PART_OBJID
|
||||
<!-- LEFT OUTER JOIN DELIVERY_HISTORY DH -->
|
||||
<!-- ON POP.PART_OBJID = DH.PART_OBJID -->
|
||||
LEFT OUTER JOIN (
|
||||
-- ARRIVAL_PLAN을 ORDER_PART_OBJID별로 먼저 집계
|
||||
SELECT ORDER_PART_OBJID
|
||||
,SUM(RECEIPT_QTY::NUMERIC) AS SUM_RECEIPT_QTY
|
||||
,MAX(RECEIPT_DATE) AS MAX_RECEIPT_DATE
|
||||
FROM ARRIVAL_PLAN
|
||||
GROUP BY ORDER_PART_OBJID
|
||||
) AP_AGG ON POP.OBJID = AP_AGG.ORDER_PART_OBJID
|
||||
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
|
||||
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
|
||||
LEFT OUTER JOIN PROJECT_MGMT AS CM
|
||||
|
||||
@@ -2102,6 +2102,29 @@ public class ProductionPlanningService {
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 목록 조회 (품명 포함)
|
||||
* 원자재소요량/반제품소요량 화면에서 품명 자동 입력용
|
||||
* @return M-BOM 목록 (OBJID, MBOM_NO, PART_NAME)
|
||||
*/
|
||||
public List<Map> getMbomListWithPartName() {
|
||||
List<Map> resultList = new ArrayList<>();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
resultList = sqlSession.selectList("productionplanning.getMbomListWithPartName", new HashMap<>());
|
||||
// JSP에서 대문자 키로 접근하므로 변환
|
||||
resultList = CommonUtils.keyChangeUpperList(resultList);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 생산실적 날짜별 조회
|
||||
|
||||
Reference in New Issue
Block a user