123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 |
- BemsWebApplication.DayYearAnalysis = 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.DayYearAnalysis.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.DayYearAnalysis.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.DayYearAnalysisDataGridOptions.columns[1].caption = ColumnCaptionName;
- viewModel.DayYearAnalysisDataGridOptions.columns[3].caption = ColumnCaptionName;
- $("#DayYearAnalysisDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
- DataGridPopup_Visible(true);
- break;
- case CO2:
- ColumnCaptionName = "CO2";
- $("#DayYearAnalysisDataGrid_Container1").dxDataGrid("instance").option("dataSource", dataArrayresult1);
- DataGridPopup_Visible1(true)
- break;
- case $Code.FuelType.GAS:
- ColumnCaptionName = "가스";
- viewModel.DayYearAnalysisDataGridOptions.columns[1].caption = ColumnCaptionName;
- viewModel.DayYearAnalysisDataGridOptions.columns[3].caption = ColumnCaptionName;
- $("#DayYearAnalysisDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
- DataGridPopup_Visible(true);
- break;
- case $Code.FuelType.WATER:
- ColumnCaptionName = "수도";
- viewModel.DayYearAnalysisDataGridOptions.columns[1].caption = ColumnCaptionName;
- viewModel.DayYearAnalysisDataGridOptions.columns[3].caption = ColumnCaptionName;
- $("#DayYearAnalysisDataGrid_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,
- DayYearAnalysisDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick
- });
- // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
- // 그래프 도표 팝업창
- viewModel.DayYearAnalysisDataGridPopupOptions = {
- 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.DayYearAnalysisDataGridPopupOptions1 = {
- 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.DayYearAnalysisDataGridOptions = {
- 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.DayYearAnalysisDataGridOptions1 = {
- 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;
- };
|