$(function () { "use strict"; BWA.Chart = BWA.Chart || {}; BWA.Chart.getLastYearSameWeekDate = function (dateStart, dateEnd, weekday) { var data = { startDate: dateStart, endDate: dateEnd }; for (var i = 0; i < 7; i++) { if (moment(data.startDate).toDate().getDay() == weekday) return data; data.startDate = moment(data.startDate).subtract(-1, 'days'); data.endDate = moment(data.endDate).subtract(-1, 'days'); } return data; } BWA.Chart.getCustermTimeArgumentAxisString = function (codeTimeType, date) { // $Code.TimeType switch (codeTimeType) { case $Code.TimeType.QUARTERMIN: var year = date.getFullYear(); var mon = (date.getMonth() + 1); var day = date.getDate(); var hour = date.getHours() var min = date.getMinutes(); if (mon < 10) mon = "0" + mon; if (day < 10) day = "0" + day; if (hour < 10) hour = "0" + hour; if (min < 10) min = "0" + min; return year + "-" + mon + "-" + day + " " + hour + ":" + min; break; case $Code.TimeType.NONE: var year = date.getFullYear(); var mon = (date.getMonth() + 1); var day = date.getDate(); if (mon < 10) mon = "0" + mon; if (day < 10) day = "0" + day; return year + "-" + mon + "-" + day; break; case $Code.TimeType.HOUR: return date.getDate() + "일 : " + date.getHours() + "시"; break; case $Code.TimeType.DAY: return date.getMonth() + 1 + "월 : " + date.getDate() + "일"; break; case $Code.TimeType.MONTH: return date.getFullYear() + "년 : " + (date.getMonth() + 1) + "월"; break; } return date.toLocaleDateString('ja-JP'); }; BWA.Chart.getTimeLineArgumentAxis = function (momentDateTime, codeTimeType, MS, ME) { // $Code.TimeType var argumentAxis = null; var dateType = ''; switch (codeTimeType) { case $Code.TimeType.MIN: dateType = 'day'; argumentAxis = { argumentType: 'datetime', title: $G('hour'), label: { alignment: 'center', format: 'HH' }, tickInterval: { hours: 1 }, }; break; case $Code.TimeType.QUARTERMIN: dateType = 'day'; argumentAxis = { argumentType: 'datetime', title: $G('hour'), label: { alignment: 'center', format: 'HH' }, tickInterval: { hours: 1 }, }; break; case $Code.TimeType.HOUR: dateType = 'day'; argumentAxis = { argumentType: 'string', title: $G('hour'), label: { alignment: 'center', format: 'HH:mm' }, tickInterval: { hours: 1 }, }; if (!_.isNull(MS) && !_.isNull(ME)) { argumentAxis.min = moment(MS).add(-1, 'hours').toDate(); argumentAxis.max = moment(ME).add(1, 'hours').toDate(); } break; case $Code.TimeType.DAY: dateType = 'month'; argumentAxis = { argumentType: 'string', title: $G('day'), label: { alignment: 'center', format: 'MM-dd' }, tickInterval: { days: 1 }, }; if (!_.isNull(MS) && !_.isNull(ME)) { argumentAxis.min = moment(MS).add(-1, 'days').toDate(); argumentAxis.max = moment(ME).add(1, 'days').toDate(); } break; case $Code.TimeType.MONTH: dateType = 'year'; argumentAxis = { argumentType: 'string', title: $G('month'), label: { alignment: 'center', format: 'MM' }, tickInterval: { months: 1 }, }; if (!_.isNull(MS) && !_.isNull(ME)) { argumentAxis.min = moment(MS).add(-1, 'months').toDate(); argumentAxis.max = moment(ME).add(1, 'months').toDate(); } break; } if (!_.isNull(momentDateTime)) { argumentAxis.min = moment(momentDateTime.startOf(dateType).toDate()).add(-1, 'hours').toDate(); argumentAxis.max = moment(momentDateTime.endOf(dateType).toDate()).add(1, 'hours').toDate(); } argumentAxis.valueMarginsEnabled = false; return argumentAxis; }; BWA.Chart.mapWithConvertingDateTime = function (array, timetype) { return _.map(array, function (x) { if (timetype) if (!_.isNull(timetype)) x.DateTime = BWA.Chart.getCustermTimeArgumentAxisString(timetype, moment(x.DateTime).toDate()); else x.DateTime = moment(x.DateTime).toDate(); return x; }); }; BWA.Chart.mapNewWithConvertingDateTime = function (array, timetype) { return _.map(array, function (x) { return { DateTime: (!_.isNull(timetype)) ? BWA.Chart.getCustermTimeArgumentAxisString(timetype, moment(x.DateTime).toDate()) : moment(x.DateTime).toDate(), Value: x.Value }; return x; }); }; BWA.Chart.getRelationDataArrayOnDateTime = function (dataArray1, dataArray2, fieldName1, fieldName2) { var dataArray = []; var minLength = Math.min(dataArray1.length, dataArray2.length) var index1 = 0; var index2 = 0; for (var i = 0 ; i < minLength ; i++) { var l = dataArray1[index1]; var r = dataArray2[index2]; if (l.DateTime === r.DateTime) { var obj = {}; obj[fieldName1] = l.Value; obj[fieldName2] = r.Value; dataArray.push(obj); index1++; index2++; } else if (l.DateTime > r.DateTime) { index2++; } else if (l.DateTime < r.DateTime) { index1++; } } return dataArray; } // hcLee 2015 04 23 BWA.Chart.getRelationDataArrayOnDateTime2 = function (dataArray1, dataArray2, dataArray3, fieldName1, fieldName2, fieldName3) { var dataArray = []; var minLength = Math.min(dataArray1.length, dataArray2.length); minLength = Math.min(minLength, dataArray3.length); var index1 = 0; var index2 = 0; var index3 = 0; for (var i = 0 ; i < minLength ; i++) { var l = dataArray1[index1]; var r = dataArray2[index2]; var m = dataArray3[index3]; if (l.DateTime === r.DateTime) { var obj = {}; obj[fieldName1] = l.Value; obj[fieldName2] = r.Value; dataArray.push(obj); index1++; index2++; } else if (l.DateTime > r.DateTime) { index2++; } else if (l.DateTime < r.DateTime) { index1++; } } return dataArray; } // hcLee 2018 02 27 BWA.Chart.getRelationDataArrayOnDateTimeNew = function (dataArray1, dataArray2, fieldName1, fieldName2) { var dataArray = []; var minLength = Math.min(dataArray1.length, dataArray2.length) var index1 = 0; var index2 = 0; for (var i = 0 ; i < minLength ; i++) { var l = dataArray1[index1]; var r = dataArray2[index2]; if (l.DateTime === r.DateTime) { var obj = {}; obj[fieldName1] = l.lv1; obj[fieldName2] = r.rv1; dataArray.push(obj); index1++; index2++; } else if (l.DateTime > r.DateTime) { index2++; } else if (l.DateTime < r.DateTime) { index1++; } } return dataArray; } BWA.Chart.Instance = function (id, chartType) { id = '#' + id; return function (options) { $(id)[chartType](options); return function () { return $(id)[chartType]('instance'); } } } }); $(function () { 'use strict'; BemsWebApplication.Factory.FA = function (FA_fType, params, viewInfo) { var initialized = false, shouldReload = false, datagrid = null, currentTabIndex = ko.observable(0), facilityViewModel = new BWA.CmFacilityViewModel(), dataSource; var m_Facility; var facilityDataSource = BWA.db.createDataSource('CmFacility'), facilitiesForSearch = ko.observableArray(), facilityCodeForSearch = ko.observable(0), deferredForSearch = new $.Deferred(); var visiblePopup = ko.observable(false); var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId()); // cyim 2016.08.22 : 성능분석 그래프의 경우 시간 데이타만 표시되어야 한다 var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForHourOnly, null, false); // !!!! 중요 hcLee var charts = BWA.UserInfo.GetCharts(FA_fType); var multiViewOptions = { viewIndex: currentTabIndex, viewCount: parseInt(charts.length / 6) + 1, PageChanged: function () { if (currentTabIndex() == 1) { makePageChart(1); } if (currentTabIndex() == 2) { makePageChart(2); } handleSearchInSearchView(); }, }; var divs = []; function makePageChart(p) { // TYPE 1~5먼저 처리 if (p == 0 && charts.length < 5) switch (charts.length) { case 1: document.getElementById("f_detail_chart").style.height = "700px"; makeChart('clearfix', 0, 'margin-left: 1.1%; width: 66.25%; height: 700px; margin-top:28px;'); break; case 2: document.getElementById("f_detail_chart").style.height = "700px"; makeChart('clearfix', 0, 'margin-left: 1.1%; width: 66.25%; height: 340px; margin-top:28px;'); makeChart('clearfix', 1, 'margin-left: 1.1%; width: 66.25%; height: 340px; margin-top:18px;'); break; case 3: document.getElementById("f_detail_chart").style.height = "700px"; makeChart('clearfix', 0, 'margin-left: 1.1%; width: 66.25%; height: 340px; margin-top:28px;'); makeChart('clearfix', 1, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:18px;'); makeChart('clearfix', 2, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:18px;'); break; case 4: makeChart('clearfix', 0, 'margin-left: 1.1%; width: 66.25%; height: 340px; margin-top:28px;'); // 필요 document.getElementById('clearfix').insertAdjacentHTML('beforeend', "
"); makeChart('clearfix', 1, 'width: 32.5%; height: 340px; margin-top:18px;'); makeChart('clearfix', 2, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:18px;'); makeChart('clearfix', 3, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:18px;'); break; } if (p == 0 && charts.length >= 5) { makeChart('clearfix', 0, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:28px;'); makeChart('clearfix', 1, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:28px;'); document.getElementById('clearfix').insertAdjacentHTML('beforeend', "
"); makeChart('clearfix', 2, 'width: 32.5%; height: 340px; margin-top:18px;'); makeChart('clearfix', 3, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:18px;'); makeChart('clearfix', 4, 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:18px;'); } if (p >= 1) { var chartpage = 'subCharts_' + p; var itemIndex = 0; for (var c = p * 6 - 1; c < charts.length; c++) { if (c >= charts.length) return; if (c >= p * 6 + 5) return; var divid = 'divchart_' + charts[c].ChartId(); var chartId = 'chart_' + charts[c].ChartId(); var style = 'margin-left: 1.1%; width: 32.5%; height: 340px;'; if (itemIndex == 0) style = 'width: 32.5%; height: 340px;'; if (itemIndex == 3) style = 'width: 32.5%; height: 340px; margin-top:18px;'; if (itemIndex == 3) document.getElementById('clearfix').insertAdjacentHTML('beforeend', "
"); if (itemIndex > 3) style = 'margin-left: 1.1%; width: 32.5%; height: 340px; margin-top:18px;'; makeChart(chartpage, c, style); itemIndex++; } } } function makeChart(pid, index, style) { var divid = 'divchart_' + charts[index].ChartId(); if (document.getElementById(divid) == null) document.getElementById(pid).insertAdjacentHTML('beforeend', "
" + "

" + (charts[index].Title()) + "

" + "
"); } function makeChartView(p) { var div = []; if (p == 0) { div.push({ id: 'f_detail' }); for (var c = 0; c < charts.length; c++) { if (c >= charts.length) return div; if (c >= 5) return div; div.push({ id: 'divchart_' + charts[c].ChartId(), chartId: 'chart_' + charts[c].ChartId() }); } } else { for (var c = p * 6 - 1; c < charts.length; c++) { if (c >= charts.length) return div; if (c >= p * 6 + 5) return div; div.push({ id: 'divchart_' + charts[c].ChartId(), chartId: 'chart_' + charts[c].ChartId() }); } } return div; } for (var p = 0; p < multiViewOptions.viewCount; p++) { divs.push(makeChartView(p)); } var chartLayout = new BWA.ChartLayout({ divs: divs, multiViewOptions: multiViewOptions, }); var m = moment(); // 추가 2015 04 20 hcLee -> var CODE = $Code, FuelType = CODE.FuelType, FT = CODE.FacilityType, FC = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; function handleViewShown() { if (initialized === false) { makePageChart(0); initialized = true; timeBoxForSearch.setDefaultDate(); var eq = BWA.DataUtil.constructEqualFilter; facilityDataSource.filter([eq('SiteId', BWA.UserInfo.SiteId()), 'and', eq('FacilityTypeId', FA_fType)]); $.when(facilityDataSource.load()).done(function (facilities) { facilitiesForSearch(facilities); if (_.isEmpty(facilities) === false) { var f = facilities[0]; // 첫번째 설비 그려주기 위해 handleSelectedFacilityInSearchView(f); handleSearchInSearchView(); //2018 03 06 hcLee var datagrid = $('#FA_DataGridViewInSearchView').dxDataGrid('instance'); if (_.has(datagrid, 'selectRows')) { datagrid.selectRows(f); } } }); } else { handleSearchInSearchView(); } } if (shouldReload) { } function handleViewHidden() { var paging = BWA.ChartLayout.Paging; paging.sideOverlayVisible(false); $SearchView.visibleObservable(false); // hcLee 2015 03 23 visiblePopup(false); } function handleViewShowing() { } function refreshList() { } var searchViewOptions = { searchViewItems: [ { id: 'FacilityCode', ignoreValue: 0, defaultValue: 0, value: facilityCodeForSearch, dataSource: facilitiesForSearch }, ], promiseDataInSearchView: deferredForSearch.promise() }; function handleSelectedFacilityInSearchView(facility) { m_Facility = facility; return; } function ChartProcess(chartInfo, DataArray, valueAx, seriesF) { var chartid = '#chart_' + chartInfo.ChartId(); $(chartid).dxChart({ dataSource: DataArray, palette: chartInfo.Palette(), legend: { visible: true, verticalAlignment: 'top', horizontalAlignment: 'center' }, commonAxisSettings: { title: { valueMarginsEnabled: true, margin: 20, font: { color: "black", size: 18, weight: 600, family: "Nanum Gothic", }, }, axisDivisionFactor: 50, grid: { visible: false, } }, commonSeriesSettings: { argumentField: "DateTime", selectionStyle: { hatching: { direction: "left" } } }, valueAxis: valueAx, series: seriesF, crosshair: { enabled: true, width: 1, horizontalLine: { color: '#452d11', dashStyle: 'dash', visible: false }, verticalLine: { color: '#452d11', dashStyle: 'dash', visible: true }, label: { visible: true, backgroundColor: "#452d11", font: { color: "white", size: 12, weight: 600, } } }, tooltip: { enabled: true, color: "#3e1717", format: 'fixedPoint', precision: 2, font: { color: "white", size: 12, weight: 600, }, argumentFormat: 'shortDate', customizeText: function () { return { text: [this.argumentText, ': ', this.valueText].join('') }; } }, }); } function ChartProcess2(chartInfo, DataArray, valueAx) { var chartid = '#chart_' + chartInfo.ChartId(); var argAxis = { title: { text: chartInfo.XAxTitle(), } }; if (chartInfo.UseXAxMinMax()) $.extend(argAxis, { max: chartInfo.XAxMax(), min: chartInfo.XAxMin(), }); $(chartid).dxChart({ dataSource: DataArray, palette: chartInfo.Palette(), legend: { visible: false, verticalAlignment: 'top', horizontalAlignment: 'center' }, argumentAxis: argAxis, valueAxis: valueAx, series: { type: chartInfo.XSType(), valueField: 'lv1', argumentField: 'xv', // label: { visible: false, //customizeText: function() { // return this.argumentField + this.valueText; //} }, point: { size: 8 } }, crosshair: { enabled: true, width: 1, horizontalLine: { color: '#452d11', dashStyle: 'dash', visible: false }, verticalLine: { color: '#452d11', dashStyle: 'dash', visible: true }, label: { visible: true, backgroundColor: "#452d11", font: { color: "white", size: 12, weight: 600, } } }, tooltip: { enabled: true, color: "#3e1717", format: 'fixedPoint', precision: 2, font: { color: "white", size: 12, weight: 600, }, //argumentFormat: 'shortDate', customizeText: function () { return { text: [this.argumentText, ': ', this.valueText].join('') }; } }, }); } function FormulaProcessLeft(timeIntervalType, date, formulaList) { var deferred = new $.Deferred(); var promises = []; var f = m_Facility.toJS(); var DataArray = []; var p; _.each(formulaList, function (fid) { if (fid == null) fid = 0; if (fid >= 1000) p = formulaGet.apiGet({ FacilityTypeId: 103, FacilityCode: f.FacilityCode, // FacilityTypeId가 100보다 크면 의미가 없다. 정상 FormulaId: fid - 1000 + 1, TimeIntervalType: timeIntervalType, StartDate: date.startDate, EndDate: date.endDate }); else p = formulaGet.apiGet({ FacilityTypeId: f.FacilityTypeId, FacilityCode: f.FacilityCode, FormulaId: fid, TimeIntervalType: timeIntervalType, StartDate: date.startDate, EndDate: date.endDate }); promises.push(p); }); $.when.apply(this, promises) .done(function (data1, data2, data3, data4) { if (formulaList.length == 1) { _.each(data1, function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), lv1: x.Value }); }); deferred.resolve(DataArray); return DataArray; } if (data1 != undefined) _.each(data1[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), lv1: x.Value }); }); if (data2 != undefined) _.each(data2[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), lv2: x.Value }); }); if (data3 != undefined) _.each(data3[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), lv3: x.Value }); }); if (data4 != undefined) _.each(data4[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), lv4: x.Value }); }); deferred.resolve(DataArray); return DataArray; }) .fail(function (error) { //alert(error); //visiblePopup(false); }); return deferred.promise(); } function FormulaProcessRight(timeIntervalType, date, formulaList) { var deferred = new $.Deferred(); var promises = []; var f = m_Facility.toJS(); var DataArray = []; var p; _.each(formulaList, function (fid) { if (fid == null) fid = 0; if (fid >= 1000) p = formulaGet.apiGet({ FacilityTypeId: 103, FacilityCode: f.FacilityCode, // FacilityTypeId가 100보다 크면 의미가 없다. 정상 FormulaId: fid - 1000 + 1, TimeIntervalType: timeIntervalType, StartDate: date.startDate, EndDate: date.endDate }); else p = formulaGet.apiGet({ FacilityTypeId: f.FacilityTypeId, FacilityCode: f.FacilityCode, FormulaId: fid, TimeIntervalType: timeIntervalType, StartDate: date.startDate, EndDate: date.endDate }); promises.push(p); }); $.when.apply(this, promises) .done(function (data1, data2, data3, data4) { if (formulaList.length == 1) { _.each(data1, function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), rv1: x.Value }); }); deferred.resolve(DataArray); return DataArray; } if (data1 != undefined) _.each(data1[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), rv1: x.Value }); }); if (data2 != undefined) _.each(data2[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), rv2: x.Value }); }); if (data3 != undefined) _.each(data3[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), rv3: x.Value }); }); if (data4 != undefined) _.each(data4[0], function (x) { DataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), rv4: x.Value }); }); deferred.resolve(DataArray); return DataArray; }) .fail(function (error) { //alert(error); //visiblePopup(false); }); return deferred.promise(); } // 최종적으로 차트별로 이함수를 불러줘야 한다. function DrawChart(chartInfo, timeIntervalType, date) { if (chartInfo == null) return; if (chartInfo.UseX()) return DrawChart2(chartInfo, timeIntervalType, date); var promises = []; var f = m_Facility.toJS(); // L, R Y축 설정 var valueAx = []; if (chartInfo.LAxTitle() != null) { var va = { name: 'left', //2018 04 23 hcLee 추가 grid: { visible: true }, title: { text: chartInfo.LAxTitle(), }, }; if (chartInfo.UseLAxMinMax()) $.extend(va, { type: 'continuous', valueType: 'numeric', minValueMargin: 0, maxValueMargin: 0, max: chartInfo.LAxMax(), min: chartInfo.LAxMin(), tickInterval: (chartInfo.LAxMax() - chartInfo.LAxMin()) / 5, valueMarginsEnabled: true, }); // 2018 03 12 hcLee 추가 if (chartInfo.UseLCTLine()) $.extend(va, { constantLines: [{ label: { text: chartInfo.LCTLineTitle(), }, width: 2, value: chartInfo.LCTLineValue(), dashStyle: 'dash' }], }); valueAx.push(va); } if (chartInfo.RAxTitle() != null) { var va = { name: 'right', //2018 04 23 hcLee 추가 grid: { visible: true }, title: { text: chartInfo.RAxTitle(), }, position: 'right', label: { visible: true, }, }; if (chartInfo.UseRAxMinMax()) $.extend(va, { type: 'continuous', valueType: 'numeric', minValueMargin: 0, maxValueMargin: 0, max: chartInfo.RAxMax(), min: chartInfo.RAxMin(), tickInterval: (chartInfo.RAxMax() - chartInfo.RAxMin()) / 5, valueMarginsEnabled: true, }); // 2018 03 12 hcLee 추가 if (chartInfo.UseRCTLine()) $.extend(va, { constantLines: [{ label: { font: { color: 'red', }, horizontalAlignment: 'right', text: chartInfo.RCTLineTitle(), }, width: 2, value: chartInfo.RCTLineValue(), dashStyle: 'dash', color: 'red' // hcLee 2018 03 28 오른쪽 기준선 }], }); valueAx.push(va); } // L, R series 설정 var series = []; if (chartInfo.LSFmId1() > 0) series.push( { name: chartInfo.LSName1(), type: chartInfo.LSType1(), valueField: 'lv1', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); if (chartInfo.LSFmId2() > 0) series.push( { name: chartInfo.LSName2(), type: chartInfo.LSType2(), valueField: 'lv2', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); if (chartInfo.LSFmId3() > 0) series.push( { name: chartInfo.LSName3(), type: chartInfo.LSType3(), valueField: 'lv3', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); if (chartInfo.LSFmId4() > 0) series.push( { name: chartInfo.LSName4(), type: chartInfo.LSType4(), valueField: 'lv4', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); if (chartInfo.RSFmId1() > 0) series.push( { name: chartInfo.RSName1(), type: chartInfo.RSType1(), axis: 'right', valueField: 'rv1', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); if (chartInfo.RSFmId2() > 0) series.push( { name: chartInfo.RSName2(), type: chartInfo.RSType2(), axis: 'right', valueField: 'rv2', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); if (chartInfo.RSFmId3() > 0) series.push( { name: chartInfo.RSName3(), type: chartInfo.RSType3(), axis: 'right', valueField: 'rv3', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); if (chartInfo.RSFmId4() > 0) series.push( { name: chartInfo.RSName4(), type: chartInfo.RSType4(), axis: 'right', valueField: 'rv4', argumentField: 'DateTime', label: { visible: false, }, point: { size: 3 } }); var DataArray = []; promises.push(FormulaProcessLeft(timeIntervalType, date, [chartInfo.LSFmId1(), chartInfo.LSFmId2(), chartInfo.LSFmId3(), chartInfo.LSFmId4()])); promises.push(FormulaProcessRight(timeIntervalType, date, [chartInfo.RSFmId1(), chartInfo.RSFmId2(), chartInfo.RSFmId3(), chartInfo.RSFmId4()])); $.when.apply(this, promises) .done(function (dataL, dataR) { _.each(dataL, function (x) { DataArray.push(x); }); _.each(dataR, function (x) { DataArray.push(x); }); ChartProcess(chartInfo, DataArray, valueAx, series); }) .fail(function (error) { //alert(error); //visiblePopup(false); }); } // X가 시계열이 아닌 경우 별도 처리, 이 경우는 LY만 존재 하고 시리즈 또한 LY용 1개, X축 시리즈 1개 만 존재 한다. function DrawChart2(chartInfo, timeIntervalType, date) { if (chartInfo == null) return; var promises = []; var f = m_Facility.toJS(); // L, Y축 설정 var valueAx = []; if (chartInfo.LAxTitle() != null) { var va = { name: 'left', grid: { visible: true }, title: { text: chartInfo.LAxTitle(), }, }; if (chartInfo.UseLAxMinMax()) $.extend(va, { type: 'continuous', valueType: 'numeric', minValueMargin: 0, maxValueMargin: 0, max: chartInfo.LAxMax(), min: chartInfo.LAxMin(), tickInterval: (chartInfo.LAxMax() - chartInfo.LAxMin()) / 5, valueMarginsEnabled: true, }); // 2018 03 12 hcLee 추가 if (chartInfo.UseLCTLine()) $.extend(va, { constantLines: [{ label: { text: chartInfo.LCTLineTitle(), }, width: 2, value: chartInfo.LCTLineValue(), dashStyle: 'dash' }], }); valueAx.push(va); } var DataArray = []; promises.push(FormulaProcessLeft(timeIntervalType, date, [chartInfo.LSFmId1(), 0, 0, 0])); promises.push(FormulaProcessRight(timeIntervalType, date, [chartInfo.XSFmId(), 0, 0, 0])); $.when.apply(this, promises) .done(function (dataL, dataX) { _.each(dataL, function (x) { DataArray.push(x); }); _.each(dataX, function (x) { DataArray.push(x); }); var dataArray = BWA.Chart.getRelationDataArrayOnDateTimeNew(dataL, dataX, 'lv1', 'xv'); ChartProcess2(chartInfo, dataArray, valueAx); }) .fail(function (error) { //alert(error); //visiblePopup(false); }); } function handleSearchInSearchView(filter, searchViewItems, viewModel) { if (m_Facility == null) return; var f = m_Facility.toJS(); facilityViewModel.fromJS(f); var timeIntervalType = timeBoxForSearch.type(); var date = timeBoxForSearch.getDate(); // 2018 03 06 hcLee 테스트코드 if (currentTabIndex() == 0) { for (var c = 0; c < 5; c++) { if (c >= charts.length) return; DrawChart(charts[c], timeIntervalType, date); } } else { for (var c = currentTabIndex() * 6 - 1; c < charts.length; c++) { if (c >= charts.length) return; if (c >= currentTabIndex() * 6 + 5) return; DrawChart(charts[c], timeIntervalType, date); } } return; } var viewModel = $.extend(BWA.CommonView.create( params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView, undefined, chartLayout), { viewHidden: handleViewHidden, // hcLee 2015 06 03 refreshList: refreshList, viewShowing: handleViewShowing, scrolling: { mode: 'infinite' }, FA_DataGridOptions: { dataSource: facilitiesForSearch, columns: [ { dataField: 'Name', caption: $G('facilityName'), width: '100%', alignment: 'left' } ], filterRow: { visible: true, showOperationChooser: false }, selection: { mode: 'single' }, rowClick: function (clickRow) { handleSelectedFacilityInSearchView(clickRow.data); }, paging: { pageSize: 11, enabled: true } }, contentReadyAction: function (e) { datagrid = e.component; }, }); viewModel.timeBoxForSearch = timeBoxForSearch; viewModel.currentTabIndex = currentTabIndex; viewModel.multiViewItems = [ { facility: facilityViewModel, template: 'mainCharts' }, ]; for (var p = 1; p < multiViewOptions.viewCount; p++) { viewModel.multiViewItems.push({ template: 'subCharts_' + p }); } $HourGlassPopup(viewModel, visiblePopup); return viewModel; } });