BemsWebApplication.CO2EnergyUsage = function (params, viewInfo) { "use strict"; var initialized = false, shouldReload = false, dataSource; var CODE = $Code, //FuelTypes = CODE.NewFuelTypes, // 2015 04 03 거의 모든 Code는 사용하면 안된다. hcLee DB에서 읽어야 하는데 하드 코딩 되어 있다. FacilityType = CODE.FacilityType, FacilityCode = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; var visiblePopup = ko.observable(false); var //serviceTypesDataSource = BemsWebApplication.db.createDataSource('BemsServiceType', false, false), //factorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'), //fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'), factorCO2DataSource = BemsWebApplication.db.createDataSource('BemsFactorCo2'), chartPieDay = BWA.Chart.Instance('chartPieDayCO2', 'dxPieChart'), chartBarDay = BWA.Chart.Instance('chartBarDayCO2', 'dxChart'), chartPieMonth = BWA.Chart.Instance('chartPieMonthCO2', 'dxPieChart'), chartBarMonth = BWA.Chart.Instance('chartBarMonthCO2', 'dxChart'); var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly); var energyUsageStatusGet = new BWA.Chart.EnergyUsageStatusGet(BWA.UserInfo.SiteId()); // 2015 06 08 수정 CO2과 똑같이 //var energyUsageStatusGet = new BWA.Chart.PointHistoryGet(BWA.UserInfo.SiteId()); // 2015 06 08 수정 CO2과 똑같이 //var serviceType = null; //var fuelTypes = new Array(); //var fuelTypes = null; var factorCO2 = 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: '전기X', Value: 320 }, { FuelTypeName: '가스X', Value: 350 }, { FuelTypeName: '수도X', 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); } function handleViewShown() { if (initialized === false) { var chartOption = BWA.ChartOptions.CO2EnergyUsage; factorCO2DataSource.load().done(function (dbFactorCO2) { factorCO2 = BWA.Bems.refineFactorCo2DataArray(dbFactorCO2); chartOption.MakeSeries($Code.g_fuelTypes); chartPieDay = chartPieDay(chartOption.getPieChartDayOptions()); chartBarDay = chartBarDay(chartOption.getBarChartDayOptions()); chartPieMonth = chartPieMonth(chartOption.getPieChartMonthOptions()); chartBarMonth = chartBarMonth(chartOption.getBarChartMonthOptions(handleMonthBarPointClick)); //loadMonthlyEnergyUsage(); //loadDailyEnergyUsage(); handleSearchInSearchView(); }); /* fuelTypesDataSource.load().done(function (dbfuelType) { fuelTypes = dbfuelType; chartOption.MakeSeries(fuelTypes); 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; } else { //loadMonthlyEnergyUsage(); //loadDailyEnergyUsage(); handleSearchInSearchView(); } } function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat) { //var fuelTypes = _.values($Code.FuelType); var calculate = factorCO2.calculate; _.each(loadedDataSources, function (array, i) { //var field = fuelTypes[i].Name(); var field = $Code.g_fuelTypes[i].Name(); var sum = 0; _.each(array[0], function (x) { 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), }; sum += data[field] = calculate(x.Value, $Code.g_fuelTypes[i].FuelTypeId()); barDataArray.push(data); }); pieDataArray.push({ FuelTypeName: $Code.g_fuelTypes[i].Name(), Value: sum }); }); } //var fuelTypes = [FuelType.ELECTRICITY, FuelType.GAS, FuelType.WATER]; function loadDailyEnergyUsage(year, month) { 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: null, FloorId: null, ZoneId: null, FuelTypeId: fuelTypeIdForSearch() }; //var fuelTypes = _.values($Code.FuelType); var promises = []; _.each($Code.g_fuelTypes, function (x) { //pointHistoryParameters.FuelTypeId = x.FuelTypeId(); // 2015 06 08 수정 CO2과 똑같이 //promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters))); // 2015 06 08 수정 CO2과 똑같이 promises.push(energyUsageStatusGet.requestGetForUsgaeStatus(x.FuelTypeId(), TIT.DAY) // 2015 06 08 수정 CO2과 똑같이 (startDate, endDate)); // 2015 06 08 수정 CO2과 똑같이 }); $.when.apply(this, promises).done(function () { var barDataArray = []; var pieDataArray = []; 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); //2015 11 23 차트 다시 그리지 않는 문제 //chartBarDay().option('dataSource', barDataArray); 대신 아래3줄로 변경 var options = BWA.ChartOptions.CO2EnergyUsage.getBarChartDayOptions(); options.dataSource = barDataArray; chartBarDay().option(null); chartBarDay().option(options); chartPieDay().option('dataSource', pieDataArray); $('#st1').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 CO2환산 배출 현황'); $('#st2').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 CO2환산 배출 비율'); $('#st3').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 CO2환산 배출량'); $('#st4').text('CO2환산 배출 현황'); $('#st5').text('CO2환산 배출 전체 비율'); $('#st6').text('CO2환산 배출량'); visiblePopup(false); }); } function loadMonthlyEnergyUsage() { visiblePopup(true); var date = timeBoxForSearch.getDate(); var commonParameters = { TimeIntervalType: TIT.MONTH, StartDate: date.startDate, EndDate: date.endDate }; var pointHistoryParameters = { BuildingId: 0, FloorId: null, ZoneId: null, FuelTypeId: fuelTypeIdForSearch() }; var promises = []; _.each($Code.g_fuelTypes, function (x) { //pointHistoryParameters.FuelTypeId = x.FuelTypeId(); // 2015 06 08 수정 CO2과 똑같이 //promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters))); promises.push(energyUsageStatusGet.requestGetForUsgaeStatus(x.FuelTypeId(), TIT.MONTH) // 2015 06 08 수정 CO2과 똑같이 (date.startDate, date.endDate)); }); $.when.apply(this, promises).done(function () { var barDataArray = []; var pieDataArray = []; getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'M'); console.log(barDataArray); //2015 11 23 차트 다시 그리지 않는 문제 //chartBarMonth().option('dataSource', barDataArray); 대신 아래3줄로 변경 var options = BWA.ChartOptions.CO2EnergyUsage.getBarChartMonthOptions(handleMonthBarPointClick); options.dataSource = barDataArray; chartBarMonth().option(null); chartBarMonth().option(options); chartPieMonth().option('dataSource', pieDataArray); 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() { /* factorCO2DataSource.load().done(function (dbFactorCO2) { factorCO2 = BWA.Bems.refineFactorCo2DataArray(dbFactorCO2); //loadMonthlyEnergyUsage(); handleSearchInSearchView(); }); */ } function handleSearchInSearchView() { 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), { //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; };