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.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(); /* dataArray([ { DateTime: new Date(m.year(), m.month(), m.date(), 0), Value: 30, PowerCo2: 40, GasCo2: 40, WaterCo2: 40 }, { DateTime: new Date(m.year(), m.month(), m.date(), 0, 15), Value: 32 }, { DateTime: new Date(m.year(), m.month(), m.date(), 0, 30), Value: 33 }, { DateTime: new Date(m.year(), m.month(), m.date(), 0, 45), Value: 34 }, { DateTime: new Date(m.year(), m.month(), m.date(), 1), Value: 50, PowerCo2: 40, GasCo2: 40, WaterCo2: 40 }, { DateTime: new Date(m.year(), m.month(), m.date(), 2), Value: 60, PowerCo2: 40, GasCo2: 40, WaterCo2: 40 }, { DateTime: new Date(m.year(), m.month(), m.date(), 3), Value: 80, PowerCo2: 40, GasCo2: 40, WaterCo2: 40 }, { DateTime: new Date(m.year(), m.month(), m.date(), 4), Value: 100, PowerCo2: 40, GasCo2: 40, WaterCo2: 40 }, { DateTime: new Date(m.year(), m.month(), m.date(), 5), Value: 40, PowerCo2: 40, GasCo2: 40, WaterCo2: 40 }, { DateTime: new Date(m.year(), m.month(), m.date(), 6), Value: 120, PowerCo2: 40, GasCo2: 40, WaterCo2: 40 } ]);*/ function handleViewShown() { if (initialized === false) { //chart = BWA.ChartOptions.DayYear.getChartOptions($Code.TimeType.HOUR); //chart = chart(BWA.ChartOptions.DayYearAnalysis.getChartOptions($Code.TimeType.HOUR)); chart = chart(BWA.ChartOptions.FmsEnergy.getChartOptions($Code.TimeType.HOUR)); initialized = true; } if (shouldReload) { //shouldReload = false; //dataSource.pageIndex(0); //dataSource.load(); } factorCo2DataSource.load().done(function (dbFactorCo2) { factorCo2 = BWA.Bems.refineFactorCo2DataArray(dbFactorCo2); }); } function handleViewHidden() { visiblePopup(false); $SearchView.visibleObservable(false); // hcLee 2015 03 23 //hideOverlay(); // var dataGrid = $('#gridContainer').dxDataGrid('instance'); // dataGrid.clearSelection(); } function handleViewShowing() { $.when(fuelTypesDataSource.load()).done(function (fuelTypes) { //fuelTypes.push({ // FuelTypeId: ko.observable(CO2), // Name: ko.observable('CO2') //}); fuelTypesForSearch($SearchView.filterObservableArrayForSelectBox('FuelTypeId', fuelTypes)); deferredForSearch.resolve(); handleSearchInSearchView(); }); } function refreshList() { //dataSource.pageIndex(0); //dataSource.load(); } 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()), 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 fieldL = co2FieldsL[i]; var dataL = { DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', }; //dataL[fieldL] = calculate(x.Value, fuelTypes[i]); 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(arguments, function (array, i) { _.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_tempL3; // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가 //chart().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결) //chartDataSource.concat(chartDataSourceLast); 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년전 //request(fuelTypeId, timeType)(date.startDate, date.endDate) $.when.apply(this, promises) .done(function (dataArray, dataArray2) { var dday = new Array('일', '월', '화', '수', '목', '금', '토'); var chartDataSource = []; var DataArray_temp = []; var DataArray_temp1 = []; var DataArray_temp2 = []; //var i = 0; //_.map(dataArray[0], function (x) { _.each(dataArray[0], function (x, i) { var data = { DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', //DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[x.DateTime.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()] + ')', //DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[x.DateTime.getDay()] + ')', ValueLast: (dataArray2[0].length != 0 && dataArray2[0].length - 1 >= i) ? dataArray2[0][i].Value : 0 //ValueLast: 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); //i++; //return x; }); //// 2017.11.27: 그리드 도표 작업 : 팝업창 추가 //_.each(dataArray[0], function (x, i) { // DataArray_temp.push({ // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')', // Value: x.Value // }); // 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 // }); //}); //_.each(dataArray[0], function (x) { //}); // 배열을 하나로 합치자 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_temp2; // 2017.11.27: 그리드 도표 작업 : 팝업창 추가 if (chartDataSource.length == 0) //errorMessage.message = '조회된 결과가 없습니다.'; utils.toast.show('데이터가 없습니다.'); else { //chart().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결) 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: '25%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' }, { dataField: 'Value', width: '25%', 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; };