V20260210 #141

Merged
hjjeong merged 3 commits from V20260210 into main 2026-02-20 01:01:06 +00:00
6 changed files with 69 additions and 28 deletions

View File

@@ -281,12 +281,12 @@ $(document).ready(function(){
$(this).jqGrid('setCell', ids[i], 'ROW_NUM', i+1);
}
setTimeout(function(){ gridFn.footerSummary(); }, 100);
setTimeout(function(){ gridFn.calcAllRows(); }, 100);
}
});
gridFn.opennEdit();
gridFn.footerSummary();
gridFn.calcAllRows();
<% if(isModify){ %>
// 수정 가능 상태
@@ -368,7 +368,7 @@ $(document).ready(function(){
$(".select2").select2();
gridFn.opennEdit();
gridFn.footerSummary();
gridFn.calcAllRows();
});
// 결재라인 가져오기
@@ -511,6 +511,19 @@ var gridFn = {
this.footerSummary();
}
,calcAllRows: function(){
var $g = $("#grid1");
var ids = grid.jqGrid('getDataIDs');
for(var i = 0; i < ids.length; i++){
var rowId = ids[i];
var qtyVal = $g.find("#"+rowId+"_ORDER_QTY").val();
var priceVal = $g.find("#"+rowId+"_PARTNER_PRICE").val();
var qty = Number(fnc_checkNullDefaultValue(qtyVal, grid.jqGrid('getCell', rowId, "ORDER_QTY")).toString().replace(/,/g,""));
var unitPrice = Number(fnc_checkNullDefaultValue(priceVal, grid.jqGrid('getCell', rowId, "PARTNER_PRICE")).toString().replace(/,/g,""));
grid.jqGrid('setCell', rowId, "SUPPLY_UNIT_PRICE", qty * unitPrice);
}
this.footerSummary();
}
,footerSummary: function(){
var totalSupplyPrice = 0;

View File

@@ -280,12 +280,12 @@ $(document).ready(function(){
$(this).jqGrid('setCell', ids[i], 'ROW_NUM', i+2); // 2부터 시작 (PDF 양식 참고)
}
setTimeout(function(){ gridFn.footerSummary(); }, 100);
setTimeout(function(){ gridFn.calcAllRows(); }, 100);
}
});
gridFn.opennEdit();
gridFn.footerSummary();
gridFn.calcAllRows();
<% if(isModify){ %>
// 수정 가능 상태
@@ -474,6 +474,19 @@ var gridFn = {
this.footerSummary();
}
,calcAllRows: function(){
var $g = $("#grid1");
var ids = grid.jqGrid('getDataIDs');
for(var i = 0; i < ids.length; i++){
var rowId = ids[i];
var qtyVal = $g.find("#"+rowId+"_ORDER_QTY").val();
var priceVal = $g.find("#"+rowId+"_PARTNER_PRICE").val();
var qty = Number(fnc_checkNullDefaultValue(qtyVal, grid.jqGrid('getCell', rowId, "ORDER_QTY")).toString().replace(/,/g,""));
var unitPrice = Number(fnc_checkNullDefaultValue(priceVal, grid.jqGrid('getCell', rowId, "PARTNER_PRICE")).toString().replace(/,/g,""));
grid.jqGrid('setCell', rowId, "SUPPLY_UNIT_PRICE", qty * unitPrice);
}
this.footerSummary();
}
,footerSummary: function(){
var totalSupplyPrice = 0;

View File

@@ -271,11 +271,22 @@ function createSelect2Editor(options) {
$(select).select2('open');
});
$(select).on('select2:select select2:clear', function(e) {
var isCleared = false;
$(select).on('select2:select', function(e) {
success($(select).val());
});
$(select).on('select2:clear', function(e) {
isCleared = true;
setTimeout(function() {
$(select).select2('close');
success('');
}, 0);
});
$(select).on('select2:close', function() {
if(isCleared) return;
setTimeout(function() {
success($(select).val());
}, 100);
@@ -672,19 +683,12 @@ function fn_initGrid() {
title: '<span style="background-color: #FFFF00; padding: 2px 5px;">가공업체</span>',
field: 'PROCESSING_VENDOR',
editor: function(cell, onRendered, success, cancel, editorParams) {
// Select2 에디터
return createSelect2Editor(processingVendorList)(cell, onRendered, success, cancel, editorParams);
},
formatter: function(cell) {
var value = cell.getValue();
if(!value) return '';
// 저장된 값이 없으면 기본값 '0000008377'(RPS) 설정
if(value === undefined || value === null || value === '') {
value = '0000008377';
cell.getRow().update({PROCESSING_VENDOR: value}, false);
}
// OBJID로 업체명 조회하여 표시
for(var i = 0; i < processingVendorList.length; i++) {
if(processingVendorList[i].id == value) {
return processingVendorList[i].text;

View File

@@ -880,12 +880,7 @@
SRP.OBJID,
SRP.PART_OBJID,
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(NULLIF(SRP.QTY::VARCHAR, ''), '0') 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,

View File

@@ -3172,7 +3172,7 @@ UPDATE SET
0 AS ORDER_QTY,
0 AS ITEM_QTY2,
0 AS PRODUCTION_QTY,
COALESCE(SRP.PROCESSING_VENDOR, '') AS PROCESSING_VENDOR,
CASE WHEN SRP.PROCESSING_VENDOR IS NULL THEN '0000008377' ELSE SRP.PROCESSING_VENDOR END AS PROCESSING_VENDOR,
NULL AS PROCESSING_DEADLINE,
NULL AS GRINDING_DEADLINE,
-- 구매 관련 컬럼 (SALES_REQUEST_PART에서 조회)
@@ -3463,7 +3463,7 @@ SELECT
G.RAW_MATERIAL_SPEC,
G.RAW_MATERIAL,
G.RAW_MATERIAL_SIZE AS SIZE,
G.PROCESSING_VENDOR,
CASE WHEN G.PROCESSING_VENDOR IS NULL THEN '0000008377' ELSE G.PROCESSING_VENDOR END AS PROCESSING_VENDOR,
G.PROCESSING_DEADLINE,
G.GRINDING_DEADLINE,
G.REQUIRED_QTY,
@@ -4184,6 +4184,7 @@ ORDER BY V.PATH2
SALES_REQUEST_MASTER_OBJID,
PART_OBJID,
QTY,
UNIT,
UNIT_PRICE,
TOTAL_PRICE,
VENDOR_PM,
@@ -4199,6 +4200,7 @@ ORDER BY V.PATH2
#{PROPOSAL_MASTER_OBJID},
PART_OBJID,
QTY,
UNIT,
UNIT_PRICE,
TOTAL_PRICE,
VENDOR AS VENDOR_PM,
@@ -4219,6 +4221,7 @@ ORDER BY V.PATH2
SALES_REQUEST_MASTER_OBJID,
PART_OBJID,
QTY,
UNIT,
UNIT_PRICE,
TOTAL_PRICE,
VENDOR_PM,
@@ -4234,6 +4237,7 @@ ORDER BY V.PATH2
#{PROPOSAL_MASTER_OBJID},
PART_OBJID,
PRODUCTION_QTY AS QTY,
UNIT,
PROCESSING_UNIT_PRICE AS UNIT_PRICE,
PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
PROCESSING_VENDOR AS VENDOR_PM,
@@ -4254,6 +4258,7 @@ ORDER BY V.PATH2
SALES_REQUEST_MASTER_OBJID,
PART_OBJID,
QTY,
UNIT,
UNIT_PRICE,
TOTAL_PRICE,
VENDOR_PM,
@@ -4269,6 +4274,7 @@ ORDER BY V.PATH2
#{PROPOSAL_MASTER_OBJID},
PART_OBJID,
QTY,
UNIT,
UNIT_PRICE,
TOTAL_PRICE,
VENDOR_PM,
@@ -4289,6 +4295,7 @@ ORDER BY V.PATH2
SALES_REQUEST_MASTER_OBJID,
PART_OBJID,
QTY,
UNIT,
UNIT_PRICE,
TOTAL_PRICE,
VENDOR_PM,
@@ -4304,6 +4311,7 @@ ORDER BY V.PATH2
#{PROPOSAL_MASTER_OBJID},
PART_OBJID,
PRODUCTION_QTY AS QTY,
UNIT,
PROCESSING_UNIT_PRICE AS UNIT_PRICE,
PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
PROCESSING_VENDOR AS VENDOR_PM,
@@ -4803,7 +4811,7 @@ ORDER BY V.PATH2
</select>
<!-- 품의서 품목 리스트 조회 -->
<select id="getProposalPartList" parameterType="map" resultType="map">
<select id="getProposalPartList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
ROW_NUMBER() OVER(ORDER BY SRP.REGDATE) AS RNUM,
SRP.OBJID,
@@ -4812,14 +4820,17 @@ ORDER BY V.PATH2
PM.PART_NAME,
PM.SPEC,
PM.MATERIAL,
SRP.UNIT,
COALESCE(SRP.UNIT, PM.UNIT) AS UNIT,
COALESCE(
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRP.UNIT),
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.UNIT)
) AS UNIT_TITLE,
SRP.QTY,
SRP.UNIT_PRICE,
SRP.TOTAL_PRICE,
COALESCE(SRP.UNIT_PRICE, 0) AS UNIT_PRICE,
CASE
WHEN COALESCE(SRP.TOTAL_PRICE::NUMERIC, 0) > 0 THEN SRP.TOTAL_PRICE::NUMERIC
ELSE COALESCE(SRP.QTY::NUMERIC, 0) * COALESCE(SRP.UNIT_PRICE::NUMERIC, 0)
END AS TOTAL_PRICE,
SRP.VENDOR_PM,
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
SRP.REMARK,

View File

@@ -2731,10 +2731,15 @@ public class SalesMngService {
// 줄바꿈을 HTML <br> 태그로 변환
String htmlContents = contents.replace("\n", "<br>");
// 메일 발송 (간단한 방식)
// 메일 발송 (견적요청서 - PURCHASE 계정 사용)
boolean sendResult = false;
ArrayList<String> toUserIdList = new ArrayList<String>();
toUserIdList.add("");
ArrayList<String> singleEmailList = new ArrayList<String>();
for(String toEmail : toEmailList) {
sendResult = MailUtil.sendMailNew(toEmail, subject, htmlContents);
singleEmailList.clear();
singleEmailList.add(toEmail);
sendResult = MailUtil.sendMailWithAttachFile(null, null, toUserIdList, singleEmailList, ccEmailList, null, null, subject, htmlContents, null, "QUOTATION_REQUEST", Constants.Mail.ACCOUNT_TYPE_PURCHASE);
if(!sendResult) break;
}