BemsWebApplication.LocEnergyConsumption = function(params, viewInfo) { "use strict"; var BUILDING_DEPTH = 1, FLOOR_DEPTH = 2, ZONE_DEPTH = 3; var CODE = $Code, FuelType = CODE.FuelType, FT = CODE.FacilityType, FC = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; var initialized = false, shouldReload = false, dataSource; var pointHistoryGet = new BWA.Chart.PointHistoryGet(BWA.UserInfo.SiteId()), timeBoxForSearch = BWA.SearchView.createDateTimeBox(), formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId()); var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true, true), floorDataSource = BemsWebApplication.db.createDataSource('CmFloor'), zoneDataSource = BemsWebApplication.db.createDataSource('CmZone'), fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'), //check_input = ko.observable(false), //check_input2 = ko.observable(false), buildings = ko.observableArray(), timeTypesForSearch = ko.observableArray(), timeTypeIdForSearch = ko.observable(0), floorsForSearch = ko.observableArray(), zonesForSearch = ko.observableArray(), fuelTypesForSearch = ko.observableArray(), buildingIdForSearch = ko.observable(), buildingNameForSearch = ko.observable(), floorIdForSearch = ko.observable(), floorNameForSearch = ko.observable(), zoneIdForSearch = ko.observable(), zoneNameForSearch = ko.observable(), fuelTypeIdForSearch = ko.observable(), deferredForSearch = new $.Deferred(); var deferredForLoadData = new $.Deferred(); var chart = BWA.Chart.Instance('chart', 'dxChart'); var locationEnableForSearch = ko.observable(false); var chartDataArray = ko.observableArray(); chartDataArray([ { DateTime: new Date(2014, 11, 16, 0), OutdoorTemperature: -3.4, OutdoorHumidity: 40, Value: 30 }, { DateTime: new Date(2014, 11, 16, 0, 15), OutdoorTemperature: -1.1, OutdoorHumidity: 44, Value: 32 }, { DateTime: new Date(2014, 11, 16, 0, 30), OutdoorTemperature: 3, OutdoorHumidity: 48, Value: 33 }, { DateTime: new Date(2014, 11, 16, 0, 45), OutdoorTemperature: 4, OutdoorHumidity: 55, Value: 34 }, { DateTime: new Date(2014, 11, 16, 1), OutdoorTemperature: 8, OutdoorHumidity: 54, Value: 50 }, { DateTime: new Date(2014, 11, 16, 2), OutdoorTemperature: 10, OutdoorHumidity: 53, Value: 60 }, { DateTime: new Date(2014, 11, 16, 3), OutdoorTemperature: 11, Value: 80 }, { DateTime: new Date(2014, 11, 16, 4), OutdoorTemperature: 12, OutdoorHumidity: 48, Value: 100 }, { DateTime: new Date(2014, 11, 16, 5), OutdoorTemperature: 12, OutdoorHumidity: 40 }, { DateTime: new Date(2014, 11, 16, 6), Value: 120 } ]); var goalUpperBound = ko.observable(40); function handleClickTreeItem(element, data) { var eq = BWA.DataUtil.constructEqualFilter; var depth = data.depth; data = data.data; switch (depth) { case BUILDING_DEPTH: // building buildingIdForSearch(data.BuildingId()); buildingNameForSearch(data.Name()); floorIdForSearch(null); floorNameForSearch(''); zoneIdForSearch(null); zoneNameForSearch(''); break; case FLOOR_DEPTH: // floor floorIdForSearch(data.FloorId()); floorNameForSearch(data.Name()); zoneIdForSearch(null); zoneNameForSearch(''); break; case ZONE_DEPTH: // zone //buildingIdForSearch(data.BuildingId()); //buildingNameForSearch(data.Name()); //floorIdForSearch(data.FloorId()); //floorNameForSearch(data.Name()); zoneIdForSearch(data.ZoneId()); zoneNameForSearch(data.Name()); break; } } function handleSearchViewInitializeUpdate() { //alert('handleSearchViewInitializeUpdate'); $('#locationTreeViewInSearchView').cwTreeView({ width: '40%', height: '480px', onClickTreeItem: handleClickTreeItem, delegateDataSource: BWA.DataUtil.getLocationDataSourceDelegateForTreeView( buildingDataSource, floorDataSource, zoneDataSource ) }); } function handleViewShown() { //alert('handleViewShown'); // 2 if (initialized === false) { //alert('handleViewShown1'); // 3 chart = chart(BWA.ChartOptions.LocEnergyConsumption.getSeriesOptions(timeBoxForSearch.type(), goalUpperBound)); initialized = true; } if (shouldReload) { //shouldReload = false; //dataSource.pageIndex(0); //dataSource.load(); } } function handleViewHidden() { $SearchView.visibleObservable(false); // hcLee 2015 03 23 //hideOverlay(); // var dataGrid = $('#gridContainer').dxDataGrid('instance'); // dataGrid.clearSelection(); } function handleViewShowing() { //alert('handleViewShowing'); // 1 $.when(fuelTypesDataSource.load(), buildingDataSource.load()).done(function(fuelTypes, dbBuildings) { fuelTypes = fuelTypes[0]; dbBuildings = dbBuildings[0]; fuelTypesForSearch(_.rest(fuelTypes)); deferredForSearch.resolve(); if (_.isEmpty(dbBuildings) === false) { buildingIdForSearch(dbBuildings[0].BuildingId()); buildingNameForSearch(dbBuildings[0].Name()); floorNameForSearch(''); zoneNameForSearch(''); handleSearchInSearchView(); } }); } function refreshList() { //dataSource.pageIndex(0); //dataSource.load(); } var searchViewOptions = { searchViewItems: [ { id: 'FuelTypeId', ignoreValue: 0, defaultValue: $Code.FuelType.ELECTRICITY, value: fuelTypeIdForSearch, dataSource: fuelTypesForSearch } ], promiseDataInSearchView: deferredForSearch.promise() }; function handleSearchInSearchView() { var date = timeBoxForSearch.getDate(), timeType = timeBoxForSearch.type(); //alert('handleSearchInSearchView'); var commonParameters = { //TimeIntervalType: $Code.TimeIntervalType.QUARTERMIN, TimeIntervalType: timeBoxForSearch.type(), StartDate: date.startDate, EndDate: date.endDate }; var pointHistoryParameters = { BuildingId: buildingIdForSearch(), FloorId: floorIdForSearch(), ZoneId: zoneIdForSearch(), //FuelTypeId: fuelTypeIdForSearch() FuelTypeId: $Code.FuelType.ELECTRICITY, }; var temperatureParameters = { FacilityTypeId: FT.OUTDOOR, FacilityCode: FC.OUTDOOR, FormulaId: F[FT.OUTDOOR].TEMPERATURE, }; var humidityParameters = _.extend({}, temperatureParameters, { FormulaId: F[FT.OUTDOOR].HUMIDITY, }); $.when( pointHistoryGet.apiGet(_.extend(pointHistoryParameters, commonParameters))) /* pointHistoryGet.apiGet(_.extend(pointHistoryParameters, commonParameters)), formulaGet.apiGet(_.extend(temperatureParameters, commonParameters)), formulaGet.apiGet(_.extend(humidityParameters, commonParameters)))*/ //.done(function(values, temperatures, humidities) { .done(function(values) { var dataArray = []; _.each(values, function(x) { dataArray.push({ DateTime: moment(x.DateTime).toDate(), Value: x.Value }); }); /* _.each(temperatures[0], function (x) { dataArray.push({ DateTime: moment(x.DateTime).toDate(), Temperature: x.Value }); }); _.each(humidities[0], function(x) { dataArray.push({ DateTime: moment(x.DateTime).toDate(), Humidity: x.Value }); }); switch (fuelTypeIdForSearch()) { case $Code.FuelType.ELECTRICITY: goalUpperBound(5000); break; case $Code.FuelType.GAS: goalUpperBound(180); break; case $Code.FuelType.WATER: goalUpperBound(40); break; } */ //chart2 = chart(BWA.ChartOptions.LocEnergyConsumption.getSeriesOptions(timeBoxForSearch.type(), goalUpperBound)); var options = BWA.ChartOptions.LocEnergyConsumption.getSeriesOptions(timeBoxForSearch.type(), goalUpperBound()); chart().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결) //chart().cle //chart().option(null); //options.dataSource = null; //chart().option(options); options.dataSource = dataArray; chart().option(options); //chart().option('dataSource', dataArray); // chart().option('dataSource', dataArray); // chart().option('dataSource', chartDataArray()); // chartDataArray(values); }); $('#st').text('구역별 전력 사용량' + " : "+ buildingNameForSearch() + " - " + floorNameForSearch() + " - " + zoneNameForSearch()); //buildingNameForSearch } function handleMenuItemClick(e) { var chartIntance = chart(); var chartOptions = chartIntance._options; var series = chartIntance.getAllSeries(); var table = []; var columns = [chartOptions.argumentAxis.title]; var values = {}; _.each(chartOptions.valueAxis, function(a) { columns.push(a.title.text); }); _.each(series, function(s, i) { _.each(s.pointsByArgument, function(point, argument) { var array = values[argument]; if (_.isArray(array) === false) { array = values[argument] = []; } array[i] = point.value; }); }); var csvRows = [columns.join(',')]; _.each(values, function(values, argument) { csvRows.push([$G.dateTime(moment(Number(argument))), values.join(',')].join(',')); }); var csvContent = csvRows.join("\r\n"); var agent = navigator.userAgent.toLowerCase(); if (window.navigator.msSaveOrOpenBlob) { var fileData = ['\uFEFF' + csvContent]; var blobObject = new Blob(fileData); window.navigator.msSaveOrOpenBlob(blobObject, 'export.csv'); } else { var csvString = 'data:text/csv;utf-8,\uFEFF' + encodeURI(csvContent); var a = $('#csvExporter'); a.attr({ 'href': csvString, 'target': '_blank', 'download': 'export.csv' }); // a.trigger('click'); var aa = document.getElementById('csvExporter'); aa.click(); } } /* check_input.subscribe(checkboxTest); check_input2.subscribe(checkboxTest); function checkboxTest() { //dayEnergyUsageChart().option('series', series); alert(check_input()); }*/ var viewModel = $.extend(BWA.CommonView.create( params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView, handleSearchViewInitializeUpdate), { refreshList: refreshList, viewShowing: handleViewShowing, viewHidden: handleViewHidden, // hcLee 2015 03 23 locationEnableForSearch: locationEnableForSearch, handleMenuItemClick: handleMenuItemClick, menuItems: [{ text: '엑셀(csv) 내보내기' }] }); viewModel.timeBoxForSearch = timeBoxForSearch; //viewModel.check_input = check_input; //viewModel.check_input2 = check_input2; //var dd = new Date(2015, 4, 0); //var selectedDay = document.form1.JLDAY.value; //var lastDay = dd.getDate(); return viewModel; };