|
|
|
|
@@ -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>
|
|
|
|
|
|