eefd7382668037c5a4154e9126f540c15a8b9301.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. BemsWebApplication.FmsEnergy = function (params, viewInfo) {
  2. "use strict";
  3. var initialized = false,
  4. shouldReload = false,
  5. dataSource;
  6. var CO2 = $Code.FuelType.WATER + 1;
  7. var visiblePopup = ko.observable(false);
  8. var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  9. factorCo2DataSource = BemsWebApplication.db.createDataSource('BemsFactorCo2'),
  10. fuelTypesForSearch = ko.observableArray(),
  11. timeTypesForSearch = ko.observableArray(),
  12. timeTypeIdForSearch = ko.observable(0),
  13. fuelTypeIdForSearch = ko.observable(),
  14. deferredForSearch = new $.Deferred();
  15. var factorCo2 = null;
  16. var energyUsageStatusGet = new BWA.Chart.EnergyUsageStatusGet(BWA.UserInfo.SiteId()),
  17. timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForDayMonth),//TimeTypesForDayOnly
  18. dataArray = ko.observableArray();
  19. // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가
  20. // 팝업창뷰 보이기 속성 제어용 변수 선언
  21. var DataGridPopup_Visible = ko.observable(false);
  22. var DataGridPopup_Visible1 = ko.observable(false);
  23. var dataArrayresult = ko.observableArray();
  24. var dataArrayresult1 = ko.observableArray();
  25. // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가
  26. var chart = BWA.Chart.Instance('chartDYA', 'dxChart');
  27. timeTypesForSearch($G.TimeTypes);
  28. var m = moment();
  29. function handleViewShown() {
  30. if (initialized === false) {
  31. chart = chart(BWA.ChartOptions.FmsEnergy.getChartOptions($Code.TimeType.HOUR));
  32. initialized = true;
  33. }
  34. if (shouldReload) {
  35. }
  36. factorCo2DataSource.load().done(function (dbFactorCo2) {
  37. factorCo2 = BWA.Bems.refineFactorCo2DataArray(dbFactorCo2);
  38. });
  39. }
  40. function handleViewHidden() {
  41. visiblePopup(false);
  42. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  43. }
  44. function handleViewShowing() {
  45. $.when(fuelTypesDataSource.load()).done(function (fuelTypes) {
  46. fuelTypesForSearch($SearchView.filterObservableArrayForSelectBox('FuelTypeId', fuelTypes));
  47. deferredForSearch.resolve();
  48. handleSearchInSearchView();
  49. });
  50. }
  51. function refreshList() {
  52. }
  53. var searchViewOptions = {
  54. searchViewItems: [
  55. { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch },
  56. { id: 'FuelTypeId', ignoreValue: 0, defaultValue: 1, value: fuelTypeIdForSearch, dataSource: fuelTypesForSearch },
  57. { id: 'DateForHour', type: 'dateRange', isOnlyDate: true },
  58. { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true },
  59. ],
  60. promiseDataInSearchView: deferredForSearch.promise()
  61. };
  62. function handleSearchInSearchView() {
  63. visiblePopup(true);
  64. $("#large-indicator").dxLoadIndicator({
  65. height: 60,
  66. width: 60
  67. });
  68. var date = timeBoxForSearch.getDate(),
  69. timeType = timeBoxForSearch.type(),
  70. fuelTypeId = fuelTypeIdForSearch();
  71. var options = BWA.ChartOptions.FmsEnergy.getSeriesOptions(fuelTypeIdForSearch(), timeBoxForSearch.type());
  72. var request = energyUsageStatusGet.requestGetForUsgaeStatus.bind(energyUsageStatusGet); // this.apiUri = 'BemsFormula/Calculation'; 이거 사용함.2015 05 15 hcLee
  73. var LaststartDate = moment(date.startDate).subtract(1, 'years');
  74. var LastendtDate = moment(date.endDate).subtract(1, 'years');
  75. var dateLast = BWA.Chart.getLastYearSameWeekDate(LaststartDate, LastendtDate, date.startDate.getDay());
  76. if (fuelTypeId === CO2) {
  77. var promises = [];
  78. var fuelTypes = _.values($Code.FuelType);
  79. _.each(fuelTypes, function (fuelTypeId) {
  80. promises.push(request(fuelTypeId, timeType)(date.startDate, date.endDate));
  81. });
  82. _.each(fuelTypes, function (fuelTypeId) {
  83. promises.push(request(fuelTypeId, timeType)(dateLast.startDate, dateLast.endDate));
  84. });
  85. var calculate = factorCo2.calculate;
  86. $.when.apply(this, promises)
  87. .done(function (electricityArray, gasArray, waterArray, electricityArrayL, gasArrayL, waterArrayL) {
  88. var dday = new Array('일', '월', '화', '수', '목', '금', '토');
  89. var chartDataSource = [];
  90. var chartDataSourceLast = [];
  91. var chartDataSource_temp = [];
  92. var chartDataSource_temp1 = [];
  93. var chartDataSource_temp2 = [];
  94. var chartDataSource_tempL = [];
  95. var chartDataSource_tempL1 = [];
  96. var chartDataSource_tempL2 = [];
  97. var chartDataSource_tempL3 = [];
  98. var co2Fields = ['ECo2', 'GCo2'];
  99. var co2FieldsL = ['ECo2Last', 'GCo2Last'];
  100. var RA = [];
  101. RA.push(electricityArray);
  102. RA.push(gasArray);
  103. RA.push(waterArray);
  104. _.each(RA, function (array, i) {
  105. var field = co2Fields[i];
  106. _.each(array[0], function (x) {
  107. var data = {
  108. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  109. };
  110. data[field] = calculate(x.Value, fuelTypes[i]);
  111. chartDataSource.push(data);
  112. var dataL = {
  113. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  114. };
  115. chartDataSourceLast.push(dataL);
  116. });
  117. });
  118. // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가
  119. _.each(electricityArray[0], function (x) {
  120. chartDataSource_temp.push({
  121. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  122. 'ECo2': calculate(x.Value, 1)
  123. });
  124. });
  125. _.each(gasArray[0], function (x) {
  126. chartDataSource_temp1.push({
  127. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  128. 'GCo2': calculate(x.Value, 2)
  129. });
  130. });
  131. // 배열을 하나로 합치자
  132. var array_length_size = Math.max(chartDataSource_temp.length, chartDataSource_temp1.length);
  133. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  134. if (chartDataSource_temp.length == chartDataSource_temp1.length) {
  135. for (var i = 0; i < array_length_size; i++) {
  136. chartDataSource_temp2.push(
  137. {
  138. DateTime: chartDataSource_temp[i].DateTime,
  139. 'ECo2': chartDataSource_temp[i].ECo2,
  140. 'GCo2': chartDataSource_temp1[i].GCo2
  141. });
  142. }
  143. }
  144. // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가
  145. var RALast = [];
  146. RALast.push(electricityArrayL);
  147. RALast.push(gasArrayL);
  148. RALast.push(waterArrayL);
  149. var index = 0;
  150. _.each(RALast, function (array, i) {
  151. var fieldL = co2FieldsL[i];
  152. _.each(array[0], function (x) {
  153. var dataL = {
  154. DateTime: chartDataSourceLast[index].DateTime,
  155. };
  156. dataL[fieldL] = calculate(x.Value, fuelTypes[i]);
  157. chartDataSource.push(dataL);
  158. index++;
  159. });
  160. });
  161. /*
  162. // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가
  163. _.each(electricityArray[0], function (x, i) {
  164. chartDataSource_tempL.push({
  165. DateTime: chartDataSourceLast[i].DateTime,
  166. 'ECo2Last': calculate(x.Value, 1)
  167. });
  168. });
  169. _.each(gasArray[0], function (x, i) {
  170. chartDataSource_tempL1.push({
  171. DateTime: chartDataSourceLast[i].DateTime,
  172. 'GCo2Last': calculate(x.Value, 2)
  173. });
  174. });
  175. // 배열을 하나로 합치자
  176. var array_length_size = Math.max(chartDataSource_tempL.length, chartDataSource_tempL1.length);
  177. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  178. if (chartDataSource_tempL.length == chartDataSource_tempL1.length) {
  179. for (var i = 0; i < array_length_size; i++) {
  180. chartDataSource_tempL2.push(
  181. {
  182. DateTime1: chartDataSource_tempL[i].DateTime,
  183. 'ECo2Last': chartDataSource_tempL[i].ECo2Last,
  184. 'GCo2Last': chartDataSource_tempL1[i].GCo2Last
  185. });
  186. }
  187. }
  188. var array_length_size = Math.max(chartDataSource_temp2.length, chartDataSource_tempL2.length);
  189. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  190. if (chartDataSource_temp2.length == chartDataSource_tempL2.length) {
  191. for (var i = 0; i < array_length_size; i++) {
  192. chartDataSource_tempL3.push(
  193. {
  194. DateTime: chartDataSource_temp2[i].DateTime,
  195. 'ECo2': chartDataSource_temp2[i].ECo2,
  196. 'GCo2': chartDataSource_temp2[i].GCo2,
  197. DateTime1: chartDataSource_tempL2[i].DateTime1,
  198. 'ECo2Last': chartDataSource_tempL2[i].ECo2Last,
  199. 'GCo2Last': chartDataSource_tempL2[i].GCo2Last
  200. });
  201. }
  202. }
  203. */
  204. dataArrayresult1 = chartDataSource_tempL2;//chartDataSource_tempL3
  205. // 2017.11.29 : 그리드 도표 작업 : 팝업창 추가
  206. options.dataSource = chartDataSource;
  207. chart().option(options);
  208. visiblePopup(false);
  209. })
  210. .fail(function (error) {
  211. visiblePopup(false);
  212. });
  213. }
  214. else {
  215. var promises = [];
  216. promises.push(request(fuelTypeId, timeType)(date.startDate, date.endDate)); // 현재
  217. promises.push(request(fuelTypeId, timeType)(dateLast.startDate, dateLast.endDate)); // 1년전
  218. $.when.apply(this, promises)
  219. .done(function (dataArray, dataArray2) {
  220. var dday = new Array('일', '월', '화', '수', '목', '금', '토');
  221. var chartDataSource = [];
  222. var DataArray_temp = [];
  223. var DataArray_temp1 = [];
  224. var DataArray_temp2 = [];
  225. _.each(dataArray[0], function (x, i) {
  226. var data = {
  227. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  228. Value: x.Value
  229. }
  230. DataArray_temp.push({
  231. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  232. Value: x.Value
  233. });
  234. chartDataSource.push(data);
  235. //var data2 = {
  236. // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  237. // ValueLast: (dataArray2[0].length != 0 && dataArray2[0].length - 1 >= i) ? dataArray2[0][i].Value : 0
  238. //}
  239. //DataArray_temp1.push({
  240. // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) + '(' + dday[moment(x.DateTime).toDate().getDay()] + ')',
  241. // ValueLast: (dataArray2[0].length != 0 && dataArray2[0].length - 1 >= i) ? dataArray2[0][i].Value : 0
  242. //});
  243. //chartDataSource.push(data2);
  244. });
  245. //// 배열을 하나로 합치자
  246. //var array_length_size = Math.max(DataArray_temp.length, DataArray_temp1.length);
  247. //// 크기가 동일한 경우에만 허용함 (예외 방어용)
  248. //if (DataArray_temp.length == DataArray_temp1.length) {
  249. // for (var i = 0; i < array_length_size; i++) {
  250. // DataArray_temp2.push(
  251. // {
  252. // DateTime: DataArray_temp[i].DateTime,
  253. // Value: DataArray_temp[i].Value,
  254. // DateTime1: DataArray_temp1[i].DateTime,
  255. // ValueLast: DataArray_temp1[i].ValueLast
  256. // });
  257. // }
  258. //}
  259. dataArrayresult = DataArray_temp; //DataArray_temp2
  260. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  261. if (chartDataSource.length == 0)
  262. utils.toast.show('데이터가 없습니다.');
  263. else {
  264. options.dataSource = chartDataSource;
  265. chart().option(options);
  266. }
  267. visiblePopup(false);
  268. })
  269. .fail(function (error) {
  270. visiblePopup(false);
  271. });
  272. }
  273. }
  274. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  275. function DataGridPopup_ButtonClick() {
  276. if (fuelTypeIdForSearch() == CO2)
  277. DataGridPopup_Visible1(true);
  278. else
  279. DataGridPopup_Visible(true);
  280. }
  281. function handlePopupShown() {
  282. // 컬럼명 업데이트
  283. var ColumnCaptionName = "";
  284. switch (fuelTypeIdForSearch()) {
  285. case $Code.FuelType.ELECTRICITY:
  286. ColumnCaptionName = "전기";
  287. viewModel.FmsEnergyDataGridOptions.columns[1].caption = ColumnCaptionName;
  288. //viewModel.FmsEnergyDataGridOptions.columns[3].caption = ColumnCaptionName;
  289. $("#FmsEnergyDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
  290. DataGridPopup_Visible(true);
  291. break;
  292. case CO2:
  293. ColumnCaptionName = "CO2";
  294. $("#FmsEnergyDataGrid_Container1").dxDataGrid("instance").option("dataSource", dataArrayresult1);
  295. DataGridPopup_Visible1(true)
  296. break;
  297. case $Code.FuelType.GAS:
  298. ColumnCaptionName = "가스";
  299. viewModel.FmsEnergyDataGridOptions.columns[1].caption = ColumnCaptionName;
  300. //viewModel.FmsEnergyDataGridOptions.columns[3].caption = ColumnCaptionName;
  301. $("#FmsEnergyDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
  302. DataGridPopup_Visible(true);
  303. break;
  304. case $Code.FuelType.WATER:
  305. ColumnCaptionName = "수도";
  306. viewModel.FmsEnergyDataGridOptions.columns[1].caption = ColumnCaptionName;
  307. //viewModel.FmsEnergyDataGridOptions.columns[3].caption = ColumnCaptionName;
  308. $("#FmsEnergyDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
  309. DataGridPopup_Visible(true);
  310. break;
  311. }
  312. }
  313. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  314. var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), {
  315. refreshList: refreshList,
  316. viewHidden: handleViewHidden, // hcLee 2015 03 23
  317. viewShowing: handleViewShowing,
  318. FmsEnergyDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick
  319. });
  320. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  321. // 그래프 도표 팝업창
  322. viewModel.FmsEnergyDataGridPopupOptions = {
  323. width: '480px',
  324. height: '750px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨
  325. contentTemplate: "content",
  326. showTitle: true,
  327. title: "도표",
  328. visible: DataGridPopup_Visible,
  329. dragEnabled: true,
  330. closeOnOutsideClick: true,
  331. shownAction: handlePopupShown,
  332. animation: window.utils.popup.createAnimation()
  333. };
  334. viewModel.FmsEnergyDataGridPopup1 = {
  335. width: '700px',
  336. height: '750px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨
  337. contentTemplate: "content",
  338. showTitle: true,
  339. title: "도표",
  340. visible: DataGridPopup_Visible1,
  341. dragEnabled: true,
  342. closeOnOutsideClick: true,
  343. shownAction: handlePopupShown,
  344. animation: window.utils.popup.createAnimation()
  345. };
  346. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  347. viewModel.timeBoxForSearch = timeBoxForSearch;
  348. viewModel.popupOptions = {
  349. width: 300,
  350. height: 160,
  351. contentTemplate: "info",
  352. showTitle: false,
  353. title: "메세지",
  354. visible: visiblePopup,
  355. dragEnabled: false,
  356. shading: false,
  357. closeOnOutsideClick: false
  358. };
  359. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  360. viewModel.FmsEnergyDataGridOptions = {
  361. dataSource: dataArrayresult,
  362. paging: { pageSize: 17 },
  363. columns: [
  364. { dataField: 'DateTime', caption: "날짜", width: '35%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  365. { dataField: 'Value', width: '65%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  366. //{ dataField: 'DateTime1', caption: "작년", width: '25%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  367. //{ dataField: 'ValueLast', width: '25%', alignment: 'center', format: 'fixedPoint', precision: 2 }
  368. ],
  369. "export": {
  370. enabled: true,
  371. fileName: '에너지 사용량 조회'
  372. }
  373. };
  374. viewModel.FmsEnergyDataGridOptions1 = {
  375. dataSource: dataArrayresult1,
  376. paging: { pageSize: 17 },
  377. columns: [
  378. { dataField: 'DateTime', caption: "날짜", width: '16%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  379. { dataField: 'ECo2', caption: "전력 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  380. { dataField: 'GCo2', caption: "가스 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  381. //{ dataField: 'DateTime1', caption: "작년", width: '16%', alignment: 'center', },
  382. //{ dataField: 'ECo2Last', caption: "전력 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  383. //{ dataField: 'GCo2Last', caption: "가스 CO2", width: '16%', alignment: 'center', format: 'fixedPoint', precision: 2 }
  384. ],
  385. "export": {
  386. enabled: true,
  387. fileName: '에너지 사용량 조회'
  388. }
  389. };
  390. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  391. return viewModel;
  392. };