BemsWebApplication.Water_RAnalysis = function (params, viewInfo) { "use strict"; var initialized = false, shouldReload = false, datagrid = null, currentTabIndex = ko.observable(0), facilityViewModel = new BWA.CmFacilityViewModel(), dataSource; var m_Facility; var multiViewItems = [{ template: 'mainCharts' }, { template: 'subCharts' } ]; var facilityDataSource = BWA.db.createDataSource('CmFacility'), facilitiesForSearch = ko.observableArray(), facilityCodeForSearch = ko.observable(0), deferredForSearch = new $.Deferred(); var visiblePopup = ko.observable(false); var dataCalorie = ko.observableArray(), dataAtfw = ko.observableArray(), dataTemperatureCalorie = ko.observableArray(), dataTemperatureElectricity = ko.observableArray(); var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId()); //var timeBoxForSearch = BWA.SearchView.createDateTimeBox(); // cyim 2016.08.22 : 성능분석 그래프의 경우 시간 데이타만 표시되어야 한다 var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForHourOnly, null, false); var chartEffi = BWA.Chart.Instance('chartEffiWRA', 'dxChart'); var chartLayout = new BWA.ChartLayout({ divs: [[{ id: 'WaterRDetail' }, { id: 'effi', chartId: 'chartEffiWRA' } ]], multiViewOptions: { viewIndex: currentTabIndex, viewCount: 1 } }); var m = moment(); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 // 팝업창뷰 보이기 속성 제어용 변수 선언 var DataGridPopup_Visible = ko.observable(false); // 그래프 출력 이후 엑셀출력을 위한 팝업창을 위해 임시 저장용 배열 선언 var dataArrayresult = ko.observableArray(); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 dataCalorie([ { DateTime: new Date(m.year(), m.month(), 1), Value: 50 }, { DateTime: new Date(m.year(), m.month(), 2), Value: 50 }, { DateTime: new Date(m.year(), m.month(), 3), Value: 60 }, { DateTime: new Date(m.year(), m.month(), 4), Value: 80 }, { DateTime: new Date(m.year(), m.month(), 5), Value: 100 }, { DateTime: new Date(m.year(), m.month(), 6), Value: 40, }, { DateTime: new Date(m.year(), m.month(), 7), Value: 120 }, { DateTime: new Date(m.year(), m.month(), 31), Value: 120 } ]); // 추가 2015 04 20 hcLee -> var CODE = $Code, FuelType = CODE.FuelType, FT = CODE.FacilityType, FC = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; // 추가 2015 04 20 hcLee <- //dataMonthForBar(dataDayForBar()); //dataDayForPie([ // { FuelTypeName: '전기', Value: 320 }, // { FuelTypeName: '가스', Value: 350 }, // { FuelTypeName: '수도', Value: 360 }, //]); //dataMonthForPie(dataDayForPie()); function handleViewShown() { if (initialized === false) { var chartOption = BWA.ChartOptions.WaterRAnalysis; chartEffi = chartEffi(chartOption.getChartEffiOptions($Code.TimeType.HOUR)); initialized = true; } //hcLee 2016 07 12 timeBoxForSearch.setDefaultDate(); var eq = BWA.DataUtil.constructEqualFilter; facilityDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), 'and', eq('FacilityTypeId', $Code.FacilityType.WATER_R) ]); facilityDataSource.load().done(function (facilities) { facilitiesForSearch(facilities); if (_.isEmpty(facilities) === false) { var f = facilities[0]; handleSelectedFacilityInSearchView(f); handleSearchInSearchView(); var datagrid = $('#WaterRDataGridViewInSearchView').dxDataGrid('instance'); if (_.has(datagrid, 'selectRows')) { datagrid.selectRows(f); } } }); } if (shouldReload) { //shouldReload = false; //dataSource.pageIndex(0); //dataSource.load(); } function handleViewHidden() { var paging = BWA.ChartLayout.Paging; paging.sideOverlayVisible(false); //paging.hideNextButton(true); //paging.hidePrevButton(true); $SearchView.visibleObservable(false); // hcLee 2015 03 23 visiblePopup(false); } function handleViewShowing() { } function refreshList() { //dataSource.pageIndex(0); //dataSource.load(); } var searchViewOptions = { searchViewItems: [ { id: 'FacilityCode', ignoreValue: 0, defaultValue: 0, value: facilityCodeForSearch, dataSource: facilitiesForSearch }, ], promiseDataInSearchView: deferredForSearch.promise() }; function handleSelectedFacilityInSearchView(facility) { m_Facility = facility; return; } function handleSearchInSearchView(filter, searchViewItems) { if (m_Facility == null) return; visiblePopup(true); $("#large-indicator").dxLoadIndicator({ height: 60, width: 60 }); var f = m_Facility.toJS(); facilityViewModel.fromJS(f); //var timeIntervalType = $Code.TimeIntervalType.QUARTERMIN; var timeIntervalType = timeBoxForSearch.type(); var formula = $Code.Formula[$Code.FacilityType.WATER_R]; var formulaIds = _.values(formula); var date = timeBoxForSearch.getDate(); //utils.toast.displayTime=1000000; //utils.toast.show('공조기 성능분석 중 입니다. 잠시만 기다려 주세요'); // var startDate = moment(). var promises = []; _.each(formulaIds, function (formulaId) { var p = formulaGet.apiGet({ FacilityTypeId: f.FacilityTypeId, FacilityCode: f.FacilityCode, FormulaId: formulaId, TimeIntervalType: timeIntervalType, StartDate: date.startDate, EndDate: date.endDate }); promises.push(p); }); /* // 외기 온도와 습도를 위해 추가 hcLee 2015 04 20 -> var commonParameters = { TimeIntervalType: $Code.TimeIntervalType.QUARTERMIN, StartDate: date.startDate, EndDate: date.endDate }; var temperatureParameters = { FacilityTypeId: FT.OUTDOOR, FacilityCode: FC.OUTDOOR, FormulaId: F[FT.OUTDOOR].TEMPERATURE, }; promises.push(formulaGet.apiGet(_.extend(temperatureParameters, commonParameters))); */ // 보일러는 필요 없다 $.when.apply(this, promises) .done(function (sw, rw, lev, lev2) { //lev: 저장조, lev2: 처리조 sw = sw[0]; rw = rw[0]; lev = lev[0]; lev2 = lev2[0]; var maxValue = 0; _.each(sw, function (x) { if (maxValue < x.Value) maxValue = x.Value; }); _.each(rw, function (x) { if (maxValue < x.Value) maxValue = x.Value; }); // chart 1 var EffiDataArray = []; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 var dataArray_Temp = []; var dataArray_Temp1 = []; var dataArray_Temp2 = []; var dataArray_Temp3 = []; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 _.each(sw, function (x) { dataArray_Temp.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate()), sw: x.Value //보충 }); }); _.each(rw, function (x) { dataArray_Temp1.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), rw: x.Value }); }); _.each(lev, function (x) { dataArray_Temp2.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), lev: x.Value }); }); _.each(lev2, function (x) { //추가 dataArray_Temp3.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()), lev2: x.Value }); }); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 // 배열을 하나로 합치자 var array_length_size = Math.max(dataArray_Temp.length, dataArray_Temp1.length, dataArray_Temp2.length, dataArray_Temp3.length); // 크기가 동일한 경우에만 허용함 (예외 방어용) if ((dataArray_Temp.length == dataArray_Temp1.length) && (dataArray_Temp.length == dataArray_Temp2.length)) { for (var i = 0; i < array_length_size; i++) { EffiDataArray.push( { DateTime: dataArray_Temp[i].DateTime, sw: dataArray_Temp[i].sw, rw: dataArray_Temp1[i].rw, lev: dataArray_Temp2[i].lev, lev2: dataArray_Temp3[i].lev2 //추가 }); } } dataArrayresult = EffiDataArray; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 //chartEffi().option('dataSource', EffiDataArray); 아래 4줄로 변경 var options = BWA.ChartOptions.WaterRAnalysis.getChartEffiOptions(timeBoxForSearch.type()); //chartEffi().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결) options.valueAxis[0].tickInterval = Math.round(maxValue / 9 * 100) / 100; options.dataSource = EffiDataArray; chartEffi().option(options); visiblePopup(false); /* msgbox. $("#large-indicator").dxLoadIndicator({ height: 60, width: 60 });*/ //chartTemperatureCalorie().option('dataSource', calories.concat(OUTtemperatures)); //chartTemperatureElectricity2().option('dataSource', electricityDataArray.concat(OUTtemperatures)); }) .fail(function (error) { //alert(error); visiblePopup(false); }); } // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 function DataGridPopup_ButtonClick() { DataGridPopup_Visible(true); } function handlePopupShown() { // 데이타소스 업데이트 $("#WaterRAnalysisDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult); // 팝업창 갱신 DataGridPopup_Visible(true); } // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 var viewModel = $.extend(BWA.CommonView.create( params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView, undefined, chartLayout), { // facility: facilityViewModel, refreshList: refreshList, viewHidden: handleViewHidden, // hcLee 2015 06 03 viewShowing: handleViewShowing, scrolling: { mode: 'infinite' }, WaterRDataGridOptions: { dataSource: facilitiesForSearch, columns: [ { dataField: 'Name', caption: $G('facilityName'), width: '100%', alignment: 'left' } ], filterRow: { visible: true, showOperationChooser: false }, selection: { mode: 'single' }, rowClick: function (clickRow) { handleSelectedFacilityInSearchView(clickRow.data); } }, contentReadyAction: function (e) { datagrid = e.component; } // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 , WaterRAnalysisDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 }); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 viewModel.WaterRAnalysisDataGridPopupOptions = { width: '650px', height: '830px', // 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(), shading: false }; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 viewModel.popupOptions = { width: 300, height: 100, contentTemplate: "info", showTitle: false, title: "메세지", visible: visiblePopup, dragEnabled: false, shading: false, closeOnOutsideClick: false }; viewModel.timeBoxForSearch = timeBoxForSearch; viewModel.currentTabIndex = currentTabIndex; viewModel.multiViewItems = [{ facility: facilityViewModel, template: 'mainCharts' }, { template: 'subCharts' } ]; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 // 주석이 너무 없음. 나중에 변경 작업을 진행하는 누군가가 시간 소비를 하지 않기 위해...남김 // 시간 포맷은 그래프에 귀속해야 되므로 포맷은 변경하지 않는 것이 유리함 // 전기,가스,수도 와 같이 선택적으로 변경해야 된다면 아래와 같이 캡션은 고정하지 말것 viewModel.WaterRAnalysisDataGridOptions = { dataSource: dataArrayresult, columns: [ { dataField: 'DateTime', caption: "날짜", width: '22%', alignment: 'center', format: 'fixedPoint', precision: 2 }, { dataField: 'lev', caption: "우수조 저장조 수위", width: '23%', alignment: 'center', format: 'fixedPoint', precision: 2 }, //수정 { dataField: 'lev2', caption: "우수조 처리조 수위", width: '23%', alignment: 'center', format: 'fixedPoint', precision: 2 }, //수정 { dataField: 'rw', caption: "우수 사용량", width: '17%', alignment: 'center', format: 'fixedPoint', precision: 2 }, { dataField: 'sw', caption: "보충 시수량", width: '17%', alignment: 'center', format: 'fixedPoint', precision: 2 } ], // 엑셀 출력 "export": { enabled: true, fileName: '우수조 성능분석' } }; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 return viewModel; };