ERP-node/WebContent/WEB-INF/view/project/projectTaskFormPopup.jsp

499 lines
16 KiB
Plaintext
Raw Permalink Normal View History

2025-08-21 09:41:46 +09:00
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ 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>
<script>
$(document).ready(function(){
$("#btn_close").click(function(){
self.close(0);
});
//저장
$("#btnSave").click(function(){
fn_save();
});
//저장
$("#addRow").click(function(){
addRow();
});
//삭제
$("#btnDel").click(function(){
fn_delete();
});
//체크박스 전체선택/전체해제
$("#allCheck").click(function(){
if($("#allCheck").prop("checked")) {
$("input[type=checkbox]").prop("checked",true);
} else {
$("input[type=checkbox]").prop("checked",false);
}
});
//파일 등록 공통 팝업
$(".File").click(function(){
var objId = $(this).attr("data-OBJID");
var docType =$(this).attr("data-docType");
var docTypeName = $(this).attr("data-docTypeName");
var params = "?targetObjId="+objId+"&docType="+docType+"&docTypeName="+docTypeName;
window.open("/common/FileRegistPopup.do"+params, "", "width=800, height=335");
});
$(document).on("change", ".dataRow", function(){
});
fnc_datepick();
});
</script>
<script>
function fn_save(){
if(confirm("저장하시겠습니까?")){
//Swal.fire($("#form1").serialize());
$.ajax({
url:"/project/saveProjectMgmtInfo.do",
type:"POST",
data:$("#form1").serialize(),
dataType:"json",
success:function(data){
Swal.fire(data.RESULT.msg);
self.close();
},
error: function(jqxhr, status, error){
}
});
}
}
function addRow(){
var params = "codeId=APP10000";
var option="";
var appr_code ="";
var selectCnt=$('#dataRow > tr').length;
$.ajax({
type : "POST",
url : "/admin/makeSelect.do",
data : params,
dataType:"json",
async: false,
success: function(data){
if(data.RESULT !=""){
appr_code = data.RESULT;
}
}
});
$.ajax({
type : "POST",
url : "/project/makeDept.do",
data : params,
dataType:"json",
async: false,
success: function(data){
if(data.RESULT !=""){
option += "<tr id='Row"+selectCnt+"'>";
option += "<input type='hidden' name='parentObjId' id='parentObjId' value='${param.objId}'>";
option += "<input type='hidden' name='objId' id='objId' value=''>";
option += "<input type='hidden' name='order_no' id='order_no' value='"+Number(selectCnt+1)+"'>";
option += "<td><input type='checkbox' name='chk' id='Row"+selectCnt+"' data-objId=''></td>";
option += "<td><input type='text' name='task_name' id='task_name'></td>";
option += "<td>";
option += "<select name='team_cd' id='team_cd' data-row="+selectCnt+" onchange='optionJobGroup($(this))' >";
option += "<option>선택</option>";
option += data.RESULT;
option += "</select>";
option += " </td>";
option += "<td>";
option += "<select name='user_id' id='user_id"+selectCnt+"'>";
option += "<option>선택</option>";
option += "</select>";
option += "</td>";
option += "<td><input type='text' name='start_pdate' class='date_icon' style='text-align:center;' id='start_pdate"+selectCnt+" data-row="+selectCnt+" onchange='onchange_event($(this));'></td>";
option += "<td><input type='text' name='end_pdate' class='date_icon' style='text-align:center;' id='end_pdate"+selectCnt+" data-row="+selectCnt+" onchange='onchange_event($(this));'></td>";
option += "<td><input type='text' id='day"+selectCnt+"' name='day1' readonly='readonly' style='text-align:center;'></td>";
option += "<td><input type='text' name='end_date' class='date_icon' style='text-align:center;' id='end_date"+selectCnt+" data-row="+selectCnt+" onchange='onchange_event1($(this));'></td>";
option += "<td><input type='text' id='dday"+selectCnt+"' name='day2' readonly='readonly' style='text-align:center;'></td>";
option += "<input type='hidden' id='file_type' name='file_type' value='TASK"+Number(selectCnt+1)+"'>";
option += "<td></td>";
option += "<td>";
option += "<select name='appr_cd' id='appr_cd'>";
option += "<option>선택</option>";
option += appr_code;
option += "</select>";
option += "</td>";
option += "</tr>";
$("#dataRow").append(option);
}
/* <td><input type="text" class="date_icon" style="text-align:center;" id="start_pdate${status.index}" data-row="${status.index}" name="start_pdate" value="${info.START_PDATE}" onchange="onchange_event($(this));" ></td>
<td><input type="text" class="date_icon" style="text-align:center;" id="end_pdate${status.index}" data-row="${status.index}" name="end_pdate" value="${info.END_PDATE}" onchange="onchange_event($(this));" data-type="${info.TASK_NAME}"></td>
<td><input type="text" id="day${status.index}" name="day1" value="${info.DAY1}" readonly="readonly" style="text-align:center;"></td>
<td><input type="text" class="date_icon" style="text-align:center;" id="end_date${status.index}" data-row="${status.index}" name="end_date" value="${info.END_DATE}" onchange="onchange_event1($(this));"></td>
<td><input type="text" id="dday${status.index}" name="day2" value="${info.DAY2}" readonly="readonly" style="text-align:center;"></td>
<input type="hidden" id="file_type" name="file_type" value="${info.FILE_TYPE}">
<td><a href="#" class="File file_${info.FILE_CNT eq 0?'empty_':''}icon" data-OBJID="${info.OBJID}" data-docType="${info.FILE_TYPE}" data-docTypeName="${info.FILE_TYPE}"></a></td> */
}
});
fnc_datepick();
}
//삭제
function fn_delete(){
var chk = $("input[name=chk]:checked");
if(chk.length == 0){
Swal.fire("선택된 TASK가 없습니다.");
return false;
}
var value="";
var _value="";
$(chk).each(function(i){
var objId = $(this).attr("data-objId");
if(objId==""){
_value += (i==0?"":",")+$(this).attr("id");
}else{
value += (i==0?"":",")+objId;
}
});
$("#delKey").val(value);
var arrchk = _value.split(',');
if(confirm("삭제하시겠습니까?")){
for(var i=0;i<arrchk.length;i++){
$("#"+arrchk[i]).remove();
}
if(value!=""){
$.ajax({
url:"/project/delProjectMgmtInfo.do",
type:"POST",
data:$("#form1").serialize(),
dataType:"json",
success:function(data){
Swal.fire(data.RESULT.msg);
location.reload();
},
error: function(jqxhr, status, error){
}
});
}
}
}
function inputNumberFormat(obj) {
obj.value = comma(uncomma(obj.value));
}
function comma(str) {
str = String(str);
return str.replace(/(\d)(?=(?:\d{3})+(?!\d))/g, '$1,');
}
function uncomma(str) {
str = String(str);
return str.replace(/[^\d]+/g, '');
}
function onchange_event($this){
var _id=$this.attr("id");
var _row=$this.attr("data-row");
var start_pdate = $("#start_pdate"+_row).val();
var end_pdate = $("#end_pdate"+_row).val();
var end_date = $("#end_date"+_row).val();
$("#day"+_row).val("0");
if(""!=start_pdate && ""!=end_pdate){
var sdate = new Date(start_pdate);
var edate = new Date(end_pdate);
var day = ((edate.getTime() - sdate.getTime()) / (1000*60*60*24))+1;
$("#day"+_row).val(day);
}
if(""!=end_date){
var sdate = new Date(end_pdate);
var edate = new Date(end_date);
var day = (edate.getTime() - sdate.getTime()) / (1000*60*60*24);
$("#dday"+_row).val(day);
}
var selectCnt=$('#dataRow > tr').length;
for(var i=0;i<selectCnt;i++){
// totalcnt +=
}
var cnt="";
var totalcnt ="";
var avr = "";
var average="";
$("input[name='task_name']").each(function (e) {
//var index = $("input[name='task_name']").index(this);
var _value = $("input[name='task_name']").eq(e).val();
var _value1 = $("input[name='day1']").eq(e).val();
if(_value=="납기일"){
cnt = _value1;
}else{
totalcnt =Number(totalcnt)+Number(_value1);
}
// Swal.fire(totaldays);
//cnt = totaldays;
});
avr = totalcnt/cnt * 100 ;
average = avr.toPrecision(3)
if(average!="NaN" && average!="Infinity"){
$("#total").text(average+"%");
}
}
function onchange_event1($this){
var _id=$this.attr("id");
var _row=$this.attr("data-row");
var end_pdate = $("#end_pdate"+_row).val();
var end_date = $("#end_date"+_row).val();
$("#dday"+_row).val("0");
if(""!=end_pdate && ""!=end_date){
var sdate = new Date(end_pdate);
var edate = new Date(end_date);
var day = (edate.getTime() - sdate.getTime()) / (1000*60*60*24);
$("#dday"+_row).val(day);
}
}
//코드값을 받아와서 동적으로 selectbox 생성
function optionJobGroup($this){
var val=$this.val();
var id=$this.attr("data-row");
var params = "";
var option="";
var combobox = $("#user_id"+id);
combobox.empty();
if(val!=""){
params += "codeId="+val;
$.ajax({
type : "POST",
url : "/projectConcept/makewrite.do",
data : params,
dataType:"json",
async: false,
success: function(data){
if(data.RESULT !=""){
option += "<option value=''>전체</option>";
option += data.RESULT;
combobox.append(option);
}
}
});
// Swal.fire(Number(lev-1));
//$("#code"+Number(lev-1)).val(code).prop("selected", true);
}else{
option += "<option value=''>전체</option>";
combobox.append(option);
}
}
</script>
</head>
<body>
<form name="form1" id="form1" action="" method="post">
<input type="hidden" name="delKey" id="delKey">
<div id="">
<div class="plm_menu_name">
<h2>
<span>WBS 등록</span>
</h2>
</div>
<section class="contents_page_basic_margin">
<div class="btn_wrap">
<div class="plm_btn_wrap">
<c:if test="${param.view ne 'Y'}">
<input type="button" value="Task 추가" class="plm_btns" id="addRow">
<input type="button" value="삭제" class="plm_btns" id="btnDel">
</c:if>
</div>
</div>
<div class="plm_table_wrap" style="">
<div style="overflow-y:scroll;">
<table class="plm_table">
<colgroup>
<col width="3%">
<col width="*">
<col width="8%">
<col width="8%">
<col width="12%">
<col width="12%">
<col width="8%">
<col width="12%">
<col width="8%">
<col width="5%">
<col width="6%">
</colgroup>
<thead>
<tr class="plm_thead">
<td rowspan="2"><input type="checkbox" id="allCheck"></td>
<td rowspan="2">Task Name</td>
<td rowspan="2">팀명</td>
<td rowspan="2">담당자</td>
<td colspan="3">계획</td>
<td colspan="2">실적</td>
<td rowspan="2">산출물</td>
<td rowspan="2">승인</td>
</tr>
<tr class="plm_sub_thead">
<td>시작일</td>
<td>종료일</td>
<td>소요일수</td>
<td>종료일</td>
<td>지연일수</td>
</tr>
</thead>
</table>
</div>
<div class="plm_scroll_table" style="width:100%; height:350px;">
<table class="plm_table">
<colgroup>
<col width="3%">
<col width="*">
<col width="8%">
<col width="8%">
<col width="12%">
<col width="12%">
<col width="8%">
<col width="12%">
<col width="8%">
<col width="5%">
<col width="6%">
</colgroup>
<tbody id="dataRow">
<c:choose>
<c:when test="${!empty LIST}">
<c:forEach var="info" items="${LIST}" varStatus="status">
<tr id="Row${status.index}">
<input type="hidden" name="parentObjId" id="parentObjId" value="${param.objId}">
<input type="hidden" name="objId" id="objId" value="${info.OBJID}">
<input type="hidden" name="order_no" id="order_no" value="${info.ORDER_NO}">
<td><input type="checkbox" name="chk" id="chk" data-objId="${info.OBJID}"></td>
<td><input type="text" name="task_name" id="task_name" value="${info.TASK_NAME}"></td>
<td>
<select name="team_cd" id="team_cd" data-row="${status.index}" onchange='optionJobGroup($(this))'>
<option>선택</option>
${info.dept_code}
</select>
</td>
<td>
<select name="user_id" id="user_id${status.index}">
<option>선택</option>
${info.user_id}
</select>
</td>
<td><input type="text" class="date_icon" style="text-align:center;" id="start_pdate${status.index}" data-row="${status.index}" name="start_pdate" value="${info.START_PDATE}" onchange="onchange_event($(this));" ></td>
<td><input type="text" class="date_icon" style="text-align:center;" id="end_pdate${status.index}" data-row="${status.index}" name="end_pdate" value="${info.END_PDATE}" onchange="onchange_event($(this));" data-type="${info.TASK_NAME}"></td>
<td><input type="text" id="day${status.index}" name="day1" value="${info.DAY1}" readonly="readonly" style="text-align:center;"></td>
<td><input type="text" class="date_icon" style="text-align:center;" id="end_date${status.index}" data-row="${status.index}" name="end_date" value="${info.END_DATE}" onchange="onchange_event1($(this));"></td>
<td><input type="text" id="dday${status.index}" name="day2" value="${info.DAY2}" readonly="readonly" style="text-align:center;"></td>
<input type="hidden" id="file_type" name="file_type" value="${info.FILE_TYPE}">
<td><a href="#" class="File file_${info.FILE_CNT eq 0?'empty_':''}icon" data-OBJID="${info.OBJID}" data-docType="${info.FILE_TYPE}" data-docTypeName="${info.FILE_TYPE}"></a></td>
<td>
<select name="appr_cd" id="appr_cd">
<option>선택</option>
${info.appr_name}
</select>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="7" align="center">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
<table class="plm_table">
<colgroup>
<col width="3%">
<col width="*">
<col width="8%">
<col width="8%">
<col width="12%">
<col width="12%">
<col width="8%">
<col width="12%">
<col width="8%">
<col width="5%">
<col width="6%">
</colgroup>
<tr>
<td colspan="3" style="background-color:#ece7d6;">공정 진척율(%)</td>
<td style="border:0; border-bottom:1px solid #eee;background-color:#ece7d6;"></td>
<td style="border:0; border-bottom:1px solid #eee;background-color:#ece7d6;"></td>
<td style="border:0; border-bottom:1px solid #eee;background-color:#ece7d6;"></td>
<td id="total" style="background-color:#eab94fd6;">${average}</td>
<td style="border:0; border-bottom:1px solid #eee;background-color:#ece7d6;"></td>
<td style="border:0; border-bottom:1px solid #eee;background-color:#ece7d6;"></td>
<td style="border:0; border-bottom:1px solid #eee;background-color:#ece7d6;"></td>
<td style="border:0; border-bottom:1px solid #eee;background-color:#ece7d6;"></td>
</tr>
</table>
</div>
</div>
</section>
<div class="btn_wrap" style="clear:both;">
<div class="plm_btn_wrap_center">
<c:if test="${param.writer eq connectUserId or 'plm_admin' eq connectUserId}">
<c:if test="${param.view ne 'Y'}">
<input type="button" value="저장" id="btnSave" class="plm_btns">
<!-- <input type="button" value="삭제" id="btnDel" class="plm_btns"> -->
</c:if>
</c:if>
<input type="button" value="닫기" id="btn_close" class="plm_btns">
</div>
</div>
</div>
</form>
</body>
</html>