BemsWebApplication.ServiceEnergyUsageKC = function (params, viewInfo) { "use strict"; var initialized = false, shouldReload = false, dataSource; var CODE = $Code, FuelType = CODE.g_fuelTypes, FacilityType = CODE.FacilityType, FacilityCode = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; var visiblePopup = ko.observable(false); var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly); var serviceTypesDataSource = BemsWebApplication.db.createDataSource('BemsServiceType'), factorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'), //fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'), factorCo2DataSource = BemsWebApplication.db.createDataSource('BemsFactorCo2'), chartPieDaySU = BWA.Chart.Instance('chartPieDaySU', 'dxPieChart'), chartBarDaySU = BWA.Chart.Instance('chartBarDaySU', 'dxChart'), chartPieMonthSU = BWA.Chart.Instance('chartPieMonthSU', 'dxPieChart'), chartBarMonthSU = BWA.Chart.Instance('chartBarMonthSU', 'dxChart'); //var energyUsageStatusGet = new BWA.Chart.EnergyUsageStatusGet(BWA.UserInfo.SiteId()); var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId()); var serviceType = null; var factorToeKcal = null; //var Toe = $Code.FuelType.WATER + 1; //var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'), var //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 26 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.ServiceEnergyUsageKC; serviceTypesDataSource.filter([ ['ServiceTypeId', '<', 100] //'and', //['ServiceTypeId', '>', 0] ]); //if () serviceTypesDataSource.load().done(function (dbServieType) { serviceType = dbServieType; chartOption.MakeSeries(serviceType); //loadDailyEnergyUsage(); //loadMonthlyEnergyUsage(); chartPieDaySU = chartPieDaySU(chartOption.getPieChartDayOptions()); chartBarDaySU = chartBarDaySU(chartOption.getBarChartDayOptions()); chartPieMonthSU = chartPieMonthSU(chartOption.getPieChartMonthOptions()); chartBarMonthSU = chartBarMonthSU(chartOption.getBarChartMonthOptions(handleMonthBarPointClick)); initialized = true; }); } /* factorToeDataSource.load().done(function (dbFactorToe) { factorToeKcal = BWA.Bems.refineFactorKCalDataArray(dbFactorToe); }); loadDailyEnergyUsage(); loadMonthlyEnergyUsage(); */ } function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat) { /* var pieFields = [$G('electricity'), $G('gas'), $G('water')]; var toeFields = ['ElectricityToe', 'GasToe', 'WaterToe']; 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 field2 = serviceType[x.serviceType].Name(); var data = { DateTime: moment(x.DateTime).format(timeFormat), }; sum += data[field] = calculate(x.Value, fuelTypes[i]); //sum2 += data[field2] = calculate(x.Value, fuelTypes[i]); barDataArray.push(data); }); //alert(serviceType[0].Name); pieDataArray.push({ //FuelTypeName: pieFields[i], FuelTypeName: serviceType[i].Name(), Value: sum }); }); */ //var pieFields = [$G('electricity'), $G('gas'), $G('water')]; //var toeFields = ['ElectricityToe', 'GasToe', 'WaterToe']; //var fuelTypes = _.values($Code.FuelType); var calculate = factorToeKcal.calculate; _.each(loadedDataSources, function (array, i) { _.each(array[0], function (x) { x.Value = calculate(x.Value, FuelType[i].FuelTypeId()); }); }); //var sums =new Number[8]; var sums = new Array(serviceType.length); //var sums = new Array(8); for (var v = 0; v < sums.length; v++) sums[v] = 0; // 미리 준비한다. var Datas = new Array(); _.each(loadedDataSources, function (array, i) { _.each(array[0], function (x) { if (i == 0) { var data = { //DateTime: moment(x.DateTime).format(timeFormat), DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat), }; var b = (function (data) { var ret; for (var d = 0; d < Datas.length; d++) { if (Datas[d].DateTime == data.DateTime) return false; } return true; })(data); if (b) { for (var s = 1; s < serviceType.length; s++) { var fieldName = serviceType[s].Name(); data[fieldName] = 0; } Datas.push(data); } } else return false; }); }); _.each(loadedDataSources, function (array, i) { _.each(array[0], function (x) { var fieldName = serviceType[x.ServiceType].Name(); _.each(Datas, function (d) { if (timeFormat == 'M') { if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) { d[fieldName] += x.Value; } } else { if (d.DateTime == moment(x.DateTime).format(timeFormat)) { d[fieldName] += x.Value; } } }); sums[x.ServiceType] += x.Value; //barDataArray.push(data); }); }); _.each(Datas, function (x) { barDataArray.push(x); }); //alert(serviceType[0].Name); _.each(sums, function (x, i) { if (i > 0) pieDataArray.push({ FuelTypeName: serviceType[i].Name(), Value: x }); }); } function getChartDataFromDataSources2(loadedDataSources, barDataArray, pieDataArray, timeFormat) { var calculate = factorToeKcal.calculate; /* _.each(loadedDataSources, function (array, i) { _.each(array, function (x) { x.Value = calculate(x.Value, FuelType[i].FuelTypeId()); }); }); */ var sums = new Array(serviceType.length); for (var v = 0; v < sums.length; v++) sums[v] = 0; // 미리 준비한다. var Datas = new Array(); _.each(loadedDataSources, function (array, i) { _.each(array, function (x) { if (i == 0) { var data = { //DateTime: moment(x.DateTime).format(timeFormat), DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat), }; var b = (function (data) { var ret; for (var d = 0; d < Datas.length; d++) { if (Datas[d].DateTime == data.DateTime) return false; } return true; })(data); if (b) { for (var s = 1; s < serviceType.length; s++) { var fieldName = serviceType[s].Name(); data[fieldName] = 0; } Datas.push(data); } } else return false; }); }); _.each(loadedDataSources, function (array, i) { _.each(array, function (x) { var fieldName = serviceType[x.ServiceType].Name(); _.each(Datas, function (d) { if (timeFormat == 'M') { if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) { d[fieldName] += x.Value; } } else { if (d.DateTime == moment(x.DateTime).format(timeFormat)) { d[fieldName] += x.Value; } } }); sums[x.ServiceType] += x.Value; //barDataArray.push(data); }); }); _.each(Datas, function (x) { barDataArray.push(x); }); //alert(serviceType[0].Name); _.each(sums, function (x, i) { if (i > 0) pieDataArray.push({ FuelTypeName: serviceType[i].Name(), Value: x }); }); } function handleSearchInSearchView() { loadMonthlyEnergyUsage(); }; //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 26 var startDate, endDate; var monthMoment; monthMoment = moment(year).month(month - 1); startDate = monthMoment.startOf('month'); endDate = monthMoment.clone().endOf('month'); var commonParameters = { TimeIntervalType: TIT.DAY, StartDate: startDate, EndDate: endDate }; var pointHistoryParameters = { BuildingId: 0, FloorId: null, ZoneId: null, FuelTypeId: fuelTypeIdForSearch() }; var promises = []; /* _.each(FuelType, function (x) { if (x.FuelTypeId() < 3) { pointHistoryParameters.FuelTypeId = x.FuelTypeId(); promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters))); } //promises.push(energyUsageStatusGet.requestGetForEnergyService(x, TIT.DAY,7) //(startDate, endDate)); });*/ pointHistoryParameters.FuelTypeId = -1; promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters))); $.when.apply(this, promises).done(function (v) { var barDataArray = []; var pieDataArray = []; //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D'); getChartDataFromDataSources2(v, 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); */ //2015 11 23 차트 다시 그리지 않는 문제 //chartBarDay().option('dataSource', barDataArray); // 대신 아래3줄로 변경 var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartDayOptions(); options.dataSource = barDataArray; chartBarDaySU().option(null); chartBarDaySU().option(options); chartPieDaySU().option('dataSource', pieDataArray); visiblePopup(false); $('#st1').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용 현황'); $('#st2').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 전체 사용량 비율'); $('#st3').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용량'); $('#st4').text('kcal환산 용도별 사용 현황'); $('#st5').text('kcal환산 용도별 전체 사용량 비율'); $('#st6').text('kcal환산 용도별 사용량'); }) .fail(function (error) { //alert(error); visiblePopup(false); }); } function loadMonthlyEnergyUsage() { visiblePopup(true); var date = timeBoxForSearch.getDate(); var commonParameters = { TimeIntervalType: TIT.MONTH, // StartDate: moment().startOf('year'), // EndDate: moment() StartDate: date.startDate, EndDate: date.endDate }; var pointHistoryParameters = { BuildingId: 0, FloorId: null, ZoneId: null, FuelTypeId: fuelTypeIdForSearch() }; var promises = []; /* _.each(FuelType, function (x) { if (x.FuelTypeId() < 3) { pointHistoryParameters.FuelTypeId = x.FuelTypeId(); promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters))); } });*/ pointHistoryParameters.FuelTypeId = -1; promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters))); //pointHistoryParameters.FuelTypeId = 1; //promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters))); $.when.apply(this, promises).done(function (v) { var barDataArray = []; var pieDataArray = []; //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'M'); getChartDataFromDataSources2(v, barDataArray, pieDataArray, 'M'); console.log(barDataArray); //2015 11 23 차트 다시 그리지 않는 문제 //chartBarMonth().option('dataSource', barDataArray); 대신 아래3줄로 변경 var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartMonthOptions(handleMonthBarPointClick); options.dataSource = barDataArray; chartBarMonthSU().option(null); chartBarMonthSU().option(options); chartPieMonthSU().option('dataSource', pieDataArray); //visiblePopup(false); loadDailyEnergyUsage(date.endDate.getFullYear().toString(), (date.endDate.getMonth() + 1).toString()); }) .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) { factorToeKcal = BWA.Bems.refineFactorKCalDataArray(dbFactorToe); handleSearchInSearchView(); }); } 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), { //var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, null, ko.observable(null), handleViewShown), { refreshList: refreshList, viewShowing: handleViewShowing, }); viewModel.timeBoxForSearch = timeBoxForSearch; $HourGlassPopup(viewModel, visiblePopup); return viewModel; };