2380 lines
97 KiB
Plaintext
2380 lines
97 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
|
<%@ page import="com.pms.common.utils.*"%>
|
|
|
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
|
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
|
|
|
<%@ page import="java.util.*" %>
|
|
<%@include file= "/init.jsp" %>
|
|
|
|
<c:set var="now" value="<%=new java.util.Date() %>"/>
|
|
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
|
|
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title><%=Constants.SYSTEM_NAME%></title>
|
|
|
|
<%--@include file= "/WEB-INF/view/project/projectCommon.jsp" --%>
|
|
|
|
<link rel="stylesheet" href="/css/basicDash.css">
|
|
<link rel="stylesheet" href="/css/all.min.css">
|
|
<script src="/js/all.min.js"></script>
|
|
<!--
|
|
<link href="/js/timeline/jtimeline.css" rel="stylesheet" type="text/css">
|
|
<script type="text/javascript" src="/js/timeline/jtimeline.js"></script>
|
|
-->
|
|
<link href="/js/googlechart/xxx.css" rel="stylesheet" />
|
|
<script type="text/javascript" src="/js/googlechart/loader.js"></script>
|
|
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
|
|
|
<style>
|
|
.section_title > div {
|
|
line-height: 20px !important;
|
|
}
|
|
.sch_table tr td {
|
|
height: 50px !important;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
|
|
$(document).ready(function() {
|
|
// 컨트롤러에서 전달받은 데이터
|
|
var exchangeRates = JSON.parse('${exchangeRatesJson}');
|
|
var currentDate = "${currentDate}";
|
|
var apiError = "${apiError}"; // 서버에서 전달한 오류 정보
|
|
|
|
console.log('API 응답:', exchangeRates);
|
|
console.log('현재 날짜:', currentDate);
|
|
console.log('API 오류:', apiError);
|
|
|
|
if (apiError) {
|
|
// 오류 메시지 표시
|
|
$("#errorMessage").text("환율 정보를 불러오는 데 문제가 발생했습니다: " + apiError);
|
|
} else if (Object.keys(exchangeRates).length === 0) {
|
|
$("#errorMessage").text("환율 정보를 불러올 수 없습니다.");
|
|
} else {
|
|
|
|
$("#DATE").text(currentDate);
|
|
|
|
// 통화별 환율 정보 설정
|
|
function setExchangeRate(currency, elementId) {
|
|
var rate = exchangeRates[currency];
|
|
if (rate) {
|
|
console.log(currency + ' 환율:', rate);
|
|
$("#" + elementId).text(numberWithCommas(rate));
|
|
}
|
|
}
|
|
|
|
setExchangeRate("USD", "USD");
|
|
setExchangeRate("EUR", "EUR");
|
|
setExchangeRate("JPY(100)", "JPY");
|
|
setExchangeRate("CNH", "CNY");
|
|
setExchangeRate("THB", "THB");
|
|
setExchangeRate("HKD", "HKD");
|
|
}
|
|
});
|
|
function numberWithCommas(x) {
|
|
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
}
|
|
|
|
|
|
google.charts.load('current', {'packages':['corechart']});
|
|
|
|
google.charts.setOnLoadCallback(drawChart1);
|
|
google.charts.setOnLoadCallback(drawChart2);
|
|
google.charts.setOnLoadCallback(drawChart3);
|
|
|
|
//google.charts.load('current', {'packages':['bar']});
|
|
google.charts.load('current', {'packages':['corechart']});
|
|
|
|
function drawChart1() {
|
|
var data = google.visualization.arrayToDataTable([
|
|
['Year', '영업목표(억원)', '수주금액(억원)', '달성율(%)'],
|
|
['${yearGoalInfoMap2.YEAR}', ${yearGoalInfoMap2.PRICE}, ${yearGoalInfoMap2.CONTRACT_COST_YEAR}, ${yearGoalInfoMap2.GOAL_RATE}],
|
|
['${yearGoalInfoMap1.YEAR}', ${yearGoalInfoMap1.PRICE}, ${yearGoalInfoMap1.CONTRACT_COST_YEAR}, ${yearGoalInfoMap1.GOAL_RATE}],
|
|
['${yearGoalInfoMap.YEAR}', ${yearGoalInfoMap.PRICE}, ${yearGoalInfoMap.CONTRACT_COST_YEAR}, ${yearGoalInfoMap.GOAL_RATE}]
|
|
]);
|
|
|
|
var options = {
|
|
title: '■ 년도별 영업현황' //{ position: 'top', title:'영업현황'}
|
|
,fontSize: 10
|
|
,legend: {position: 'right', textStyle: {color: 'black', fontSize: 8.5}}
|
|
,seriesType: 'bars'
|
|
,series: {2: {type: 'line'}}
|
|
,chartArea: {left:40,top:40,width:'85%',height:'75%'}
|
|
};
|
|
|
|
var chart = new google.visualization.ComboChart(document.getElementById('chartDiv1'));
|
|
chart.draw(data, options);
|
|
/* var chart = new google.charts.Bar(document.getElementById('chartDiv1'));
|
|
chart.draw(data, google.charts.Bar.convertOptions(options)); */
|
|
}
|
|
|
|
function drawChart2() {
|
|
|
|
var data = google.visualization.arrayToDataTable([
|
|
['Task', 'Hours per Day'],
|
|
|
|
<c:forEach var="item" items="${LIST}" varStatus="status">
|
|
<c:choose>
|
|
<c:when test="${empty item.YEAR_MONTH }">
|
|
<c:if test="${!empty moldKindCdList}">
|
|
<c:forEach var="obj2" items="${moldKindCdList}" varStatus="status">
|
|
<c:set var="contract_cnt_month" value="CONTRACT_CNT_MONTH_${obj2.CODE}" />
|
|
['${obj2.NAME}',${item[contract_cnt_month]}],
|
|
</c:forEach>
|
|
</c:if>
|
|
</c:when>
|
|
</c:choose>
|
|
</c:forEach>
|
|
]);
|
|
|
|
var options = {
|
|
title: '■ 제품별현황',
|
|
fontSize: 10,
|
|
is3D: true,
|
|
chartArea: {left:10,top:30,width:'90%',height:'70%'},
|
|
legend: {position: 'right', textStyle: {color: 'black', fontSize: 8}},
|
|
};
|
|
|
|
var chart = new google.visualization.PieChart(document.getElementById('piechart'));
|
|
chart.draw(data, options);
|
|
}
|
|
|
|
function drawChart3() {
|
|
var data = google.visualization.arrayToDataTable([
|
|
['Supply', 'CNT'],
|
|
|
|
<c:forEach var="item" items="${LISTSUPPLY}" varStatus="status">
|
|
['${item.SUPPLY_NAME}',${item.TOTAL_SUPPLY_UNIT_CNT}],
|
|
</c:forEach>
|
|
]);
|
|
|
|
var options = {
|
|
title: '■ 고객사별현황',
|
|
fontSize: 10,
|
|
is3D: true,
|
|
chartArea: {left:10,top:30,width:'87%',height:'70%'},
|
|
legend: {position: 'right', textStyle: {color: 'black', fontSize: 8}},
|
|
};
|
|
|
|
var chart = new google.visualization.PieChart(document.getElementById('piechart2'));
|
|
chart.draw(data, options);
|
|
}
|
|
</script>
|
|
|
|
<script type="text/javascript">
|
|
|
|
function mt_rand (min, max) {
|
|
var argc = arguments.length
|
|
if (argc === 0) {
|
|
min = 0
|
|
max = 2147483647
|
|
} else if (argc === 1) {
|
|
throw new Error('Warning: mt_rand() expects exactly 2 parameters, 1 given')
|
|
}
|
|
return Math.floor(Math.random() * (max - min + 1)) + min
|
|
}
|
|
function dechex (d) {
|
|
var hex = Number(d).toString(16)
|
|
hex = '000000'.substr(0, 6 - hex.length) + hex
|
|
return hex
|
|
}
|
|
|
|
function str_pad (str) {
|
|
str += ''
|
|
while (str.length < 3) {
|
|
str = str + str
|
|
}
|
|
return str
|
|
}
|
|
|
|
function random_color_part () {
|
|
// return str_pad( dechex( mt_rand( 0, 255 ) ), 2, '0', 1);
|
|
return mt_rand(0, 255)
|
|
}
|
|
|
|
function random_color () {
|
|
return 'rgb(' + random_color_part() + ',' + random_color_part() + ',' + random_color_part() + ')'
|
|
}
|
|
|
|
let $color = random_color();
|
|
// alert($color);
|
|
|
|
//google.charts.load('current', {'packages':['timeline']});
|
|
google.charts.load('current', {'packages':['bar']});
|
|
//google.charts.setOnLoadCallback(drawChart);
|
|
function drawChart() {
|
|
/*
|
|
var container = document.getElementById('chartDiv1');
|
|
var chart = new google.visualization.Timeline(container);
|
|
var dataTable = new google.visualization.DataTable();
|
|
dataTable.addColumn({ type: 'string', id: 'Position' });
|
|
dataTable.addColumn({ type: 'string', id: 'Name' });
|
|
dataTable.addColumn({ type: 'date', id: 'Start' });
|
|
dataTable.addColumn({ type: 'date', id: 'End' });
|
|
|
|
var options = {
|
|
timeline: { showBarLabel:true, height:26
|
|
//,groupByRowLabel: true
|
|
},
|
|
avoidOverlappingGridLines: false,
|
|
colors: [ 'a3d977', 'c1e4f7', 'ffbbb1', 'ff8f80', 'c92d39', 'ffdba9', 'd1bcd2', ],
|
|
legend: 'top' ,
|
|
hAxis: { format: 'yy/M', gridlines: {count: 15}
|
|
}
|
|
};
|
|
chart.draw(dataTable, options);
|
|
*/
|
|
|
|
<%--
|
|
var data = google.visualization.arrayToDataTable([
|
|
['사업부', '예상매출액(억)/Total', '예상수입금액(억)', '수익율(%)'], //, { role: 'style' }
|
|
<c:choose>
|
|
<c:when test="${!empty productProfitOdcGroupList}">
|
|
<c:forEach var="info" items="${productProfitOdcGroupList}" varStatus="status">
|
|
['${info.OPERATION_DIVISION_CODE_NAME}', ${info.PRICE_TOTAL_SHORT}, ${info.INCOME_SHORT}, ${info.FINAL_RATE}], //, random_color()
|
|
</c:forEach>
|
|
</c:when>
|
|
<c:otherwise>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<c:if test="${not empty param.operation_division_code}">
|
|
[" ", null, null, null],
|
|
[" ", null, null, null],
|
|
</c:if>
|
|
|
|
<--
|
|
['사업부', '예상매출액(억)/Total', '예상수입금액(억)', '수익율'],
|
|
['Total', '688.4', '572.6', '40.12'],
|
|
['VC사업부', '592.7', '477.0', '50.24'],
|
|
['CE사업부', '0.0', '0.0', '0.00'],
|
|
['FMS사업부', '95.6', '95.6', '33.33']
|
|
|
|
['Total', '예상매출액(억)/Total', '예상수입금액(억)', '수익율'],
|
|
['Total', 1115, 1227, 110.0],
|
|
['FMS', 1115, 1227, 110.0],
|
|
['CE', 1575, 1318, 83.7],
|
|
['VC', 1575, 1318, 83.7],
|
|
|
|
['Year', '영업목표(억원)', '수주금액(억원)', '달성율'],
|
|
['2021', 1115, 1227, 110.0],
|
|
['2022', 1575, 1318, 83.7],
|
|
['2023', 1575, 1318, 83.7],
|
|
['2024', 1575, 1318, 83.7],
|
|
//['2023', 2020, 588, 29.1]
|
|
|
|
['2023', '${resultMap.YEAR_GOAL_PRICE}', '${resultMap.PRICE_OK_SHORT}', '${resultMap.GOAL_RATE}']
|
|
]);
|
|
--%>
|
|
|
|
/*
|
|
var data = new google.visualization.DataTable();
|
|
data.addColumn('string', 'Category');
|
|
data.addColumn('number', 'Series 1');
|
|
data.addColumn('number', 'Series 2');
|
|
data.addRows([
|
|
//['A', {v: 20, f: '20', style: 'color: red;'}, {v: 30, f: '30', style: 'color: blue;'}],
|
|
//['B', {v: 40, f: '40', style: 'color: green;'}, {v: 15, f: '15', style: 'color: orange;'}],
|
|
//['C', {v: 10, f: '10', style: 'color: purple;'}, {v: 25, f: '25', style: 'color: pink;'}],
|
|
['D', { v: 20, f: '20', p: { style: 'color: red;' } }, { v: 30, f: '30', p: { style: 'color: blue;' } }],
|
|
['E', { v: 40, f: '40', p: { style: 'color: green;' } }, { v: 15, f: '15', p: { style: 'color: orange;' } }],
|
|
['F', { v: 10, f: '10', p: { style: 'color: purple;' } }, { v: 25, f: '25', p: { style: 'color: pink;' } }]
|
|
]);
|
|
*/
|
|
|
|
var options = {
|
|
bar: {
|
|
groupWidth: '80%', maxWidth: '20'
|
|
//groupWidth: 20
|
|
}
|
|
//,barWidth: 20
|
|
//bar: { width: '20' }
|
|
<%--
|
|
chart: {
|
|
title: '' //{ position: 'top', title:'영업현황'}
|
|
,legend: { position: 'top', maxLines: 3 }
|
|
//subtitle: 'Sales, Expenses, and Profit: 2014-2017',
|
|
/*
|
|
,axes: {
|
|
x: {
|
|
0: { side: 'top', label: 'White to move'} // Top x-axis.
|
|
}
|
|
}
|
|
*/
|
|
},
|
|
--%>
|
|
/*
|
|
bars: 'vertical',
|
|
bars: 'horizontal', // Required for Material Bar Charts.
|
|
hAxis: {format: 'decimal'},
|
|
width: 600,
|
|
height: 400,
|
|
*/
|
|
,legend: { position: 'top', maxLines: 3, textStyle: {fontSize: 12} } //범례
|
|
//isStacked: 'percent',
|
|
//isStacked: true
|
|
//,colors: ['red','green', 'purple', 'sky','blue','pink']
|
|
//,vAxis: {title: 'Year', titleTextStyle: {color: 'red'}} //세로축
|
|
/*
|
|
hAxis: { //가로축
|
|
minValue: 0,
|
|
ticks: [0, .3, .6, .9, 1]
|
|
},
|
|
*/
|
|
//,series: [{color: 'sky', visibleInLegend: true}, {color: 'red', visibleInLegend: false}]
|
|
//,series: { 0: {color: 'pink'}, 1: {color: 'lightgray'} }
|
|
/*
|
|
series: {
|
|
0: { color: '#a561bd' },
|
|
1: { color: '#c784de' },
|
|
2: { color: '#f1ca3a' },
|
|
3: { color: '#2980b9' },
|
|
4: { color: '#e67e22' }
|
|
}
|
|
height :260,
|
|
width :'100%',
|
|
legend: { position: "right" },
|
|
isStacked: false,
|
|
tooltip:{textStyle : {fontSize:32}, showColorCode : false},
|
|
animation: { //차트가 뿌려질때 실행될 애니메이션 효과
|
|
startup: true,
|
|
duration: 1000,
|
|
easing: 'linear' },
|
|
annotations: {
|
|
textStyle: {
|
|
fontSize: 35,
|
|
bold: false,
|
|
italic: true,
|
|
color: '#871b47',
|
|
auraColor: '#d799ae',
|
|
opacity: 1.8
|
|
}
|
|
}
|
|
'colors' => array('#396', 'darkorange'), // 바 색상
|
|
*/
|
|
};
|
|
|
|
var chart = new google.charts.Bar(document.getElementById('chartDiv1'));
|
|
//chart.draw(data, options);
|
|
chart.draw(data, google.charts.Bar.convertOptions(options));
|
|
}
|
|
|
|
/* function afterDraw() {
|
|
var g = document.getElementsByTagName("svg")[0].getElementsByTagName("g")[1];
|
|
document.getElementsByTagName("svg")[0].parentNode.style.top = '40px';
|
|
document.getElementsByTagName("svg")[0].style.overflow = 'visible';
|
|
var height = Number(g.getElementsByTagName("text")[0].getAttribute('y')) + 15;
|
|
g.setAttribute('transform','translate(0,-'+height+')');
|
|
g = null;
|
|
} */
|
|
</script>
|
|
|
|
<script>
|
|
$(document).ready(function(){
|
|
|
|
//parent.parent.frames["headerFS"].fn_goMyTask('-1690832312', true);
|
|
//parent.parent.frames["headerFS"].sel_menu('2002018708','-1690832312', true);
|
|
|
|
//영업목표 등록 팝업
|
|
$("#btnRegistGoal").click(function(){
|
|
fn_yearGoalPopUp("");
|
|
});
|
|
$("#btnExchange").click(function(){
|
|
fn_exchangePopUp("");
|
|
});
|
|
$("#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);
|
|
wbs_popup();
|
|
});
|
|
|
|
$(".btnManagementGuideRegistPre,.btnManagementGuideCancel").click(function(){
|
|
$(".btnManagementGuideRegistPre").toggle();
|
|
$(".btnManagementGuideRegist").toggle();
|
|
$(".btnManagementGuideCancel").toggle();
|
|
$("#managementGuideTxt").toggle();
|
|
$("#managementGuide").toggle();
|
|
});
|
|
$(".btnManagementGuideRegist").click(function(){
|
|
$(".btnManagementGuideRegistPre").toggle();
|
|
$(".btnManagementGuideRegist").toggle();
|
|
$(".btnManagementGuideCancel").toggle();
|
|
$("#managementGuideTxt").toggle();
|
|
$("#managementGuide").toggle();
|
|
fn_editManagementGuide();
|
|
});
|
|
|
|
$("#btnSearch").click(function(){
|
|
fn_search();
|
|
});
|
|
|
|
//엔터 조회
|
|
$("input").keyup(function(e){
|
|
if(e.keyCode == 13){
|
|
fn_search();
|
|
}
|
|
});
|
|
|
|
//$("#receive_order_year").change(function(){
|
|
$("#Year").change(function(){
|
|
//var params = "?operation_division_code="+$("#operation_division_code").val()+"&Year="+$("#Year").val();
|
|
var url = "/dashboard/dashboard.do?"+$("#form1").serialize();
|
|
//window.open(url, "", "width=550, height=300");
|
|
window.location = url;
|
|
});
|
|
//사업부별 조회
|
|
$("#operation_division_code").change(function(){
|
|
//var params = "?operation_division_code="+$("#operation_division_code").val()+"&Year="+$("#Year").val();
|
|
var url = "/dashboard/dashboard.do?"+$("#form1").serialize();
|
|
//window.open(url, "", "width=550, height=300");
|
|
window.location = url;
|
|
});
|
|
//생산공장
|
|
$("#oem_factory").change(function(){
|
|
//var params = "?operation_division_code="+$("#operation_division_code").val()+"&Year="+$("#Year").val();
|
|
var url = "/dashboard/dashboard.do?"+$("#form1").serialize();
|
|
//window.open(url, "", "width=550, height=300");
|
|
window.location = url;
|
|
});
|
|
|
|
//지시사항이행관리
|
|
$("#btnInstructionMng").click(function(e){
|
|
var projectObjId = $('input[name=ckBoxProject]:checked').val();
|
|
fn_openInstructionMngListPopUp(projectObjId);
|
|
});
|
|
$("#btnInstructionMng2").click(function(e){
|
|
var projectObjId = $('input[name=ckBoxProject]:checked').val();
|
|
fn_openInstructionMngListPopUp2(projectObjId);
|
|
});
|
|
|
|
$("#btnInvestmentPlan").click(function(e){
|
|
var projectObjId = $('input[name=ckBoxProject]:checked').val();
|
|
|
|
if("" != projectObjId){
|
|
fn_openInvestmentPlanCostFormPopUp(projectObjId);
|
|
}else{
|
|
alert("선택된 대상이 없습니다.");
|
|
}
|
|
});
|
|
|
|
//제품 선택 시
|
|
$("input[name=ckBoxProfit]").click(function(e){
|
|
var projectObjId = $('input[name=ckBoxProfit]:checked').val();
|
|
fn_getCostList(projectObjId);
|
|
//$("#costListAreaCurType").empty();
|
|
//$("#costListAreaCurType").text(curType);
|
|
});
|
|
|
|
//프로젝트 현황 row 클릭시 프로젝트 선택되게
|
|
/* $(".trProject").on("click", function(e){
|
|
//$("input[name=ckBoxProject]").attr("checked", ""); //reset
|
|
//$(this).find("input[name=ckBoxProject]").attr("checked", true); //default 처음건 선택
|
|
$(this).find("input[name=ckBoxProject]").trigger("click");
|
|
//alert('11');
|
|
}); */
|
|
|
|
//프로젝트 선택 시
|
|
/* $("input[name=ckBoxProject]").on("click change", function(e){ */
|
|
$("#project_no").change(function(){
|
|
//alert('22');
|
|
//var curType = $('input[name=ckBoxProject]:checked').attr("data-CUR_TYPE");
|
|
//e.stopPropagation(); // 이벤트 전파 차단
|
|
var projectObjId = $(this).val();
|
|
var projInfo = $(this).find("option:selected").attr("data-proj_info");
|
|
var reqDelDate = $(this).find("option:selected").attr("data-req_del_date");
|
|
//$(".highlighted").removeClass("highlighted");
|
|
//$(this).parent().parent().addClass("highlighted");
|
|
|
|
_startLoading();
|
|
//fn_getProblemList(projectObjId);
|
|
//fn_getIssueList(projectObjId);
|
|
fn_getProjectIssueStatusList(projectObjId);
|
|
fn_getProjectCostStatusList(projectObjId);
|
|
fn_getProjectProgressStatusList(projectObjId);
|
|
updateProjectDetail(projInfo, reqDelDate);
|
|
//fn_getCostList(projectObjId);
|
|
//fn_getProfitCostList(projectObjId, "입찰가", "biddingListArea");
|
|
//fn_getProfitCostList(projectObjId, "정단가", "unitPriceListArea");
|
|
//$("#costListAreaCurType").empty();
|
|
//$("#costListAreaCurType").text(curType);
|
|
|
|
_endLoading();
|
|
});
|
|
|
|
$(".trProject").eq(0).trigger("click");
|
|
//$("input[name=ckBoxProject]").eq(0).attr("checked", true); //default 처음건 선택
|
|
//$("input[name=ckBoxProject]").eq(0).trigger("click");
|
|
|
|
/*
|
|
$("#SEARCH_CUSTOMER_OBJID").change(function(){
|
|
$("#SEARCH_CAR_OBJID").empty();
|
|
if("" != this.value){
|
|
fnc_getCarList("", this.value, "SEARCH_CAR_OBJID","${param.SEARCH_CAR_OBJID}");
|
|
}
|
|
|
|
fn_getProjectNoList("SEARCH_PROJECT_OBJID", "${param.SEARCH_PROJECT_OBJID}");
|
|
|
|
});
|
|
|
|
$("#SEARCH_PRODUCT_GROUP_CODE").change(function(){
|
|
$("#SEARCH_PRODUCT_OBJID").empty();
|
|
if("" != this.value){
|
|
fnc_getCodeListAppend(this.value,"SEARCH_PRODUCT_OBJID","${param.SEARCH_PRODUCT_OBJID}");
|
|
}
|
|
|
|
fn_getProjectNoList("SEARCH_PROJECT_OBJID", "${param.SEARCH_PROJECT_OBJID}");
|
|
});
|
|
|
|
if("" != "${param.SEARCH_CUSTOMER_OBJID}"){
|
|
fnc_getCarList("", "${param.SEARCH_CUSTOMER_OBJID}", "SEARCH_CAR_OBJID","${param.SEARCH_CAR_OBJID}");
|
|
}else{
|
|
$("#SEARCH_CAR_OBJID").empty();
|
|
}
|
|
|
|
if("" != "${param.SEARCH_PRODUCT_GROUP_OBJID}"){
|
|
fnc_getCodeListAppend("${param.SEARCH_PRODUCT_GROUP_OBJID}","SEARCH_PRODUCT_OBJID","${param.SEARCH_PRODUCT_OBJID}");
|
|
}else{
|
|
$("#SEARCH_PRODUCT_OBJID").empty();
|
|
}
|
|
*/
|
|
|
|
//고객사 목록 조회
|
|
fnc_getOEMList("oem_objid", "${param.oem_objid}");
|
|
fnc_getCarList("", "", "car_objid", "${param.car_objid}");
|
|
|
|
//고객사별 차종 목록 조회
|
|
$("#oem_objid").change(function(){
|
|
$("#car_objid").empty();
|
|
fnc_getCarList("", this.value, "car_objid","");
|
|
});
|
|
|
|
//fnc_getProductGroupList("product_family", "${param.product_family}");
|
|
//fnc_getProductList("${param.product_family}", "product_objid","${param.product_objid}");
|
|
|
|
$("#product_family").change(function(){
|
|
if("" != this.value){
|
|
//fnc_getProductList(this.value, "product_objid","");
|
|
}
|
|
});
|
|
|
|
$(".goAppr").click(function(){
|
|
parent.parent.frames["headerFS"].fn_goMyTaskMyApproval();
|
|
});
|
|
$(".goProject").click(function(){
|
|
parent.parent.frames["headerFS"].fn_goMyTaskMyProject();
|
|
});
|
|
$(".goProblem").click(function(){
|
|
parent.parent.frames["headerFS"].fn_goMyTaskMyProblem();
|
|
});
|
|
$(".goMyTask").click(function(){
|
|
parent.parent.frames["headerFS"].fn_goMyTaskMyTask()();
|
|
});
|
|
|
|
$('.select2').select2();
|
|
|
|
//fn_drawGantt();
|
|
/*
|
|
$(function(){
|
|
$('.jtimeline-demo').jTimeline();
|
|
});
|
|
|
|
$('.jtimeline-demo').jTimeline({
|
|
// pixels per second
|
|
resolution: 50000,
|
|
// minimum spacing between events
|
|
minimumSpacing: 50,
|
|
// scrolling (translateX) step size
|
|
step: 200,
|
|
// character for left arrow
|
|
leftArrow: "←",
|
|
// character for right arrow
|
|
rightArrow: "→",
|
|
});
|
|
*/
|
|
//fn_getIssueList("");
|
|
//fn_getProblemList("");
|
|
//fn_getMyTaskList("");
|
|
//fn_getCostList("");
|
|
|
|
$("#project_no option:eq(1)").prop("selected", true).trigger("change");
|
|
});
|
|
</script>
|
|
<script>
|
|
|
|
|
|
|
|
<c:set var="ganttTotalWidth" value="1100"/>
|
|
/*
|
|
<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('b1','${info.OBJID}','${info.ACT_START}','${info.ACT_END}'); */ //설계
|
|
/* fn_drawGanttRow('b2','${info.OBJID}','${info.PURCHASE_ACT_START}','${info.PURCHASE_ACT_END}'); //구매
|
|
fn_drawGanttRow('b3','${info.OBJID}','${info.PRODUCE_ACT_START}','${info.PRODUCE_ACT_END}'); //조립
|
|
fn_drawGanttRow('b4','${info.OBJID}','${info.REQ_DEL_DATE}','${info.REQ_DEL_DATE}'); //출고
|
|
fn_drawGanttRow('b5','${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 = 0;
|
|
var days = 30.4;
|
|
var tdWidth = ${ganttTdWidth}; //20 start용
|
|
var tdWidth2 = ${ganttTdWidth}; //X 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;
|
|
}
|
|
|
|
// yyyyNext의 6월 30일 설정
|
|
var yyyyNextMidYear = new Date(yyyyNext, 5, 30); // 6월 30일 (0-based month, 따라서 5가 6월)
|
|
|
|
// START_DATE와 END_DATE를 Date 객체로 변환
|
|
var startDateObj = new Date(START_DATE);
|
|
var endDateObj = new Date(END_DATE);
|
|
|
|
// 두 날짜 모두 yyyyNext의 6월 30일보다 큰 경우 요소를 숨김
|
|
if(startDateObj > yyyyNextMidYear && endDateObj > yyyyNextMidYear) {
|
|
$("." + classPrefix + OBJID).hide();
|
|
return;
|
|
}
|
|
|
|
// 기존의 날짜 조정 로직
|
|
if(endDateObj > yyyyNextMidYear) {
|
|
END_DATE = yyyyNext + '-06-30';
|
|
}
|
|
|
|
if(startDateObj > yyyyNextMidYear) {
|
|
START_DATE = yyyyNext + '-06-30';
|
|
}
|
|
|
|
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 -= 4; //위치 보정
|
|
|
|
if(classPrefix == 'b4') //출고 다이아몬드모양
|
|
xStart -= 5; //위치 보정
|
|
|
|
xStart = xStart - baseXPosition;
|
|
if(xStart < baseXPosition) xStart = baseXPosition;
|
|
//alert("baseXPosition:"+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 = 725;
|
|
var todayLeftMargin = 90;
|
|
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 == 'b4'){ //출고 다이아몬드모양
|
|
$("."+classPrefix+OBJID).addClass('diamond');
|
|
$("."+classPrefix+OBJID).parent().removeClass('gantt');
|
|
//var jB3 = $("."+classPrefix+OBJID).parent().parent().find('.b3');
|
|
//var b3Display = jB3.attr("display");
|
|
/* if(jB3 && jB3.is(':visible')){ //조립있으면 같은 라인 표시
|
|
var gHeight = jB3.height();
|
|
$("."+classPrefix+OBJID).css('margin-top', -gHeight); //-12px
|
|
} */
|
|
}
|
|
}
|
|
|
|
function fn_editManagementGuide(){
|
|
if(confirm("수정하시겠습니까?")){
|
|
$.ajax({
|
|
url:"/dashboard/mergeManagementGuideInfo.do",
|
|
type:"POST",
|
|
data: {"YYYY_Q":'${YYYY_Q}', "CONTENTS":$("#managementGuide").val()},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
Swal.fire(data.msg);
|
|
$("#managementGuideTxt").html($("#managementGuide").val());
|
|
if(data.result){
|
|
//fn_search();
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function fn_projectCurTypeFormPopUp(){
|
|
var projectObjId = $('input[name=ckBoxProject]:checked').val();
|
|
var hiddenForm = document.hiddenForm;
|
|
var url = "/dashboard/projectCurTypeFormPopUp.do";
|
|
|
|
var target = "projectCurTypeFormPopUp";
|
|
window.open(url,target,"width=600, height=700, menubars=no, scrollbars=yes, resizable=yes");
|
|
|
|
hiddenForm.action = url;
|
|
hiddenForm.PROJECT_OBJID.value = projectObjId;
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit();
|
|
}
|
|
|
|
function problemMngPopup(objId,actionType){
|
|
var hiddenForm = document.hiddenForm;
|
|
//var url = "/problemMng/problemMngFormPopUp.do";
|
|
url = "/problemMng/problemMngDetailPopUp.do";
|
|
|
|
if("" != objId){
|
|
url = "/problemMng/problemMngDetailPopUp.do";
|
|
}
|
|
|
|
var target = "problemMngPopup";
|
|
window.open(url,target,"width=1400, height=800, menubars=no, scrollbars=yes, resizable=yes");
|
|
|
|
hiddenForm.action = url;
|
|
hiddenForm.OBJID.value = objId;
|
|
hiddenForm.actionType.value = actionType;
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit();
|
|
}
|
|
|
|
function fn_getProjectNoList(selectboxId,selectedVal){
|
|
$.ajax({
|
|
url:"/common/getProjectNoList.do",
|
|
type:"POST",
|
|
data:$("#form1").serialize(),
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
|
|
var resultList = data;
|
|
$("#"+selectboxId).empty();
|
|
$("#"+selectboxId).append("<option value=''>선택</option>");
|
|
if(0 < resultList.length){
|
|
for (var i = 0; i < resultList.length; i++) {
|
|
var codeId = resultList[i].CODE_ID;
|
|
var codeName = resultList[i].CODE_NAME;
|
|
$("#"+selectboxId).append("<option value='"+codeId+"'>"+codeName+"</option>");
|
|
}
|
|
$("#"+selectboxId).val(selectedVal);
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
|
|
function fn_search(){
|
|
var form = document.form1;
|
|
form.action = "/dashboard/dashboard.do";
|
|
form.submit();
|
|
}
|
|
|
|
|
|
//프로젝트 선택 시 이슈현황 정보를 가져온다.
|
|
function fn_getProjectIssueStatusList(projectObjId){
|
|
var appendText = "";
|
|
var listCnt = 0;
|
|
$("#issueStatusListArea").empty();
|
|
if("" != projectObjId){
|
|
$.ajax({
|
|
url:"/dashboard/getProjectIssueStatusList.do",
|
|
type:"POST",
|
|
data:{"SEARCH_PROJECT_OBJID":projectObjId},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
var resultList = data;
|
|
//listCnt = resultList.length;
|
|
//if(0 < resultList.length){
|
|
if(resultList && 0 < resultList.length){
|
|
var ISSUE_CNT = fnc_checkNull(resultList[0].ISSUE_CNT);
|
|
var COMP_CNT = fnc_checkNull(resultList[0].COMP_CNT);
|
|
var ISSUE_RATE = fnc_checkNull(resultList[0].ISSUE_RATE);
|
|
var MISS_CNT = fnc_checkNull(resultList[0].MISS_CNT);
|
|
/* 가로표시
|
|
appendText += "<tr>";
|
|
appendText += " <td style='font-size:13px;'><b>"+ISSUE_CNT+" </b></td>";
|
|
appendText += " <td style='font-size:13px;'><b>"+COMP_CNT+" </b></td>";
|
|
appendText += " <td style='font-size:13px;'><b>"+ISSUE_RATE+"</b></td>";
|
|
appendText += " <td style='font-size:13px;'><b>"+MISS_CNT+" </b></td>";
|
|
appendText += "</tr>";
|
|
*/
|
|
|
|
//세로표시
|
|
appendText += "<tr>";
|
|
appendText += " <td style='font-size:13px;' class='input_title_b'><b>발생건수</b></td>";
|
|
appendText += " <td style='font-size:13px;'><b>"+numberWithCommas(ISSUE_CNT)+" </b></td>";
|
|
appendText += "</tr>";
|
|
appendText += "<tr>";
|
|
appendText += " <td style='font-size:13px;' class='input_title_b'><b>조치건수</b></td>";
|
|
appendText += " <td style='font-size:13px;'><b>"+numberWithCommas(COMP_CNT)+" </b></td>";
|
|
appendText += "</tr>";
|
|
appendText += "<tr>";
|
|
appendText += " <td style='font-size:13px;' class='input_title_b'><b>조치율(%)</b></td>";
|
|
appendText += " <td style='font-size:13px;'><b>"+ISSUE_RATE+" </b></td>";
|
|
appendText += "</tr>";
|
|
appendText += "<tr>";
|
|
appendText += " <td style='font-size:13px;' class='input_title_b'><b>미결건수</b></td>";
|
|
appendText += " <td style='font-size:13px;'><b>"+numberWithCommas(MISS_CNT)+" </b></td>";
|
|
appendText += "</tr>";
|
|
}else{
|
|
appendText += "<tr>";
|
|
appendText += " <td colspan='4'>조회된 내용이 없습니다.</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
//$("#issueListCnt").empty();
|
|
//$("#issueListCnt").append("<span>이슈현황 : 총 "+listCnt+"건 </span>");
|
|
$("#issueStatusListArea").append(appendText);
|
|
}
|
|
|
|
//프로젝트 선택 시 투입원가현황 정보를 가져온다.
|
|
function fn_getProjectCostStatusList(projectObjId){
|
|
var appendText = "";
|
|
var listCnt = 0;
|
|
$("#costStatusListArea").empty();
|
|
if("" != projectObjId){
|
|
$.ajax({
|
|
url:"/dashboard/getProjectCostTotalStatusList.do",
|
|
type:"POST",
|
|
data:{"PROJECT_NO":projectObjId},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
var resultList = data;
|
|
//listCnt = resultList.length;
|
|
//console.log(resultList);
|
|
if(resultList){ // && 0 < resultList.length
|
|
//for(var i=0; i<resultList.length; i++){
|
|
var CONTRACT_PRICE = fnc_checkNull(resultList[0].CONTRACT_PRICE);
|
|
|
|
var TOTAL_COST_GOAL = Number(fnc_checkNullDefaultValue(resultList[0].TOTAL_COST_GOAL, '0'));
|
|
var TOTAL_COST_ACTUAL = Number(fnc_checkNullDefaultValue(resultList[0].TOTAL_COST_ACTUAL, '0'));
|
|
var TOTAL_INPUT_RATE = fnc_checkNullDefaultValue(resultList[0].TOTAL_INPUT_RATE, '0');
|
|
|
|
var TOTAL_COST_GOAL_01 = parseFloat((TOTAL_COST_GOAL*0.1).toFixed(2));
|
|
var TOTAL_COST_ACTUAL_01 = parseFloat((TOTAL_COST_ACTUAL*0.1).toFixed(2));
|
|
|
|
var MATERIAL_COST_GOAL = Number(fnc_checkNullDefaultValue(resultList[0].MATERIAL_COST_GOAL, '0'));
|
|
var ACCRUAL_MATERIAL_COST = Number(fnc_checkNullDefaultValue(resultList[0].ACCRUAL_MATERIAL_COST, '0'));
|
|
var MATERIAL_COST_GOAL_RATE = fnc_checkNullDefaultValue(resultList[0].MATERIAL_COST_GOAL_RATE, '0');
|
|
|
|
var LABOR_COST_GOAL = Number(fnc_checkNullDefaultValue(resultList[0].LABOR_COST_GOAL, '0'));
|
|
var LABOR_COST_ACTUAL = Number(fnc_checkNullDefaultValue(resultList[0].LABOR_COST_ACTUAL, '0'));
|
|
var LABOR_INPUT_RATE = fnc_checkNullDefaultValue(resultList[0].LABOR_INPUT_RATE, '0');
|
|
|
|
var EXPENSE_COST_GOAL = Number(fnc_checkNullDefaultValue(resultList[0].EXPENSE_COST_GOAL, '0'));
|
|
var ACCRUAL_EXPENSE = Number(fnc_checkNullDefaultValue(resultList[0].ACCRUAL_EXPENSE, '0'));
|
|
var EXPENSE_RATE = fnc_checkNullDefaultValue(resultList[0].EXPENSE_RATE, '0');
|
|
|
|
var ballColor = 'green';
|
|
|
|
ballColor = ACCRUAL_MATERIAL_COST > MATERIAL_COST_GOAL ? 'red' : 'green';
|
|
appendText += "<tr>";
|
|
appendText += " <td class='align_r10' rowspan='5'>"+numberWithCommas(CONTRACT_PRICE)+"</td>";
|
|
appendText += " <td>재료비</td>";
|
|
appendText += " <td class='align_r10'>"+numberWithCommas(MATERIAL_COST_GOAL)+"</td>";
|
|
appendText += " <td class='align_r10'>"+numberWithCommas(ACCRUAL_MATERIAL_COST)+"</td>";
|
|
appendText += " <td class=''>"+numberWithCommas(MATERIAL_COST_GOAL_RATE)+"</td>";
|
|
//appendText += " <td><div class='"+ballColor+"-ball'/></td>";
|
|
//appendText += " <td>ㅇ</td>";
|
|
appendText += "</tr>";
|
|
|
|
//완료 green-ball
|
|
//지연완료 yellow-bal
|
|
//진행중 bule-ball
|
|
//지연 red-ball
|
|
//black-ball
|
|
//white-ball
|
|
var alignClass1 = 'align_r10';
|
|
var alignClass2 = 'align_r2';
|
|
var alignClass = alignClass1;
|
|
|
|
ballColor = LABOR_COST_ACTUAL > LABOR_COST_GOAL ? 'red' : 'green';
|
|
appendText += "<tr>";
|
|
appendText += " <td>노무비</td>";
|
|
appendText += " <td class='"+alignClass+"'>"+numberWithCommas(LABOR_COST_GOAL)+"</td>";
|
|
appendText += " <td class='"+alignClass+"'>"+numberWithCommas(LABOR_COST_ACTUAL)+"</td>";
|
|
appendText += " <td class=''>"+numberWithCommas(LABOR_INPUT_RATE)+"</td>";
|
|
//appendText += " <td><div class='"+ballColor+"-ball'/></td>";
|
|
appendText += "</tr>";
|
|
|
|
ballColor = ACCRUAL_EXPENSE > EXPENSE_COST_GOAL ? 'red' : 'green';
|
|
appendText += "<tr>";
|
|
appendText += " <td>경비</td>";
|
|
appendText += " <td class='"+alignClass+"'>"+numberWithCommas(EXPENSE_COST_GOAL)+"</td>";
|
|
appendText += " <td class='"+alignClass+"'>"+numberWithCommas(ACCRUAL_EXPENSE)+"</td>";
|
|
appendText += " <td class=''>"+numberWithCommas(EXPENSE_RATE)+"</td>";
|
|
//appendText += " <td><div class='"+ballColor+"-ball'/></td>";
|
|
appendText += "</tr>";
|
|
|
|
//ballColor = ACCRUAL_EXPENSE > EXPENSE_COST_GOAL ? 'red' : 'green';
|
|
var aa = (TOTAL_COST_ACTUAL_01 != 0 && TOTAL_COST_ACTUAL_01 != 0) ? (TOTAL_COST_ACTUAL_01/TOTAL_COST_GOAL_01*100).toFixed() : 0;
|
|
appendText += "<tr>";
|
|
appendText += " <td>관리비</td>";
|
|
alignClass = alignClass1; if((TOTAL_COST_GOAL_01+"").indexOf('.') > -1) alignClass = alignClass2;
|
|
appendText += " <td class='"+alignClass+"'>"+numberWithCommas(TOTAL_COST_GOAL_01)+"</td>";
|
|
alignClass = alignClass1; if((TOTAL_COST_ACTUAL_01+"").indexOf('.') > -1) alignClass = alignClass2;
|
|
appendText += " <td class='"+alignClass+"'>"+numberWithCommas(TOTAL_COST_ACTUAL_01)+"</td>";
|
|
appendText += " <td>"+( aa )+"</td>"
|
|
//appendText += " <td><div class='green-ball'/></td>";
|
|
appendText += "</tr>";
|
|
|
|
// 소계 계산
|
|
ballColor = TOTAL_COST_ACTUAL > TOTAL_COST_GOAL ? 'red' : 'green';
|
|
var price2 = MATERIAL_COST_GOAL + LABOR_COST_ACTUAL + ACCRUAL_EXPENSE;
|
|
var price3 = ACCRUAL_MATERIAL_COST + LABOR_COST_GOAL + EXPENSE_COST_GOAL;
|
|
appendText += "<tr style='background-color: #efb3b3;'>";
|
|
appendText += " <td>계</td>";
|
|
// 수주가
|
|
//appendText += " <td class='align_r10'>"+ numberWithCommas(CONTRACT_PRICE) +"</td>";
|
|
alignClass = alignClass1; if((TOTAL_COST_GOAL+TOTAL_COST_GOAL_01+"").indexOf('.') > -1) alignClass = alignClass2;
|
|
appendText += " <td class='"+alignClass+"'>"+ numberWithCommas(TOTAL_COST_GOAL+TOTAL_COST_GOAL_01) +"</td>";
|
|
alignClass = alignClass1; if((TOTAL_COST_ACTUAL+TOTAL_COST_ACTUAL_01+"").indexOf('.') > -1) alignClass = alignClass2;
|
|
appendText += " <td class='"+alignClass+"'>"+ numberWithCommas(TOTAL_COST_ACTUAL+TOTAL_COST_ACTUAL_01) +"</td>";
|
|
// 목표원가
|
|
//appendText += " <td class='align_r10'>"+ numberWithCommas(price2) +"</td>";
|
|
// 투입원가
|
|
//appendText += " <td class='align_r10'>"+ numberWithCommas(price3) +"</td>";
|
|
// 투입율
|
|
appendText += " <td>"+numberWithCommas(TOTAL_INPUT_RATE)+"</td>"
|
|
//appendText += " <td><div class='"+ballColor+"-ball'/></td>";
|
|
appendText += "</tr>";
|
|
//}
|
|
}else{
|
|
appendText += "<tr>";
|
|
appendText += " <td colspan='6'>조회된 내용이 없습니다.</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
//$("#issueListCnt").append("<span>이슈현황 : 총 "+listCnt+"건 </span>");
|
|
$("#costStatusListArea").append(appendText);
|
|
}
|
|
|
|
//프로젝트 선택 시 이슈리스트와 투자비현황 정보를 가져온다.
|
|
function fn_getIssueList(projectObjId){
|
|
var appendText = "";
|
|
var listCnt = 0;
|
|
|
|
$("#issueListArea").empty();
|
|
|
|
if("" != projectObjId){
|
|
$.ajax({
|
|
url:"/dashboard/getProjectIssueList.do",
|
|
type:"POST",
|
|
data:{"SEARCH_PROJECT_OBJID":projectObjId},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
|
|
var resultList = data;
|
|
listCnt = resultList.length;
|
|
|
|
if(0 < resultList.length){
|
|
for (var i = 0; i < resultList.length; i++) {
|
|
|
|
var objId = fnc_checkNull(resultList[i].OBJID);
|
|
var PROBLEM_NUMBER = fnc_checkNull(resultList[i].PROBLEM_NUMBER);
|
|
var stepTitle = fnc_checkNull(resultList[i].STEP_TITLE);
|
|
var problemTypeTitle = fnc_checkNull(resultList[i].PROBLEM_TYPE_TITLE);
|
|
var title = fnc_checkNull(resultList[i].TITLE);
|
|
var writerTitle = fnc_checkNull(resultList[i].WRITER_TITLE);
|
|
var measureUserTitle = fnc_checkNull(resultList[i].MEASURE_USER_TITLE);
|
|
var regdateTitle = fnc_checkNull(resultList[i].REGDATE_TITLE);
|
|
var statusTitle = fnc_checkNull(resultList[i].STATUS_TITLE);
|
|
|
|
appendText += "<tr>";
|
|
appendText += " <td>"+stepTitle+"</td>";
|
|
appendText += " <td>"+PROBLEM_NUMBER+"</td>";
|
|
appendText += " <td>"+problemTypeTitle+"</td>";
|
|
appendText += " <td>"+title+"</td>";
|
|
appendText += " <td>"+writerTitle+"</td>";
|
|
appendText += " <td>"+regdateTitle+"</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
}else{
|
|
appendText += "<tr>";
|
|
appendText += " <td colspan='6'>조회된 내용이 없습니다.</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
$("#issueListCnt").empty();
|
|
$("#issueListCnt").append("<span>이슈현황 : 총 "+listCnt+"건 </span>");
|
|
$("#issueListArea").append(appendText);
|
|
}
|
|
|
|
//프로젝트 선택 시 문제점리스트 정보를 가져온다.
|
|
function fn_getProblemList(projectObjId){
|
|
var appendText = "";
|
|
var listCnt = 0;
|
|
|
|
$("#problemListArea").empty();
|
|
|
|
//if("" != projectObjId){
|
|
$.ajax({
|
|
//url:"/dashboard/getProblemList.do",
|
|
//url:"/problemMng/getProblemMngList.do",
|
|
url:"/problemMng/getMyProblemMngStatus.do",
|
|
type:"POST",
|
|
data:{"SEARCH_PROJECT_OBJID":projectObjId,"SEARCH_TYPE":"DASHBOARD"},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
|
|
if(data && data.RESULTLIST && 0 < data.RESULTLIST.length){
|
|
var resultList = data.RESULTLIST;
|
|
listCnt = resultList.length;
|
|
|
|
for (var i = 0; i < resultList.length; i++) {
|
|
|
|
var objId = fnc_checkNull(resultList[i].OBJID);
|
|
//var operation_division_code = fnc_checkNull(resultList[i].OPERATION_DIVISION_CODE);
|
|
var PROBLEM_NUMBER = fnc_checkNull(resultList[i].PROBLEM_NUMBER);
|
|
var stepTitle = fnc_checkNull(resultList[i].STEP_TITLE);
|
|
var problemTypeTitle = fnc_checkNull(resultList[i].PROBLEM_TYPE_TITLE);
|
|
var title = fnc_checkNull(resultList[i].TITLE);
|
|
var writerTitle = fnc_checkNull(resultList[i].WRITER_TITLE);
|
|
var measureUserTitle = fnc_checkNull(resultList[i].MEASURE_USER_TITLE);
|
|
//var regdateTitle = fnc_checkNull(resultList[i].REGDATE_TITLE);
|
|
var MEASURE_DATE_TITLE = fnc_checkNull(resultList[i].MEASURE_DATE_TITLE);
|
|
var statusTitle = fnc_checkNull(resultList[i].STATUS_TITLE);
|
|
var RAISE_STATUS = resultList[i].RAISE_STATUS;
|
|
var problemType = "";
|
|
if("raiseConfirm" == RAISE_STATUS){
|
|
problemType = "measure";
|
|
}else{
|
|
problemType = "raise";
|
|
}
|
|
|
|
/*
|
|
appendText += "<tr>";
|
|
appendText += " <td>"+(i+1)+"</td>";
|
|
appendText += " <td><a href=\"javascript:problemMngPopup('"+objId+"','"+problemType+"')\" class='btnDetail' data-OBJID='${info.OBJID}'> "+PROBLEM_NUMBER+"</a></td>";
|
|
appendText += " <td>"+problemTypeTitle+"</td>";
|
|
appendText += " <td class='align_l2'>"+title+"</td>";
|
|
appendText += " <td>"+MEASURE_DATE_TITLE+"</td>";
|
|
appendText += " <td>"+statusTitle+"</td>";
|
|
appendText += "</tr>";
|
|
*/
|
|
|
|
var OEM_OBJID_NAME = fnc_checkNull(resultList[i].OEM_OBJID_NAME);
|
|
var CAR_OBJID_NAME = fnc_checkNull(resultList[i].CAR_OBJID_NAME);
|
|
var PRODUCT_FAMILY_NAME = fnc_checkNull(resultList[i].PRODUCT_FAMILY_NAME);
|
|
var PRODUCT_CNT = fnc_checkNull(resultList[i].PRODUCT_CNT);
|
|
var PRODUCT = fnc_checkNull(resultList[i].PRODUCT);
|
|
var CONTRACT_NO = fnc_checkNull(resultList[i].CONTRACT_NO);
|
|
|
|
var P_TASK_CNT = fnc_checkNull(resultList[i].P_TASK_CNT);
|
|
var P_CNT_ING = fnc_checkNull(resultList[i].P_CNT_ING);
|
|
var P_CNT_COMPLETED = fnc_checkNull(resultList[i].P_CNT_COMPLETED);
|
|
var P_CNT_DELAY = fnc_checkNull(resultList[i].P_CNT_DELAY);
|
|
var P_RATE = fnc_checkNull(resultList[i].P_RATE);
|
|
|
|
appendText += "<tr>";
|
|
appendText += " <td><a href=\"javascript:fn_projectConceptDetailPopup('"+objId+"','"+operation_division_code+"')\" class='btnDetail' data-OBJID='${info.OBJID}'> "+CONTRACT_NO+"</a></td>";
|
|
appendText += " <td>"+OEM_OBJID_NAME+"</td>";
|
|
appendText += " <td>"+CAR_OBJID_NAME+"</td>";
|
|
//appendText += " <td>"+PRODUCT_FAMILY_NAME+"</td>";
|
|
appendText += " <td>"+PRODUCT+"</td>";
|
|
|
|
//appendText += " <td class=''>"+P_TASK_CNT+"</td>";
|
|
//appendText += " <td class=''>"+P_CNT_COMPLETED+"</td>";
|
|
appendText += " <td class=''>"+P_CNT_DELAY+"</td>";
|
|
//appendText += " <td class=''>"+P_RATE+"</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
}else{
|
|
appendText += "<tr>";
|
|
appendText += " <td colspan='5'>조회된 내용이 없습니다.</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
//}
|
|
$("#problemListCnt").empty();
|
|
$("#problemListCnt").append("<span>문제점현황</span>"); // : 총 "+listCnt+"건
|
|
$("#problemListArea").append(appendText);
|
|
}
|
|
|
|
//프로젝트 선택 시 진행현황 정보를 가져온다.
|
|
function fn_getProjectProgressStatusList(projectObjId){
|
|
$("#tbodyProject").empty();
|
|
if(projectObjId === "") return;
|
|
|
|
$.ajax({
|
|
url:"/dashboard/getProjectProgressStatusList.do",
|
|
type:"POST",
|
|
data:{"project_no":projectObjId},
|
|
dataType:"json",
|
|
success:function(data){
|
|
var resultList = data;
|
|
var appendText = "";
|
|
|
|
if(resultList && resultList.length > 0){
|
|
for(var i=0; i < resultList.length; i++){
|
|
var ACT_START = fnc_checkNull(resultList[i].ACT_START);
|
|
var ACT_END = fnc_checkNull(resultList[i].ACT_END);
|
|
var PLAN_END = fnc_checkNull(resultList[i].PLAN_END);
|
|
var TASK_NAME = fnc_checkNull(resultList[i].TASK_NAME);
|
|
var RATE_TOTAL = fnc_checkNull(resultList[i].RATE_TOTAL);
|
|
var LATE_CNT = fnc_checkNull(resultList[i].LATE_CNT);
|
|
var ballColor = LATE_CNT > 0 ? 'red' : 'bule';
|
|
|
|
if(RATE_TOTAL == '100'){
|
|
ballColor = 'yellow';
|
|
}
|
|
appendText += "<tr>";
|
|
appendText += " <td class=''>"+TASK_NAME+"</td>";
|
|
appendText += " <td colspan='24' class='ganttTd'>";
|
|
appendText += " <div class='gantt'><div class='ganttLine b"+(i+1)+" b"+(i+1)+TASK_NAME+"' style='display:none;width:0px;'></div></div>";
|
|
appendText += " </td>";
|
|
appendText += " <td class=''>"+ (PLAN_END === '' ? '-' : PLAN_END) +"<br>"+ (ACT_END === '' ? '-' : ACT_END) +"</td>";
|
|
appendText += " <td class=''>"+RATE_TOTAL+"</td>";
|
|
appendText += " <td class=''><div class='"+ballColor+"-ball'/></td>";
|
|
appendText += "</tr>";
|
|
}
|
|
$("#tbodyProject").html(appendText);
|
|
|
|
// Gantt 차트 그리기
|
|
for(var i=0; i < resultList.length; i++){
|
|
fn_drawGanttRow('b'+(i+1), resultList[i].TASK_NAME, resultList[i].ACT_START, resultList[i].ACT_END);
|
|
//fn_drawGanttRow('b'+(i+1), resultList[i].TASK_NAME, '2024-01-01', '2024-12-31');
|
|
}
|
|
} else {
|
|
$("#tbodyProject").html("<tr><td colspan='12'>조회된 내용이 없습니다.</td></tr>");
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
console.error("Error fetching project progress status:", error);
|
|
$("#tbodyProject").html("<tr><td colspan='12'>데이터를 불러오는 중 오류가 발생했습니다.</td></tr>");
|
|
}
|
|
});
|
|
fn_drawGantt();
|
|
}
|
|
|
|
function fn_getMyTaskList(projectObjId){
|
|
var appendText = "";
|
|
var listCnt = 0;
|
|
|
|
$("#myTaskListArea").empty();
|
|
|
|
//if("" != projectObjId){
|
|
$.ajax({
|
|
//url:"/dashboard/getProblemList.do",
|
|
//url:"/project/getPagingProjectMyTaskList.do",
|
|
url:"/project/getProjectMyTaskStatus.do",
|
|
type:"POST",
|
|
data:{"SEARCH_PROJECT_OBJID":projectObjId},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
|
|
if(data && data.RESULTLIST && 0 < data.RESULTLIST.length){
|
|
var resultList = data.RESULTLIST;
|
|
listCnt = resultList.length;
|
|
|
|
for (var i = 0; i < resultList.length; i++) {
|
|
|
|
var objId = fnc_checkNull(resultList[i].OBJID);
|
|
var TASK_NAME = fnc_checkNull(resultList[i].TASK_NAME);
|
|
var OEM_OBJID_NAME = fnc_checkNull(resultList[i].OEM_OBJID_NAME);
|
|
var CAR_OBJID_NAME = fnc_checkNull(resultList[i].CAR_OBJID_NAME);
|
|
var PRODUCT_FAMILY_NAME = fnc_checkNull(resultList[i].PRODUCT_FAMILY_NAME);
|
|
var PRODUCT_CNT = fnc_checkNull(resultList[i].PRODUCT_CNT);
|
|
//var writerTitle = fnc_checkNull(resultList[i].WRITER_TITLE);
|
|
//var regdateTitle = fnc_checkNull(resultList[i].REGDATE_TITLE);
|
|
var TASK_START_PLAN_DATE = fnc_checkNull(resultList[i].TASK_START_PLAN_DATE);
|
|
var TASK_END_PLAN_DATE = fnc_checkNull(resultList[i].TASK_END_PLAN_DATE);
|
|
var PM_CONFIRM_STATUS = fnc_checkNull(resultList[i].PM_CONFIRM_STATUS);
|
|
var statusTitle = fnc_checkNull(resultList[i].STATUS_TITLE);
|
|
|
|
var CONTRACT_NO = fnc_checkNull(resultList[i].CONTRACT_NO);
|
|
var WBS_TASK_CNT = fnc_checkNull(resultList[i].WBS_TASK_CNT);
|
|
var WBS_CNT_ING = fnc_checkNull(resultList[i].WBS_CNT_ING);
|
|
var WBS_CNT_COMPLETED = fnc_checkNull(resultList[i].WBS_CNT_COMPLETED);
|
|
var WBS_CNT_DELAY = fnc_checkNull(resultList[i].WBS_CNT_DELAY);
|
|
var WBS_RATE = fnc_checkNull(resultList[i].WBS_RATE);
|
|
/*
|
|
appendText += "<tr>";
|
|
appendText += " <td>"+(i+1)+"</td>";
|
|
appendText += " <td>"+CAR_OBJID_NAME+"</td>";
|
|
appendText += " <td>"+PRODUCT_FAMILY_NAME+"</td>";
|
|
appendText += " <td>"+PRODUCT_CNT+"</td>";
|
|
appendText += " <td class='align_l2'>"+TASK_NAME+"</td>";
|
|
appendText += " <td>"+TASK_START_PLAN_DATE+"</td>";
|
|
appendText += " <td>"+TASK_END_PLAN_DATE+"</td>";
|
|
appendText += " <td>"+PM_CONFIRM_STATUS+"</td>";
|
|
appendText += "</tr>";
|
|
*/
|
|
appendText += "<tr>";
|
|
appendText += " <td><a href=\"javascript:fn_projectConceptDetailPopup('"+objId+"')\" class='btnDetail' data-OBJID='${info.OBJID}'> "+CONTRACT_NO+"</a></td>";
|
|
appendText += " <td>"+OEM_OBJID_NAME+"</td>";
|
|
appendText += " <td>"+CAR_OBJID_NAME+"</td>";
|
|
//appendText += " <td>"+PRODUCT_FAMILY_NAME+"</td>";
|
|
appendText += " <td>"+PRODUCT_CNT+"</td>";
|
|
|
|
appendText += " <td class=''>"+WBS_TASK_CNT+"</td>";
|
|
appendText += " <td class=''>"+WBS_CNT_ING+"</td>";
|
|
appendText += " <td class=''>"+WBS_CNT_COMPLETED+"</td>";
|
|
appendText += " <td class=''>"+WBS_CNT_DELAY+"</td>";
|
|
appendText += " <td class=''>"+WBS_RATE+"</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
}else{
|
|
appendText += "<tr>";
|
|
appendText += " <td colspan='9'>조회된 내용이 없습니다.</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
//}
|
|
$("#myTaskCnt").empty();
|
|
$("#myTaskCnt").append("<span>My Task</span>");
|
|
//$("#myTaskCnt").append("<span>My Task : 총 "+listCnt+"건 </span>");
|
|
$("#myTaskListArea").append(appendText);
|
|
}
|
|
|
|
function fn_setCostListAreaCurType(projectObjId,curType){
|
|
var projectObjIdList = $('input[name=ckBoxProject]');
|
|
if(0 < projectObjIdList.length){
|
|
$("input[name=ckBoxProject]").each(function(){
|
|
var objId = $(this).val();
|
|
if(projectObjId == objId){
|
|
$(this).attr("data-CUR_TYPE",curType);
|
|
$(this).attr("checked",true);
|
|
$(this).trigger("click");
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
//프로젝트 선택 시 투자비현황 정보를 가져온다.
|
|
function fn_getCostList(projectObjId){
|
|
$("#costArea").empty();
|
|
$("#costListArea").empty();
|
|
|
|
var appendText = "";
|
|
var appendText2 = "";
|
|
var listCnt = 0;
|
|
|
|
if("" != projectObjId){
|
|
$.ajax({
|
|
url:"/dashboard/investmentCostList.do",
|
|
type:"POST",
|
|
data:{"SEARCH_PROJECT_OBJID":projectObjId},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
|
|
var resultList = data;
|
|
listCnt = resultList.length;
|
|
|
|
if(0 < resultList.length){
|
|
var listLength = resultList.length;
|
|
|
|
for (var i = 0; i < resultList.length; i++) {
|
|
|
|
var objId = fnc_checkNull(resultList[i].OBJID);
|
|
var title = fnc_checkNull(resultList[i].TITLE);
|
|
var amount = Number(fnc_checkNullDefaultValue(resultList[i].AMOUNT,"0")).toLocaleString();
|
|
var statusTitle = fnc_checkNull(resultList[i].STATUS_TITLE);
|
|
var investmentPlanCost = Number(fnc_checkNullDefaultValue(resultList[i].INVESTMENT_PLAN_COST,"0")).toLocaleString();
|
|
var sumInvestmentCost = Number(fnc_checkNullDefaultValue(resultList[i].SUM_INVESTMENT_COST,"0")).toLocaleString();
|
|
var executionRate = fnc_checkNull(resultList[i].EXECUTION_RATE);
|
|
var costType = fnc_checkNull(resultList[i].COST_TYPE);
|
|
|
|
if("" == costType){
|
|
appendText += "<tr>";
|
|
appendText += " <td class='align_l' title='"+title+"'>"+title+"</td>";
|
|
appendText += " <td class='align_r' title='"+amount+"'>"+amount+"</td>";
|
|
appendText += " <td class='align_c'>"+statusTitle+"</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
}
|
|
}else{
|
|
appendText += "<tr>";
|
|
appendText += " <td colspan='3'>조회된 내용이 없습니다.</td>";
|
|
appendText += "</tr>";
|
|
}
|
|
|
|
if(0 < resultList.length){
|
|
var listLength = resultList.length;
|
|
|
|
for (var i = 0; i < resultList.length; i++) {
|
|
|
|
var objId = fnc_checkNull(resultList[i].OBJID);
|
|
var title = fnc_checkNull(resultList[i].TITLE);
|
|
var amount = Number(fnc_checkNullDefaultValue(resultList[i].AMOUNT,"0")).toLocaleString();
|
|
var statusTitle = fnc_checkNull(resultList[i].STATUS_TITLE);
|
|
var investmentPlanCost = Number(fnc_checkNullDefaultValue(resultList[i].INVESTMENT_PLAN_COST,"0")).toLocaleString();
|
|
var sumInvestmentCost = Number(fnc_checkNullDefaultValue(resultList[i].SUM_INVESTMENT_COST,"0")).toLocaleString();
|
|
var executionRate = fnc_checkNull(resultList[i].EXECUTION_RATE);
|
|
var projectObjId = fnc_checkNull(resultList[i].TARGET_OBJID);
|
|
|
|
if(i == 0){
|
|
if("" != executionRate){
|
|
executionRate = executionRate+"%";
|
|
}
|
|
appendText2 += "<tr>";
|
|
appendText2 += " <td style='vertical-align:top;text-align:right;' onclick=\"fn_openInvestmentPlanCostFormPopUp('"+projectObjId+"')\">"+investmentPlanCost+"</td>";
|
|
appendText2 += " <td style='vertical-align:top;text-align:right;'>"+sumInvestmentCost+"</td>";
|
|
appendText2 += " <td style='vertical-align:top;'>"+executionRate+"</td>";
|
|
appendText2 += "</tr>";
|
|
}
|
|
}
|
|
}else{
|
|
appendText2 += "<tr>";
|
|
appendText2 += " <td colspan='3'>조회된 내용이 없습니다.</td>";
|
|
appendText2 += "</tr>";
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
$("#costArea").append(appendText2);
|
|
$("#costListArea").append(appendText);
|
|
}
|
|
|
|
//프로젝트 선택 시 투자비현황 정보를 가져온다.
|
|
function fn_getProfitCostList(projectObjId,step,area){
|
|
$("#"+area).empty();
|
|
var appendText = "";
|
|
var listCnt = 0;
|
|
var curType = "";
|
|
|
|
if("" != projectObjId){
|
|
$.ajax({
|
|
url:"/dashboard/getProfitCostList.do",
|
|
type:"POST",
|
|
data:{"SEARCH_PROJECT_OBJID":projectObjId,"SEARCH_STEP":step},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
var totalCost = Number(fnc_checkNullDefaultValue(data.total_cost,"0")).toLocaleString();
|
|
var internalCost = Number(fnc_checkNullDefaultValue(data.int_cost,"0")).toLocaleString();
|
|
var profitRatio = Number(fnc_checkNullDefaultValue(data.profit_ratio,"0")).toLocaleString();
|
|
curType = fnc_checkNull(data.cur_type);
|
|
|
|
appendText += "<tr>";
|
|
appendText += " <td class='align_r'>"+totalCost+"</td>";
|
|
appendText += " <td class='align_r'>"+internalCost+"</td>";
|
|
appendText += " <td>"+profitRatio+" %</td>";
|
|
appendText += "</tr>";
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
$("#"+area).append(appendText);
|
|
$("#"+area+"CurType").text("화폐단위: "+curType);
|
|
}
|
|
|
|
/* 투자비 계획입력 */
|
|
function fn_openInvestmentPlanCostFormPopUp(projectObjId){
|
|
var hiddenForm = document.hiddenForm;
|
|
var url = "/dashboard/investmentPlanCostFormPopUp.do";
|
|
var target = "investmentPlanCostFormPopUp";
|
|
window.open(url,target,"width=600, height=700, menubars=no, scrollbars=yes, resizable=yes");
|
|
|
|
hiddenForm.action = url;
|
|
hiddenForm.PROJECT_OBJID.value = projectObjId;
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit();
|
|
}
|
|
|
|
/* 지시사항 이행관리 팝업 */
|
|
function fn_openInstructionMngListPopUp(projectObjId){
|
|
var hiddenForm = document.hiddenForm;
|
|
var url = "/dashboard/instructionMngListPopUp.do";
|
|
var target = "instructionMngListPopUp";
|
|
window.open(url,target,"width=1350, height=730, menubars=no, scrollbars=yes, resizable=yes");
|
|
|
|
hiddenForm.action = url;
|
|
//hiddenForm.PROJECT_OBJID.value = projectObjId;
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit();
|
|
}
|
|
/* 지시사항 이행관리2 팝업 */
|
|
function fn_openInstructionMngListPopUp2(projectObjId){
|
|
var hiddenForm = document.hiddenForm;
|
|
var url = "/dashboard/instructionMngListPopUp2.do";
|
|
var target = "instructionMngListPopUp2";
|
|
window.open(url,target,"width=1350, height=730, menubars=no, scrollbars=yes, resizable=yes");
|
|
|
|
hiddenForm.action = url;
|
|
//hiddenForm.PROJECT_OBJID.value = projectObjId;
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit();
|
|
}
|
|
|
|
//제품군 수정 팝업창
|
|
function set_prod_modify(p_objId){
|
|
var params = "/projectConcept/projectFormEditPopUp.do?mode=edit&objId="+p_objId;
|
|
window.open(params, "", "width=645, height=740");
|
|
}
|
|
|
|
//프로젝트에 해당하는 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 fn_yearGoalPopUp(objId){
|
|
var params = "?actionType=regist&YEAR_GOAL_OBJID="+objId+"&Year="+$("#Year").val(); //$("#receive_order_year").val();
|
|
var url = "/contractMgmt/yearGoalFormPopUp.do"+params;
|
|
//window.open(url, "", "width=550, height=300");
|
|
var target = "yearGoalPricePopUp";
|
|
var popup_width = 550;
|
|
var popup_height = 300;
|
|
fn_centerPopup(popup_width, popup_height, url, target);
|
|
}
|
|
//환율정보
|
|
function fn_exchangePopUp(objId){
|
|
var params = "?Year="+$("#receive_order_year").val();
|
|
var url = "/admin/getExchangeRateMngList.do"+params;
|
|
//window.open(url, "", "width=550, height=300");
|
|
var target = "exchangePopUp";
|
|
var popup_width = 850;
|
|
var popup_height = 650;
|
|
fn_centerPopup(popup_width, popup_height, url, target);
|
|
}
|
|
|
|
//프로젝트의 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);
|
|
}
|
|
|
|
function wbs_popup_old(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 wbs_popup(){
|
|
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 = "/dashboard/projectScheduleFormPopUp.do";
|
|
fn_centerPopup(popup_width, popup_height, url);
|
|
}
|
|
|
|
function updateProjectDetail(projInfo, reqDelDate) {
|
|
var detailText = '';
|
|
|
|
detailText = " * " + projInfo + " (납기요청일 : " + reqDelDate + ")";
|
|
//alert("detailText:"+detailText);
|
|
$('#status_count').text(detailText);
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
<body class="noScroll" style="overflow: hidden;">
|
|
<form name="hiddenForm" id="hiddenForm">
|
|
<input type="hidden" name="PROJECT_OBJID" id="PROJECT_OBJID">
|
|
<input type="hidden" name="PRODUCT_OBJID" id="PRODUCT_OBJID">
|
|
<input type="hidden" name="OBJID" id="OBJID">
|
|
<input type="hidden" name="actionType" id="actionType">
|
|
</form>
|
|
|
|
<!--
|
|
<div class="btns_wrap header_btn">
|
|
<button class="btns blue">박혜원 님</button>
|
|
<button class="btns"><i class="fa-regular fa-paper-plane"></i> <span class="blue">2</span>건의 결재가 있습니다</button>
|
|
<button class="btns">Manual Download</button>
|
|
<button class="btns">Logout</button>
|
|
</div>
|
|
<div class="diamond"></div>
|
|
-->
|
|
|
|
<form name="form1" id="form1" action="" method="post" onsubmit="return false">
|
|
<!--
|
|
<div class="content-box" style="height:56%;">
|
|
<div class="content-box-s" style="width:100%;">
|
|
-->
|
|
<div id="contentsR" class="float_r">
|
|
|
|
<div id="plmSearchZon" style="min-height:23px; height:23px">
|
|
<div class="float_l" style="width:">
|
|
<table class="noBordertable" style="margin-top:;width:;border: 0px">
|
|
<tr >
|
|
<td class="align_r" style="font-size:13px;"><label for="" class="">년도</label></td>
|
|
<td>
|
|
<!--
|
|
<select name="receive_order_year" id="receive_order_year" style="width:90px;" class="select2" autocomplete="off">
|
|
-->
|
|
<select name="Year" id="Year" style="width:90px;" class="select" autocomplete="off">
|
|
<!--
|
|
<option value="">선택</option>
|
|
-->
|
|
<c:forEach begin="${sysYear-2}" end="${sysYear+2}" var="req_year">
|
|
<option value="${req_year}" ${paramMap.Year eq req_year ? 'selected':'' }>${req_year}</option>
|
|
</c:forEach>
|
|
</select>
|
|
</td>
|
|
<td style="width:20px"> </td>
|
|
<!--
|
|
<td style="font-size:13px;">
|
|
<label>사업부</label>
|
|
</td>
|
|
<td colspan="">
|
|
<select name="operation_division_code" id="operation_division_code" reqTitle="사업부" type="select" class="select2" style="width:90px;">
|
|
</select>
|
|
</td>
|
|
-->
|
|
<td style="width:200px">
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="float_r" style="width:">
|
|
<!--
|
|
<button class="blue_btn2" id="btnInstructionMng" name="">지시사항 이행관리</button>
|
|
-->
|
|
<button class="blue_btn2" id="btnInstructionMng2" name="">지시사항 이행관리</button>
|
|
<!--
|
|
<button class="blue_btn2" id="btnSearch" name="btnRegistGoal">조회</button>
|
|
-->
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="contents_section">
|
|
|
|
<%--
|
|
<div id="plmSearchZon" style="height:30px !important; width:100% !important;min-height:30px;background-color:#F2F2F2;display:flex;">
|
|
<h3 style="width:140px;margin-top:0px;" id=""><span>*경영가이드(${YYYY_Q})</span></h3>
|
|
<h2 style="width:85%;margin-top:5px;text-align:center;">
|
|
<b style="color:#F7981E;" id="managementGuideTxt">
|
|
<!-- 서로 소통 협력하여 위기 극복 -->
|
|
${managementGuide.CONTENTS}
|
|
</b>
|
|
<input type="text" style="width:99%;display:none" name="managementGuide" id="managementGuide" value="${managementGuide.CONTENTS}">
|
|
</h2>
|
|
|
|
<div class="btnArea">
|
|
<c:if test="${isAdminGroup}">
|
|
<input type="button" value="저장" class="plm_btns btnManagementGuideRegist" style="align: right;display:none">
|
|
<input type="button" value="취소" class="plm_btns btnManagementGuideCancel" style="align: right;display:none">
|
|
<input type="button" value="수정" class="plm_btns btnManagementGuideRegistPre" style="align: right;">
|
|
</c:if>
|
|
</div>
|
|
--%>
|
|
|
|
|
|
<div class="n_wrap">
|
|
<div class="float_l " style="height: 277px;">
|
|
<div class="section_title">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>영업현황
|
|
<button class="blue_btn2" id="btnRegistGoal" name="btnRegistGoal">영업목표 등록</button>
|
|
<!--
|
|
<input type="button" value="영업목표등록" class="plm_btns" id="btnRegistGoal" name="btnRegistGoal">
|
|
-->
|
|
</div>
|
|
</div>
|
|
<div class="" style="border: 1px solid #5e5e5e; border-radius: 1px;">
|
|
<!--
|
|
<div class="select_box">
|
|
<label for="">년도</label>
|
|
<select name="" id="">
|
|
<option value="">2024</option>
|
|
<option value="">2023</option>
|
|
<option value="">2022</option>
|
|
</select>
|
|
<div class="bluebox pl10">
|
|
영업목표(억원)
|
|
<span>3,000</span>
|
|
</div>
|
|
<div class="bluebox">
|
|
달성률
|
|
<span>86.23%</span>
|
|
</div>
|
|
</div>
|
|
-->
|
|
<table class="n_table1">
|
|
<thead>
|
|
<tr>
|
|
<th rowspan="2">년도</th>
|
|
<th colspan="2">수주현황(건수)</th>
|
|
<th rowspan="2">수주율<br>(%)</th>
|
|
<th rowspan="2">예상매출<br>(억원)</th>
|
|
<th rowspan="2">영업목표<br>(억원)</th>
|
|
<th rowspan="2">달성율<br>(%)</th>
|
|
</tr>
|
|
<tr class="sub_thead">
|
|
<th>국내</th>
|
|
<th>해외</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="tbodySales" style="height: 80px;">
|
|
<tr class="">
|
|
<td title="">${yearGoalInfoMap.YEAR}</td><!-- 년도 -->
|
|
<td title="">${yearGoalInfoMap.CONTRACT_CNT_YEAR_IN}</td><!-- 계약건수 -->
|
|
<td title="">${yearGoalInfoMap.CONTRACT_CNT_YEAR_OUT}</td><!-- 계약건수 -->
|
|
<td title=""><fmt:formatNumber value="${yearGoalInfoMap.CONTRACT_CNT_YEAR_RATE}" pattern="#,###.#" /></td><!-- 수주율 -->
|
|
<td title=""><fmt:formatNumber value="${yearGoalInfoMap.CONTRACT_COST_YEAR}" pattern="#,###.##" /></td><!-- 계약금액 -->
|
|
<td title=""><fmt:formatNumber value="${yearGoalInfoMap.PRICE}"/></td><!-- 영업목표 -->
|
|
<td title=""> <a href="#" onclick="javascript:fn_openTargetList('','','contract','year','${yearGoalInfoMap.YEAR}','');"><fmt:formatNumber value="${yearGoalInfoMap.GOAL_RATE}" pattern="#,###.#" /></a></td><!-- 달성율 -->
|
|
</tr>
|
|
<tr>
|
|
<td title="">${yearGoalInfoMap1.YEAR}</td><!-- 년도 -->
|
|
<td title="">${yearGoalInfoMap1.CONTRACT_CNT_YEAR_IN}</td><!-- 계약건수 -->
|
|
<td title="">${yearGoalInfoMap1.CONTRACT_CNT_YEAR_OUT}</td><!-- 계약건수 -->
|
|
<td title=""><fmt:formatNumber value="${yearGoalInfoMap1.CONTRACT_CNT_YEAR_RATE}" pattern="#,###.#" /></td><!-- 수주율 -->
|
|
<td title=""><fmt:formatNumber value="${yearGoalInfoMap1.CONTRACT_COST_YEAR}" pattern="#,###.##" /></td><!-- 계약금액 -->
|
|
<td title="">${yearGoalInfoMap1.PRICE}</td><!-- 영업목표 -->
|
|
<td title=""> <a href="#" onclick="javascript:fn_openTargetList('','','contract','year','${yearGoalInfoMap1.YEAR}','');"><fmt:formatNumber value="${yearGoalInfoMap1.GOAL_RATE}" pattern="#,###.#" /></a></td><!-- 달성율 -->
|
|
</tr>
|
|
<tr>
|
|
<td title="">${yearGoalInfoMap2.YEAR}</td><!-- 년도 -->
|
|
<td title="">${yearGoalInfoMap2.CONTRACT_CNT_YEAR_IN}</td><!-- 계약건수 -->
|
|
<td title="">${yearGoalInfoMap2.CONTRACT_CNT_YEAR_OUT}</td><!-- 계약건수 -->
|
|
<td title=""><fmt:formatNumber value="${yearGoalInfoMap2.CONTRACT_CNT_YEAR_RATE}" pattern="#,###.#" /></td><!-- 수주율 -->
|
|
<td title=""><fmt:formatNumber value="${yearGoalInfoMap2.CONTRACT_COST_YEAR}" pattern="#,###.##" /></td><!-- 계약금액 -->
|
|
<td title="">${yearGoalInfoMap2.PRICE}</td><!-- 영업목표 -->
|
|
<td title=""> <a href="#" onclick="javascript:fn_openTargetList('','','contract','year','${yearGoalInfoMap2.YEAR}','');"><fmt:formatNumber value="${yearGoalInfoMap2.GOAL_RATE}" pattern="#,###.#" /></a></td><!-- 달성율 -->
|
|
</tr>
|
|
<%--
|
|
<c:forEach begin="0" end="2" var="req_year">
|
|
<tr>
|
|
<td>2022</td>
|
|
<td>179</td>
|
|
<td>13</td>
|
|
<td>87.0</td>
|
|
<td>2,838</td>
|
|
<td>3,750</td>
|
|
<td>101.3</td>
|
|
</tr>
|
|
</c:forEach>
|
|
--%>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!--
|
|
-->
|
|
<div class="graphs-container">
|
|
<div class="float_r w20 ">
|
|
<!--
|
|
<div class="section_title pr10">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>영업현황 그래프2
|
|
</div>
|
|
</div>
|
|
-->
|
|
<div class="graph_section " id="piechart" style="width:105%; overflow:hidden; margin-left:-9px;">
|
|
</div>
|
|
</div>
|
|
<div class="float_r w20">
|
|
<!--
|
|
<div class="section_title mt10 pr10">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>영업현황 그래프3
|
|
</div>
|
|
</div>
|
|
-->
|
|
<div class="graph_section " id="piechart2" style=" width:120%; overflow:hidden;margin-left:-17px;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="float_r ">
|
|
<!--
|
|
<div class="section_title mt10 pr10">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>영업현황 그래프
|
|
</div>
|
|
</div>
|
|
-->
|
|
<div class="graph_section " id="chartDiv1" style=" width:100%; overflow:hidden; margin-left:-10px;">
|
|
</div>
|
|
<!--
|
|
<div class="graph_section" id="piechart" style=" width:;height:; overflow:hidden;margin-left:;">
|
|
</div>
|
|
|
|
<div class="graph_section" id="piechart2" style=" width:;height:; overflow:hidden;margin-left:;">
|
|
</div>
|
|
-->
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!--1단 end-->
|
|
|
|
|
|
|
|
|
|
<!--2단 start-->
|
|
<div class="contents_section1">
|
|
<div class="n_wrap2">
|
|
<div class="float_l w100 " style="padding:0px;"><!-- asd_box -->
|
|
<div class="section_title">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>프로젝트현황
|
|
<button id="btnWbs" class="blue_btn3" style="margin-left:10px;" href="javascript:void(0);"> 프로젝트 일정 전체 보기</button>
|
|
</div>
|
|
</div>
|
|
<div class="tablebox" style="border: none;">
|
|
<div class="status-container">
|
|
<div class="status-item">
|
|
<div class="status-box">${countMap.CNT_ORDER}</div>
|
|
<p class="status-text">(수주건수)</p>
|
|
</div>
|
|
<div class="status-item">
|
|
<div class="status-box" style="font-weight:bold; border:2px solid #0076ff;">${countMap.CNT_ING}</div>
|
|
<p class="status-text">(진행중)</p>
|
|
</div>
|
|
<div class="status-item">
|
|
<div class="status-box">${countMap.CNT_HOLD}</div>
|
|
<p class="status-text">(진행대기)</p>
|
|
</div>
|
|
<div class="status-item">
|
|
<div class="status-box">${countMap.CNT_END}</div>
|
|
<p class="status-text">(프로젝트종료)</p>
|
|
</div>
|
|
<div class="status-item" style="width:250px;">
|
|
<table class="noBordertable" style="margin-top:;width:240px;border: 0px">
|
|
<tr>
|
|
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="n_wrap2">
|
|
<div class="float_l w100" style="height: 420px;width:1460px"> <!-- 1430px고정 -->
|
|
<div class="section_title">
|
|
<div>
|
|
<table class="noBordertable" style="margin-top:;width:240px;border: 0px">
|
|
<tr>
|
|
<td class="" style="font-size:13px; width:100px;"><label for="">프로젝트번호</label></td>
|
|
<td>
|
|
<select name="project_no" id="project_no" style="width:150px;" class="select2" autocomplete="off">
|
|
<option value="">선택</option>
|
|
${code_map.project_no}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div>
|
|
<div style="width:85%;float:left;margin-top:20px;" class="">
|
|
<i class="fa-solid fa-square-poll-vertical"></i>진행현황
|
|
</div>
|
|
|
|
<div class="" style="float: right;margin-top:20px;">
|
|
|
|
<!-- <div class="colorful-div black-name">완료</div> -->
|
|
<div class="colorful-div yellow-name">완료</div>
|
|
<div class="colorful-div blue-name">정상진행</div>
|
|
<div class="colorful-div red-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> -->
|
|
<!--
|
|
onclick="window.open('popup2.html', '_blank', 'top=140, left=300, width=1600, height=700, menubar=no, toolbar=no, location=no, directories=no, status=no, scrollbars=yes, copyhistory=no, resizable=yes');">
|
|
-->
|
|
</div>
|
|
</div>
|
|
|
|
<div style="float:left; color: RED;" id="status_count"></div>
|
|
</div>
|
|
|
|
|
|
<div class="tableBox1 sch_table_wrap " style="height: 320px;border: 1px solid #5e5e5e; overflow:hidden;">
|
|
|
|
<!-- 오늘 세로선 -->
|
|
<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>
|
|
|
|
<c:forEach begin="${0}" end="${ganttTotalCnt/4}" var="seq" varStatus="status">
|
|
<div class="divQuarterVline" id="divQuarterVline" style="min-height:450px;display:;position:absolute;border:2px dotted;border-left:none; top:70px;left:${89+(status.count*137)}px; width:0.1px; height:85%; border-color:grey;/* background:orange;color:orange; */ z-index;998"></div>
|
|
</c:forEach>
|
|
|
|
<table class="n_table sch_table" id="tableProject">
|
|
<colgroup>
|
|
<col width="90px">
|
|
<%-- 12분기
|
|
<c:forEach begin="${1}" end="${36}" var="seq" varStatus="status">
|
|
<col width="20px">
|
|
</c:forEach>
|
|
--%>
|
|
<!-- 8분기 -->
|
|
<c:forEach begin="${1}" end="${ganttTotalCnt}" var="seq" varStatus="status">
|
|
<col width="${ganttTdWidth}px">
|
|
</c:forEach>
|
|
<col width="90px">
|
|
<col width="90px">
|
|
<col width="90px">
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th rowspan="2">공정<br>(계획/실적)</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>
|
|
<th>계획종료일</th>
|
|
<th rowspan="2">진행율</th>
|
|
<th rowspan="2">상태</th>
|
|
</tr>
|
|
<tr class="sub_thead">
|
|
<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>
|
|
|
|
<th>실적종료일</th>
|
|
</thead>
|
|
<tbody id="tbodyProject">
|
|
<%-- <c:choose>
|
|
<c:when test="${!empty projectList}">
|
|
<c:forEach var="info" items="${projectList}" varStatus="status">
|
|
<tr style="" class="b1 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="" colspan="${ganttTotalCnt}" class="ganttTd">
|
|
<div class="gantt"><div class="ganttLine b1 b1${info.OBJID}" style="display:none;width:0px;/*width: 100px; margin-left: 0px; */"></div></div>
|
|
<div class="gantt"><div class="ganttLine b2 b2${info.OBJID}" style="display:none;width:0px;/*width: 100px; margin-left: 80px; */"></div></div>
|
|
<div class="gantt"><div class="ganttLine b3 b3${info.OBJID}" style="display:none;width:0px;/*width: 200px; margin-left: 150px;*/"></div></div>
|
|
<div class="gantt"><div class=" b4 b4${info.OBJID}" style="display:none;width:0px;/*width: 70px; margin-left: 350px;*/"></div></div>
|
|
<div class="gantt"><div class="ganttLine b5 b5${info.OBJID}" style="display:none;width:0px;/*width: 50px; margin-left: 420px;*/"></div></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</c:forEach>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<tr>
|
|
<td colspan="12" align="center">조회된 데이터가 없습니다.</td>
|
|
</tr>
|
|
</c:otherwise>
|
|
</c:choose> --%>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<%--
|
|
<div class=" float_r w20 "><!-- asd_box -->
|
|
<div class="section_title">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>투자비현황
|
|
</div>
|
|
</div>
|
|
<div class="tableBox">
|
|
<table class="scrolltable n_table">
|
|
<thead>
|
|
<tr>
|
|
<th class="thead_skyblue" colspan="4">프로젝트정보</th>
|
|
<th class="thead_green" colspan="5">투자비내역</th>
|
|
<!--
|
|
<th class="thead_green2" colspan="4">품의</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>Date</th>
|
|
<th>집행금액</th>
|
|
<th>집행율(%)</th>
|
|
-->
|
|
</tr>
|
|
</thead>
|
|
<tbody id="tbodyInvestment">
|
|
<c:forEach begin="0" end="8" var="req_year">
|
|
<tr>
|
|
<td></td>
|
|
<td>CTR PSTN LAM_LH</td>
|
|
<td>2022-11-15</td>
|
|
<!--
|
|
<td>31,800</td>
|
|
-->
|
|
<td>4,814.99</td>
|
|
<td>5,502.99</td>
|
|
<!--
|
|
<td>124.02</td>
|
|
<td>158.45</td>
|
|
<td>158.45</td>
|
|
|
|
<td>4,841.99</td>
|
|
<td>2022-11-15</td>
|
|
<td>4,841.99</td>
|
|
<td>98.34</td>
|
|
-->
|
|
</tr>
|
|
</c:forEach>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
--%>
|
|
</div>
|
|
|
|
<!--2단 end-->
|
|
<!--3단 start-->
|
|
|
|
<div class="n_wrap3" style="margin-top:10px;">
|
|
<div class="float_l w25 "><!-- asd_box -->
|
|
<div class="section_title">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>이슈현황
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tablebox">
|
|
<table class=" n_table">
|
|
<%--
|
|
<thead>
|
|
<tr>
|
|
<th class="thead_skyblue" colspan="4">프로젝트정보</th>
|
|
<th class="thead_red" colspan="5">조치내역</th>
|
|
</tr>
|
|
<tr class="sub_thead">
|
|
<th>수주제품명</th>
|
|
<th>양산일</th>
|
|
<th>생산수량</th>
|
|
<th>조치율(%)</th>
|
|
<th>발생</th>
|
|
<th>조치</th>
|
|
<th>진행</th>
|
|
<th>미결</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="tbodyIssue">
|
|
<c:forEach begin="0" end="8" var="req_year">
|
|
<tr>
|
|
<td>CTR PSTN LAM_LH</td>
|
|
<td>2022-11-15</td>
|
|
<td>31,800</td>
|
|
<td>76.5</td>
|
|
<td>17</td>
|
|
<td>13</td>
|
|
<td>3</td>
|
|
<td>1</td>
|
|
</tr>
|
|
</c:forEach>
|
|
</tbody>
|
|
<thead>
|
|
<tr class="" stlye="height: 33px;">
|
|
<th>발생건수</th>
|
|
<th>조치건수</th>
|
|
<th>조치율(%)</th>
|
|
<th>미결건수</th>
|
|
</tr>
|
|
</thead>
|
|
--%>
|
|
<colgroup>
|
|
<col width="50%">
|
|
<col width="50%">
|
|
</colgroup>
|
|
<tbody id="issueStatusListArea" style="height: 120px;">
|
|
<!--
|
|
<tr>
|
|
<td>17</td>
|
|
<td>16</td>
|
|
<td>95%</td>
|
|
<td>1</td>
|
|
</tr>
|
|
-->
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="float_l w40 "><!-- asd_box -->
|
|
<div class="section_title">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>투입원가현황
|
|
</div>
|
|
</div>
|
|
<div class="tablebox"> <!-- tableBox -->
|
|
<table class=" n_table2"><!-- scrolltable -->
|
|
<colgroup>
|
|
<col width="12%">
|
|
<col width="25%">
|
|
<col width="20%">
|
|
<col width="20%">
|
|
<col width="13%">
|
|
<%--
|
|
<col width="10%">
|
|
--%>
|
|
</colgroup>
|
|
<thead>
|
|
<tr class="">
|
|
<th>수주가(원)</th>
|
|
<th>항목</th>
|
|
<th>목표원가(원)</th>
|
|
<th>투입원가(원)</th>
|
|
<th>투입율(%)</th>
|
|
<!--
|
|
<th>상태</th>
|
|
-->
|
|
</tr>
|
|
</thead>
|
|
<tbody id="costStatusListArea" style="height: 64px;">
|
|
<!--
|
|
<tbody id="costListArea">
|
|
<tr>
|
|
<td>재료비</td>
|
|
<td>31,800</td>
|
|
<td>31,800</td>
|
|
<td>76.5</td>
|
|
<td>ㅇ</td>
|
|
<td rowspan="3">31,800</td>
|
|
<td rowspan="3">31,800</td>
|
|
<td rowspan="3">76.5</td>
|
|
<td rowspan="3">76.5</td>
|
|
</tr>
|
|
<tr>
|
|
<td>노무비</td>
|
|
<td>31,800</td>
|
|
<td>31,800</td>
|
|
<td>76.5</td>
|
|
<td>ㅇ</td>
|
|
</tr>
|
|
<tr>
|
|
<td>경비</td>
|
|
<td>31,800</td>
|
|
<td>31,800</td>
|
|
<td>76.5</td>
|
|
<td>ㅇ</td>
|
|
</tr>
|
|
-->
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="float_l w35">
|
|
<div class="section_title">
|
|
<div>
|
|
<i class="fa-solid fa-square-poll-vertical"></i>실시간 환율정보
|
|
<!-- <button class="blue_btn2" id="btnExchange" name="btnExchange">환율정보 등록</button> -->
|
|
</div>
|
|
<div class="tablebox">
|
|
<table class="n_table2">
|
|
<colgroup>
|
|
<c:forEach begin="${1}" end="${3}" var="seq" varStatus="status">
|
|
<col width="50px">
|
|
</c:forEach>
|
|
</colgroup>
|
|
<%--
|
|
<thead>
|
|
<tr>
|
|
<!-- <th>년도</th> -->
|
|
<th>기준일자</th>
|
|
<th>USD</th>
|
|
<th>EU</th>
|
|
<th>JAPAN</th>
|
|
<th>CHINA</th>
|
|
<th>VIETNAM</th>
|
|
<th>RUB</th>
|
|
</tr>
|
|
</thead>
|
|
--%>
|
|
<tbody id="exchangeListArea" style="height:120px;">
|
|
<tr>
|
|
<td id="DATE" rowspan='6'><fmt:formatDate value="${now}" pattern="yyyy-MM-dd hh:mm:ss" /></td>
|
|
<td class='input_title_b'>USD</td>
|
|
<td id="USD">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td class='input_title_b'>EUR</td>
|
|
<td id="EUR">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td class='input_title_b'>JPY</td>
|
|
<td id="JPY">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td class='input_title_b'>CNY</td>
|
|
<td id="CNY">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td class='input_title_b'>THB</td>
|
|
<td id="THB">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td class='input_title_b'>HKD</td>
|
|
<td id="HKD">0</td>
|
|
</tr>
|
|
|
|
|
|
<%--
|
|
<!--가로표현-->
|
|
<td id="USD">0</td>
|
|
<td id="EUR">0</td>
|
|
<td id="JPY">0</td>
|
|
<td id="CNY">0</td>
|
|
<td id="VND">0</td>
|
|
<td id="RUB">0</td>
|
|
|
|
<c:choose>
|
|
<c:when test="${!empty exchangeRateList}">
|
|
<c:forEach var="info" items="${exchangeRateList}" varStatus="status">
|
|
<tr>
|
|
<td>${info.YY_MM}</td>
|
|
<td title=""><fmt:formatNumber value="${info.COST_USD}" pattern="#,###.##" /></td>
|
|
<td title=""><fmt:formatNumber value="${info.COST_EU}" pattern="#,###.##" /></td>
|
|
<td title=""><fmt:formatNumber value="${info.COST_JAPAN}" pattern="#,###.##" /></td>
|
|
<td title=""><fmt:formatNumber value="${info.COST_CHINA}" pattern="#,###.##" /></td>
|
|
<td title=""><fmt:formatNumber value="${info.COST_VIETNAM}" pattern="#,###.##" /></td>
|
|
<td title=""><fmt:formatNumber value="${info.COST_RUB}" pattern="#,###.##" /></td>
|
|
<--
|
|
<td title=""><fmt:formatNumber value="${info.COST_INR}" pattern="#,###" /></td>
|
|
-->
|
|
</tr>
|
|
</c:forEach>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<tr>
|
|
<td colspan="7" align="center">조회된 데이터가 없습니다.</td>
|
|
</tr>
|
|
</c:otherwise>
|
|
</c:choose> --%>
|
|
<!--
|
|
<tr>
|
|
<td>24년 3월</td>
|
|
<td>1,339.5</td>
|
|
<td>1435.4</td>
|
|
<td>181.4</td>
|
|
<td>911.6</td>
|
|
<td>14.0</td>
|
|
<td>18.2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>24년 2월</td>
|
|
<td>1,339.5</td>
|
|
<td>1435.4</td>
|
|
<td>181.4</td>
|
|
<td>911.6</td>
|
|
<td>14.0</td>
|
|
<td>18.2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>24년 1월</td>
|
|
<td>1,339.5</td>
|
|
<td>1435.4</td>
|
|
<td>181.4</td>
|
|
<td>911.6</td>
|
|
<td>14.0</td>
|
|
<td>18.2</td>
|
|
</tr>
|
|
-->
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<!-- 3단 끝 -->
|
|
</div>
|
|
</div>
|
|
|
|
</form>
|
|
</body>
|
|
<script>
|
|
// 페이지가 로드될 때 실행되는 함수
|
|
window.onload = function() {
|
|
// 테이블의 tbody 엘리먼트를 찾습니다.
|
|
var tableBody = document.getElementById('tbodyProject');
|
|
|
|
// 테이블의 thead 엘리먼트를 찾습니다.
|
|
var tableHeader = document.querySelector('.sch_table thead');
|
|
|
|
// 테이블의 tbody를 스크롤할 때마다 실행되는 함수
|
|
tableBody.addEventListener('scroll', function() {
|
|
// tbody가 스크롤될 때마다 헤더의 위치를 조정합니다.
|
|
tableHeader.style.transform = 'translateY(' + this.scrollTop + 'px)';
|
|
});
|
|
};
|
|
</script>
|
|
</html> |