ERP-node/WebContent/WEB-INF/view/dashboard/dashboard_back2.jsp

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: "&larr;",
// character for right arrow
rightArrow: "&rarr;",
});
*/
//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}'>&nbsp;&nbsp;"+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}'>&nbsp;&nbsp;"+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}'>&nbsp;&nbsp;"+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">박혜원&nbsp;님</button>
<button class="btns"><i class="fa-regular fa-paper-plane"></i>&nbsp;<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="">&nbsp;<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="">&nbsp;<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="">&nbsp;<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>