- Add Docker Compose configurations for dev, prod, and standalone environments - Add database initialization scripts (init-db.sh, init-db-docker.sh) - Add enhanced start-docker-linux.sh with DB init support - Add comprehensive database initialization guide - Support for automatic dbexport.pgsql import on first run - Include safety checks for production environment
640 lines
26 KiB
Plaintext
640 lines
26 KiB
Plaintext
<%@ 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" %>
|
|
<%
|
|
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
|
String connector = person.getUserId();
|
|
|
|
%>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title><%=Constants.SYSTEM_NAME%></title>
|
|
<link rel="stylesheet" href="/css/basicDash.css">
|
|
|
|
<!-- //JSTL 페이징 변수선언 -->
|
|
<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>
|
|
|
|
<c:set var="connector" value="<%=connector %>" />
|
|
<style>
|
|
#plmSearchZon table td {
|
|
border: none;
|
|
}
|
|
.contents_section1{
|
|
height:700px;
|
|
}
|
|
.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(){
|
|
$('.select2').select2();
|
|
|
|
$("#btnSearch").click(function(){
|
|
//$("#page").val("1");
|
|
fn_search();
|
|
});
|
|
|
|
fnc_datepick();
|
|
|
|
$(".trProject").on("click", function(e){
|
|
$(this).find("input[name=ckBoxProject]").trigger("click");
|
|
});
|
|
|
|
//프로젝트 선택 시
|
|
$("input[name=ckBoxProject]").on("click change", function(e){
|
|
|
|
e.stopPropagation(); // 이벤트 전파 차단
|
|
var projectObjId = $('input[name=ckBoxProject]:checked').val();
|
|
$(".highlighted").removeClass("highlighted");
|
|
$(this).parent().parent().addClass("highlighted");
|
|
|
|
_startLoading();
|
|
|
|
//fn_getProjectIssueStatusList(projectObjId);
|
|
//fn_getProjectCostStatusList(projectObjId);
|
|
|
|
_endLoading();
|
|
});
|
|
|
|
$(".trProject").eq(0).trigger("click");
|
|
|
|
//SR자료등록 팝업
|
|
$(".File").click(function(){
|
|
var popup_width = 800;
|
|
var popup_height = 250;
|
|
|
|
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;
|
|
var url = "/projectConcept/FileRegistPopup.do"+params;
|
|
|
|
fn_centerPopup(popup_width, popup_height, url);
|
|
});
|
|
|
|
//엔터 조회
|
|
$("input").keyup(function(e){
|
|
if(e.keyCode == 13){
|
|
$("#page").val("1");
|
|
fn_search();
|
|
}
|
|
});
|
|
|
|
$("#btnWbs").click(function(){
|
|
var objid = $("input[name=ckBoxProject]:checked").val();
|
|
var CATEGORY_CD = $('input[name=ckBoxProject]:checked').attr('data-CATEGORY_CD');
|
|
wbs_popup(objid, CATEGORY_CD);
|
|
});
|
|
|
|
$("#btnGChart").click(function(){
|
|
var objid = $("input[name=ckBoxProject]:checked").val();
|
|
//var CATEGORY_CD = $('input[name=ckBoxProject]:checked').attr('data-CATEGORY_CD');
|
|
GanttChart_popup(objid);
|
|
});
|
|
|
|
fn_drawGantt();
|
|
//fn_search();
|
|
|
|
var busArry = "${param.project_nos}".split(",");
|
|
|
|
if(busArry != '' && busArry != null){
|
|
for(var i=0;i<busArry.length;i++){
|
|
$("#project_no option[value="+busArry[i]+"]").attr("selected",true);
|
|
}
|
|
}
|
|
$("#project_no").select2({multiple: true});
|
|
});
|
|
|
|
//프로젝트에 해당하는 WBS Task 목록 PopUp을 호출한다.
|
|
function fn_openProjectWBSTask(projectObjId){
|
|
if(null != projectObjId){
|
|
window.open("/project/wbs/wbsTaskDetailPopUp.do?OBJID="+projectObjId+"&objId="+projectObjId, "", "width=1700, height=700");
|
|
}else{
|
|
alert("잘못된 접근입니다.");
|
|
}
|
|
}
|
|
|
|
function wbs_popup(objId,categoryCd){
|
|
var popup_width = 1700;
|
|
var popup_height = 800;
|
|
var objId = objId;
|
|
var params = "?OBJID="+objId+"&CATEGORY_CD="+categoryCd;
|
|
//var url = "/project/wbsTaskProductGanttFormPopUp.do"+params;
|
|
var url = "/project/wbsTaskProductFormPopUp.do"+params;
|
|
fn_centerPopup(popup_width, popup_height, url);
|
|
}
|
|
|
|
function GanttChart_popup(objId){
|
|
var popup_width = 1800;
|
|
var popup_height = 800;
|
|
var objId = objId;
|
|
var params = "?OBJID="+objId;
|
|
//var url = "/project/wbsTaskProductGanttFormPopUp.do"+params;
|
|
var url = "/project/wbsTaskProductGantt.do"+params;
|
|
fn_centerPopup(popup_width, popup_height, url);
|
|
}
|
|
|
|
//프로젝트의 form,detail 팝업을 보여준다.
|
|
function openProjectFormPopUp(objId){
|
|
var popup_width = 420;
|
|
var popup_height = 350;
|
|
var objId = objId;
|
|
var params = "?OBJID="+objId;
|
|
var url = "/project/projectmodifyPopUp.do"+params;
|
|
fn_centerPopup(popup_width, popup_height, url);
|
|
}
|
|
|
|
|
|
<c:set var="ganttTotalWidth" value="720"/>
|
|
/*
|
|
<c:set var="ganttTotalCnt" value="36"/>
|
|
*/
|
|
<c:set var="ganttTotalCnt" value="24"/>
|
|
<c:set var="ganttTdWidth" value="${ganttTotalWidth/ganttTotalCnt}"/>
|
|
function fn_drawGantt(){
|
|
var tdWidth = ${ganttTdWidth};
|
|
var quarterWidth = tdWidth*3;
|
|
var yyyyPre = Number('${yyyyPre}');
|
|
var curYear = Number('${yyyy}');
|
|
var yyyyNext = Number('${yyyyNext}');
|
|
var today = '${today2}';
|
|
var arrDate = today.split('-');
|
|
var sYear = Number(arrDate[0]);
|
|
/*
|
|
var sMonth = Number(arrDate[1]);
|
|
var sDate = Number(arrDate[2]);
|
|
var sYearIndex = Number(sYear) - Number(curYear) + 2;
|
|
var quarterIndex = sMonth%3 == 0 ? 3 : sMonth%3;
|
|
var quarter = Math.floor((sMonth-1)/3+1); //내림
|
|
var xStart = ((sYearIndex-1)*yearMonthCnt + ((quarter-1)*monthCntInQuarter+quarterIndex-1)) * tdWidth + sDateStart;
|
|
$("#divTodayVline").css('left', (730)+"px"); //margin-left
|
|
*/
|
|
|
|
if( !(sYear > yyyyNext || sYear < yyyyPre)){
|
|
fn_drawGanttRow('divTodayVline','','${today2}','${today2}'); //today
|
|
}else{
|
|
//$(".divTodayVline").hide();
|
|
}
|
|
|
|
<c:choose>
|
|
<c:when test="${!empty projectList}">
|
|
<c:forEach var="info" items="${projectList}" varStatus="status">
|
|
fn_drawGanttRow('p1','${info.OBJID}','${info.DESIGN_ACT_START}','${info.DESIGN_ACT_END}'); //설계
|
|
fn_drawGanttRow('p2','${info.OBJID}','${info.PURCHASE_ACT_START}','${info.PURCHASE_ACT_END}'); //구매
|
|
fn_drawGanttRow('p3','${info.OBJID}','${info.PRODUCE_ACT_START}','${info.PRODUCE_ACT_END}'); //조립
|
|
fn_drawGanttRow('p4','${info.OBJID}','${info.REQ_DEL_DATE}','${info.REQ_DEL_DATE}'); //출고
|
|
fn_drawGanttRow('p5','${info.OBJID}','${info.SETUP_ACT_START}','${info.SETUP_ACT_END}'); //셋업
|
|
</c:forEach>
|
|
</c:when>
|
|
</c:choose>
|
|
|
|
/*
|
|
for(var i=1; i<13; i++){
|
|
console.log(i, (i-1)/3+1);
|
|
}
|
|
*/
|
|
}
|
|
function fn_drawGanttRow(classPrefix, OBJID, START_DATE, END_DATE ){
|
|
|
|
var isSmall = ${ganttTotalCnt == 24};
|
|
var baseXPosition = -3;
|
|
var days = 30.4;
|
|
var tdWidth = ${ganttTdWidth}; //20 start용
|
|
var tdWidth2 = ${ganttTdWidth}; //20으로 하면 over됨
|
|
var dayWidth = tdWidth/days;
|
|
var quarterCnt = 4;
|
|
var monthCntInQuarter = 3;
|
|
var yearMonthCnt = quarterCnt * monthCntInQuarter; //12
|
|
var quarterWidth = tdWidth * monthCntInQuarter;
|
|
var yyyyPre = '${yyyyPre}';
|
|
var curYear = '${yyyy}';
|
|
var yyyyNext = '${yyyyNext}';
|
|
|
|
var START_DATE = fnc_checkNull(START_DATE);
|
|
var END_DATE = fnc_checkNull(END_DATE);
|
|
|
|
if(fnc_isEmpty(START_DATE) && fnc_isEmpty(END_DATE)){
|
|
$("."+classPrefix+OBJID).hide();
|
|
return;
|
|
}
|
|
|
|
if(fnc_isEmpty(START_DATE)){
|
|
START_DATE = END_DATE;
|
|
}
|
|
if(fnc_isEmpty(END_DATE)){
|
|
END_DATE = START_DATE;
|
|
}
|
|
|
|
var arrDate = START_DATE.split('-');
|
|
var arrDate2 = END_DATE.split('-');
|
|
//var startYear = DESIGN_PLAN_START.substring(0, 4);
|
|
//var startMonth = DESIGN_PLAN_START.substring(4, 2);
|
|
//var sYearM = Number((arrDate[0]+arrDate[1]).replace('-',''));
|
|
var sYear = Number(arrDate[0]);
|
|
var sMonth = Number(arrDate[1]);
|
|
var sDate = Number(arrDate[2]);
|
|
var sAllMonth = sYear*12 + sMonth;
|
|
//var eYearM = Number((arrDate2[0]+arrDate2[1]).replace('-',''));
|
|
var eYear = Number(arrDate2[0]);
|
|
var eMonth = Number(arrDate2[1]);
|
|
var eDate = Number(arrDate2[2]);
|
|
var eAllMonth = eYear*12 + eMonth;
|
|
var sYearIndex = Number(sYear) - Number(curYear) + 2;
|
|
var eYearIndex = Number(eYear) - Number(curYear) + 2;
|
|
|
|
var gapMonth = (eAllMonth - sAllMonth) - 1;
|
|
if(gapMonth < 0) gapMonth = 0;
|
|
|
|
//일 width 계산
|
|
var sDateWidth = 0;
|
|
var eDateWidth = 0;
|
|
var sDateStart = 0;
|
|
sDateWidth = (1+days - sDate) * dayWidth;
|
|
eDateWidth = eDate * dayWidth;
|
|
sDateStart = sDate * dayWidth;
|
|
/* */
|
|
//if(sMonth != eMonth){
|
|
if(eAllMonth - sAllMonth == 0){ //같은월
|
|
sDateWidth = (1+eDate - sDate) * dayWidth;
|
|
eDateWidth = 0;
|
|
}else if(eAllMonth - sAllMonth == 1){
|
|
//sDateWidth = (1+days - sDate) * dayWidth;
|
|
//eDateWidth = eDate * dayWidth;
|
|
}else if(eAllMonth - sAllMonth > 1){
|
|
|
|
}
|
|
//}
|
|
|
|
var quarterIndex = sMonth%3 == 0 ? 3 : sMonth%3;
|
|
var quarter = Math.floor((sMonth-1)/3+1); //내림
|
|
|
|
var eQuarterIndex = eMonth%3 == 0 ? 3 : eMonth%3;
|
|
var eQuarter = Math.floor((eMonth-1)/3+1); //내림
|
|
|
|
//var xSize = ( ((eYearIndex-1)*yearMonthCnt + ( (eQuarter-1)*monthCntInQuarter+eQuarterIndex-1)) - ((sYearIndex-1)*yearMonthCnt+( (quarter-1)*monthCntInQuarter+quarterIndex-1)) /*+1*/) *tdWidth2 - sDateWidth + eDateWidth;
|
|
var xSize = gapMonth * tdWidth2 + sDateWidth + eDateWidth; //(gapMonth < 1 ? sDateWidth : -sDateWidth)
|
|
var xStart = ((sYearIndex-1)*yearMonthCnt + ((quarter-1)*monthCntInQuarter+quarterIndex-1)) * tdWidth + sDateStart;
|
|
if(isSmall) xStart -= quarterWidth*2;//첫연도 1,2분기 제거
|
|
|
|
if(xSize < 3)
|
|
xSize += 1; //최소width 보정
|
|
|
|
xStart -= 2.5; //위치 보정
|
|
|
|
if(classPrefix == 'p4') //출고 다이아몬드모양
|
|
xStart -= 8; //위치 보정
|
|
|
|
xStart = xStart - baseXPosition;
|
|
if(xStart < baseXPosition) xStart = baseXPosition;
|
|
|
|
//console.log(classPrefix, OBJID, START_DATE, sYear, sMonth, sYearIndex+'YearIndex', quarter+'quarter', quarterIndex+'quarterIndex');
|
|
//console.log(classPrefix, OBJID, END_DATE , eYear, eMonth, eYearIndex+'YearIndex', eQuarter+'quarter', eQuarterIndex+'quarterIndex');
|
|
//console.log(classPrefix, OBJID, xStart+' Start', xSize+' Size', sDateStart+' sDateStart', sDateWidth+' sDateWidth', eDateWidth+' eDateWidth', gapMonth+'gapMonth');
|
|
//console.log(classPrefix, (eYearIndex-1)*yearMonthCnt+( (eQuarter-1)*monthCntInQuarter+eQuarterIndex-1) , (sYearIndex-1)*yearMonthCnt+( (quarter-1)*monthCntInQuarter+quarterIndex-1), OBJID, xStart+'Start', xSize+'Size', sDateWidth+'sDateWidth', eDateWidth+'eDateWidth');
|
|
|
|
var todayLeftMargin = 975;
|
|
if(classPrefix == 'divTodayVline'){ //today
|
|
$("."+classPrefix).css('left', (todayLeftMargin+xStart)+"px"); //margin-left
|
|
$("."+classPrefix).show();
|
|
$("."+classPrefix).css('height', $("#tableProject").height()+0); //buffer
|
|
//alert($("#tableProject").height()+100);
|
|
}else{
|
|
$("."+classPrefix+OBJID).css('width', xSize+"px");
|
|
$("."+classPrefix+OBJID).css('margin-left', xStart+"px");
|
|
$("."+classPrefix+OBJID).show();
|
|
}
|
|
if(classPrefix == 'p4'){ //출고 다이아몬드모양
|
|
$("."+classPrefix+OBJID).addClass('diamond');
|
|
$("."+classPrefix+OBJID).parent().removeClass('gantt');
|
|
var jB3 = $("."+classPrefix+OBJID).parent().parent().find('.p3');
|
|
//var b3Display = jB3.attr("display");
|
|
if(jB3 && jB3.is(':visible')){ //조립있으면 같은 라인 표시
|
|
$("."+classPrefix+OBJID).css('margin-top', "-14px");
|
|
}
|
|
}
|
|
if(classPrefix == 'p5'){ //셋업
|
|
var jB3 = $("."+classPrefix+OBJID).parent().parent().find('.p3');
|
|
if(jB3 && jB3.is(':visible')){ //조립있으면 같은 라인 표시
|
|
$("."+classPrefix+OBJID).css('margin-top', "-12px");
|
|
}else{
|
|
var jB3 = $("."+classPrefix+OBJID).parent().parent().find('.p4');
|
|
if(jB3 && jB3.is(':visible')){ //조립있으면 같은 라인 표시
|
|
$("."+classPrefix+OBJID).css('margin-top', "-12px");
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
// 모든 라인 요소를 선택
|
|
//const lines = document.querySelectorAll('.ganttLine');
|
|
// 각 라인에 대해 이벤트 처리
|
|
lines.forEach(line => {
|
|
// 마우스 오버 이벤트
|
|
line.addEventListener('mouseover', function() {
|
|
const start = this.getAttribute('data-start');
|
|
const end = this.getAttribute('data-end');
|
|
const tooltip = document.createElement('div');
|
|
tooltip.classList.add('tooltip');
|
|
tooltip.textContent = `${start} ~ ${end}`;
|
|
this.appendChild(tooltip);
|
|
});
|
|
// 마우스 아웃 이벤트
|
|
line.addEventListener('mouseout', function() {
|
|
const tooltip = this.querySelector('.tooltip');
|
|
if (tooltip) {
|
|
tooltip.remove();
|
|
}
|
|
});
|
|
});
|
|
*/
|
|
}
|
|
|
|
function fn_search(){
|
|
var selectedValues = $("#project_no").val();
|
|
|
|
$('<input>').attr({
|
|
type: 'hidden',
|
|
name: 'project_nos',
|
|
value: selectedValues
|
|
}).appendTo('#form1');
|
|
|
|
var form = document.form1;
|
|
form.action = "/project/projectMgmtTotalList.do";
|
|
form.submit();
|
|
}
|
|
</script>
|
|
</head>
|
|
<body class="<%--bodyNoScrollX--%>">
|
|
<form name="form1" id="form1" action="" method="post">
|
|
<input type="hidden" name="actionType" value="" />
|
|
<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}"${paramMap.Year eq req_year ? 'selected':'' }>${req_year}</option>
|
|
</c:forEach>
|
|
</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>
|
|
|
|
<td><label for="category_cd">계약구분</label></td>
|
|
<td>
|
|
<select name="category_cd" id="category_cd" style="" class="select2" autocomplete="off">
|
|
<option value="">선택</option>
|
|
${code_map.category_cd}
|
|
</select>
|
|
</td>
|
|
|
|
<td><label for="customer_objid">고객사</label></td>
|
|
<td>
|
|
<select name="customer_objid" id="customer_objid" style="" class="select2" autocomplete="off">
|
|
<option value="">선택</option>
|
|
${code_map.customer_cd}
|
|
</select>
|
|
</td>
|
|
|
|
<td><label for="product">제품구분</label></td>
|
|
<td>
|
|
<select name="product" id="product" style="" class="select2" autocomplete="off">
|
|
<option value="">선택</option>
|
|
${code_map.product_cd}
|
|
</select>
|
|
</td>
|
|
|
|
<td class="align_r">
|
|
<label>예상납기일</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" name="contract_start_date" id="contract_start_date" style="width:90px; float:none" autocomplete="off" value="${param.contract_start_date}" class="date_icon">~
|
|
<input type="text" name="contract_end_date" id="contract_end_date" style="width:90px; float:none;" autocomplete="off" value="${param.contract_end_date}" class="date_icon">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="align_r">
|
|
<label>입고지</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" name="location" id="location" style="width:150px;" autocomplete="off" value="${param.location}">
|
|
</td>
|
|
|
|
<td class="align_r">
|
|
<label>셋업지</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" name="setup" id="setup" style="width:150px;" autocomplete="off" value="${param.setup}">
|
|
</td>
|
|
|
|
<td><label for="pm_user_id">PM</label></td>
|
|
<td>
|
|
<select name="pm_user_id" id="pm_user_id" style="" class="select2" autocomplete="off">
|
|
<option value="">선택</option>
|
|
${code_map.pm_user_id}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="contents_section1">
|
|
<div class="n_wrap2">
|
|
<div class="float_l w100" style="height: 670px;width:100%;"> <!-- 1430px고정 -->
|
|
<div class="section_title">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>프로젝트 현황
|
|
|
|
<div class="" style="width: 400px;float: right;">
|
|
|
|
<div class="colorful-div blue-name">설계</div>
|
|
<div class="colorful-div green-name">구매</div>
|
|
<div class="colorful-div black-name">조립</div>
|
|
<div class="colorful-div purple-name">출고</div>
|
|
<div class="colorful-div red-name">셋업</div>
|
|
<button id="btnWbs" class="blue_btn2" style="margin-left:10px;" href="javascript:void(0);"> 프로젝트 일정</button>
|
|
<button id="btnGChart" class="blue_btn2" style="margin-left:10px; height:20px;" href="javascript:void(0);"> G-Chart</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="tableBox1 sch_table_wrap " style="height: 95%;width:1702px" border: 1px solid #5e5e5e; ">
|
|
|
|
<!-- 오늘 세로선 -->
|
|
<div class="divTodayVline" id="divTodayVline" style="min-height:510px;display:none;position:absolute;border:2px dotted;border-left:none; top:70px;left:730px; width:0.1px; height:100%; border-color:orange;/* background:orange;color:orange; */ z-index;999"></div>
|
|
|
|
<table class="n_table sch_table" id="tableProject">
|
|
<colgroup>
|
|
<col width="30px">
|
|
<col width="97px">
|
|
<col width="55px">
|
|
<col width="77px">
|
|
<col width="*">
|
|
<col width="50px">
|
|
|
|
<col width="67px">
|
|
<col width="35px">
|
|
<col width="35px">
|
|
<col width="35px">
|
|
<col width="35px">
|
|
<col width="35px">
|
|
|
|
<c:forEach begin="${1}" end="${ganttTotalCnt}" var="seq" varStatus="status">
|
|
<col width="${ganttTdWidth}px">
|
|
</c:forEach>
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th rowspan="2">선택</th>
|
|
<th colspan="5">프로젝트 정보</th>
|
|
<th colspan="6">진척율(D)</th>
|
|
<th colspan="${ganttTotalCnt == 36 ? 12 : 6}"><div class="block_1"> ${yyyyPre}년</div></th>
|
|
<th colspan="12"><div class="block_2">${yyyy}년</div></th>
|
|
<th colspan="${ganttTotalCnt == 36 ? 12 : 6}"><div class="block_3">${yyyyNext}년</div></th>
|
|
</tr>
|
|
<tr class="sub_thead">
|
|
<th>고객사</th>
|
|
<th>제품구분</th>
|
|
<th>프로젝트번호</th>
|
|
<th>프로젝트명</th>
|
|
<th>제작공장</th>
|
|
|
|
<th>요청납기일</th>
|
|
<th>설계</th>
|
|
<th>구매</th>
|
|
<th>조립</th>
|
|
<th>셋업</th>
|
|
<!--
|
|
<th>단계</th>
|
|
-->
|
|
<th>상태</th>
|
|
|
|
<c:if test="${ganttTotalCnt == 36}">
|
|
<th colspan="3">1분기</th>
|
|
<th colspan="3">2분기</th>
|
|
</c:if>
|
|
<th colspan="3">3분기</th>
|
|
<th colspan="3">4분기</th>
|
|
<!-- 올해 -->
|
|
<th colspan="3">1분기</th>
|
|
<th colspan="3">2분기</th>
|
|
<th colspan="3">3분기</th>
|
|
<th colspan="3">4분기</th>
|
|
|
|
<th colspan="3">1분기</th>
|
|
<th colspan="3">2분기</th>
|
|
<c:if test="${ganttTotalCnt == 36}">
|
|
<th colspan="3">3분기</th>
|
|
<th colspan="3">4분기</th>
|
|
</c:if>
|
|
|
|
</thead>
|
|
<tbody id="tbodyProject">
|
|
<c:choose>
|
|
<c:when test="${!empty projectList}">
|
|
<c:forEach var="info" items="${projectList}" varStatus="status">
|
|
<tr style="" class="p1 trProject highlighted"> <!-- background-color:#EFEFEF -->
|
|
<td rowspan="" title="${info.CONCEPT_OBJID}"><input type="radio" value="${info.OBJID}" name="ckBoxProject" data-objId="${info.OBJID}" data-CATEGORY_CD="${info.CATEGORY_CD}" data-CUR_TYPE="${info.CUR_TYPE}"></td>
|
|
<td rowspan="" title="${info.CUSTOMER_NAME}" style="height:15px !important">${info.CUSTOMER_NAME}</td>
|
|
<td rowspan="" title="${info.PRODUCT_NAME}">${info.PRODUCT_NAME}</td>
|
|
<td rowspan="" title="${info.PROJECT_NO}" ><a href="#" onclick="openProjectFormPopUp('${info.OBJID}')" class="p_name">${info.PROJECT_NO}</a></td>
|
|
<td rowspan="" title="${info.PROJECT_NAME}" class="align_l">${info.PROJECT_NAME}</td>
|
|
|
|
<td rowspan="" title="${info.MANUFACTURE_PLANT_NAME}">${info.MANUFACTURE_PLANT_NAME}</td>
|
|
<td rowspan="" title="${info.REQ_DEL_DATE}">${info.REQ_DEL_DATE}</td>
|
|
|
|
<td rowspan="" title="${info.DESIGN_RATETOTAL}">${info.DESIGN_RATETOTAL}</td>
|
|
<td rowspan="" title="${info.PURCHASE_RATETOTAL}">${info.PURCHASE_RATETOTAL}</td>
|
|
<td rowspan="" title="${info.PRODUCE_RATETOTAL}">${info.PRODUCE_RATETOTAL}</td>
|
|
<td rowspan="" title="${info.SETUP_RATETOTAL}">${info.SETUP_RATETOTAL}</td>
|
|
|
|
<!-- 상태 -->
|
|
<c:choose>
|
|
<c:when test="${info.DESIGN_LATE_CNT > 0 or info.PURCHASE_LATE_CNT > 0 or info.PRODUCE_LATE_CNT > 0 or info.SETUP_LATE_CNT > 0}">
|
|
<td class=><div class="red-ball"/></td>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<td class=><div class="green-ball"/></td>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
|
|
<td rowspan="" colspan="${ganttTotalCnt}" class="ganttTd">
|
|
<div class="gantt"><div class="ganttLine p1 p1${info.OBJID}" style="display:none;width:0px;/*width: 100px; margin-left: 0px; */"></div></div>
|
|
<div class="gantt"><div class="ganttLine p2 p2${info.OBJID}" style="display:none;width:0px;/*width: 100px; margin-left: 80px; */"></div></div>
|
|
<div class="gantt"><div class="ganttLine p3 p3${info.OBJID}" style="display:none;width:0px;/*width: 200px; margin-left: 150px;*/"></div></div>
|
|
<div class="gantt"><div class=" p4 p4${info.OBJID}" style="display:none;width:0px;/*width: 70px; margin-left: 350px;*/"></div></div>
|
|
<div class="gantt"><div class="ganttLine p5 p5${info.OBJID}" style="display:none;width:0px;/*width: 50px; margin-left: 420px;*/"></div></div>
|
|
</td>
|
|
|
|
</tr>
|
|
</c:forEach>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<tr>
|
|
<td colspan="48" align="center">조회된 데이터가 없습니다.</td>
|
|
</tr>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<%-- <%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %> --%>
|
|
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</body>
|
|
</html> |