wbs 템플릿 중간 커밋

This commit is contained in:
2026-03-05 12:01:27 +09:00
parent e7380822a5
commit f5cb14ae48
5 changed files with 490 additions and 339 deletions

View File

@@ -7,283 +7,408 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
<style>
html, body { height: 100%; margin: 0; overflow: hidden; }
#wbsTaskList td { text-align: center; padding: 2px 4px; }
#wbsTaskList input[type="text"] { width: 95%; }
#wbsTaskList select { width: 80px; }
</style>
<script>
var rowSeq = 0;
var isEditMode = ("${templateObjId}" !== "");
$(document).ready(function(){
$("#product1").prop("disabled","disabled");
if(isEditMode){
loadExistingTasks();
$("#title").val("${masterInfo.TITLE}");
$("#product").val("${masterInfo.PRODUCT_OBJID}");
} else {
addTotalRow();
}
$("#templateDownload").click(function(){
location.href="/template/WBS_EXCEL_IMPORT_TEMPLATE.xlsx";
});
$("#product1").prop("disabled","disabled");
fnc_datepick();
fnc_setFileDropZone(
"excelImportDropZone",
"${OBJID}",
"WBS_EXCEL_IMPORT",
"WBS Excel Import Template",
"setExcelFileArea",
true,
"fileUploadPreProc",
"/project/excelImportFileProc.do",
null
"excelImportDropZone",
"${OBJID}",
"WBS_EXCEL_IMPORT",
"WBS Excel Import Template",
"setExcelFileArea",
true,
"fileUploadPreProc",
"/project/excelImportFileProc.do",
null
);
//fnc_getOEMList("OEM_OBJID","");
//Excel File Upload된 파일 목록 부분을 초기화 한다.
$("#excelImportList").hide();
});
//Excel 파일 업로드 후 처리함수
function setExcelFileArea(){
setUploadTemplateFile();
}
//템플릿 업로드 후 처리
function setUploadTemplateFile(){
var docType = "WBS_EXCEL_IMPORT";
var deleteCallBackFN = "excelFileDelete";
$.ajax({
url:"/common/getFileList.do",
type:"POST",
data:{"targetObjId":"${OBJID}", "docType":docType},
dataType:"json",
async:false,
success:function(data){
$.each(data, function(i){
var s = "<tr>";
s += "<td><a href='javascript:fnc_downloadFile(\""+data[i].OBJID+"\")'>"+data[i].REAL_FILE_NAME+"</a></td>";
s += "<td>"+data[i].FILE_SIZE+"</td>";
s += "<td><div class='delete_btn' onclick='javascript:fnc_deleteFile(\""+data[i].OBJID+"\", \""+deleteCallBackFN+"\")'></div></td>";
s += "</tr>";
$("#excelImportArea").append(s);
});
//$("#excelImportList").show();
parsingExcelFile();
},
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
Swal.fire(jqxhr.status);
Swal.fire(jqxhr.responseText);
}
});
}
function excelFileDelete(){
$("#excelImportArea").empty();
$("#excelImportList").hide();
$("#wbsTaskList").empty();
}
function parsingExcelFile(){
$("#wbsTaskList").empty();
var appendText = "";
$.ajax({
url:"/project/parsingExcelFile.do",
type:"POST",
data:{"targetObjId":"${OBJID}", "docType":"WBS_EXCEL_IMPORT"},
dataType:"json",
async:false,
success:function(data){
if(0 < data.length){
var resultList = data;
if(0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
var WBS_OBJID = resultList[i].WBS_OBJID;
/* var STEP = resultList[i].STEP;
var TASK1 = resultList[i].TASK1; */
var TASK_NAME = resultList[i].TASK_NAME;
//var USER_ID = resultList[i].USER_ID;
var UNIT_NO = resultList[i].UNIT_NO;
appendText += " <tr>";
appendText += " <input type='hidden' name='WBS_TASK_OBJID' value='"+WBS_OBJID+"'>";
//appendText += " <input type='hidden' name='TASK_CHARGER_ID_CODE_"+WBS_OBJID+"' id='TASK_CHARGER_ID_CODE_"+WBS_OBJID+"' value='"+USER_ID+"'>";
/* appendText += " <td>";
appendText += " <input type='text' name='STEP_"+WBS_OBJID+"' id='STEP_"+WBS_OBJID+"' value='"+STEP+"'>";
appendText += " </td>";
appendText += " <td>";
appendText += " <input type='text' name='TASK1_NAME_"+WBS_OBJID+"' id='TASK1_NAME_"+WBS_OBJID+"' value='"+TASK1+"'>";
appendText += " </td>"; */
appendText += " <td>";
appendText += " <input type='text' name='TASK_NAME_"+WBS_OBJID+"' id='TASK_NAME_"+WBS_OBJID+"' value='"+TASK_NAME+"'>";
appendText += " </td>";
appendText += " <td>";
appendText += " <input type='text' name='UNIT_NO_"+WBS_OBJID+"' id='UNIT_NO_"+WBS_OBJID+"' value='"+UNIT_NO+"'>";
/* appendText += " <select name='TASK_CHARGER_ID_"+WBS_OBJID+"' id='TASK_CHARGER_ID_"+WBS_OBJID+"'></select>"; */
appendText += " </td>";
appendText += " </tr>";
}
}else{
appendText += " <tr>";
appendText += " <td colspan='4'>조회된 내용이 없습니다.</td>";
appendText += " </tr>";
}
}
},
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
Swal.fire(jqxhr.status);
Swal.fire(jqxhr.responseText);
}
});
$("#wbsTaskList").append(appendText);
fn_setSelectData();
}
/*
저장 전 개정중인 정보의 존재여부를 확인한다.
*/
function fn_checkWBSTemplateRevision(){
var resultFlag = true;
$.ajax({
type:"POST",
url : "/project/checkWBSTemplateProduct.do",
data : {"PRODUCT":fnc_checkNull($("#product").val()),"TITLE":fnc_checkNull($("#title").val())},
dataType:"json",
async:false,
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
Swal.fire(jqxhr.status);
Swal.fire(jqxhr.responseText);
},
success:function(data){
if(0 < data.length){
resultFlag = false;
function addTotalRow(){
var objId = generateObjId();
var tr = '<tr id="row_total" data-depth="0">';
tr += '<td></td>';
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="0">';
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="0">';
tr += '<td></td><td></td><td></td>';
tr += '<td style="font-weight:bold;">TOTAL';
tr += '<input type="hidden" name="TASK_NAME_' + objId + '" value="TOTAL">';
tr += '</td>';
tr += '</tr>';
$("#wbsTaskList").append(tr);
}
function loadExistingTasks(){
$.ajax({
url:"/project/getWBSTemplateTaskList.do",
type:"POST",
data:{"OBJID":"${templateObjId}"},
dataType:"json",
async:false,
success:function(data){
if(!data || data.length == 0) return;
for(var i = 0; i < data.length; i++){
var d = data[i];
var objId = d.OBJID;
var taskLevel = fnc_checkNull(d.TASK_LEVEL);
var depth = parseInt(taskLevel) || 0;
if(depth === 0){
var tr = '<tr id="row_total" data-depth="0">';
tr += '<td></td>';
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="0">';
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="0">';
tr += '<td></td><td></td><td></td>';
tr += '<td style="font-weight:bold;">TOTAL';
tr += '<input type="hidden" name="TASK_NAME_' + objId + '" value="TOTAL">';
tr += '</td>';
tr += '</tr>';
$("#wbsTaskList").append(tr);
} else {
var unitNo = fnc_checkNull(d.UNIT_NO);
var taskName = fnc_checkNull(d.TASK_NAME);
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="' + unitNo + '">';
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="' + depth + '">';
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="1" style="width:80%;text-align:center;"' + (depth==1 ? ' value="'+unitNo+'"' : '') + '></td>';
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="2" style="width:80%;text-align:center;"' + (depth==2 ? ' value="'+unitNo+'"' : '') + '></td>';
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="3" style="width:80%;text-align:center;"' + (depth==3 ? ' value="'+unitNo+'"' : '') + '></td>';
tr += '<td><input type="text" name="TASK_NAME_' + objId + '" id="TASK_NAME_' + objId + '" value="' + taskName + '"></td>';
tr += '</tr>';
$("#wbsTaskList").append(tr);
bindLevelInput(objId);
}
}
});
return resultFlag;
}
function saveWBS(){
var formData = $("#form1").serialize();
if( $("#title").val()==""){
Swal.fire('기계형식을 입력해 주세요');
return;
},
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
}
if( $("#customer_product").val()==""){
Swal.fire('고객사_장비목적 입력해 주세요');
return;
});
}
function setExcelFileArea(){
setUploadTemplateFile();
}
function setUploadTemplateFile(){
var docType = "WBS_EXCEL_IMPORT";
var deleteCallBackFN = "excelFileDelete";
$.ajax({
url:"/common/getFileList.do",
type:"POST",
data:{"targetObjId":"${OBJID}", "docType":docType},
dataType:"json",
async:false,
success:function(data){
$.each(data, function(i){
var s = "<tr>";
s += "<td><a href='javascript:fnc_downloadFile(\""+data[i].OBJID+"\")'>"+data[i].REAL_FILE_NAME+"</a></td>";
s += "<td>"+data[i].FILE_SIZE+"</td>";
s += "<td><div class='delete_btn' onclick='javascript:fnc_deleteFile(\""+data[i].OBJID+"\", \""+deleteCallBackFN+"\")'></div></td>";
s += "</tr>";
$("#excelImportArea").append(s);
});
parsingExcelFile();
},
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
}
if(fn_checkWBSTemplateRevision()){
if(0 < $("input[name='WBS_TASK_OBJID']").length){
if(confirm("해당 WBS 정보를 저장하시겠습니까?")){
$.ajax({
type:"POST",
url : "/project/saveExcelUploadWBS.do",
data : $("#form1").serialize(),
dataType:"json",
async:false,
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
Swal.fire(jqxhr.status);
Swal.fire(jqxhr.responseText);
},
success: function(result){
if(null != result){
Swal.fire(result.message);
opener.fn_search();
self.close();
}
}
});
});
}
function excelFileDelete(){
$("#excelImportArea").empty();
$("#excelImportList").hide();
// TOTAL 행만 남기고 나머지 제거
$("#wbsTaskList tr:not(#row_total)").remove();
}
function parsingExcelFile(){
// TOTAL 행만 남기고 나머지 제거
$("#wbsTaskList tr:not(#row_total)").remove();
$.ajax({
url:"/project/parsingExcelFile.do",
type:"POST",
data:{"targetObjId":"${OBJID}", "docType":"WBS_EXCEL_IMPORT"},
dataType:"json",
async:false,
success:function(data){
if(data && 0 < data.length){
for(var i = 0; i < data.length; i++){
var WBS_OBJID = data[i].WBS_OBJID;
var TASK_NAME = data[i].TASK_NAME;
var UNIT_NO = data[i].UNIT_NO;
var lvl = String(UNIT_NO);
var depth = (lvl.match(/\./g) || []).length + 1;
var tr = '<tr id="row_' + WBS_OBJID + '">';
tr += '<td><input type="checkbox" name="rowCheck" value="' + WBS_OBJID + '"></td>';
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + WBS_OBJID + '">';
tr += '<input type="hidden" name="UNIT_NO_' + WBS_OBJID + '" id="UNIT_NO_' + WBS_OBJID + '" value="' + UNIT_NO + '">';
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + WBS_OBJID + '" id="UPPER_TASK_OBJID_' + WBS_OBJID + '" value="">';
tr += '<input type="hidden" name="TASK_LEVEL_' + WBS_OBJID + '" id="TASK_LEVEL_' + WBS_OBJID + '" value="' + depth + '">';
tr += '<td>' + (depth==1 ? '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="1" style="width:80%;text-align:center;" value="'+UNIT_NO+'">' : '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="1" style="width:80%;text-align:center;">') + '</td>';
tr += '<td>' + (depth==2 ? '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="2" style="width:80%;text-align:center;" value="'+UNIT_NO+'">' : '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="2" style="width:80%;text-align:center;">') + '</td>';
tr += '<td>' + (depth==3 ? '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="3" style="width:80%;text-align:center;" value="'+UNIT_NO+'">' : '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="3" style="width:80%;text-align:center;">') + '</td>';
tr += '<td><input type="text" name="TASK_NAME_' + WBS_OBJID + '" id="TASK_NAME_' + WBS_OBJID + '" value="' + TASK_NAME + '"></td>';
tr += '</tr>';
$("#wbsTaskList").append(tr);
bindLevelInput(WBS_OBJID);
}
}else{
Swal.fire("저장할 정보가 없습니다.");
}
}else{
Swal.fire("이미 해당 기계형식으로 등록된 정보가 존재합니다.");
},
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
}
});
}
function fileUploadPreProc(){
preFileDelete();
}
function preFileDelete(){
if(confirm("파일을 업로드하시겠습니까?\n기존에 업로드된 파일은 삭제됩니다.")){
$.ajax({
url:"/common/deleteFileInfo.do",
type:"POST",
data:{"targetObjId":"${OBJID}"},
dataType:"json",
async:true,
success:function(data){
excelFileDelete();
},
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
}
});
}
}
function bindLevelInput(objId){
$("#row_" + objId + " .lvl_input").on("input", function(){
var curObjId = $(this).data("objid");
var level = $(this).data("level");
$("#row_" + curObjId + " .lvl_input").not(this).val("");
$("#UNIT_NO_" + curObjId).val($(this).val());
$("#TASK_LEVEL_" + curObjId).val($(this).val() ? level : "");
});
}
function generateObjId(){
return String(Math.abs(Math.floor(Math.random() * 2147483647))) + String(++rowSeq);
}
function addRow(){
var objId = generateObjId();
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 += '<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);
} else {
$("#wbsTaskList").append(tr);
}
bindLevelInput(objId);
}
function deleteRow(){
var checked = $("input[name='rowCheck']:checked");
if(checked.length == 0){
Swal.fire('삭제할 행을 선택해 주세요');
return;
}
checked.each(function(){
var objId = $(this).val();
if($("#row_" + objId).attr("id") !== "row_total"){
$("#row_" + objId).remove();
}
});
}
function fn_checkWBSTemplateRevision(){
var resultFlag = true;
$.ajax({
type:"POST",
url : "/project/checkWBSTemplateProduct.do",
data : {"PRODUCT":fnc_checkNull($("#product").val()),"TITLE":fnc_checkNull($("#title").val())},
dataType:"json",
async:false,
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
},
success:function(data){
if(0 < data.length){
resultFlag = false;
}
}
});
return resultFlag;
}
function getRowDepth(tr){
var objId = $(tr).find("input[name='WBS_TASK_OBJID']").val();
var taskLevel = $.trim($("#TASK_LEVEL_" + objId).val());
if(taskLevel !== "") return parseInt(taskLevel);
var unitNo = $.trim($("#UNIT_NO_" + objId).val());
if(unitNo === "0") return 0;
if(unitNo === "") return -1;
return (unitNo.match(/\./g) || []).length + 1;
}
function calculateParentRelations(){
var rows = $("#wbsTaskList tr");
var totalObjId = $("#row_total").find("input[name='WBS_TASK_OBJID']").val();
rows.each(function(idx){
var trId = $(this).attr("id");
if(trId === "row_total") return true;
var objId = $(this).find("input[name='WBS_TASK_OBJID']").val();
var depth = getRowDepth(this);
var parentObjId = "";
if(depth === 1){
parentObjId = totalObjId;
} else if(depth > 1){
var prevRows = $(this).prevAll("tr");
prevRows.each(function(){
var prevDepth = getRowDepth(this);
if(prevDepth === depth - 1){
parentObjId = $(this).find("input[name='WBS_TASK_OBJID']").val();
return false;
}
});
}
$("#UPPER_TASK_OBJID_" + objId).val(parentObjId);
});
}
function saveWBS(){
if($("#title").val() == ""){
Swal.fire('제목을 입력해 주세요');
return;
}
if($("input[name='WBS_TASK_OBJID']").length == 0){
Swal.fire('등록할 항목을 추가해 주세요');
return;
}
var isValid = true;
$("input[name='WBS_TASK_OBJID']").each(function(){
var objId = $(this).val();
if($(this).closest("tr").attr("id") === "row_total") return true;
var level = $.trim($("#UNIT_NO_" + objId).val());
var taskName = $.trim($("#TASK_NAME_" + objId).val());
if(level == "" || taskName == ""){
isValid = false;
return false;
}
});
if(!isValid){
Swal.fire('수준과 Unit Name / 공정을 모두 입력해 주세요');
return;
}
//파일을 삭제한다.
//Excel 파일 삭제 시 파트 첨부파일도 모두 삭제한다.
function fileUploadPreProc(){
var templateTitle = fnc_checkNull($("#title").val());
preFileDelete();
}
//파일을 삭제한다.
//Excel 파일 삭제 시 파트 첨부파일도 모두 삭제한다.
function preFileDelete(){
if(confirm("파일을 업로드하시겠습니까?\n기존에 업로드된 파일은 삭제됩니다.")){
$.ajax({
url:"/common/deleteFileInfo.do",
type:"POST",
data:{"targetObjId":"${OBJID}"},
dataType:"json",
async:true,
success:function(data){
excelFileDelete();
},
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
Swal.fire(jqxhr.status);
Swal.fire(jqxhr.responseText);
}
});
if(!isEditMode){
if(!fn_checkWBSTemplateRevision()){
Swal.fire("이미 해당 제목으로 등록된 정보가 존재합니다.");
return;
}
}
//파일을 삭제한다.
//Excel 파일 삭제 시 파트 첨부파일도 모두 삭제한다.
function fileDelete(){
if(confirm("Excel 파일을 변경하시겠습니까?.")){
calculateParentRelations();
Swal.fire({
title: '저장하시겠습니까?',
icon: 'question',
showCancelButton: true,
confirmButtonText: '확인',
cancelButtonText: '취소'
}).then(function(result){
if(result.isConfirmed){
$.ajax({
url:"/common/deleteFileInfo.do",
type:"POST",
data:{"targetObjId":"${OBJID}"},
url : "/project/saveExcelUploadWBS.do",
data : $("#form1").serialize(),
dataType:"json",
async:true,
success:function(data){
excelFileDelete();
},
async:false,
error: function(jqxhr, status, error){
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
Swal.fire(jqxhr.status);
Swal.fire(jqxhr.responseText);
}
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
},
success: function(result){
if(null != result){
Swal.fire(result.message);
opener.fn_search();
self.close();
}
}
});
}
}
function fn_setSelectData(){
$("input[name='WBS_TASK_OBJID']").each(function(i){
var targetVal = $(this).val();
var userSelectId = "TASK_CHARGER_ID_"+targetVal;
var userSelectedVal = $("#TASK_CHARGER_ID_CODE_"+targetVal).val();
fnc_getUserList2(userSelectId, userSelectedVal);
});
}
});
}
</script>
</head>
<body>
<form name="form1" id="form1" action="" method="post">
<input type="hidden" name="importPopObjid" id="importPopObjid" value="${OBJID}">
<input type="hidden" name="product" id="product" value="${param.product}">
<input type="hidden" name="templateObjId" id="templateObjId" value="${templateObjId}">
<div class="content-box">
<div class="content-box-s">
<div class="plm_menu_name">
<h2>
<span>WBS Excel Upload</span>
<span>${empty templateObjId ? 'WBS 템플릿 등록' : 'WBS 템플릿 수정'}</span>
</h2>
</div>
<div id="plmSearchZon" style="width:auto;">
@@ -291,28 +416,20 @@ $(document).ready(function(){
<tbody>
<tr>
<td class="align_r">
<label for="" class="">제품구분</label>
<label for="">제품구분</label>
</td>
<td>
<select name="product1" id="product1" style="" class="select2" autocomplete="off">
<option value="">선택</option>
${code_map.product_cd}
</select>
<select name="product1" id="product1" style="" class="select2" autocomplete="off">
<option value="">선택</option>
${code_map.product_cd}
</select>
</td>
<td class="align_r">
<label for="title" class="">기계형식</label>
<label for="title">제목</label>
</td>
<td>
<input id="title" name="title" type="text" value="">
</td>
<td class="align_r">
<label for="customer_product" class="">고객사_장비목적</label>
</td>
<td>
<input id="customer_product" name="customer_product" type="text" value="">
</td>
</tr>
</tbody>
</table>
@@ -320,7 +437,9 @@ $(document).ready(function(){
<section class="contents_page_basic_margin">
<div class="btn_wrap">
<div class="plm_btn_wrap">
<input type="button" value="Template Download" id="templateDownload" class="plm_btns">
<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="deleteRow();">
<input type="button" value="저장" class="plm_btns" onclick="saveWBS();">
<input type="button" value="닫기" id="btn_close" class="plm_btns" onclick="javascript:self.close();">
</div>
@@ -335,31 +454,42 @@ $(document).ready(function(){
</tbody>
</table>
</div>
<div class="in_table_scroll_wrap _table1" style="height:26px;width:99.2%;">
<table class="plm_table">
<colgroup>
<col width="70%" /><!-- 단계 -->
<col width="30%" /><!-- TASK명 -->
</colgroup>
<thead>
<tr class="plm_thead">
<td>UNIT Name</td>
<td>UNIT No</td>
</tr>
</thead>
</table>
</div>
<div class="in_table_scroll_wrap _table2" style="height:560px;width:100%;">
<table class="pmsPopupForm" style="margin:0px;">
<colgroup>
<col width="70%" /><!-- 단계 -->
<col width="30%" /><!-- TASK명 -->
</colgroup>
<tbody id="wbsTaskList"></tbody>
</table>
</div>
<div style="width:100%;">
<table class="plm_table" style="width:100%;border-collapse:collapse;">
<colgroup>
<col width="5%" />
<col width="8%" />
<col width="8%" />
<col width="8%" />
<col width="71%" />
</colgroup>
<thead>
<tr class="plm_thead">
<td rowspan="2">선택</td>
<td colspan="3">수준</td>
<td rowspan="2">Unit Name / 공정</td>
</tr>
<tr class="plm_thead">
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</thead>
</table>
</div>
<div style="width:100%;height:calc(100vh - 280px);overflow-y:auto;">
<table class="plm_table" style="width:100%;border-collapse:collapse;">
<colgroup>
<col width="5%" />
<col width="8%" />
<col width="8%" />
<col width="8%" />
<col width="71%" />
</colgroup>
<tbody id="wbsTaskList"></tbody>
</table>
</div>
</section>
</div>
</div>

View File

@@ -92,14 +92,14 @@ $(document).ready(function(){
var columns = [
{headerHozAlign : 'center', hozAlign : 'left', width : '250', title : '제품구분', field : 'PRODUCT_NAME' },
{headerHozAlign : 'center', hozAlign : 'left', width : '250', title : '기계형식', field : 'TITLE' },
{headerHozAlign : 'center', hozAlign : 'left', /* width : '250', */ title : '고객사_장비목적', field : 'CUSTOMER_PRODUCT',
formatter:fnc_createGridAnchorTag,
cellClick:function(e, cell){
var objid = fnc_checkNull(cell.getData().OBJID);
fn_openTemplateMasterPopUp(objid);
}
},
{headerHozAlign : 'center', hozAlign : 'left', /* width : '250', */ title : '제목', field : 'TITLE' },
// {headerHozAlign : 'center', hozAlign : 'left', /* width : '250', */ title : '고객사_장비목적', field : 'CUSTOMER_PRODUCT',
// formatter:fnc_createGridAnchorTag,
// cellClick:function(e, cell){
// var objid = fnc_checkNull(cell.getData().OBJID);
// fn_openTemplateMasterPopUp(objid);
// }
// },
{headerHozAlign : 'center', hozAlign : 'center', width : '250', title : 'UNIT', field : 'WBS_TASK_CNT0',
formatter:fnc_getFolderIcon,
cellClick:function(e, cell){
@@ -130,18 +130,12 @@ function fn_openTemplateMasterPopUp(objId){
}
function fn_openWBSTaskListPopUp(objId){
var hiddenForm = document.hiddenForm;
var popup_width = 800;
var popup_height = 700;
var url = "/project/wbsTemplateTaskListDetailPopUp.do";
var popup_width = 1340;
var popup_height = 700;
var url = "/project/WBSExcelImportPopUp.do?templateObjId=" + objId;
var target = "openWBSTaskListPopUp";
fn_centerPopup(popup_width, popup_height, url, target);
hiddenForm.action = url;
hiddenForm.OBJID.value = objId;
hiddenForm.target = target;
hiddenForm.submit();
}
function _fnc_datepick(){

View File

@@ -2282,14 +2282,27 @@ public class ProjectController {
@RequestMapping("/project/WBSExcelImportPopUp.do")
public String partMngExcelImportPopUp(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
String objid = CommonUtils.createObjId();
String templateObjId = CommonUtils.nullToEmpty((String)paramMap.get("templateObjId"));
Map code_map = new HashMap();
try{
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product")),"common.getCodeselect")); //공장
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product")),"common.getCodeselect"));
if(!"".equals(templateObjId)){
Map templateParam = new HashMap();
templateParam.put("OBJID", templateObjId);
Map masterInfo = service.getWBSTemplateMasterInfo(request, templateParam);
List taskList = service.getWBSTemplateTaskList(request, templateParam);
request.setAttribute("masterInfo", masterInfo);
request.setAttribute("taskList", taskList);
request.setAttribute("templateObjId", templateObjId);
String productObjId = CommonUtils.nullToEmpty((String)masterInfo.get("PRODUCT_OBJID"));
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", productObjId, "common.getCodeselect"));
}
}catch(Exception e){
e.printStackTrace();
}
request.setAttribute("OBJID",objid);
request.setAttribute("code_map",code_map);
return "/project/WBSExcelImportPopUp";

View File

@@ -5611,29 +5611,38 @@
,PARENT_OBJID
,TASK_NAME
,TASK_SEQ
,TASK_LEVEL
,USER_ID
,WRITER
,REG_DATE
,UNIT_NO
,UPPER_TASK_OBJID
) VALUES (
#{objid}
,#{parent_objid}
,#{task_name}
,#{task_seq}
,#{task_level}
,#{user_id}
,#{writer}
,now()
,now()
,#{unit_no}
,#{upper_task_objid}
) ON
CONFLICT (OBJID) DO
UPDATE SET
TASK_NAME = #{task_name}
,TASK_SEQ = #{task_seq}
,USER_ID = #{user_id}
,UNIT_NO = #{unit_no}
TASK_NAME = #{task_name}
,TASK_SEQ = #{task_seq}
,TASK_LEVEL = #{task_level}
,USER_ID = #{user_id}
,UNIT_NO = #{unit_no}
,UPPER_TASK_OBJID = #{upper_task_objid}
</insert>
<delete id="deleteWBSTemplateTaskByMaster" parameterType="map">
DELETE FROM PMS_WBS_TASK_STANDARD WHERE PARENT_OBJID = #{parent_objid}
</delete>
<select id="getWBSTemplateMasterInfo" parameterType="map" resultType="map">
SELECT
OBJID
@@ -5654,14 +5663,16 @@
,T.PARENT_OBJID
,T.TASK_NAME
,T.TASK_SEQ
,T.TASK_LEVEL
,T.USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.USER_ID) AS USER_ID_TITLE
,T.WRITER
,T.REG_DATE
,T.UNIT_NO
,T.UPPER_TASK_OBJID
FROM PMS_WBS_TASK_STANDARD AS T
WHERE T.PARENT_OBJID = #{OBJID}
ORDER BY UNIT_NO
ORDER BY CAST(T.TASK_SEQ AS INTEGER)
</select>

View File

@@ -2940,51 +2940,54 @@ public class ProjectService {
try{
PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN);
String writer = CommonUtils.checkNull(person.getUserId());
String product = CommonUtils.checkNull(request.getParameter("product"));
String title = CommonUtils.checkNull(request.getParameter("title"));
String customer_product = CommonUtils.checkNull(request.getParameter("customer_product"));
Map templateMapsterSqlParamMap = new HashMap();
String wbsMasterObjId = CommonUtils.createObjId();
templateMapsterSqlParamMap.put("objid" , wbsMasterObjId);
templateMapsterSqlParamMap.put("product" , product);
templateMapsterSqlParamMap.put("title" , title);
templateMapsterSqlParamMap.put("writer" , writer);
templateMapsterSqlParamMap.put("customer_product" , customer_product);
//템플릿 마스터를 저장한다.
sqlSession.insert("project.saveWBSTaskTemp",templateMapsterSqlParamMap);
String templateObjId = CommonUtils.checkNull(request.getParameter("templateObjId"));
String wbsMasterObjId;
if(!"".equals(templateObjId)){
wbsMasterObjId = templateObjId;
Map deleteParam = new HashMap();
deleteParam.put("parent_objid", wbsMasterObjId);
sqlSession.delete("project.deleteWBSTemplateTaskByMaster", deleteParam);
} else {
wbsMasterObjId = CommonUtils.createObjId();
Map templateMasterSqlParamMap = new HashMap();
templateMasterSqlParamMap.put("objid", wbsMasterObjId);
templateMasterSqlParamMap.put("product", product);
templateMasterSqlParamMap.put("title", title);
templateMasterSqlParamMap.put("writer", writer);
templateMasterSqlParamMap.put("customer_product", customer_product);
sqlSession.insert("project.saveWBSTaskTemp", templateMasterSqlParamMap);
}
String[] wbsObjIdList = request.getParameterValues("WBS_TASK_OBJID");
if(null != wbsObjIdList || 0 < wbsObjIdList.length){
if(null != wbsObjIdList && 0 < wbsObjIdList.length){
for(int i = 0;i<wbsObjIdList.length;i++){
String wbsObjId = CommonUtils.checkNull(wbsObjIdList[i]);
Map wbsSqlParamMap = new HashMap();
String TASK_NAME = CommonUtils.checkNull(request.getParameter("TASK_NAME_"+wbsObjId));
//String MANAGER_USER_ID = CommonUtils.checkNull(request.getParameter("TASK_CHARGER_ID_"+wbsObjId));
String UNIT_NO = CommonUtils.checkNull(request.getParameter("UNIT_NO_"+wbsObjId));
String UNIT_NO = CommonUtils.checkNull(request.getParameter("UNIT_NO_"+wbsObjId));
String UPPER_TASK_OBJID = CommonUtils.checkNull(request.getParameter("UPPER_TASK_OBJID_"+wbsObjId));
String TASK_LEVEL = CommonUtils.checkNull(request.getParameter("TASK_LEVEL_"+wbsObjId));
wbsSqlParamMap.put("objid", wbsObjId);
wbsSqlParamMap.put("task_name", TASK_NAME);
wbsSqlParamMap.put("task_seq", i+1);
wbsSqlParamMap.put("task_level", TASK_LEVEL);
wbsSqlParamMap.put("unit_no", UNIT_NO);
//wbsSqlParamMap.put("user_id", MANAGER_USER_ID);
wbsSqlParamMap.put("upper_task_objid", UPPER_TASK_OBJID);
wbsSqlParamMap.put("parent_objid", wbsMasterObjId);
wbsSqlParamMap.put("writer", writer);
System.out.println("wbsSqlParamMap:"+wbsSqlParamMap);
sqlSession.insert("project.saveWBSTemplateTaskInfo", wbsSqlParamMap);
//제품구분(0000001) 공통코드 등록 처리
// this.checkAndSaveUnitCodeInfo(request, wbsSqlParamMap, sqlSession);
}
sqlSession.commit();
}