WBS 템플릿 (제품관리_unit관리)
This commit is contained in:
@@ -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();">
|
||||
|
||||
Binary file not shown.
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user