구매리스트 소재, 가공 발주일, 입고일 표시 컬럼 추가, 엑셀다운기능 추가

This commit is contained in:
2026-02-27 11:14:35 +09:00
parent 667e2fd17e
commit a5d243d191
2 changed files with 156 additions and 10 deletions

View File

@@ -75,6 +75,7 @@ body, html {
<div class="header">
<h3 style="margin: 0 0 10px 0; float: left;">구매리스트</h3>
<div style="float: right;">
<input type="button" class="plm_btns excelIcon excelBtn" value="Excel Download" title="Excel Download">
<input type="button" value="견적요청서 생성" class="plm_btns" onclick="fn_createQuotationRequest();" style="margin-right: 5px; background-color: #4CAF50; border-color: #4CAF50;">
<input type="button" value="저장" class="plm_btns" onclick="fn_save();" style="margin-right: 5px;">
<input type="button" value="닫기" class="plm_btns" onclick="window.close();" style="margin-right: 5px;">
@@ -565,13 +566,11 @@ function fn_initGrid() {
title: '<span style="background-color: #FFFF00; padding: 2px 5px;">공급업체</span>',
field: 'VENDOR_PM',
editor: function(cell, onRendered, success, cancel, editorParams) {
// Select2 에디터 (가공업체와 동일한 목록 사용)
return createSelect2Editor(processingVendorList)(cell, onRendered, success, cancel, editorParams);
},
formatter: function(cell) {
var value = cell.getValue();
var value = (typeof cell.getValue === 'function') ? cell.getValue() : (cell.value || '');
if(!value) return '';
// processingVendorList에서 해당 값의 이름 찾기
for(var i = 0; i < processingVendorList.length; i++) {
if(processingVendorList[i].id == value) {
return processingVendorList[i].text;
@@ -686,9 +685,8 @@ function fn_initGrid() {
return createSelect2Editor(processingVendorList)(cell, onRendered, success, cancel, editorParams);
},
formatter: function(cell) {
var value = cell.getValue();
var value = (typeof cell.getValue === 'function') ? cell.getValue() : (cell.value || '');
if(!value) return '';
for(var i = 0; i < processingVendorList.length; i++) {
if(processingVendorList[i].id == value) {
return processingVendorList[i].text;
@@ -783,6 +781,32 @@ function fn_initGrid() {
return value;
}
},
// 35. 소재발주일
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: '소재발주일',
field: 'MATERIAL_PO_DATE',
formatter: function(cell) {
var value = (typeof cell.getValue === 'function') ? cell.getValue() : (cell.value || '');
if(!value) return '';
return value.length >= 10 ? value.substring(0, 10) : value;
}
},
// 36. 소재입고일
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: '소재입고일',
field: 'MATERIAL_RECEIPT_DATE',
formatter: function(cell) {
var value = (typeof cell.getValue === 'function') ? cell.getValue() : (cell.value || '');
if(!value) return '';
return value.length >= 10 ? value.substring(0, 10) : value;
}
},
// 34. 가공 품의서작성일
{
headerHozAlign: 'center',
@@ -791,14 +815,39 @@ function fn_initGrid() {
title: '가공품의서일',
field: 'PROCESSING_PROPOSAL_DATE',
formatter: function(cell) {
var value = cell.getValue();
var value = (typeof cell.getValue === 'function') ? cell.getValue() : (cell.value || '');
if(!value) return '';
// YYYY-MM-DD 형식으로 표시
if(value.length >= 10) {
return value.substring(0, 10);
}
return value;
}
},
// 37. 가공발주일
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: '가공발주일',
field: 'PROCESSING_PO_DATE',
formatter: function(cell) {
var value = (typeof cell.getValue === 'function') ? cell.getValue() : (cell.value || '');
if(!value) return '';
return value.length >= 10 ? value.substring(0, 10) : value;
}
},
// 38. 가공입고일
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: '가공입고일',
field: 'PROCESSING_RECEIPT_DATE',
formatter: function(cell) {
var value = (typeof cell.getValue === 'function') ? cell.getValue() : (cell.value || '');
if(!value) return '';
return value.length >= 10 ? value.substring(0, 10) : value;
}
}
];
@@ -875,8 +924,9 @@ function fn_loadFromMBom(callback) {
url: "/salesMng/getMBomForPurchaseList.do",
method: 'post',
data: {
PROJECT_MGMT_OBJID: mbomHeaderObjid, // MBOM_HEADER_OBJID를 직접 사용
bomReportObjId: bomReportObjid
PROJECT_MGMT_OBJID: mbomHeaderObjid,
bomReportObjId: bomReportObjid,
SALES_REQUEST_MASTER_OBJID: salesRequestMasterObjid
},
dataType: 'json',
success: function(data) {

View File

@@ -3187,7 +3187,51 @@ UPDATE SET
0 AS GRAND_TOTAL_PRICE,
SRP.PROPOSAL_DATE,
NULL AS PROCESSING_PROPOSAL_DATE,
'SRP' AS DATA_SOURCE -- 데이터 소스 구분용
-- 소재발주일: 소재품번으로 매칭
(SELECT POM.MAIL_SEND_DATE
FROM PURCHASE_ORDER_MASTER POM
JOIN PURCHASE_ORDER_PART POP ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE COALESCE(SRP.RAW_MATERIAL_PART_NO, '') != ''
AND POP.PART_OBJID::VARCHAR = (SELECT PM2.OBJID::VARCHAR FROM PART_MNG PM2 WHERE PM2.PART_NO = SRP.RAW_MATERIAL_PART_NO LIMIT 1)
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = SRP.SALES_REQUEST_MASTER_OBJID)
AND POM.MAIL_SEND_DATE IS NOT NULL
ORDER BY POM.MAIL_SEND_DATE DESC
LIMIT 1) AS MATERIAL_PO_DATE,
-- 소재입고일
(SELECT SUBSTRING(AP.RECEIPT_DATE, 1, 10)
FROM ARRIVAL_PLAN AP
JOIN PURCHASE_ORDER_PART POP ON AP.ORDER_PART_OBJID = POP.OBJID
JOIN PURCHASE_ORDER_MASTER POM ON POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE COALESCE(SRP.RAW_MATERIAL_PART_NO, '') != ''
AND POP.PART_OBJID::VARCHAR = (SELECT PM2.OBJID::VARCHAR FROM PART_MNG PM2 WHERE PM2.PART_NO = SRP.RAW_MATERIAL_PART_NO LIMIT 1)
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = SRP.SALES_REQUEST_MASTER_OBJID)
AND AP.RECEIPT_DATE IS NOT NULL AND AP.RECEIPT_DATE != ''
ORDER BY AP.RECEIPT_DATE DESC
LIMIT 1) AS MATERIAL_RECEIPT_DATE,
-- 가공발주일: 부품 PART_OBJID로 직접 매칭
(SELECT POM.MAIL_SEND_DATE
FROM PURCHASE_ORDER_MASTER POM
JOIN PURCHASE_ORDER_PART POP ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE POP.PART_OBJID::VARCHAR = SRP.PART_OBJID::VARCHAR
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = SRP.SALES_REQUEST_MASTER_OBJID)
AND POM.MAIL_SEND_DATE IS NOT NULL
ORDER BY POM.MAIL_SEND_DATE DESC
LIMIT 1) AS PROCESSING_PO_DATE,
-- 가공입고일
(SELECT SUBSTRING(AP.RECEIPT_DATE, 1, 10)
FROM ARRIVAL_PLAN AP
JOIN PURCHASE_ORDER_PART POP ON AP.ORDER_PART_OBJID = POP.OBJID
JOIN PURCHASE_ORDER_MASTER POM ON POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE POP.PART_OBJID::VARCHAR = SRP.PART_OBJID::VARCHAR
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = SRP.SALES_REQUEST_MASTER_OBJID)
AND AP.RECEIPT_DATE IS NOT NULL AND AP.RECEIPT_DATE != ''
ORDER BY AP.RECEIPT_DATE DESC
LIMIT 1) AS PROCESSING_RECEIPT_DATE,
'SRP' AS DATA_SOURCE
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
@@ -3519,6 +3563,58 @@ SELECT
G.PROCESSING_UNIT_PRICE,
G.PROCESSING_TOTAL_PRICE,
G.GRAND_TOTAL_PRICE,
<if test="SALES_REQUEST_MASTER_OBJID != null and !''.equals(SALES_REQUEST_MASTER_OBJID)">
-- 소재발주일: 소재품번(RAW_MATERIAL_PART_NO)으로 PART_MNG OBJID 조회 후 매칭
(SELECT POM.MAIL_SEND_DATE
FROM PURCHASE_ORDER_MASTER POM
JOIN PURCHASE_ORDER_PART POP ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE COALESCE(G.RAW_MATERIAL_PART_NO, '') != ''
AND POP.PART_OBJID::VARCHAR = (SELECT PM2.OBJID::VARCHAR FROM PART_MNG PM2 WHERE PM2.PART_NO = G.RAW_MATERIAL_PART_NO LIMIT 1)
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = #{SALES_REQUEST_MASTER_OBJID})
AND POM.MAIL_SEND_DATE IS NOT NULL
ORDER BY POM.MAIL_SEND_DATE DESC
LIMIT 1) AS MATERIAL_PO_DATE,
-- 소재입고일
(SELECT SUBSTRING(AP.RECEIPT_DATE, 1, 10)
FROM ARRIVAL_PLAN AP
JOIN PURCHASE_ORDER_PART POP ON AP.ORDER_PART_OBJID = POP.OBJID
JOIN PURCHASE_ORDER_MASTER POM ON POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE COALESCE(G.RAW_MATERIAL_PART_NO, '') != ''
AND POP.PART_OBJID::VARCHAR = (SELECT PM2.OBJID::VARCHAR FROM PART_MNG PM2 WHERE PM2.PART_NO = G.RAW_MATERIAL_PART_NO LIMIT 1)
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = #{SALES_REQUEST_MASTER_OBJID})
AND AP.RECEIPT_DATE IS NOT NULL AND AP.RECEIPT_DATE != ''
ORDER BY AP.RECEIPT_DATE DESC
LIMIT 1) AS MATERIAL_RECEIPT_DATE,
-- 가공발주일: 부품 PART_OBJID로 직접 매칭
(SELECT POM.MAIL_SEND_DATE
FROM PURCHASE_ORDER_MASTER POM
JOIN PURCHASE_ORDER_PART POP ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE POP.PART_OBJID::VARCHAR = G.PART_OBJID::VARCHAR
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = #{SALES_REQUEST_MASTER_OBJID})
AND POM.MAIL_SEND_DATE IS NOT NULL
ORDER BY POM.MAIL_SEND_DATE DESC
LIMIT 1) AS PROCESSING_PO_DATE,
-- 가공입고일
(SELECT SUBSTRING(AP.RECEIPT_DATE, 1, 10)
FROM ARRIVAL_PLAN AP
JOIN PURCHASE_ORDER_PART POP ON AP.ORDER_PART_OBJID = POP.OBJID
JOIN PURCHASE_ORDER_MASTER POM ON POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
JOIN SALES_REQUEST_MASTER SRM_PO ON POM.SALES_REQUEST_OBJID = SRM_PO.OBJID
WHERE POP.PART_OBJID::VARCHAR = G.PART_OBJID::VARCHAR
AND SRM_PO.PROJECT_NO = (SELECT PROJECT_NO FROM SALES_REQUEST_MASTER WHERE OBJID = #{SALES_REQUEST_MASTER_OBJID})
AND AP.RECEIPT_DATE IS NOT NULL AND AP.RECEIPT_DATE != ''
ORDER BY AP.RECEIPT_DATE DESC
LIMIT 1) AS PROCESSING_RECEIPT_DATE,
</if>
<if test="SALES_REQUEST_MASTER_OBJID == null or ''.equals(SALES_REQUEST_MASTER_OBJID)">
NULL AS MATERIAL_PO_DATE,
NULL AS MATERIAL_RECEIPT_DATE,
NULL AS PROCESSING_PO_DATE,
NULL AS PROCESSING_RECEIPT_DATE,
</if>
'MBOM' AS DATA_SOURCE
FROM GROUPED_BOM G
LEFT JOIN PART_MNG P ON P.OBJID::VARCHAR = G.PART_OBJID::VARCHAR