Merge pull request 'V20260210' (#166) from V20260210 into main
Reviewed-on: #166
This commit was merged in pull request #166.
This commit is contained in:
@@ -240,7 +240,10 @@ $(document).ready(function(){
|
||||
var part_type = part_type_val && part_type_val.trim() !== '' ? $.parseJSON(part_type_val) : {};
|
||||
var acctfg_code = acctfg_code_val && acctfg_code_val.trim() !== '' ? $.parseJSON(acctfg_code_val) : {};
|
||||
var sup_code = sup_code_val && sup_code_val.trim() !== '' ? $.parseJSON(sup_code_val) : {};
|
||||
|
||||
|
||||
var unit_dc_code_val = $("#unit_dc_code").val();
|
||||
var unit_dc_code = unit_dc_code_val && unit_dc_code_val.trim() !== '' ? $.parseJSON(unit_dc_code_val) : {};
|
||||
|
||||
//Excel File Upload된 파일 목록 부분을 초기화 한다.
|
||||
$("#excelImportList").hide();
|
||||
|
||||
@@ -384,16 +387,24 @@ $(document).ready(function(){
|
||||
}
|
||||
}
|
||||
}
|
||||
,{name:"UNIT_DC",index:"UNIT_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true
|
||||
,{name:"UNIT_DC",index:"UNIT_DC", width: 80, align:"center", hidden: false, sortable:false, editable:true
|
||||
,edittype :"select"
|
||||
,formatter :"select"
|
||||
,editoptions:{
|
||||
dataInit : function(e){
|
||||
value: unit_dc_code
|
||||
,dataInit : function(e){
|
||||
e.style.width = "92%";
|
||||
e.style.fontSize = 13;
|
||||
}
|
||||
}
|
||||
}
|
||||
,{name:"UNITMANG_DC",index:"UNITMANG_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true
|
||||
,{name:"UNITMANG_DC",index:"UNITMANG_DC", width: 80, align:"center", hidden: false, sortable:false, editable:true
|
||||
,edittype :"select"
|
||||
,formatter :"select"
|
||||
,editoptions:{
|
||||
dataInit : function(e){
|
||||
value: unit_dc_code
|
||||
,dataInit : function(e){
|
||||
e.style.width = "92%";
|
||||
e.style.fontSize = 13;
|
||||
}
|
||||
}
|
||||
@@ -479,7 +490,7 @@ $(document).ready(function(){
|
||||
//,cellsubmit : "clientArray"
|
||||
,rownumbers : true
|
||||
,viewrecords : true
|
||||
,width : 1500
|
||||
,width : "auto"
|
||||
,height : 420
|
||||
,multiselect : false
|
||||
,shrinkToFit : false
|
||||
@@ -1369,6 +1380,7 @@ function fn_save(){
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="part_type">${code_map.part_type}</textarea><!-- 코드동적설정 -->
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="acctfg_code">${code_map.acctfg_code}</textarea><!-- 계정구분 코드동적설정 -->
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="sup_code">${code_map.sup_code}</textarea><!-- 코드동적설정 -->
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="unit_dc_code">${code_map.unit_dc_code}</textarea><!-- 단위 코드동적설정 -->
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -38,6 +38,7 @@ $(document).ready(function(){
|
||||
var part_type = $.parseJSON($("#part_type").val()); //jqGrid 구분
|
||||
var acctfg_code = $.parseJSON($("#acctfg_code").val()); //jqGrid 계정구분
|
||||
var sup_code = $.parseJSON($("#sup_code").val()); //jqGrid 구분
|
||||
var unit_dc_code = $("#unit_dc_code").val() ? $.parseJSON($("#unit_dc_code").val()) : {}; //jqGrid 단위
|
||||
|
||||
//Excel File Upload된 파일 목록 부분을 초기화 한다.
|
||||
$("#excelImportList").hide();
|
||||
@@ -187,16 +188,24 @@ $(document).ready(function(){
|
||||
}
|
||||
}
|
||||
}
|
||||
,{name:"UNIT_DC",index:"UNIT_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true
|
||||
,{name:"UNIT_DC",index:"UNIT_DC", width: 80, align:"center", hidden: false, sortable:false, editable:true
|
||||
,edittype :"select"
|
||||
,formatter :"select"
|
||||
,editoptions:{
|
||||
dataInit : function(e){
|
||||
value: unit_dc_code
|
||||
,dataInit : function(e){
|
||||
e.style.width = "92%";
|
||||
e.style.fontSize = 13;
|
||||
}
|
||||
}
|
||||
}
|
||||
,{name:"UNITMANG_DC",index:"UNITMANG_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true
|
||||
,{name:"UNITMANG_DC",index:"UNITMANG_DC", width: 80, align:"center", hidden: false, sortable:false, editable:true
|
||||
,edittype :"select"
|
||||
,formatter :"select"
|
||||
,editoptions:{
|
||||
dataInit : function(e){
|
||||
value: unit_dc_code
|
||||
,dataInit : function(e){
|
||||
e.style.width = "92%";
|
||||
e.style.fontSize = 13;
|
||||
}
|
||||
}
|
||||
@@ -293,7 +302,7 @@ $(document).ready(function(){
|
||||
,height : 530 //'auto' //520
|
||||
,multiselect : false
|
||||
,shrinkToFit : false
|
||||
,autowidth : true
|
||||
,autowidth : false
|
||||
,sortable : false
|
||||
,rowNum : 5000
|
||||
,forceFit : false //컬럼의 width를 변화시킬때 그리드의 width를 고정 여부
|
||||
@@ -1084,6 +1093,7 @@ function fn_save(){
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="part_type">${code_map.part_type}</textarea><!-- 코드동적설정 -->
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="acctfg_code">${code_map.acctfg_code}</textarea><!-- 계정구분 코드동적설정 -->
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="sup_code">${code_map.sup_code}</textarea><!-- 코드동적설정 -->
|
||||
<textarea style="width:0px; height:0px; visibility: hidden;" id="unit_dc_code">${code_map.unit_dc_code}</textarea><!-- 단위 코드동적설정 -->
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -461,9 +461,19 @@ section {
|
||||
}
|
||||
.plm_btn_wrap_center {
|
||||
flex-direction: row !important;
|
||||
display: flex !important;
|
||||
justify-content: center !important;
|
||||
position: relative !important;
|
||||
left: auto !important;
|
||||
transform: none !important;
|
||||
}
|
||||
.plm_btns, .btns {
|
||||
width: auto !important;
|
||||
float: none !important;
|
||||
}
|
||||
.btn_wrap {
|
||||
padding: 10px 5px !important;
|
||||
height: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -609,13 +619,13 @@ section {
|
||||
<label for="">재고단위</label>
|
||||
</td>
|
||||
<td class="input_sub_title" colspan="2">
|
||||
<input type="text" name="UNIT_DC" id="UNIT_DC" value="${resultMap.UNIT_DC}" maxlength="4" disabled>
|
||||
<select name="UNIT_DC" id="UNIT_DC" class="select2" style="width:100%;" disabled>${code_map.unit_dc_cd}</select>
|
||||
</td>
|
||||
<td class="input_title">
|
||||
<label for="">관리단위</label>
|
||||
</td>
|
||||
<td class="input_sub_title">
|
||||
<input type="text" name="UNITMANG_DC" id="UNITMANG_DC" value="${resultMap.UNITMANG_DC}" maxlength="4" disabled>
|
||||
<select name="UNITMANG_DC" id="UNITMANG_DC" class="select2" style="width:100%;" disabled>${code_map.unitmang_dc_cd}</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -293,6 +293,31 @@ function fn_overlapPartMng(){
|
||||
.input_title {border-left:1px solid #ccc;}
|
||||
.input_sub_title {border-left:1px solid #ccc;}
|
||||
.pmsPopupForm tr:last-child td{border-bottom:1px solid #ccc;}
|
||||
@media (max-width: 768px) {
|
||||
.pmsPopupForm td {
|
||||
display: table-cell !important;
|
||||
width: auto !important;
|
||||
}
|
||||
.input_title {
|
||||
border-right: 1px solid #ccc !important;
|
||||
}
|
||||
.plm_btn_wrap_center {
|
||||
flex-direction: row !important;
|
||||
display: flex !important;
|
||||
justify-content: center !important;
|
||||
position: relative !important;
|
||||
left: auto !important;
|
||||
transform: none !important;
|
||||
}
|
||||
.plm_btns, .btns {
|
||||
width: auto !important;
|
||||
float: none !important;
|
||||
}
|
||||
.btn_wrap {
|
||||
padding: 10px 5px !important;
|
||||
height: auto !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<form name="form1" id="form1" action="" method="post">
|
||||
@@ -405,7 +430,7 @@ function fn_overlapPartMng(){
|
||||
<td class="input_title">
|
||||
<label for="">계정구분<span class="text-danger">*</span></label>
|
||||
</td>
|
||||
<td class="input_sub_title">
|
||||
<td class="input_sub_title" colspan="2">
|
||||
<select name="ACCTFG" id="ACCTFG" class="" type="select" required reqTitle="계정구분"></select>
|
||||
</td>
|
||||
<td class="input_title">
|
||||
@@ -426,13 +451,19 @@ function fn_overlapPartMng(){
|
||||
<label for="">재고단위<span class="text-danger">*</span></label>
|
||||
</td>
|
||||
<td class="input_sub_title" colspan="2">
|
||||
<input type="text" name="UNIT_DC" id="UNIT_DC" value="${resultMap.UNIT_DC}" maxlength="4" required reqTitle="재고단위">
|
||||
<select name="UNIT_DC" id="UNIT_DC" class="select2" style="width:100%;" required reqTitle="재고단위">
|
||||
<option value="">선택</option>
|
||||
${code_map.unit_dc_cd}
|
||||
</select>
|
||||
</td>
|
||||
<td class="input_title">
|
||||
<label for="">관리단위<span class="text-danger">*</span></label>
|
||||
</td>
|
||||
<td class="input_sub_title">
|
||||
<input type="text" name="UNITMANG_DC" id="UNITMANG_DC" value="${resultMap.UNITMANG_DC}" maxlength="4" required reqTitle="관리단위">
|
||||
<select name="UNITMANG_DC" id="UNITMANG_DC" class="select2" style="width:100%;" required reqTitle="관리단위">
|
||||
<option value="">선택</option>
|
||||
${code_map.unitmang_dc_cd}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -219,8 +219,8 @@ String connector = person.getUserId();
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '규격', field : 'SPEC' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '계정구분', field : 'ACCTFG_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '조달구분', field : 'ODRFG_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '재고단위', field : 'UNIT_DC' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '관리단위', field : 'UNITMANG_DC' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '재고단위', field : 'UNIT_DC_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '관리단위', field : 'UNITMANG_DC_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환산수량', field : 'UNITCHNG_NB' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : 'LOT구분', field : 'LOT_FG_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '사용여부', field : 'USE_YN_NM' },
|
||||
|
||||
@@ -189,8 +189,8 @@ ui-jqgrid tr.jqgrow td {
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '규격', field : 'SPEC' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '계정구분', field : 'ACCTFG_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '조달구분', field : 'ODRFG_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '재고단위', field : 'UNIT_DC' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '관리단위', field : 'UNITMANG_DC' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '재고단위', field : 'UNIT_DC_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '관리단위', field : 'UNITMANG_DC_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환산수량', field : 'UNITCHNG_NB' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : 'LOT구분', field : 'LOT_FG_NM' },
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '사용여부', field : 'USE_YN_NM' },
|
||||
|
||||
@@ -233,29 +233,119 @@ function generateObjId(){
|
||||
return String(Math.abs(Math.floor(Math.random() * 2147483647))) + String(++rowSeq);
|
||||
}
|
||||
|
||||
function findLastDescendant(parentTr){
|
||||
var parentDepth = getRowDepth(parentTr[0]);
|
||||
var lastDescendant = parentTr;
|
||||
parentTr.nextAll("tr").each(function(){
|
||||
if(getRowDepth(this) > parentDepth){
|
||||
lastDescendant = $(this);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return lastDescendant;
|
||||
}
|
||||
|
||||
function renumberAllRows(){
|
||||
var rows = $("#wbsTaskList tr:not(#row_total)");
|
||||
var counters = [0, 0, 0];
|
||||
rows.each(function(){
|
||||
var objId = $(this).find("input[name='WBS_TASK_OBJID']").val();
|
||||
var depth = parseInt($("#TASK_LEVEL_" + objId).val()) || 0;
|
||||
if(depth < 1 || depth > 3) return true;
|
||||
|
||||
if(depth === 1){
|
||||
counters[0]++;
|
||||
counters[1] = 0;
|
||||
counters[2] = 0;
|
||||
} else if(depth === 2){
|
||||
counters[1]++;
|
||||
counters[2] = 0;
|
||||
} else {
|
||||
counters[2]++;
|
||||
}
|
||||
|
||||
var unitNo;
|
||||
if(depth === 1) unitNo = String(counters[0]);
|
||||
else if(depth === 2) unitNo = counters[0] + "." + counters[1];
|
||||
else unitNo = counters[0] + "." + counters[1] + "." + counters[2];
|
||||
|
||||
$("#UNIT_NO_" + objId).val(unitNo);
|
||||
$(this).find(".lvl_input").val("");
|
||||
$(this).find(".lvl_input[data-level='" + depth + "']").val(unitNo);
|
||||
});
|
||||
}
|
||||
|
||||
function addRow(){
|
||||
var objId = generateObjId();
|
||||
var checked = $("input[name='rowCheck']:checked");
|
||||
var autoLevel = "";
|
||||
var insertAfterTr = null;
|
||||
|
||||
if(checked.length > 0){
|
||||
var selectedTr = checked.last().closest("tr");
|
||||
var selectedDepth = getRowDepth(selectedTr[0]);
|
||||
autoLevel = selectedDepth;
|
||||
insertAfterTr = findLastDescendant(selectedTr);
|
||||
checked.prop("checked", false);
|
||||
}
|
||||
|
||||
var tr = '<tr id="row_' + objId + '">';
|
||||
tr += '<td><input type="checkbox" name="rowCheck" value="' + objId + '"></td>';
|
||||
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
|
||||
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="">';
|
||||
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + objId + '" id="UPPER_TASK_OBJID_' + objId + '" value="">';
|
||||
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="">';
|
||||
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="' + autoLevel + '">';
|
||||
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="1" style="width:80%;text-align:center;"></td>';
|
||||
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="2" style="width:80%;text-align:center;"></td>';
|
||||
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="3" style="width:80%;text-align:center;"></td>';
|
||||
tr += '<td><input type="text" name="TASK_NAME_' + objId + '" id="TASK_NAME_' + objId + '"></td>';
|
||||
tr += '</tr>';
|
||||
|
||||
var checked = $("input[name='rowCheck']:checked");
|
||||
if(checked.length > 0){
|
||||
checked.last().closest("tr").after(tr);
|
||||
checked.prop("checked", false);
|
||||
if(insertAfterTr){
|
||||
insertAfterTr.after(tr);
|
||||
} else {
|
||||
$("#wbsTaskList").append(tr);
|
||||
}
|
||||
|
||||
bindLevelInput(objId);
|
||||
renumberAllRows();
|
||||
}
|
||||
|
||||
function addChildRow(){
|
||||
var checked = $("input[name='rowCheck']:checked");
|
||||
if(checked.length == 0){
|
||||
Swal.fire('부모 행을 선택해 주세요');
|
||||
return;
|
||||
}
|
||||
var selectedTr = checked.last().closest("tr");
|
||||
var selectedDepth = getRowDepth(selectedTr[0]);
|
||||
|
||||
if(selectedDepth >= 3){
|
||||
Swal.fire('수준 3 이하로는 추가할 수 없습니다');
|
||||
return;
|
||||
}
|
||||
|
||||
var objId = generateObjId();
|
||||
var autoLevel = selectedDepth + 1;
|
||||
var insertAfterTr = findLastDescendant(selectedTr);
|
||||
|
||||
var tr = '<tr id="row_' + objId + '">';
|
||||
tr += '<td><input type="checkbox" name="rowCheck" value="' + objId + '"></td>';
|
||||
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
|
||||
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="">';
|
||||
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + objId + '" id="UPPER_TASK_OBJID_' + objId + '" value="">';
|
||||
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="' + autoLevel + '">';
|
||||
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="1" style="width:80%;text-align:center;"></td>';
|
||||
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="2" style="width:80%;text-align:center;"></td>';
|
||||
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="3" style="width:80%;text-align:center;"></td>';
|
||||
tr += '<td><input type="text" name="TASK_NAME_' + objId + '" id="TASK_NAME_' + objId + '"></td>';
|
||||
tr += '</tr>';
|
||||
|
||||
insertAfterTr.after(tr);
|
||||
checked.prop("checked", false);
|
||||
bindLevelInput(objId);
|
||||
renumberAllRows();
|
||||
}
|
||||
|
||||
function deleteRow(){
|
||||
@@ -264,10 +354,35 @@ function deleteRow(){
|
||||
Swal.fire('삭제할 행을 선택해 주세요');
|
||||
return;
|
||||
}
|
||||
var removeTargets = [];
|
||||
var hasChildren = false;
|
||||
checked.each(function(){
|
||||
var objId = $(this).val();
|
||||
if($("#row_" + objId).attr("id") !== "row_total"){
|
||||
$("#row_" + objId).remove();
|
||||
var tr = $("#row_" + objId);
|
||||
if(tr.attr("id") === "row_total") return true;
|
||||
removeTargets.push(tr);
|
||||
var parentDepth = getRowDepth(tr[0]);
|
||||
tr.nextAll("tr").each(function(){
|
||||
if(getRowDepth(this) > parentDepth){
|
||||
removeTargets.push($(this));
|
||||
hasChildren = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var msg = hasChildren ? '하위 항목도 함께 삭제됩니다. 삭제하시겠습니까?' : '삭제하시겠습니까?';
|
||||
Swal.fire({
|
||||
title: msg,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '삭제',
|
||||
cancelButtonText: '취소'
|
||||
}).then(function(result){
|
||||
if(result.isConfirmed){
|
||||
$.each(removeTargets, function(i, tr){ tr.remove(); });
|
||||
renumberAllRows();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -439,6 +554,7 @@ function saveWBS(){
|
||||
<div class="plm_btn_wrap">
|
||||
<input type="button" value="Template Download" id="templateDownload" class="plm_btns">
|
||||
<input type="button" value="추가" class="plm_btns" onclick="addRow();">
|
||||
<input type="button" value="하위추가" class="plm_btns" onclick="addChildRow();">
|
||||
<input type="button" value="삭제" class="plm_btns" onclick="deleteRow();">
|
||||
<input type="button" value="저장" class="plm_btns" onclick="saveWBS();">
|
||||
<input type="button" value="닫기" id="btn_close" class="plm_btns" onclick="javascript:self.close();">
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ page import="com.pms.common.utils.*"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ page import="java.util.*" %>
|
||||
<%@include file= "/init.jsp" %>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
<c:set var="totalCount" value="${empty TOTAL_COUNT?0:TOTAL_COUNT}" />
|
||||
<c:set var="maxPage" value="${empty MAX_PAGE_SIZE?1:MAX_PAGE_SIZE}" />
|
||||
<c:set var="nPage" value="${empty param.page?1:param.page}" />
|
||||
<c:set var="pageIndex" value="${(nPage-1)/10}" />
|
||||
<c:set var="nextPage" value="${empty NEXT_PAGE?1:NEXT_PAGE}" />
|
||||
<c:set var="prevPage" value="${empty PREV_PAGE?1:PREV_PAGE}" />
|
||||
<c:set var="now" value="<%=new java.util.Date() %>"/>
|
||||
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
|
||||
<style>
|
||||
.select2-selection__choice {
|
||||
font-size: 11px;
|
||||
background-color: #fff !important;
|
||||
border: none !important;
|
||||
margin-right: 0px !important;
|
||||
}
|
||||
.select2-selection__choice__remove {
|
||||
display: contents !important;
|
||||
}
|
||||
.select2-container .select2-selection--multiple {
|
||||
min-height: 20px !important;
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
margin-top: 3.5px !important;
|
||||
}
|
||||
.select2-selection__rendered {
|
||||
height: 18px !important;
|
||||
}
|
||||
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
||||
overflow: auto !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
_fnc_datepick();
|
||||
$('.select2').select2();
|
||||
|
||||
$("#btnSearch").click(function(){
|
||||
$("#page").val("1");
|
||||
fn_search();
|
||||
});
|
||||
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#page").val("1");
|
||||
fn_search();
|
||||
}
|
||||
});
|
||||
|
||||
fn_search(true);
|
||||
});
|
||||
|
||||
var columns = [
|
||||
{title:'OBJID', field:'OBJID', visible:false, frozen:true},
|
||||
{title:"프로젝트정보", headerHozAlign:'center', frozen:true,
|
||||
columns:[
|
||||
{headerHozAlign:'center', hozAlign:'left', width:'120', title:'프로젝트번호', field:'PROJECT_NO'},
|
||||
{headerHozAlign:'center', hozAlign:'center', width:'90', title:'제품구분', field:'PRODUCT_NAME'},
|
||||
{headerHozAlign:'center', hozAlign:'left', width:'150', title:'품번', field:'PART_NO'},
|
||||
{headerHozAlign:'center', hozAlign:'left', width:'180', title:'품명', field:'PART_NAME'},
|
||||
{headerHozAlign:'center', hozAlign:'left', /*width:'130',*/ title:'고객사', field:'CUSTOMER_NAME'}
|
||||
]
|
||||
},
|
||||
{title:"전체(BOM기준)", headerHozAlign:'center',
|
||||
columns:[
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'전체품목수', field:'TOTAL_ITEM_CNT',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'전체수량', field:'TOTAL_QTY',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
}
|
||||
]
|
||||
},
|
||||
{title:"발주현황", headerHozAlign:'center',
|
||||
columns:[
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'발주품목수', field:'PO_ITEM_CNT',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'발주수량', field:'PO_QTY',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
}
|
||||
]
|
||||
},
|
||||
{title:"미발주현황", headerHozAlign:'center',
|
||||
columns:[
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'미발주품목수', field:'NON_PO_ITEM_CNT',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'미발주수량', field:'NON_PO_QTY',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
}
|
||||
]
|
||||
},
|
||||
{title:"입고현황", headerHozAlign:'center',
|
||||
columns:[
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'입고품목수', field:'DLV_ITEM_CNT',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'입고수량', field:'DLV_QTY',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
}
|
||||
]
|
||||
},
|
||||
{title:"미입고현황", headerHozAlign:'center',
|
||||
columns:[
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'미입고품목수', field:'NON_DLV_ITEM_CNT',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'right', width:'100', title:'미입고수량', field:'NON_DLV_QTY',
|
||||
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
function fn_search(isFirst){
|
||||
var selectedValues = $("#project_no").val();
|
||||
$('<input>').attr({
|
||||
type: 'hidden',
|
||||
name: 'project_nos',
|
||||
value: selectedValues
|
||||
}).appendTo('#form1');
|
||||
|
||||
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/purchaseOrder/projectPurchaseDeliveryStatusGridList.do", columns, false, null, null, null, false);
|
||||
}
|
||||
|
||||
function _fnc_datepick(){
|
||||
var $dateinput = $("input.date_icon");
|
||||
for(var i=0; i<$dateinput.length; i++){
|
||||
$dateinput.eq(i).attr("size","10");
|
||||
$dateinput.eq(i).datepicker({
|
||||
changeMonth:true,
|
||||
changeYear:true
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<form name="form1" id="form1" action="" method="post">
|
||||
<input type="hidden" name="actionType" value="" />
|
||||
<div class="min_part_enroll">
|
||||
<div class="content-box">
|
||||
<div class="content-box-s">
|
||||
<div class="plm_menu_name_gdnsi">
|
||||
<h2>
|
||||
<span>프로젝트별 발주/입고 현황</span>
|
||||
</h2>
|
||||
<div class="btnArea">
|
||||
<input type="button" value="조회" class="plm_btns" id="btnSearch" name="btnSearch">
|
||||
</div>
|
||||
</div>
|
||||
<div id="plmSearchZon">
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="Year">년도</label></td>
|
||||
<td>
|
||||
<select name="Year" id="Year" class="select2" autocomplete="off">
|
||||
<option value="">선택</option>
|
||||
<c:forEach begin="${sysYear-4}" end="${sysYear}" var="req_year">
|
||||
<option value="${req_year}"${param.Year eq req_year ? 'selected':'' }>${req_year}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="customer_objid">고객사</label></td>
|
||||
<td>
|
||||
<select name="customer_objid" id="customer_objid" style="width:180px" class="select2" autocomplete="off">
|
||||
<option value="">선택</option>
|
||||
${code_map.customer_cd}
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="project_no">프로젝트번호</label></td>
|
||||
<td>
|
||||
<select name="project_no" id="project_no" style="width:300px;" class="select2" autocomplete="off" multiple="multiple">
|
||||
<option value="">선택</option>
|
||||
${code_map.project_no}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="product">제품구분</label></td>
|
||||
<td>
|
||||
<select name="product" id="product" class="select2" autocomplete="off">
|
||||
<option value="">선택</option>
|
||||
${code_map.product_cd}
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="part_no">품번</label></td>
|
||||
<td>
|
||||
<input type="text" name="part_no" id="part_no" value="${param.part_no}" style="width:130px" />
|
||||
</td>
|
||||
|
||||
<td><label for="part_name">품명</label></td>
|
||||
<td>
|
||||
<input type="text" name="part_name" id="part_name" value="${param.part_name}" style="width:200px" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -401,12 +401,16 @@ public class PartMngController {
|
||||
}
|
||||
|
||||
|
||||
// 단위 코드 셀렉트박스
|
||||
code_map.put("unit_dc_cd", commonService.bizMakeOptionList("0001399", CommonUtils.nullToEmpty((String)resultMap.get("UNIT_DC")), "common.getCodeselect"));
|
||||
code_map.put("unitmang_dc_cd", commonService.bizMakeOptionList("0001399", CommonUtils.nullToEmpty((String)resultMap.get("UNITMANG_DC")), "common.getCodeselect"));
|
||||
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
request.setAttribute("code_map", code_map);
|
||||
request.setAttribute("resultMap", resultMap);
|
||||
|
||||
|
||||
return "/partMng/partMngFormPopUp";
|
||||
}
|
||||
|
||||
@@ -456,6 +460,10 @@ public class PartMngController {
|
||||
resultMap.put("OBJID", objId);
|
||||
}
|
||||
|
||||
// 단위 코드 셀렉트박스
|
||||
code_map.put("unit_dc_cd", commonService.bizMakeOptionList("0001399", CommonUtils.nullToEmpty((String)resultMap.get("UNIT_DC")), "common.getCodeselect"));
|
||||
code_map.put("unitmang_dc_cd", commonService.bizMakeOptionList("0001399", CommonUtils.nullToEmpty((String)resultMap.get("UNITMANG_DC")), "common.getCodeselect"));
|
||||
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -676,7 +684,12 @@ public class PartMngController {
|
||||
Map acctfgParam = new HashMap();
|
||||
acctfgParam.put("codeId", Constants.ACCTFG_CODE);
|
||||
code_map.put("acctfg_code", commonService.getJqGridSelectBoxJsonData("common.getCodeList", acctfgParam, "선택"));
|
||||
|
||||
|
||||
// 단위(UNIT_DC) 공통코드 조회 - jqGrid selectBox용 JSON
|
||||
Map unitDcParam = new HashMap();
|
||||
unitDcParam.put("codeId", "0001399");
|
||||
code_map.put("unit_dc_code", commonService.getJqGridSelectBoxJsonData("common.getCodeList", unitDcParam, "선택"));
|
||||
|
||||
/*
|
||||
code_map.put("customer_cd",commonService.bizMakeOptionList("", (String)paramMap.get("customer_cd"),"common.getsupplyselect"));
|
||||
code_map.put("project_name",commonService.bizMakeOptionList("", (String)paramMap.get("project_name"),"common.getProjectNameList"));
|
||||
@@ -1962,6 +1975,11 @@ public class PartMngController {
|
||||
acctfgParam.put("codeId", Constants.ACCTFG_CODE);
|
||||
code_map.put("acctfg_code", commonService.getJqGridSelectBoxJsonData("common.getCodeList", acctfgParam, "선택"));
|
||||
|
||||
// 단위(UNIT_DC) 공통코드 조회 - jqGrid selectBox용 JSON
|
||||
Map unitDcParam = new HashMap();
|
||||
unitDcParam.put("codeId", "0001399");
|
||||
code_map.put("unit_dc_code", commonService.getJqGridSelectBoxJsonData("common.getCodeList", unitDcParam, "선택"));
|
||||
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
|
||||
// 통합 템플릿으로 변경하면서 unit_code 관련 로직은 사용하지 않음
|
||||
|
||||
@@ -1302,6 +1302,33 @@ public class PurchaseOrderController {
|
||||
return paramMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 프로젝트별 발주/입고 현황
|
||||
*/
|
||||
@RequestMapping("/purchaseOrder/projectPurchaseDeliveryStatus.do")
|
||||
public String projectPurchaseDeliveryStatus(HttpServletRequest request, @RequestParam Map paramMap){
|
||||
Map code_map = new HashMap();
|
||||
try{
|
||||
code_map.put("customer_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("customer_objid")), "common.getsupplyselect"));
|
||||
code_map.put("project_no", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("project_no")), "common.getProjectNameList"));
|
||||
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product")), "common.getCodeselect"));
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
request.setAttribute("code_map", code_map);
|
||||
return "/purchaseOrder/projectPurchaseDeliveryStatus";
|
||||
}
|
||||
|
||||
/**
|
||||
* 프로젝트별 발주/입고 현황 그리드 조회
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/purchaseOrder/projectPurchaseDeliveryStatusGridList.do")
|
||||
public Map projectPurchaseDeliveryStatusGridList(HttpSession session, HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
commonService.selectListPagingNew("purchaseOrder.projectPurchaseDeliveryStatus", request, paramMap);
|
||||
return paramMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 수입검사 관리
|
||||
*/
|
||||
|
||||
@@ -188,6 +188,7 @@
|
||||
<update id="updateLoginId" parameterType="map">
|
||||
UPDATE user_info
|
||||
SET user_id = #{login_id}
|
||||
,email = #{emailAddr}
|
||||
WHERE empseq = #{empseq}
|
||||
AND empseq IS NOT NULL
|
||||
AND empseq != ''
|
||||
|
||||
@@ -162,7 +162,9 @@
|
||||
P.ODRFG,
|
||||
CASE WHEN P.ODRFG = '0' THEN '구매' WHEN P.ODRFG = '1' THEN '생산' WHEN P.ODRFG = '8' THEN 'Phantom' ELSE '' END AS ODRFG_NM,
|
||||
P.UNIT_DC,
|
||||
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.UNIT_DC) AS UNIT_DC_NM,
|
||||
P.UNITMANG_DC,
|
||||
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.UNITMANG_DC) AS UNITMANG_DC_NM,
|
||||
P.UNITCHNG_NB,
|
||||
P.LOT_FG,
|
||||
CASE WHEN P.LOT_FG = '1' THEN '사용' WHEN P.LOT_FG = '0' THEN '미사용' ELSE '' END AS LOT_FG_NM,
|
||||
@@ -7925,12 +7927,21 @@ SELECT PM.OBJID
|
||||
|
||||
<!-- 계정구분 코드 조회 (한글명 → ERP 코드값) -->
|
||||
<select id="getAcctfgCode" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
SELECT
|
||||
CODE_ID
|
||||
FROM COMM_CODE
|
||||
WHERE CODE_NAME = #{CODE_NAME}
|
||||
WHERE CODE_NAME = #{CODE_NAME}
|
||||
AND PARENT_CODE_ID = '0900213'
|
||||
</select>
|
||||
|
||||
<!-- 단위 코드 조회 (코드명 → 코드값) -->
|
||||
<select id="getUnitDcCode" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
CODE_ID
|
||||
FROM COMM_CODE
|
||||
WHERE UPPER(TRIM(CODE_NAME)) = UPPER(TRIM(#{CODE_NAME}))
|
||||
AND PARENT_CODE_ID = '0001399'
|
||||
</select>
|
||||
|
||||
<!-- 공급업체명으로 OBJID 조회 -->
|
||||
<select id="getSupplyCodeByName" parameterType="map" resultType="map">
|
||||
|
||||
@@ -2032,6 +2032,33 @@
|
||||
DELETE FROM PURCHASE_ORDER_PART
|
||||
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
|
||||
</delete>
|
||||
|
||||
<!-- 저장 목록에 없는 파트만 삭제 (UPSERT 방식에서 제거된 파트 정리용) -->
|
||||
<delete id="deleteRemovedPurchaseOrderParts" parameterType="map">
|
||||
DELETE FROM PURCHASE_ORDER_PART
|
||||
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
|
||||
<if test="savedObjIds != null and savedObjIds != ''">
|
||||
AND 0 = POSITION(OBJID::TEXT || ',' IN #{savedObjIds} || ',')
|
||||
</if>
|
||||
</delete>
|
||||
|
||||
<!-- POP 삭제/재생성 후 ARRIVAL_PLAN.ORDER_PART_OBJID를 새 POP OBJID로 재연결 -->
|
||||
<update id="relinkArrivalPlanAfterPartReset" parameterType="map">
|
||||
UPDATE ARRIVAL_PLAN
|
||||
SET ORDER_PART_OBJID = (
|
||||
SELECT POP.OBJID::VARCHAR
|
||||
FROM PURCHASE_ORDER_PART POP
|
||||
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
|
||||
AND POP.PART_OBJID = ARRIVAL_PLAN.PART_OBJID
|
||||
LIMIT 1
|
||||
)
|
||||
WHERE PARENT_OBJID::VARCHAR = #{PURCHASE_ORDER_MASTER_OBJID}
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM PURCHASE_ORDER_PART POP2
|
||||
WHERE POP2.PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
|
||||
AND POP2.PART_OBJID = ARRIVAL_PLAN.PART_OBJID
|
||||
)
|
||||
</update>
|
||||
|
||||
<delete id="initPurchaseOrderPartMulti" parameterType="map">
|
||||
DELETE FROM PURCHASE_ORDER_PART
|
||||
@@ -4429,13 +4456,15 @@ SELECT POM.OBJID
|
||||
,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을 ORDER_PART_OBJID별로 먼저 집계
|
||||
SELECT ORDER_PART_OBJID
|
||||
-- ARRIVAL_PLAN을 PARENT_OBJID(POM) + PART_OBJID 기준 집계 (POP 삭제/재생성 대응)
|
||||
SELECT PARENT_OBJID
|
||||
,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 PARENT_OBJID, PART_OBJID
|
||||
) AP_AGG ON AP_AGG.PARENT_OBJID::VARCHAR = POP.PURCHASE_ORDER_MASTER_OBJID
|
||||
AND AP_AGG.PART_OBJID = POP.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
|
||||
@@ -6315,13 +6344,15 @@ FROM(
|
||||
INNER JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID::VARCHAR = POP.PURCHASE_ORDER_MASTER_OBJID
|
||||
LEFT OUTER JOIN PROJECT_MGMT CM ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
|
||||
<!-- 입고 수량 집계 (ARRIVAL_PLAN) -->
|
||||
<!-- 입고 수량 집계 (ARRIVAL_PLAN - PART_OBJID 기준, POP 삭제/재생성 대응) -->
|
||||
LEFT OUTER JOIN (
|
||||
SELECT ORDER_PART_OBJID
|
||||
SELECT PARENT_OBJID
|
||||
,PART_OBJID
|
||||
,SUM(COALESCE(RECEIPT_QTY::NUMERIC, 0)) AS DELIVERY_QTY
|
||||
FROM ARRIVAL_PLAN
|
||||
GROUP BY ORDER_PART_OBJID
|
||||
) AP_AGG ON POP.OBJID = AP_AGG.ORDER_PART_OBJID
|
||||
GROUP BY PARENT_OBJID, PART_OBJID
|
||||
) AP_AGG ON POM.OBJID = AP_AGG.PARENT_OBJID
|
||||
AND POP.PART_OBJID = AP_AGG.PART_OBJID
|
||||
|
||||
<!-- 수입검사 현황 집계 (발주마스터+품목 기준: 불량상세가 있는 건만 카운트) -->
|
||||
LEFT OUTER JOIN (
|
||||
@@ -6634,4 +6665,184 @@ FROM(
|
||||
ORDER BY AP.RECEIPT_DATE DESC, POM.PURCHASE_ORDER_NO, POP.PART_NO
|
||||
</select>
|
||||
|
||||
<!-- 프로젝트별 발주/입고 현황 -->
|
||||
<select id="projectPurchaseDeliveryStatus" parameterType="map" resultType="map">
|
||||
SELECT T.*
|
||||
,GREATEST(COALESCE(T.TOTAL_ITEM_CNT, 0) - COALESCE(T.PO_ITEM_CNT, 0), 0) AS NON_PO_ITEM_CNT
|
||||
,GREATEST(COALESCE(T.TOTAL_QTY, 0) - COALESCE(T.PO_QTY, 0), 0) AS NON_PO_QTY
|
||||
,COALESCE(T.NON_DLV_ITEM_CNT, 0) AS NON_DLV_ITEM_CNT
|
||||
,GREATEST(COALESCE(T.PO_QTY, 0) - COALESCE(T.DLV_QTY, 0), 0) AS NON_DLV_QTY
|
||||
FROM (
|
||||
SELECT
|
||||
CM.OBJID
|
||||
,CM.PROJECT_NO
|
||||
,CODE_NAME(CM.PRODUCT) AS PRODUCT_NAME
|
||||
,CM.PART_NO
|
||||
,CM.PART_NAME
|
||||
,CASE WHEN CM.CUSTOMER_OBJID LIKE 'C_%'
|
||||
THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = CM.CUSTOMER_OBJID)
|
||||
ELSE (SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = CM.CUSTOMER_OBJID::VARCHAR)
|
||||
END AS CUSTOMER_NAME
|
||||
|
||||
/* 전체품목수: 공급업체 대상 + 가공업체 대상 (구매리스트 그룹핑 기준과 동일) */
|
||||
,(
|
||||
COALESCE((
|
||||
SELECT COUNT(*) FROM (
|
||||
SELECT 1
|
||||
FROM MBOM_HEADER MH2
|
||||
,MBOM_DETAIL MD2
|
||||
WHERE MD2.MBOM_HEADER_OBJID = MH2.OBJID
|
||||
AND MH2.PROJECT_OBJID = CM.OBJID
|
||||
AND MD2.STATUS = 'ACTIVE'
|
||||
AND COALESCE(MD2.PRODUCTION_QTY, 0) > 0
|
||||
AND COALESCE(MD2.VENDOR, '') != ''
|
||||
GROUP BY CASE WHEN COALESCE(MD2.RAW_MATERIAL_PART_NO, '') != ''
|
||||
THEN MD2.RAW_MATERIAL_PART_NO ELSE MD2.PART_OBJID END
|
||||
,COALESCE(MD2.RAW_MATERIAL_SIZE, '')
|
||||
) SUB1
|
||||
), 0)
|
||||
+
|
||||
COALESCE((
|
||||
SELECT COUNT(*) FROM (
|
||||
SELECT 1
|
||||
FROM MBOM_HEADER MH2
|
||||
,MBOM_DETAIL MD2
|
||||
WHERE MD2.MBOM_HEADER_OBJID = MH2.OBJID
|
||||
AND MH2.PROJECT_OBJID = CM.OBJID
|
||||
AND MD2.STATUS = 'ACTIVE'
|
||||
AND COALESCE(MD2.PRODUCTION_QTY, 0) > 0
|
||||
AND COALESCE(MD2.PROCESSING_VENDOR, '') != ''
|
||||
GROUP BY MD2.PART_OBJID
|
||||
,COALESCE(MD2.RAW_MATERIAL_SIZE, '')
|
||||
) SUB2
|
||||
), 0)
|
||||
) AS TOTAL_ITEM_CNT
|
||||
|
||||
/* 전체수량: 공급업체(소재: PO_QTY, 부품: PRODUCTION_QTY) + 가공업체(PRODUCTION_QTY) */
|
||||
,(
|
||||
COALESCE((
|
||||
SELECT SUM(
|
||||
CASE WHEN COALESCE(MD2.RAW_MATERIAL_PART_NO, '') != ''
|
||||
THEN COALESCE(MD2.PO_QTY, 0)::NUMERIC
|
||||
ELSE COALESCE(MD2.PRODUCTION_QTY, 0)::NUMERIC END)
|
||||
FROM MBOM_HEADER MH2
|
||||
,MBOM_DETAIL MD2
|
||||
WHERE MD2.MBOM_HEADER_OBJID = MH2.OBJID
|
||||
AND MH2.PROJECT_OBJID = CM.OBJID
|
||||
AND MD2.STATUS = 'ACTIVE'
|
||||
AND COALESCE(MD2.PRODUCTION_QTY, 0) > 0
|
||||
AND COALESCE(MD2.VENDOR, '') != ''
|
||||
), 0)
|
||||
+
|
||||
COALESCE((
|
||||
SELECT SUM(COALESCE(MD2.PRODUCTION_QTY, 0)::NUMERIC)
|
||||
FROM MBOM_HEADER MH2
|
||||
,MBOM_DETAIL MD2
|
||||
WHERE MD2.MBOM_HEADER_OBJID = MH2.OBJID
|
||||
AND MH2.PROJECT_OBJID = CM.OBJID
|
||||
AND MD2.STATUS = 'ACTIVE'
|
||||
AND COALESCE(MD2.PRODUCTION_QTY, 0) > 0
|
||||
AND COALESCE(MD2.PROCESSING_VENDOR, '') != ''
|
||||
), 0)
|
||||
) AS TOTAL_QTY
|
||||
|
||||
/* 발주품목수: 발주서(발송완료)의 고유 부품 수 */
|
||||
,COALESCE((
|
||||
SELECT COUNT(DISTINCT POP2.PART_NO)
|
||||
FROM PURCHASE_ORDER_MASTER POM2
|
||||
,PURCHASE_ORDER_PART POP2
|
||||
WHERE POM2.OBJID::VARCHAR = POP2.PURCHASE_ORDER_MASTER_OBJID
|
||||
AND POM2.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
AND POM2.MAIL_SEND_DATE IS NOT NULL
|
||||
AND (POM2.MULTI_MASTER_YN = 'Y' OR NVL(POM2.MULTI_MASTER_YN, '') != 'Y' AND NVL(POM2.MULTI_YN, '') != 'Y')
|
||||
), 0) AS PO_ITEM_CNT
|
||||
|
||||
/* 발주수량: 발주서(발송완료)의 수량 합계 */
|
||||
,COALESCE((
|
||||
SELECT SUM(POP2.ORDER_QTY::NUMERIC)
|
||||
FROM PURCHASE_ORDER_MASTER POM2
|
||||
,PURCHASE_ORDER_PART POP2
|
||||
WHERE POM2.OBJID::VARCHAR = POP2.PURCHASE_ORDER_MASTER_OBJID
|
||||
AND POM2.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
AND POM2.MAIL_SEND_DATE IS NOT NULL
|
||||
AND (POM2.MULTI_MASTER_YN = 'Y' OR NVL(POM2.MULTI_MASTER_YN, '') != 'Y' AND NVL(POM2.MULTI_YN, '') != 'Y')
|
||||
), 0) AS PO_QTY
|
||||
|
||||
/* 입고품목수: ARRIVAL_PLAN.PART_OBJID 직접 사용 (POP 삭제/재생성 대응) */
|
||||
,COALESCE((
|
||||
SELECT COUNT(DISTINCT AP2.PART_OBJID)
|
||||
FROM ARRIVAL_PLAN AP2
|
||||
,PURCHASE_ORDER_MASTER POM2
|
||||
WHERE AP2.PARENT_OBJID = POM2.OBJID
|
||||
AND POM2.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
AND POM2.MAIL_SEND_DATE IS NOT NULL
|
||||
AND (POM2.MULTI_MASTER_YN = 'Y' OR NVL(POM2.MULTI_MASTER_YN, '') != 'Y' AND NVL(POM2.MULTI_YN, '') != 'Y')
|
||||
AND COALESCE(AP2.RECEIPT_QTY, '0')::NUMERIC > 0
|
||||
), 0) AS DLV_ITEM_CNT
|
||||
|
||||
/* 입고수량: ARRIVAL_PLAN 직접 집계 */
|
||||
,COALESCE((
|
||||
SELECT SUM(AP2.RECEIPT_QTY::NUMERIC)
|
||||
FROM ARRIVAL_PLAN AP2
|
||||
,PURCHASE_ORDER_MASTER POM2
|
||||
WHERE AP2.PARENT_OBJID = POM2.OBJID
|
||||
AND POM2.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
AND POM2.MAIL_SEND_DATE IS NOT NULL
|
||||
AND (POM2.MULTI_MASTER_YN = 'Y' OR NVL(POM2.MULTI_MASTER_YN, '') != 'Y' AND NVL(POM2.MULTI_YN, '') != 'Y')
|
||||
), 0) AS DLV_QTY
|
||||
|
||||
/* 미입고품목수: 품목별 발주수량 > 입고수량인 건수 */
|
||||
,COALESCE((
|
||||
SELECT COUNT(*)
|
||||
FROM (
|
||||
SELECT POP2.PART_OBJID
|
||||
FROM PURCHASE_ORDER_MASTER POM2
|
||||
,PURCHASE_ORDER_PART POP2
|
||||
WHERE POM2.OBJID::VARCHAR = POP2.PURCHASE_ORDER_MASTER_OBJID
|
||||
AND POM2.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
AND POM2.MAIL_SEND_DATE IS NOT NULL
|
||||
AND (POM2.MULTI_MASTER_YN = 'Y' OR NVL(POM2.MULTI_MASTER_YN, '') != 'Y' AND NVL(POM2.MULTI_YN, '') != 'Y')
|
||||
GROUP BY POP2.PART_OBJID
|
||||
HAVING SUM(POP2.ORDER_QTY::NUMERIC) > COALESCE((
|
||||
SELECT SUM(AP3.RECEIPT_QTY::NUMERIC)
|
||||
FROM ARRIVAL_PLAN AP3
|
||||
,PURCHASE_ORDER_MASTER POM3
|
||||
WHERE AP3.PARENT_OBJID = POM3.OBJID
|
||||
AND POM3.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
AND POM3.MAIL_SEND_DATE IS NOT NULL
|
||||
AND (POM3.MULTI_MASTER_YN = 'Y' OR NVL(POM3.MULTI_MASTER_YN, '') != 'Y' AND NVL(POM3.MULTI_YN, '') != 'Y')
|
||||
AND AP3.PART_OBJID = POP2.PART_OBJID
|
||||
AND COALESCE(AP3.RECEIPT_QTY, '0')::NUMERIC > 0
|
||||
), 0)
|
||||
) SUB
|
||||
), 0) AS NON_DLV_ITEM_CNT
|
||||
|
||||
FROM PROJECT_MGMT CM
|
||||
WHERE 1=1
|
||||
<if test="Year != null and Year != ''">
|
||||
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
|
||||
</if>
|
||||
<if test="customer_objid != null and customer_objid != ''">
|
||||
AND CM.CUSTOMER_OBJID = #{customer_objid}
|
||||
</if>
|
||||
<if test="project_nos != null and project_nos != ''">
|
||||
AND CM.OBJID IN
|
||||
<foreach item="state" collection="project_nos.split(',')"
|
||||
open="(" separator="," close=")">
|
||||
#{state}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="product != null and product != ''">
|
||||
AND CM.PRODUCT = #{product}
|
||||
</if>
|
||||
<if test="part_no != null and part_no != ''">
|
||||
AND UPPER(CM.PART_NO) LIKE '%'||UPPER(#{part_no})||'%'
|
||||
</if>
|
||||
<if test="part_name != null and part_name != ''">
|
||||
AND UPPER(CM.PART_NAME) LIKE '%'||UPPER(#{part_name})||'%'
|
||||
</if>
|
||||
ORDER BY CM.PROJECT_NO DESC
|
||||
) AS T
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -218,22 +218,24 @@ public class BatchService extends BaseService {
|
||||
int updateCount = 0;
|
||||
int skipCount = 0;
|
||||
|
||||
// empseq 기준으로 user_id 업데이트
|
||||
// empseq 기준으로 user_id, email 업데이트
|
||||
for (Map<String, Object> amaranthUser : amaranthUserList) {
|
||||
String empSeq = (String) amaranthUser.get("empSeq");
|
||||
String loginId = (String) amaranthUser.get("loginId");
|
||||
String emailAddr = (String) amaranthUser.get("emailAddr");
|
||||
|
||||
if (empSeq != null && !empSeq.isEmpty() && loginId != null && !loginId.isEmpty()) {
|
||||
Map<String, Object> updateParam = new HashMap<String, Object>();
|
||||
updateParam.put("empseq", empSeq);
|
||||
updateParam.put("login_id", loginId);
|
||||
updateParam.put("emailAddr", emailAddr);
|
||||
|
||||
int updated = sqlSession.update("batch.updateLoginId", updateParam);
|
||||
|
||||
if (updated > 0) {
|
||||
updateCount++;
|
||||
if (updateCount <= 10) {
|
||||
System.out.println("[업데이트 " + updateCount + "] empseq: " + empSeq + " → loginId: " + loginId);
|
||||
System.out.println("[업데이트 " + updateCount + "] empseq: " + empSeq + " → loginId: " + loginId + ", email: " + emailAddr);
|
||||
}
|
||||
} else {
|
||||
skipCount++;
|
||||
@@ -329,22 +331,24 @@ public class BatchService extends BaseService {
|
||||
int updateCount = 0;
|
||||
int skipCount = 0;
|
||||
|
||||
// empseq 기준으로 user_id 업데이트
|
||||
// empseq 기준으로 user_id, email 업데이트
|
||||
for (Map<String, Object> amaranthUser : amaranthUserList) {
|
||||
String empSeq = (String) amaranthUser.get("empSeq");
|
||||
String loginId = (String) amaranthUser.get("loginId");
|
||||
String emailAddr = (String) amaranthUser.get("emailAddr");
|
||||
|
||||
if (empSeq != null && !empSeq.isEmpty() && loginId != null && !loginId.isEmpty()) {
|
||||
Map<String, Object> updateParam = new HashMap<String, Object>();
|
||||
updateParam.put("empseq", empSeq);
|
||||
updateParam.put("login_id", loginId);
|
||||
updateParam.put("emailAddr", emailAddr);
|
||||
|
||||
int updated = sqlSession.update("batch.updateLoginId", updateParam);
|
||||
|
||||
if (updated > 0) {
|
||||
updateCount++;
|
||||
if (updateCount <= 10) {
|
||||
System.out.println("[업데이트 " + updateCount + "] empseq: " + empSeq + " → loginId: " + loginId);
|
||||
System.out.println("[업데이트 " + updateCount + "] empseq: " + empSeq + " → loginId: " + loginId + ", email: " + emailAddr);
|
||||
}
|
||||
} else {
|
||||
skipCount++;
|
||||
@@ -459,6 +463,15 @@ public class BatchService extends BaseService {
|
||||
user.put("loginId", loginId);
|
||||
}
|
||||
|
||||
// email 추출 (emailAddr + "@" + emailDomain 조합)
|
||||
String emailAddr = extractJsonValue(jsonObject, "emailAddr");
|
||||
String emailDomain = extractJsonValue(jsonObject, "emailDomain");
|
||||
if (emailAddr != null && !emailAddr.isEmpty() && emailDomain != null && !emailDomain.isEmpty()) {
|
||||
user.put("emailAddr", emailAddr + "@" + emailDomain);
|
||||
} else if (emailAddr != null && !emailAddr.isEmpty()) {
|
||||
user.put("emailAddr", emailAddr);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("Amaranth 사용자 객체 파싱 오류: " + e.getMessage());
|
||||
return null;
|
||||
|
||||
@@ -3106,10 +3106,40 @@ public class PartMngService extends BaseService {
|
||||
}
|
||||
// ERP 연동 필드 파싱
|
||||
String unitDc = getCellValue(row, columnIndex++, formatter, emptyColCnt);
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
|
||||
if(!StringUtils.isBlank(unitDc)){
|
||||
if(unitDc.trim().matches("\\d+")){
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
} else {
|
||||
Map unitDcParam = new HashMap();
|
||||
unitDcParam.put("CODE_NAME", unitDc.trim());
|
||||
Map unitDcResult = sqlSession.selectOne("partMng.getUnitDcCode", unitDcParam);
|
||||
if(unitDcResult != null && !StringUtils.isBlank((String)unitDcResult.get("code_id"))){
|
||||
partMap.put("UNIT_DC", unitDcResult.get("code_id"));
|
||||
} else {
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partMap.put("UNIT_DC", "");
|
||||
}
|
||||
|
||||
String unitmangDc = getCellValue(row, columnIndex++, formatter, emptyColCnt);
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
if(!StringUtils.isBlank(unitmangDc)){
|
||||
if(unitmangDc.trim().matches("\\d+")){
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
} else {
|
||||
Map unitmangParam = new HashMap();
|
||||
unitmangParam.put("CODE_NAME", unitmangDc.trim());
|
||||
Map unitmangResult = sqlSession.selectOne("partMng.getUnitDcCode", unitmangParam);
|
||||
if(unitmangResult != null && !StringUtils.isBlank((String)unitmangResult.get("code_id"))){
|
||||
partMap.put("UNITMANG_DC", unitmangResult.get("code_id"));
|
||||
} else {
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partMap.put("UNITMANG_DC", "");
|
||||
}
|
||||
|
||||
String unitchngNb = getCellValue(row, columnIndex++, formatter, emptyColCnt);
|
||||
partMap.put("UNITCHNG_NB", unitchngNb.trim());
|
||||
@@ -3678,9 +3708,40 @@ public class PartMngService extends BaseService {
|
||||
} else {
|
||||
partMap.put("ODRFG", "");
|
||||
}
|
||||
// ERP 연동 필드
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
// 재고단위(UNIT_DC) - 코드명 입력 시 코드값으로 변환
|
||||
if(!StringUtils.isBlank(unitDc)){
|
||||
if(unitDc.trim().matches("\\d+")){
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
} else {
|
||||
Map unitDcParam = new HashMap();
|
||||
unitDcParam.put("CODE_NAME", unitDc.trim());
|
||||
Map unitDcResult = sqlSession.selectOne("partMng.getUnitDcCode", unitDcParam);
|
||||
if(unitDcResult != null && !StringUtils.isBlank((String)unitDcResult.get("code_id"))){
|
||||
partMap.put("UNIT_DC", unitDcResult.get("code_id"));
|
||||
} else {
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partMap.put("UNIT_DC", "");
|
||||
}
|
||||
// 관리단위(UNITMANG_DC) - 코드명 입력 시 코드값으로 변환
|
||||
if(!StringUtils.isBlank(unitmangDc)){
|
||||
if(unitmangDc.trim().matches("\\d+")){
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
} else {
|
||||
Map unitmangParam = new HashMap();
|
||||
unitmangParam.put("CODE_NAME", unitmangDc.trim());
|
||||
Map unitmangResult = sqlSession.selectOne("partMng.getUnitDcCode", unitmangParam);
|
||||
if(unitmangResult != null && !StringUtils.isBlank((String)unitmangResult.get("code_id"))){
|
||||
partMap.put("UNITMANG_DC", unitmangResult.get("code_id"));
|
||||
} else {
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partMap.put("UNITMANG_DC", "");
|
||||
}
|
||||
partMap.put("UNITCHNG_NB", unitchngNb.trim());
|
||||
// LOT구분 - 한글명 입력 시 코드값으로 변환 (0:미사용, 1:사용)
|
||||
if(!CommonUtils.isBlank(lotFg)){
|
||||
@@ -4198,7 +4259,7 @@ public class PartMngService extends BaseService {
|
||||
int emptyRowCnt = 0;
|
||||
AtomicInteger emptyColCnt = new AtomicInteger(0);
|
||||
Map partNoUniqueMap = new HashMap();
|
||||
|
||||
|
||||
for(int rowIndex= 1 ; rowIndex < rows ; rowIndex++){ // 2번째 행(index 1)부터 시작 (헤더 1줄 건너뜀)
|
||||
Row row = sheet.getRow(rowIndex);
|
||||
if(null != row){
|
||||
@@ -4390,9 +4451,40 @@ public class PartMngService extends BaseService {
|
||||
partMap.put("ODRFG", "");
|
||||
}
|
||||
|
||||
// ERP 연동 필드
|
||||
partMap.put("UNIT_DC", unitDc);
|
||||
partMap.put("UNITMANG_DC", unitmangDc);
|
||||
// 재고단위(UNIT_DC) - 코드명 입력 시 코드값으로 변환
|
||||
if(!StringUtils.isBlank(unitDc)){
|
||||
if(unitDc.trim().matches("\\d+")){
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
} else {
|
||||
Map unitDcParam = new HashMap();
|
||||
unitDcParam.put("CODE_NAME", unitDc.trim());
|
||||
Map unitDcResult = sqlSession.selectOne("partMng.getUnitDcCode", unitDcParam);
|
||||
if(unitDcResult != null && !StringUtils.isBlank((String)unitDcResult.get("code_id"))){
|
||||
partMap.put("UNIT_DC", unitDcResult.get("code_id"));
|
||||
} else {
|
||||
partMap.put("UNIT_DC", unitDc.trim());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partMap.put("UNIT_DC", "");
|
||||
}
|
||||
// 관리단위(UNITMANG_DC) - 코드명 입력 시 코드값으로 변환
|
||||
if(!StringUtils.isBlank(unitmangDc)){
|
||||
if(unitmangDc.trim().matches("\\d+")){
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
} else {
|
||||
Map unitmangParam = new HashMap();
|
||||
unitmangParam.put("CODE_NAME", unitmangDc.trim());
|
||||
Map unitmangResult = sqlSession.selectOne("partMng.getUnitDcCode", unitmangParam);
|
||||
if(unitmangResult != null && !StringUtils.isBlank((String)unitmangResult.get("code_id"))){
|
||||
partMap.put("UNITMANG_DC", unitmangResult.get("code_id"));
|
||||
} else {
|
||||
partMap.put("UNITMANG_DC", unitmangDc.trim());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partMap.put("UNITMANG_DC", "");
|
||||
}
|
||||
partMap.put("UNITCHNG_NB", unitchngNb);
|
||||
|
||||
// LOT구분 - 한글명 입력 시 코드값으로 변환
|
||||
@@ -5789,4 +5881,5 @@ public class PartMngService extends BaseService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2786,7 +2786,7 @@ public class ProjectService {
|
||||
String path = CommonUtils.checkNull(fileMap.get("FILE_PATH"));
|
||||
String fileName = CommonUtils.checkNull(fileMap.get("SAVED_FILE_NAME"));
|
||||
|
||||
int lastColumnIndex = 2;
|
||||
int lastColumnIndex = 4;
|
||||
|
||||
FileInputStream fis = new FileInputStream(path + File.separator + fileName);
|
||||
XSSFWorkbook workBook = new XSSFWorkbook(fis);
|
||||
@@ -2803,13 +2803,12 @@ public class ProjectService {
|
||||
|
||||
wbsMap.put("WBS_OBJID", CommonUtils.createObjId());
|
||||
|
||||
String deptCode = "";
|
||||
String[] levelValues = new String[3];
|
||||
String taskName = "";
|
||||
|
||||
for(int columnIndex = 0 ; columnIndex < lastColumnIndex ; columnIndex++){
|
||||
XSSFCell cell = row.getCell(columnIndex);
|
||||
|
||||
System.out.println("cell :: " + cell);
|
||||
//데이버 유형별 get date
|
||||
String cellValue = "";
|
||||
|
||||
if(null == cell){
|
||||
@@ -2818,27 +2817,19 @@ public class ProjectService {
|
||||
switch(cell.getCellType()){
|
||||
case XSSFCell.CELL_TYPE_FORMULA:
|
||||
cellValue = cell.getCellFormula();
|
||||
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_FORMULA:"+cellValue);
|
||||
break;
|
||||
case XSSFCell.CELL_TYPE_NUMERIC:
|
||||
|
||||
DataFormatter formatter = new DataFormatter();
|
||||
|
||||
cellValue = formatter.formatCellValue(cell);
|
||||
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_STRING:"+cellValue);
|
||||
break;
|
||||
|
||||
case XSSFCell.CELL_TYPE_STRING:
|
||||
cellValue = cell.getStringCellValue()+"";
|
||||
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_STRING:"+cellValue);
|
||||
break;
|
||||
case XSSFCell.CELL_TYPE_BLANK:
|
||||
cellValue = cell.getBooleanCellValue()+"";
|
||||
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_BLANK:"+cellValue);
|
||||
cellValue = "";
|
||||
break;
|
||||
case XSSFCell.CELL_TYPE_ERROR:
|
||||
cellValue = cell.getErrorCellValue()+"";
|
||||
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_ERROR:"+cellValue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2849,56 +2840,29 @@ public class ProjectService {
|
||||
|
||||
cellValue = CommonUtils.checkNull(cellValue);
|
||||
|
||||
//기본정보 시작===========================
|
||||
|
||||
/* //단계
|
||||
if(0 == columnIndex){
|
||||
wbsMap.put("STEP", cellValue);
|
||||
if(columnIndex <= 2){
|
||||
levelValues[columnIndex] = cellValue;
|
||||
}
|
||||
|
||||
//TASK명
|
||||
if(1 == columnIndex){
|
||||
wbsMap.put("TASK1", cellValue);
|
||||
}*/
|
||||
|
||||
//공정명
|
||||
if(0 == columnIndex){
|
||||
wbsMap.put("TASK_NAME", cellValue);
|
||||
if(columnIndex == 3){
|
||||
taskName = cellValue;
|
||||
}
|
||||
//공정명
|
||||
if(1 == columnIndex){
|
||||
wbsMap.put("UNIT_NO", cellValue);
|
||||
|
||||
resultList.add(wbsMap);
|
||||
|
||||
System.out.println("wbsMap:"+wbsMap);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
//담당자
|
||||
/*if(1 == columnIndex){
|
||||
wbsMap.put("USER_NAME", cellValue);
|
||||
|
||||
if(!"".equals(cellValue)){
|
||||
|
||||
Map resultMap = new HashMap();
|
||||
Map codeParamMap = new HashMap();
|
||||
codeParamMap.put("USER_NAME", cellValue);
|
||||
resultMap = commonService.getUserMap(codeParamMap);
|
||||
|
||||
if(null != resultMap){
|
||||
wbsMap.put("USER_ID", CommonUtils.checkNull(resultMap.get("USER_ID")));
|
||||
wbsMap.put("USER_NAME", CommonUtils.checkNull(resultMap.get("USER_NAME")));
|
||||
}
|
||||
}
|
||||
resultList.add(wbsMap);
|
||||
|
||||
System.out.println("wbsMap:"+wbsMap);
|
||||
|
||||
break;
|
||||
}*/
|
||||
}
|
||||
|
||||
// 수준1/2/3 중 값이 있는 컬럼에서 UNIT_NO 결정
|
||||
String unitNo = "";
|
||||
if(!"".equals(CommonUtils.checkNull(levelValues[2]))){
|
||||
unitNo = levelValues[2];
|
||||
} else if(!"".equals(CommonUtils.checkNull(levelValues[1]))){
|
||||
unitNo = levelValues[1];
|
||||
} else if(!"".equals(CommonUtils.checkNull(levelValues[0]))){
|
||||
unitNo = levelValues[0];
|
||||
}
|
||||
|
||||
if(!"".equals(unitNo) && !"".equals(taskName)){
|
||||
wbsMap.put("UNIT_NO", unitNo);
|
||||
wbsMap.put("TASK_NAME", taskName);
|
||||
resultList.add(wbsMap);
|
||||
System.out.println("wbsMap:"+wbsMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,7 +318,7 @@ public class PurchaseOrderService {
|
||||
|
||||
sqlSession.update("purchaseOrder.mergePurchaseOrderMaster", paramMap);
|
||||
|
||||
sqlSession.update("purchaseOrder.initPurchaseOrderPart", paramMap);
|
||||
//sqlSession.update("purchaseOrder.initPurchaseOrderPart", paramMap); // POP OBJID 보존을 위해 전체삭제 제거
|
||||
|
||||
String partObjList[] = request.getParameterValues("OBJID");
|
||||
|
||||
@@ -340,7 +340,6 @@ public class PurchaseOrderService {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sqlSession.commit();
|
||||
|
||||
resultMap.put("result", true);
|
||||
@@ -1520,7 +1519,7 @@ public class PurchaseOrderService {
|
||||
List<Map<String, Object>> gridDataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("jqGrid")));
|
||||
//sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
paramMap.put("PURCHASE_ORDER_MASTER_OBJID", MASTER_OBJID);
|
||||
cnt = sqlSession.delete("purchaseOrder.initPurchaseOrderPart", paramMap);
|
||||
//cnt = sqlSession.delete("purchaseOrder.initPurchaseOrderPart", paramMap); // POP OBJID 보존을 위해 전체삭제 제거
|
||||
|
||||
//파트 등록
|
||||
int [] ARR_STOCK_QTY = new int[gridDataList.size()]; //실발주수량
|
||||
@@ -1553,7 +1552,7 @@ public class PurchaseOrderService {
|
||||
//System.out.println("innerTextString:"+innerTextString);
|
||||
}
|
||||
|
||||
insertMap.put("OBJID", CommonUtils.createObjId());
|
||||
//insertMap.put("OBJID", CommonUtils.createObjId()); // POP OBJID 보존을 위해 신규 OBJID 생성 제거 (기존 OBJID로 UPSERT)
|
||||
insertMap.put("PURCHASE_ORDER_MASTER_OBJID", MASTER_OBJID);
|
||||
sqlSession.insert("purchaseOrder.mergePurchaseOrderPartInfo", insertMap);
|
||||
//구매봄 단가 수정
|
||||
@@ -1680,7 +1679,16 @@ public class PurchaseOrderService {
|
||||
cnt = sqlSession.update("purchaseOrder.mergePurchaseOrderMaster", paramMap);
|
||||
//cnt = sqlSession.update("purchaseOrder.mergePurchaseOrderMulti", paramMap);
|
||||
|
||||
cnt = sqlSession.delete("purchaseOrder.initPurchaseOrderPart", paramMap); //발주서 파트 삭제
|
||||
//cnt = sqlSession.delete("purchaseOrder.initPurchaseOrderPart", paramMap); // POP OBJID 보존을 위해 전체삭제 제거
|
||||
|
||||
// 기존 자식 POP 목록 조회 (PART_OBJID → POP.OBJID 매핑)
|
||||
Map existingPopParam = new HashMap();
|
||||
existingPopParam.put("PURCHASE_ORDER_MASTER_OBJID", APPLICATION_OBJID);
|
||||
List<Map> existingChildPops = sqlSession.selectList("purchaseOrder.getPURCHASE_ORDER_PART", existingPopParam);
|
||||
Map<String, String> partToPopObjid = new HashMap<String, String>();
|
||||
for(Map pop : existingChildPops) {
|
||||
partToPopObjid.put(CommonUtils.checkNull((String)pop.get("part_objid")), CommonUtils.checkNull((String)pop.get("objid")));
|
||||
}
|
||||
|
||||
boolean changeOrderQty = false;
|
||||
String partObjid = "";
|
||||
@@ -1689,9 +1697,6 @@ public class PurchaseOrderService {
|
||||
insertMap.clear();
|
||||
insertMap.putAll(orgMap);
|
||||
|
||||
//insertMap.put("OBJID", newMASTER_OBJID);
|
||||
partObjid = CommonUtils.createObjId();
|
||||
insertMap.put("OBJID", partObjid);
|
||||
insertMap.put("PURCHASE_ORDER_MASTER_OBJID", APPLICATION_OBJID);
|
||||
System.out.println("insertMap:"+insertMap);
|
||||
String partNo = CommonUtils.checkNull((String)insertMap.get("PART_NO"));
|
||||
@@ -1743,9 +1748,19 @@ public class PurchaseOrderService {
|
||||
throw new Exception(APPLICATION_PROJECT_NUMBER + " (" + partName + ") 동시발주건 구매BOM part가 존재하지 않습니다.(품번:"+partNo+")");
|
||||
}else {
|
||||
//해당 프로젝트의 파트정보로 변경
|
||||
insertMap.put("PART_OBJID", resultList2.get(0).get("objid_part"));
|
||||
String childPartObjid = (String)resultList2.get(0).get("objid_part");
|
||||
insertMap.put("PART_OBJID", childPartObjid);
|
||||
insertMap.put("PART_NAME", resultList2.get(0).get("part_name"));
|
||||
insertMap.put("PART_NO", resultList2.get(0).get("part_no"));
|
||||
|
||||
// 기존 POP OBJID 보존: PART_OBJID로 매칭, 없으면 신규 생성
|
||||
String existingPopObjid = partToPopObjid.get(childPartObjid);
|
||||
if(existingPopObjid != null && !"".equals(existingPopObjid)) {
|
||||
insertMap.put("OBJID", existingPopObjid);
|
||||
} else {
|
||||
insertMap.put("OBJID", CommonUtils.createObjId());
|
||||
}
|
||||
|
||||
sqlSession.insert("purchaseOrder.mergePurchaseOrderPartInfo", insertMap);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user