BemsWebApplication.ToeEnergyUsage = function (params, viewInfo) { "use strict"; var initialized = false, shouldReload = false, dataSource; var CODE = $Code, FuelType = CODE.FuelType, FacilityType = CODE.FacilityType, FacilityCode = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; var visiblePopup = ko.observable(false); var factorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'), chartPieDay = BWA.Chart.Instance('chartPieDayTOE', 'dxPieChart'), chartBarDay = BWA.Chart.Instance('chartBarDayTOE', 'dxChart'), chartPieMonth = BWA.Chart.Instance('chartPieMonthTOE', 'dxPieChart'), chartBarMonth = BWA.Chart.Instance('chartBarMonthTOE', 'dxChart'); var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly); var energyUsageStatusGet = new BWA.Chart.EnergyUsageStatusGet(BWA.UserInfo.SiteId()); var factorToe = null; var Toe = $Code.FuelType.WATER + 1; var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'), fuelTypesForSearch = ko.observableArray(), timeTypesForSearch = ko.observableArray(), timeTypeIdForSearch = ko.observable(0), fuelTypeIdForSearch = ko.observable(), deferredForSearch = new $.Deferred(); var dataArray = ko.observableArray(), dataDayForPie = ko.observableArray(), dataMonthForPie = ko.observableArray(), dataDayForBar = ko.observableArray(), dataMonthForBar = ko.observableArray(); var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId()); timeTypesForSearch($G.TimeTypes); var m = moment(); /*dataDayForBar([ { DateTime: new Date(m.year(), m.month(), 1), PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 2), Value: 50, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 3), Value: 60, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 4), Value: 80, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 5), Value: 100, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 6), Value: 40, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 7), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 31), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 } ]); dataMonthForBar(dataDayForBar()); dataDayForPie([ { FuelTypeName: '전기', Value: 320 }, { FuelTypeName: '가스', Value: 350 }, { FuelTypeName: '수도', Value: 360 }, ]); dataMonthForPie(dataDayForPie()); */ function handleMonthBarPointClick(clickedPoint) { var month = clickedPoint.originalArgument; //2016 02 24 var year = month.substr(0, 4); var month = (month.length == 11) ? month.substr(8, 2) : month.substr(8, 1); visiblePopup(true); loadDailyEnergyUsage(year, month); //console.log(month); } function handleViewShown() { if (initialized === false) { var chartOption = BWA.ChartOptions.ToeEnergyUsage; chartPieDay = chartPieDay(chartOption.getPieChartDayOptions()); chartBarDay = chartBarDay(chartOption.getBarChartDayOptions()); chartPieMonth = chartPieMonth(chartOption.getPieChartMonthOptions()); chartBarMonth = chartBarMonth(chartOption.getBarChartMonthOptions(handleMonthBarPointClick)); //$('#chartPieDay').dxPieChart(chartOption.getPieChartDayOptions(dataDayForPie)); //$('#chartBarDay').dxChart(chartOption.getBarChartDayOptions(dataDayForBar)); //$('#chartPieMonth').dxPieChart(chartOption.getPieChartMonthOptions(dataMonthForPie)); //$('#chartBarMonth').dxChart(chartOption.getBarChartMonthOptions(dataMonthForBar)); initialized = true; } /* factorToeDataSource.load().done(function(dbFactorToe) { factorToe = BWA.Bems.refineFactorToeDataArray(dbFactorToe); loadMonthlyEnergyUsage(); //loadDailyEnergyUsage(); });*/ } function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat) { var pieFields = [$G('electricity'), $G('gas'), $G('water')]; var toeFields = ['ElectricityToe', 'GasToe', 'WaterToe']; //var pieFields = [$G('electricity'), $G('gas')]; //var toeFields = ['ElectricityToe', 'GasToe',]; var fuelTypes = _.values($Code.FuelType); var calculate = factorToe.calculate; _.each(loadedDataSources, function (array, i) { var field = toeFields[i]; var sum = 0; _.each(array[0], function (x) { var data = { //DateTime: moment(x.DateTime).format(timeFormat), 2016 02 24 DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat), }; sum += data[field] = calculate(x.Value, fuelTypes[i]); barDataArray.push(data); /* var dataNULL = { DateTime: moment(x.DateTime).format(timeFormat), }; dataNULL[field] = 0; nullArray.push(dataNULL); */ }); pieDataArray.push({ FuelTypeName: pieFields[i], Value: sum }); }); //_.each(pieDataArray, function (x) { // if (x.Value == 0) x.Value = 1; //}); } var fuelTypes = [FuelType.ELECTRICITY, FuelType.GAS, FuelType.WATER]; function loadDailyEnergyUsage(year, month) { /* var startDate, endDate; var monthMoment; if (_.isUndefined(month)) { monthMoment = moment(); } else { monthMoment = moment().month(month - 1); } startDate = monthMoment.startOf('month'); endDate = monthMoment.clone().endOf('month'); */ //2016 02 24 var startDate, endDate; var monthMoment; monthMoment = moment(year).month(month - 1); startDate = monthMoment.startOf('month'); endDate = monthMoment.clone().endOf('month'); var promises = []; _.each(fuelTypes, function (x) { promises.push(energyUsageStatusGet.requestGetForUsgaeStatus(x, TIT.DAY) (startDate, endDate)); }); $.when.apply(this, promises).done(function () { var barDataArray = []; var pieDataArray = []; //var nullDataArray = []; //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D', nullDataArray); getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D'); /* var remainDate = _.range(moment().date(), moment().endOf('month').date()+1); _.each(remainDate, function(date) { barDataArray.push({ DateTime: date, ElectricityToe: 0, WaterToe: 0, GasToe: 0 }); });*/ //console.log(barDataArray); //chartBarDay().option('dataSource', null); chartPieDay().option('dataSource', pieDataArray); //chartBarDay().option('dataSource', barDataArray); var options = BWA.ChartOptions.ToeEnergyUsage.getBarChartDayOptions(); options.dataSource = barDataArray; chartBarDay().option(null); chartBarDay().option(options); $('#st1').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 TOE환산 에너지 사용 현황'); $('#st2').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 TOE환산 에너지 전체 사용량 비율'); $('#st3').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 TOE환산 에너지 사용량'); /* $('#st4').text(new Date().getFullYear() + '년 TOE환산 에너지 사용 현황'); $('#st5').text(new Date().getFullYear() + '년 TOE환산 에너지 전체 사용량 비율'); $('#st6').text(new Date().getFullYear() + '년 TOE환산 에너지 사용량'); */ $('#st4').text('TOE환산 에너지 사용 현황'); $('#st5').text('TOE환산 에너지 전체 사용량 비율'); $('#st6').text('TOE환산 에너지 사용량'); visiblePopup(false); }).fail(function (error) { //alert(error); visiblePopup(false); }); } function timeBoxForSearch() { /* visiblePopup(true); $("#large-indicator").dxLoadIndicator({ height: 60, width: 60 }); var date = timeBoxForSearch.getDate(), timeType = timeBoxForSearch.type(), fuelTypeId = fuelTypeIdForSearch*/ loadMonthlyEnergyUsage(); }; function loadMonthlyEnergyUsage() { visiblePopup(true); /* $("#large-indicator").dxLoadIndicator({ height: 60, width: 60 });*/ var date = timeBoxForSearch.getDate(); var promises = []; _.each(fuelTypes, function (x) { promises.push(energyUsageStatusGet.requestGetForUsgaeStatus(x, TIT.MONTH) // (moment().startOf('year'), moment())); //(moment().startOf('year'), moment().endOf('year'))); // 2016 02 24 위 막고 이렇게 했다가 (date.startDate, date.endDate)); // 2016 02 24 최종 }); $.when.apply(this, promises).done(function () { var barDataArray = []; var pieDataArray = []; //var nullDataArray = []; //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'M', nullDataArray); getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'M'); //console.log(barDataArray); chartPieMonth().option('dataSource', pieDataArray); //chartBarMonth().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결) //var chartOption = BWA.ChartOptions.ToeEnergyUsage; //chartBarMonth = chartBarMonth(chartOption.getBarChartMonthOptions(handleMonthBarPointClick)); // chartBarMonth().option('dataSource', null); // chartBarMonth().option('dataSource', barDataArray); var options = BWA.ChartOptions.ToeEnergyUsage.getBarChartMonthOptions(handleMonthBarPointClick); options.dataSource = barDataArray; chartBarMonth().option(null); chartBarMonth().option(options); //$('#chartBarMonth').dxChart(chartOption.getBarChartMonthOptions(barDataArray)); //(chartOption.getBarChartMonthOptions(barDataArray)); //chartBarMonth().getBarChartMonthOptions(barDataArray); /* var renderOptions = { force: true, animate: true, asyncSeriesRendering: false } chartBarMonth().render(renderOptions); */ //2015 11 23 동기화 문제로 여기로이동 //loadDailyEnergyUsage(); loadDailyEnergyUsage(date.endDate.getFullYear().toString(), (date.endDate.getMonth() + 1).toString()); //visiblePopup(false); }).fail(function (error) { //alert(error); visiblePopup(false); }); } function handleViewHidden() { visiblePopup(false); //hideOverlay(); // var dataGrid = $('#gridContainer').dxDataGrid('instance'); // dataGrid.clearSelection(); } function handleViewShowing() { factorToeDataSource.load().done(function (dbFactorToe) { factorToe = BWA.Bems.refineFactorToeDataArray(dbFactorToe); //loadMonthlyEnergyUsage(); handleSearchInSearchView(); }); } function handleSearchInSearchView() { /* visiblePopup(true); $("#large-indicator").dxLoadIndicator({ height: 60, width: 60 }); var date = timeBoxForSearch.getDate(), timeType = timeBoxForSearch.type(), fuelTypeId = fuelTypeIdForSearch*/ loadMonthlyEnergyUsage(); }; function refreshList() { //dataSource.pageIndex(0); //dataSource.load(); } var searchViewOptions = { searchViewItems: [ { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch }, { id: 'DateForHour', type: 'dateRange', isOnlyDate: true }, { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true }, ], promiseDataInSearchView: deferredForSearch.promise() }; var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), { refreshList: refreshList, viewShowing: handleViewShowing, }); viewModel.timeBoxForSearch = timeBoxForSearch; /* viewModel.popupOptions = { width: 300, height: 100, contentTemplate: "info", showTitle: false, title: "메세지", visible: visiblePopup, dragEnabled: false, shading: false, closeOnOutsideClick: false };*/ $HourGlassPopup(viewModel, visiblePopup); return viewModel; };