Compare commits
7 Commits
29671cb26a
...
V202512230
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c27c71dbb | ||
| 4ed18d9f11 | |||
|
|
138e178005 | ||
|
|
969a136179 | ||
| d20382e717 | |||
|
|
1fa303cc0f | ||
|
|
ac8551c821 |
@@ -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
|
||||
|
||||
@@ -54,6 +54,9 @@
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#part_no", "#part_name", "#search_part_objid");
|
||||
|
||||
//엔터키로 조회
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
@@ -375,10 +378,19 @@ function fn_move(){
|
||||
</td>
|
||||
|
||||
<td><label for="">품번</label></td>
|
||||
<td><input type="text" name="part_no" id="part_no" autocomplete="off" value="${param.part_no}" style="width:150px;"/></td>
|
||||
<td>
|
||||
<select name="part_no" id="part_no" class="select2-part" style="width:150px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</td>
|
||||
|
||||
<td><label for="">품명</label></td>
|
||||
<td><input type="text" name="part_name" id="part_name" autocomplete="off" value="${param.part_name}" style="width:170px;"/></td>
|
||||
<td>
|
||||
<select name="part_name" id="part_name" class="select2-part" style="width:170px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="">PART 구분</label></td>
|
||||
<td><select name="part_type" id="part_type" class="select2" autocomplete="off" style="width:110px;"><option value="">선택</option>${code_map.part_type}</select></td>
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#part_no", "#part_name", "#search_part_objid");
|
||||
|
||||
//엔터키로 조회
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
@@ -379,10 +382,19 @@
|
||||
</td> --%>
|
||||
|
||||
<td><label for="">품번</label></td>
|
||||
<td><input type="text" name="part_no" id="part_no" autocomplete="off" value="${param.part_no}" style="width:150px;"/></td>
|
||||
<td>
|
||||
<select name="part_no" id="part_no" class="select2-part" style="width:150px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</td>
|
||||
|
||||
<td><label for="">품명</label></td>
|
||||
<td><input type="text" name="part_name" id="part_name" autocomplete="off" value="${param.part_name}" style="width:150px;"/></td>
|
||||
<td>
|
||||
<select name="part_name" id="part_name" class="select2-part" style="width:150px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td class=""><label>불출의뢰일</label></td>
|
||||
<td>
|
||||
|
||||
@@ -20,6 +20,9 @@ $(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#part_no", "#part_name", "#search_part_objid");
|
||||
|
||||
//fnc_getCodeListAppend("CUST_CD","CUSTOMER_CD","${param.CUSTOMER_CD}");
|
||||
//$("#Year").val("${sysYear}");
|
||||
|
||||
@@ -149,10 +152,19 @@ function fn_partMngHisDetail(objId){
|
||||
<td><select name="unit_code" id="unit_code" style="width:250px" class="select2" autocomplete="off"></select></td>
|
||||
|
||||
<td><label for="">품번</label></td>
|
||||
<td><input type="text" name="part_no" id="part_no" autocomplete="off" value="${param.part_no }" /></td>
|
||||
<td>
|
||||
<select name="part_no" id="part_no" class="select2-part" style="width:150px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</td>
|
||||
|
||||
<td><label for="">품명</label></td>
|
||||
<td><input type="text" name="part_name" id="part_name" autocomplete="off" value="${param.part_name}" /></td>
|
||||
<td>
|
||||
<select name="part_name" id="part_name" class="select2-part" style="width:150px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="">EO사유</label></td>
|
||||
<td><select name="change_option" id="change_option" class="select2" autocomplete="off"><option value="">선택</option>${code_map.change_option}</select></td>
|
||||
|
||||
@@ -101,6 +101,9 @@ String connector = person.getUserId();
|
||||
}
|
||||
|
||||
$('.select2').select2();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
||||
|
||||
//첨부팝업
|
||||
$(".File").click(function(){
|
||||
@@ -513,14 +516,19 @@ String connector = person.getUserId();
|
||||
<!-- <td> -->
|
||||
<!-- <select name="upg_no" id="upg_no" class="select2" style="width:250px;" autocomplete="off"></select> -->
|
||||
<!-- </td> -->
|
||||
<td><label for="">품번</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" style="width:150px;" autocomplete="off" value="${param.SEARCH_PART_NO}">
|
||||
</td>
|
||||
<td><label for="">품명</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" style="width:150px;" autocomplete="off" value="${param.SEARCH_PART_NAME}">
|
||||
</td>
|
||||
<td><label for="">품번</label></td>
|
||||
<td>
|
||||
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:150px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
||||
</td>
|
||||
<td><label for="">품명</label></td>
|
||||
<td>
|
||||
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="width:150px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="">Revision</label></td>
|
||||
<td>
|
||||
|
||||
@@ -91,6 +91,9 @@ ui-jqgrid tr.jqgrow td {
|
||||
|
||||
$('.select2').select2();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
||||
|
||||
fn_search();
|
||||
|
||||
|
||||
@@ -610,14 +613,19 @@ ui-jqgrid tr.jqgrow td {
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td> -->
|
||||
<td><label for="">품번</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" style="width:194px;" autocomplete="off" value="${param.SEARCH_PART_NO}">
|
||||
</td>
|
||||
<td><label for="">품명</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" style="width:150px;" autocomplete="off" value="${param.SEARCH_PART_NAME}">
|
||||
</td>
|
||||
<td><label for="">품번</label></td>
|
||||
<td>
|
||||
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:194px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
||||
</td>
|
||||
<td><label for="">품명</label></td>
|
||||
<td>
|
||||
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="width:150px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
<!-- <td><label for="">등록자</label></td>
|
||||
<td>
|
||||
<select name="WRITER" id="WRITER" required reqTitle="작성자" type="select" class="select2" autocomplete="off">
|
||||
|
||||
@@ -176,6 +176,9 @@ $(document).ready(function(){
|
||||
|
||||
$('.select2').select2();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
||||
|
||||
fn_search();
|
||||
});
|
||||
|
||||
@@ -731,12 +734,17 @@ function saveexcelpop() {
|
||||
|
||||
<td class="label"><label for="">품번</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" style="width:250px;">
|
||||
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:250px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
||||
</td>
|
||||
|
||||
<td class="label"><label for="">품명</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" style="width:250px;">
|
||||
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="width:250px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
@@ -41,6 +41,9 @@ $(document).ready(function(){
|
||||
_fnc_datepick(); // 날짜 선택기 초기화
|
||||
$('.select2').select2(); // select2 초기화
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#search_part_no", "#search_part_name", "#search_part_objid");
|
||||
|
||||
// Enter 키로 검색
|
||||
$("input").keyup(function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
@@ -717,13 +720,18 @@ function fn_openPurchaseListPopup() {
|
||||
<!-- 품번 -->
|
||||
<div style="display: flex; align-items: center; gap: 5px;">
|
||||
<label for="search_part_no">품번</label>
|
||||
<input type="text" name="search_part_no" id="search_part_no" value="" style="width:150px;">
|
||||
<select name="search_part_no" id="search_part_no" class="select2-part" style="width:150px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</div>
|
||||
|
||||
<!-- 품명 -->
|
||||
<div style="display: flex; align-items: center; gap: 5px;">
|
||||
<label for="search_part_name">품명</label>
|
||||
<input type="text" name="search_part_name" id="search_part_name" value="" style="width:150px;">
|
||||
<select name="search_part_name" id="search_part_name" class="select2-part" style="width:150px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- 접수일 -->
|
||||
|
||||
@@ -35,6 +35,9 @@ $(function(){
|
||||
fnc_datepick();
|
||||
$(".select2").select2();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2();
|
||||
|
||||
// 저장 버튼
|
||||
$("#btnSave").click(function(){
|
||||
fn_save();
|
||||
@@ -74,6 +77,94 @@ $(function(){
|
||||
<% } %>
|
||||
});
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
function initPartSelect2() {
|
||||
// 품번 Select2
|
||||
$("#PART_NO").select2({
|
||||
placeholder: "품번 검색...",
|
||||
allowClear: true,
|
||||
width: '100%',
|
||||
minimumInputLength: 1,
|
||||
language: {
|
||||
inputTooShort: function() { return "1글자 이상 입력하세요"; },
|
||||
searching: function() { return "검색 중..."; },
|
||||
noResults: function() { return "검색 결과가 없습니다"; }
|
||||
},
|
||||
ajax: {
|
||||
url: '/contractMgmt/searchPartList.do',
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
delay: 250,
|
||||
data: function(params) { return { searchTerm: params.term }; },
|
||||
processResults: function(data) {
|
||||
return {
|
||||
results: $.map(data, function(item) {
|
||||
return {
|
||||
id: item.PART_NO || item.part_no,
|
||||
text: item.PART_NO || item.part_no,
|
||||
partName: item.PART_NAME || item.part_name,
|
||||
partObjid: item.OBJID || item.objid
|
||||
};
|
||||
})
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
}).on('select2:select', function(e) {
|
||||
var data = e.params.data;
|
||||
// 품명 자동 설정
|
||||
if(data.partName) {
|
||||
// 품명 Select2에 옵션 추가 및 선택
|
||||
var newOption = new Option(data.partName, data.partName, true, true);
|
||||
$("#PART_NAME").append(newOption).trigger('change');
|
||||
}
|
||||
// hidden 필드에 OBJID 저장
|
||||
$("#PART_OBJID").val(data.partObjid);
|
||||
});
|
||||
|
||||
// 품명 Select2
|
||||
$("#PART_NAME").select2({
|
||||
placeholder: "품명 검색...",
|
||||
allowClear: true,
|
||||
width: '100%',
|
||||
minimumInputLength: 1,
|
||||
language: {
|
||||
inputTooShort: function() { return "1글자 이상 입력하세요"; },
|
||||
searching: function() { return "검색 중..."; },
|
||||
noResults: function() { return "검색 결과가 없습니다"; }
|
||||
},
|
||||
ajax: {
|
||||
url: '/contractMgmt/searchPartList.do',
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
delay: 250,
|
||||
data: function(params) { return { searchTerm: params.term }; },
|
||||
processResults: function(data) {
|
||||
return {
|
||||
results: $.map(data, function(item) {
|
||||
return {
|
||||
id: item.PART_NAME || item.part_name,
|
||||
text: item.PART_NAME || item.part_name,
|
||||
partNo: item.PART_NO || item.part_no,
|
||||
partObjid: item.OBJID || item.objid
|
||||
};
|
||||
})
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
}).on('select2:select', function(e) {
|
||||
var data = e.params.data;
|
||||
// 품번 자동 설정
|
||||
if(data.partNo) {
|
||||
var newOption = new Option(data.partNo, data.partNo, true, true);
|
||||
$("#PART_NO").append(newOption).trigger('change');
|
||||
}
|
||||
// hidden 필드에 OBJID 저장
|
||||
$("#PART_OBJID").val(data.partObjid);
|
||||
});
|
||||
}
|
||||
|
||||
// 날짜 선택기 초기화
|
||||
function fnc_datepick(){
|
||||
var $dateinput = $("input.date_icon");
|
||||
@@ -136,11 +227,19 @@ function fn_loadProjectInfo(projectObjid){
|
||||
$("#CUSTOMER_OBJID").trigger("change.select2");
|
||||
}
|
||||
|
||||
// 품번
|
||||
$("#PART_NO").val(fnc_checkNull(info.part_no));
|
||||
// 품번 (Select2)
|
||||
var partNo = fnc_checkNull(info.part_no);
|
||||
if(partNo != "") {
|
||||
var newOption = new Option(partNo, partNo, true, true);
|
||||
$("#PART_NO").append(newOption).trigger('change');
|
||||
}
|
||||
|
||||
// 품명
|
||||
$("#PART_NAME").val(fnc_checkNull(info.part_name));
|
||||
// 품명 (Select2)
|
||||
var partName = fnc_checkNull(info.part_name);
|
||||
if(partName != "") {
|
||||
var newOption = new Option(partName, partName, true, true);
|
||||
$("#PART_NAME").append(newOption).trigger('change');
|
||||
}
|
||||
|
||||
// 요청납기
|
||||
$("#REQ_DEL_DATE").val(fnc_checkNull(info.req_del_date));
|
||||
@@ -171,8 +270,9 @@ function fn_clearProjectInfo(){
|
||||
$("#PRODUCT_CODE").val("").trigger("change");
|
||||
$("#CATEGORY_CODE").val("").trigger("change");
|
||||
$("#CUSTOMER_OBJID").val("").trigger("change");
|
||||
$("#PART_NO").val("");
|
||||
$("#PART_NAME").val("");
|
||||
$("#PART_NO").val(null).trigger("change");
|
||||
$("#PART_NAME").val(null).trigger("change");
|
||||
$("#PART_OBJID").val("");
|
||||
$("#REQ_DEL_DATE").val("");
|
||||
$("#SERIAL_NO").val("");
|
||||
$("#ORDER_QTY").val("");
|
||||
@@ -353,11 +453,22 @@ function fn_save(){
|
||||
<tr>
|
||||
<td class="input_title"><label>품번<span class="required-mark">*</span></label></td>
|
||||
<td>
|
||||
<input type="text" name="PART_NO" id="PART_NO" value="${resultMap.part_no}">
|
||||
<select name="PART_NO" id="PART_NO" style="width:100%;">
|
||||
<option value="">선택</option>
|
||||
<c:if test="${not empty resultMap.part_no}">
|
||||
<option value="${resultMap.part_no}" selected>${resultMap.part_no}</option>
|
||||
</c:if>
|
||||
</select>
|
||||
<input type="hidden" name="PART_OBJID" id="PART_OBJID" value="${resultMap.part_objid}">
|
||||
</td>
|
||||
<td class="input_title"><label>품명<span class="required-mark">*</span></label></td>
|
||||
<td>
|
||||
<input type="text" name="PART_NAME" id="PART_NAME" value="${resultMap.part_name}">
|
||||
<select name="PART_NAME" id="PART_NAME" style="width:100%;">
|
||||
<option value="">선택</option>
|
||||
<c:if test="${not empty resultMap.part_name}">
|
||||
<option value="${resultMap.part_name}" selected>${resultMap.part_name}</option>
|
||||
</c:if>
|
||||
</select>
|
||||
</td>
|
||||
<td class="input_title"><label>S/N</label></td>
|
||||
<td>
|
||||
|
||||
@@ -53,6 +53,9 @@ String connector = person.getUserId();
|
||||
$(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#product_item_code", "#product_item_name", "#search_part_objid");
|
||||
|
||||
// 요청납기일 datepicker 적용
|
||||
$('#contract_start_date, #contract_end_date').datepicker({
|
||||
changeMonth: true,
|
||||
@@ -279,12 +282,17 @@ function openProjectFormPopUp(objId){
|
||||
|
||||
<td><label for="product_item_code">품번</label></td>
|
||||
<td>
|
||||
<input type="text" name="product_item_code" id="product_item_code" style="width:150px;" autocomplete="off" value="${param.product_item_code}">
|
||||
<select name="product_item_code" id="product_item_code" class="select2-part" style="width:150px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</td>
|
||||
|
||||
<td><label for="product_item_name">품명</label></td>
|
||||
<td>
|
||||
<input type="text" name="product_item_name" id="product_item_name" style="width:150px;" autocomplete="off" value="${param.product_item_name}">
|
||||
<select name="product_item_name" id="product_item_name" class="select2-part" style="width:150px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="serial_no">S/N</label></td>
|
||||
|
||||
@@ -48,6 +48,9 @@ $(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
||||
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#page").val("1");
|
||||
@@ -510,7 +513,9 @@ function fn_purchaseClose(){
|
||||
|
||||
<td><label for="">품명</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" style="width:130px;" autocomplete="off" value="${param.SEARCH_PART_NAME}">
|
||||
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="width:130px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -542,7 +547,12 @@ function fn_purchaseClose(){
|
||||
</select>
|
||||
</td>
|
||||
<td><label for="">품번</label></td>
|
||||
<td><input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" autocomplete="off" value="${param.SEARCH_PART_NO }" style="width:120px;"/></td>
|
||||
<td>
|
||||
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:120px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -42,6 +42,9 @@ $(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
||||
|
||||
//조회
|
||||
|
||||
|
||||
@@ -872,12 +875,17 @@ function fn_openMailFormPopup(purchaseOrderObjId){
|
||||
|
||||
<td><label for="">품번</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" style="" autocomplete="off" value="${param.SEARCH_PART_NO}">
|
||||
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:150px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
||||
</td>
|
||||
|
||||
<td><label for="">품명</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" style="" autocomplete="off" value="${param.SEARCH_PART_NAME}">
|
||||
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="width:150px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<%-- 발주부품, 발주구분 주석처리
|
||||
|
||||
@@ -147,8 +147,10 @@ function fn_reset(){
|
||||
$("#search_receipt_date_to").val("");
|
||||
$("#search_customer_name").val("");
|
||||
$("#search_model_name").val("");
|
||||
$("#search_product_no").val("");
|
||||
$("#search_product_name").val("");
|
||||
$("#search_part_no").val("");
|
||||
$("#search_part_name").val("");
|
||||
$("#search_serial_no").val("");
|
||||
$("#search_manufacturer").val("");
|
||||
$("#search_blame_decision").val("");
|
||||
@@ -276,9 +278,9 @@ function fn_FileRegist(objId, docType, docTypeName){
|
||||
</select>
|
||||
</td> -->
|
||||
<td><label>품번</label></td>
|
||||
<td><input type="text" name="search_product_no" id="search_product_no" style="" autocomplete="off"></td>
|
||||
<td><input type="text" name="search_product_no" id="search_product_no" style="width:150px;" autocomplete="off"></td>
|
||||
<td><label>품명</label></td>
|
||||
<td><input type="text" name="search_product_name" id="search_product_name" style="" autocomplete="off"></td>
|
||||
<td><input type="text" name="search_product_name" id="search_product_name" style="width:150px;" autocomplete="off"></td>
|
||||
<td><label>부품품번</label></td>
|
||||
<td><input type="text" name="search_part_no" id="search_part_no" style="width:215px;" autocomplete="off"></td>
|
||||
<td><label>부품품명</label></td>
|
||||
|
||||
@@ -58,6 +58,9 @@ $(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#search_part_no", "#search_part_name", "#search_part_objid");
|
||||
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#page").val("1");
|
||||
@@ -239,10 +242,19 @@ function fn_deliveryAcceptanceViewPopUp(objId,DELIVERY_STATUS){
|
||||
</td>
|
||||
|
||||
<td><label for="">품번</label></td>
|
||||
<td><input type="text" name="search_part_no" id="search_part_no" style="width:170px;" autocomplete="off" value="${param.search_part_no}"></td>
|
||||
<td>
|
||||
<select name="search_part_no" id="search_part_no" class="select2-part" style="width:170px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</td>
|
||||
|
||||
<td><label for="">품명</label></td>
|
||||
<td><input type="text" name="search_part_name" id="search_part_name" style="width:170px;" autocomplete="off" value="${param.search_part_name}"></td>
|
||||
<td>
|
||||
<select name="search_part_name" id="search_part_name" class="select2-part" style="width:170px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="">공급업체</label></td>
|
||||
<td><select name="search_partner" id="search_partner" class="select2" autocomplete="off" style="width:250px;"><option value="">선택</option>${code_map.partner_objid}</select></td>
|
||||
|
||||
@@ -58,6 +58,9 @@ $(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#search_part_no", "#search_part_name", "#search_part_objid");
|
||||
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#page").val("1");
|
||||
@@ -300,10 +303,19 @@ function fn_deliveryAcceptanceViewPopUp(objId,DELIVERY_STATUS){
|
||||
</td>
|
||||
|
||||
<td><label for="">품번</label></td>
|
||||
<td><input type="text" name="search_part_no" id="search_part_no" style="width:170px;" autocomplete="off" value="${param.search_part_no}"></td>
|
||||
<td>
|
||||
<select name="search_part_no" id="search_part_no" class="select2-part" style="width:170px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</td>
|
||||
|
||||
<td><label for="">품명</label></td>
|
||||
<td><input type="text" name="search_part_name" id="search_part_name" style="width:170px;" autocomplete="off" value="${param.search_part_name}"></td>
|
||||
<td>
|
||||
<select name="search_part_name" id="search_part_name" class="select2-part" style="width:170px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="">공급업체</label></td>
|
||||
<td><select name="search_partner" id="search_partner" class="select2" autocomplete="off" style="width:250px;"><option value="">선택</option>${code_map.partner_objid}</select></td>
|
||||
|
||||
@@ -45,6 +45,9 @@ String menuName = CommonUtils.getMenuName(menuObjId, "구매관리_구매요청
|
||||
$(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
||||
|
||||
$("input[type=text]").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#btnSearch").trigger("click");
|
||||
@@ -710,20 +713,25 @@ function fn_executeCreateProposal(salesRequestObjid, targetParts) {
|
||||
<select name="SEARCH_PRODUCT_CODE" id="SEARCH_PRODUCT_CODE" style="" class="select2" autocomplete="off"></select>
|
||||
</td> -->
|
||||
|
||||
<%-- 품번 활성화 --%>
|
||||
<td class="align_r">
|
||||
<label for="" class="">품번</label>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" value="${param.SEARCH_PART_NO}" style="width:200px;"/>
|
||||
</td>
|
||||
<%-- 품명 활성화 --%>
|
||||
<td class="align_r">
|
||||
<label for="" class="">품명</label>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" value="${param.SEARCH_PART_NAME}" style="width:200px;"/>
|
||||
</td>
|
||||
<%-- 품번 활성화 --%>
|
||||
<td class="align_r">
|
||||
<label for="" class="">품번</label>
|
||||
</td>
|
||||
<td>
|
||||
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:200px;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
||||
</td>
|
||||
<%-- 품명 활성화 --%>
|
||||
<td class="align_r">
|
||||
<label for="" class="">품명</label>
|
||||
</td>
|
||||
<td>
|
||||
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="width:200px;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
<%-- 상태 주석처리
|
||||
<td class="align_r">
|
||||
<label for="" class="">상태</label>
|
||||
|
||||
@@ -2955,7 +2955,6 @@ public class PurchaseOrderService {
|
||||
|
||||
try {
|
||||
String targetObjId = CommonUtils.checkNull(paramMap.get("objId"));
|
||||
String pdfSessionId = CommonUtils.checkNull(paramMap.get("pdfSessionId")); // PDF 세션 ID 추가
|
||||
String toEmails = CommonUtils.checkNull(paramMap.get("toEmails"));
|
||||
String ccEmails = CommonUtils.checkNull(paramMap.get("ccEmails"));
|
||||
String subject = CommonUtils.checkNull(paramMap.get("subject"));
|
||||
@@ -2988,7 +2987,9 @@ public class PurchaseOrderService {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
String todayKor = frm.format(cal.getTime());
|
||||
String poNo = CommonUtils.checkNull((String)masterInfo.get("PURCHASE_ORDER_NO"));
|
||||
String excelName = "발주서_" + poNo + "_" + todayKor + ".xls";
|
||||
String zipName = "도면_" + poNo + "_" + todayKor + ".zip";
|
||||
masterInfo.put("EXCELFILE_NAME", excelName);
|
||||
masterInfo.put("APPR_COMPLETE_DATE", frm2.format(cal.getTime()));
|
||||
|
||||
// 발주서 테이블 내용 생성
|
||||
@@ -3028,30 +3029,11 @@ public class PurchaseOrderService {
|
||||
// 첨부파일 목록 생성
|
||||
ArrayList<HashMap> attachFileList = new ArrayList<HashMap>();
|
||||
|
||||
// 1. 발주서 PDF 파일 첨부
|
||||
if(!"".equals(pdfSessionId)) {
|
||||
File pdfFile = getPdfFromSession(pdfSessionId, poNo);
|
||||
if(pdfFile != null && pdfFile.exists()) {
|
||||
HashMap<String, String> pdfFileMap = new HashMap<String, String>();
|
||||
pdfFileMap.put(Constants.Db.COL_FILE_REAL_NAME, pdfFile.getName());
|
||||
pdfFileMap.put(Constants.Db.COL_FILE_SAVED_NAME, pdfFile.getName());
|
||||
pdfFileMap.put(Constants.Db.COL_FILE_PATH, pdfFile.getParent());
|
||||
attachFileList.add(pdfFileMap);
|
||||
System.out.println("발주서 PDF 파일 첨부 완료: " + pdfFile.getAbsolutePath());
|
||||
} else {
|
||||
System.out.println("발주서 PDF 파일을 찾을 수 없습니다: " + pdfSessionId);
|
||||
}
|
||||
}
|
||||
|
||||
/* 엑셀 첨부 주석처리 - PDF로 대체
|
||||
// 1. 발주서 엑셀 파일 첨부
|
||||
String excelName = "발주서_" + poNo + "_" + todayKor + ".xls";
|
||||
masterInfo.put("EXCELFILE_NAME", excelName);
|
||||
HashMap excelFile = this.makeMailAttachFileOrderSheet(masterInfo, contents_table);
|
||||
if(excelFile != null) {
|
||||
attachFileList.add(excelFile);
|
||||
}
|
||||
*/
|
||||
|
||||
// 2. 도면 파일 압축 첨부
|
||||
if(partFileList != null && partFileList.size() > 0) {
|
||||
@@ -3061,7 +3043,7 @@ public class PurchaseOrderService {
|
||||
hm.put(Constants.Db.COL_FILE_REAL_NAME, zf.getName());
|
||||
hm.put(Constants.Db.COL_FILE_SAVED_NAME, zf.getName());
|
||||
// 파일 경로에서 파일명을 제거하고 디렉토리 경로만 추출 (OS 독립적)
|
||||
hm.put(Constants.Db.COL_FILE_PATH, zf.getParent());
|
||||
hm.put(Constants.Db.COL_FILE_PATH, zf.getParent());
|
||||
attachFileList.add(hm);
|
||||
}
|
||||
}
|
||||
@@ -3076,8 +3058,7 @@ public class PurchaseOrderService {
|
||||
fromUser = CommonUtils.checkNull((String)masterInfo.get("WRITER"));
|
||||
}
|
||||
|
||||
// 구매팀 계정(PURCHASE) 사용
|
||||
boolean sendResult = MailUtil.sendMailWithAttachFile(fromUser, fromEmail, toUserIdList, toEmailList, ccEmailList, null, null, subject, mailContents, attachFileList, "PURCHASE_ORDER", Constants.Mail.ACCOUNT_TYPE_PURCHASE);
|
||||
boolean sendResult = MailUtil.sendMailWithAttachFile(fromUser, fromEmail, toUserIdList, toEmailList, ccEmailList, null, null, subject, mailContents, attachFileList, "PURCHASE_ORDER");
|
||||
|
||||
if(sendResult) {
|
||||
// 메일 발송 성공 시 DB 업데이트
|
||||
@@ -3138,7 +3119,6 @@ public class PurchaseOrderService {
|
||||
sb.append(userContents.replace("\n", "<br>"));
|
||||
sb.append("</div>");
|
||||
|
||||
/* 발주서 테이블 본문 표시 주석처리 - PDF 첨부로 대체
|
||||
// 구분선
|
||||
sb.append("<hr style='border: 1px solid #ddd; margin: 20px 0;'>");
|
||||
|
||||
@@ -3147,7 +3127,6 @@ public class PurchaseOrderService {
|
||||
sb.append("<h3 style='margin-bottom: 10px;'>[ 발주서 상세 ]</h3>");
|
||||
sb.append(poContentsTable);
|
||||
sb.append("</div>");
|
||||
*/
|
||||
|
||||
sb.append("<div style='margin-top: 20px; color: #666;'>※발신전용 메일입니다.</div>");
|
||||
sb.append("</body>");
|
||||
@@ -3198,45 +3177,4 @@ public class PurchaseOrderService {
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 세션 ID로 저장된 PDF 파일 가져오기
|
||||
* @param sessionId PDF 세션 ID
|
||||
* @param poNo 발주번호 (파일명에 사용)
|
||||
* @return PDF 파일
|
||||
*/
|
||||
private File getPdfFromSession(String sessionId, String poNo) {
|
||||
try {
|
||||
String tempDir = System.getProperty("java.io.tmpdir");
|
||||
File pdfFile = new File(tempDir + File.separator + sessionId + ".pdf");
|
||||
|
||||
if(pdfFile.exists()) {
|
||||
// 발주번호로 파일명 변경
|
||||
if("".equals(poNo)) poNo = "발주서";
|
||||
|
||||
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMddHHmmss");
|
||||
String timestamp = sdf.format(new java.util.Date());
|
||||
String newFileName = "발주서_" + poNo + "_" + timestamp + ".pdf";
|
||||
File renamedFile = new File(tempDir + File.separator + newFileName);
|
||||
|
||||
// 파일 복사
|
||||
java.nio.file.Files.copy(pdfFile.toPath(), renamedFile.toPath(),
|
||||
java.nio.file.StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
renamedFile.deleteOnExit();
|
||||
|
||||
// 원본 파일 삭제
|
||||
pdfFile.delete();
|
||||
|
||||
return renamedFile;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
} catch(Exception e) {
|
||||
System.out.println("PDF 파일 가져오기 중 오류: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user