BemsWebApplication.FmsEnergy = function (params, viewInfo) { "use strict"; var initialized = false, shouldReload = false, dataSource; var CO2 = $Code.FuelType.WATER + 1; var visiblePopup = ko.observable(false); var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'), factorCo2DataSource = BemsWebApplication.db.createDataSource('BemsFactorCo2'), fuelTypesForSearch = ko.observableArray(), timeTypesForSearch = ko.observableArray(), timeTypeIdForSearch = ko.observable(0), fuelTypeIdForSearch = ko.observable(), deferredForSearch = new $.Deferred(); var factorCo2 = null; var energyUsageStatusGet = new BWA.Chart.EnergyUsageStatusGet(BWA.UserInfo.SiteId()), timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForDayMonth),//TimeTypesForDayOnly dataArray = ko.observableArray(); // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가 // 팝업창뷰 보이기 속성 제어용 변수 선언 var DataGridPopup_Visible = ko.observable(false); var DataGridPopup_Visible1 = ko.observable(false); var dataArrayresult = ko.observableArray(); var dataArrayresult1 = ko.observableArray(); // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가 var chart = BWA.Chart.Instance('chartDYA', 'dxChart'); timeTypesForSearch($G.TimeTypes); var m = moment(); function handleViewShown() { if (initialized === false) { chart = chart(BWA.ChartOptions.FmsEnergy.getChartOptions($Code.TimeType.HOUR)); initialized = true; } if (shouldReload) { } factorCo2DataSource.load().done(function (dbFactorCo2) { factorCo2 = BWA.Bems.refineFactorCo2DataArray(dbFactorCo2); }); } function handleViewHidden() { visiblePopup(false); $SearchView.visibleObservable(false); // hcLee 2015 03 23 } function handleViewShowing() { $.when(fuelTypesDataSource.load()).done(function (fuelTypes) { fuelTypesForSearch($SearchView.filterObservableArrayForSelectBox('FuelTypeId', fuelTypes)); deferredForSearch.resolve(); handleSearchInSearchView(); }); } function refreshList() { } var searchViewOptions = { searchViewItems: [ { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch }, { id: 'FuelTypeId', ignoreValue: 0, defaultValue: 1, value: fuelTypeIdForSearch, dataSource: fuelTypesForSearch }, { id: 'DateForHour', type: 'dateRange', isOnlyDate: true }, { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true }, ], promiseDataInSearchView: deferredForSearch.promise() }; function handleSearchInSearchView() { visiblePopup(true); $("#large-indicator").dxLoadIndicator({ height: 60, width: 60 }); var date = timeBoxForSearch.getDate(), timeType = timeBoxForSearch.type(), fuelTypeId = fuelTypeIdForSearch(); var options = BWA.ChartOptions.FmsEnergy.getSeriesOptions(fuelTypeIdForSearch(), timeBoxForSearch.type()); var request = energyUsageStatusGet.requestGetForUsgaeStatus.bind(energyUsageStatusGet); // this.apiUri = 'BemsFormula/Calculation'; 이거 사용함.2015 05 15 hcLee var LaststartDate = moment(date.startDate).subtract(1, 'years'); var LastendtDate = moment(date.endDate).subtract(1, 'years'); var dateLast = BWA.Chart.getLastYearSameWeekDate(LaststartDate, LastendtDate, date.startDate.getDay()); if (fuelTypeId === CO2) { var promises = []; var fuelTypes = _.values($Code.FuelType); _.each(fuelTypes, function (fuelTypeId) { promises.push(request(fuelTypeId, timeType)(date.startDate, date.endDate)); }); _.each(fuelTypes, function (fuelTypeId) { promises.push(request(fuelTypeId, timeType)(dateLast.startDate, dateLast.endDate)); }); var calculate = factorCo2.calculate; $.when.apply(this, promises) .done(function (electricityArray, gasArray, waterArray, electricityArrayL, gasArrayL, waterArrayL) { var dday = new Array('일', '월', '화', '수', '목', '금', '토'); var chartDataSource = []; var chartDataSourceLast = []; var chartDataSource_temp = []; var chartDataSource_temp1 = []; var chartDataSource_temp2 = []; var chartDataSource_tempL = []; var chartDataSource_tempL1 = []; var chartDataSource_tempL2 = []; var chartDataSource_tempL3 = []; var co2Fields = ['ECo2', 'GCo2']; var co2FieldsL = ['ECo2Last', 'GCo2Last']; var RA = []; RA.push(electricityArray); RA.push(gasArray); RA.push(waterArray); _.each(RA, function (array, i) { var field = co2Fields[i]; _.each(array[0], function (x) { var data = { DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', }; data[field] = calculate(x.Value, fuelTypes[i]); chartDataSource.push(data); var dataL = { DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', }; chartDataSourceLast.push(dataL); }); }); // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가 _.each(electricityArray[0], function (x) { chartDataSource_temp.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', 'ECo2': calculate(x.Value, 1) }); }); _.each(gasArray[0], function (x) { chartDataSource_temp1.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', 'GCo2': calculate(x.Value, 2) }); }); // 배열을 하나로 합치자 var array_length_size = Math.max(chartDataSource_temp.length, chartDataSource_temp1.length); // 크기가 동일한 경우에만 허용함 (예외 방어용) if (chartDataSource_temp.length == chartDataSource_temp1.length) { for (var i = 0; i < array_length_size; i++) { chartDataSource_temp2.push( { DateTime: chartDataSource_temp[i].DateTime, 'ECo2': chartDataSource_temp[i].ECo2, 'GCo2': chartDataSource_temp1[i].GCo2 }); } } // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가 var RALast = []; RALast.push(electricityArrayL); RALast.push(gasArrayL); RALast.push(waterArrayL); var index = 0; _.each(RALast, function (array, i) { var fieldL = co2FieldsL[i]; _.each(array[0], function (x) { var dataL = { DateTime: chartDataSourceLast[index].DateTime, }; dataL[fieldL] = calculate(x.Value, fuelTypes[i]); chartDataSource.push(dataL); index++; }); }); /* // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가 _.each(electricityArray[0], function (x, i) { chartDataSource_tempL.push({ DateTime: chartDataSourceLast[i].DateTime, 'ECo2Last': calculate(x.Value, 1) }); }); _.each(gasArray[0], function (x, i) { chartDataSource_tempL1.push({ DateTime: chartDataSourceLast[i].DateTime, 'GCo2Last': calculate(x.Value, 2) }); }); // 배열을 하나로 합치자 var array_length_size = Math.max(chartDataSource_tempL.length, chartDataSource_tempL1.length); // 크기가 동일한 경우에만 허용함 (예외 방어용) if (chartDataSource_tempL.length == chartDataSource_tempL1.length) { for (var i = 0; i < array_length_size; i++) { chartDataSource_tempL2.push( { DateTime1: chartDataSource_tempL[i].DateTime, 'ECo2Last': chartDataSource_tempL[i].ECo2Last, 'GCo2Last': chartDataSource_tempL1[i].GCo2Last }); } } var array_length_size = Math.max(chartDataSource_temp2.length, chartDataSource_tempL2.length); // 크기가 동일한 경우에만 허용함 (예외 방어용) if (chartDataSource_temp2.length == chartDataSource_tempL2.length) { for (var i = 0; i < array_length_size; i++) { chartDataSource_tempL3.push( { DateTime: chartDataSource_temp2[i].DateTime, 'ECo2': chartDataSource_temp2[i].ECo2, 'GCo2': chartDataSource_temp2[i].GCo2, DateTime1: chartDataSource_tempL2[i].DateTime1, 'ECo2Last': chartDataSource_tempL2[i].ECo2Last, 'GCo2Last': chartDataSource_tempL2[i].GCo2Last }); } } */ dataArrayresult1 = chartDataSource_tempL2;//chartDataSource_tempL3 // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가 options.dataSource = chartDataSource; chart().option(options); visiblePopup(false); }) .fail(function (error) { visiblePopup(false); }); } else { var promises = []; promises.push(request(fuelTypeId, timeType)(date.startDate, date.endDate)); // 현재 promises.push(request(fuelTypeId, timeType)(dateLast.startDate, dateLast.endDate)); // 1년전 $.when.apply(this, promises) .done(function (dataArray, dataArray2) { var dday = new Array('일', '월', '화', '수', '목', '금', '토'); var chartDataSource = []; var DataArray_temp = []; var DataArray_temp1 = []; var DataArray_temp2 = []; _.each(dataArray[0], function (x, i) { var data = { DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', Value: x.Value } DataArray_temp.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', Value: x.Value }); chartDataSource.push(data); //var data2 = { // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', // ValueLast: (dataArray2[0].length != 0 && dataArray2[0].length - 1 >= i) ? dataArray2[0][i].Value : 0 //} //DataArray_temp1.push({ // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', // ValueLast: (dataArray2[0].length != 0 && dataArray2[0].length - 1 >= i) ? dataArray2[0][i].Value : 0 //}); //chartDataSource.push(data2); }); //// 배열을 하나로 합치자 //var array_length_size = Math.max(DataArray_temp.length, DataArray_temp1.length); //// 크기가 동일한 경우에만 허용함 (예외 방어용) //if (DataArray_temp.length == DataArray_temp1.length) { // for (var i = 0; i < array_length_size; i++) { // DataArray_temp2.push( // { // DateTime: DataArray_temp[i].DateTime, // Value: DataArray_temp[i].Value, // DateTime1: DataArray_temp1[i].DateTime, // ValueLast: DataArray_temp1[i].ValueLast // }); // } //} dataArrayresult = DataArray_temp; //DataArray_temp2 // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 if (chartDataSource.length == 0) utils.toast.show('데이터가 없습니다.'); else { options.dataSource = chartDataSource; chart().option(options); } visiblePopup(false); }) .fail(function (error) { visiblePopup(false); }); } } // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 function DataGridPopup_ButtonClick() { if (fuelTypeIdForSearch() == CO2) DataGridPopup_Visible1(true); else DataGridPopup_Visible(true); } function handlePopupShown() { // 컬럼명 업데이트 var ColumnCaptionName = ""; switch (fuelTypeIdForSearch()) { case $Code.FuelType.ELECTRICITY: ColumnCaptionName = "전기"; viewModel.FmsEnergyDataGridOptions.columns[1].caption = ColumnCaptionName; //viewModel.FmsEnergyDataGridOptions.columns[3].caption = ColumnCaptionName; $("#FmsEnergyDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult); DataGridPopup_Visible(true); break; case CO2: ColumnCaptionName = "CO2"; $("#FmsEnergyDataGrid_Container1").dxDataGrid("instance").option("dataSource", dataArrayresult1); DataGridPopup_Visible1(true) break; case $Code.FuelType.GAS: ColumnCaptionName = "가스"; viewModel.FmsEnergyDataGridOptions.columns[1].caption = ColumnCaptionName; //viewModel.FmsEnergyDataGridOptions.columns[3].caption = ColumnCaptionName; $("#FmsEnergyDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult); DataGridPopup_Visible(true); break; case $Code.FuelType.WATER: ColumnCaptionName = "수도"; viewModel.FmsEnergyDataGridOptions.columns[1].caption = ColumnCaptionName; //viewModel.FmsEnergyDataGridOptions.columns[3].caption = ColumnCaptionName; $("#FmsEnergyDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult); DataGridPopup_Visible(true); break; } } // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), { refreshList: refreshList, viewHidden: handleViewHidden, // hcLee 2015 03 23 viewShowing: handleViewShowing, FmsEnergyDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick }); // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 // 그래프 도표 팝업창 viewModel.FmsEnergyDataGridPopupOptions = { width: '480px', height: '750px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨 contentTemplate: "content", showTitle: true, title: "도표", visible: DataGridPopup_Visible, dragEnabled: true, closeOnOutsideClick: true, shownAction: handlePopupShown, animation: window.utils.popup.createAnimation() }; viewModel.FmsEnergyDataGridPopup1 = { width: '700px', height: '750px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨 contentTemplate: "content", showTitle: true, title: "도표", visible: DataGridPopup_Visible1, dragEnabled: true, closeOnOutsideClick: true, shownAction: handlePopupShown, animation: window.utils.popup.createAnimation() }; // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 viewModel.timeBoxForSearch = timeBoxForSearch; viewModel.popupOptions = { width: 300, height: 160, contentTemplate: "info", showTitle: false, title: "메세지", visible: visiblePopup, dragEnabled: false, shading: false, closeOnOutsideClick: false }; // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 viewModel.FmsEnergyDataGridOptions = { dataSource: dataArrayresult, paging: { pageSize: 17 }, columns: [ { dataField: 'DateTime', caption: "날짜", width: '35%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' }, { dataField: 'Value', width: '65%', alignment: 'center', format: 'fixedPoint', precision: 2 }, //{ dataField: 'DateTime1', caption: "작년", width: '25%', alignment: 'center', format: 'fixedPoint', precision: 2 }, //{ dataField: 'ValueLast', width: '25%', alignment: 'center', format: 'fixedPoint', precision: 2 } ], "export": { enabled: true, fileName: '에너지 사용량 조회' } }; viewModel.FmsEnergyDataGridOptions1 = { dataSource: dataArrayresult1, paging: { pageSize: 17 }, columns: [ { dataField: 'DateTime', caption: "날짜", width: '16%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' }, { dataField: 'ECo2', caption: "전력 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 }, { dataField: 'GCo2', caption: "가스 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 }, //{ dataField: 'DateTime1', caption: "작년", width: '16%', alignment: 'center', }, //{ dataField: 'ECo2Last', caption: "전력 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 }, //{ dataField: 'GCo2Last', caption: "가스 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 } ], "export": { enabled: true, fileName: '에너지 사용량 조회' } }; // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 return viewModel; };