3414b2a4a8a5d7f298cd51402d481492e8e9aaf3.svn-base 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. BemsWebApplication.UsageByEnergy = function (params, viewInfo) {
  2. "use strict";
  3. var initialized = false, shouldReload = false, dataSource;
  4. var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  5. var CO2 = $Code.FuelType.WATER + 1;
  6. var UnionfuelType = $Code.FuelType.WATER + 2, UnionfuelName = "전기+가스";
  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(),
  18. dataArray = ko.observableArray();
  19. // 2017.11.27 : 그리드 도표 작업 : 팝업창 추가
  20. // 팝업창뷰 보이기 속성 제어용 변수 선언
  21. var DataGridPopup_Visible = ko.observable(false);
  22. var DataGridPopup_Visible1 = ko.observable(false);
  23. var DataGridPopup_Visible2 = ko.observable(false);
  24. var DataGridPopup_Visible3 = ko.observable(false);
  25. // 그래프 출력 이후 엑셀출력을 위한 팝업창을 위해 임시 저장용 배열 선언
  26. var dataArrayresult = ko.observableArray();
  27. var dataArrayresult1 = ko.observableArray();
  28. var dataArrayresult2 = ko.observableArray();
  29. var dataArrayresult3 = ko.observableArray();
  30. // 2017.11.27 : 그리드 도표 작업 : 팝업창 추가
  31. var chart = BWA.Chart.Instance('chartU2', 'dxChart');
  32. timeTypesForSearch($G.TimeTypes);
  33. var m = moment();
  34. function handleViewShown() {
  35. if (initialized === false) {
  36. chart = chart(BWA.ChartOptions.UsageByEnergy.getChartOptions($Code.TimeType.HOUR));
  37. initialized = true;
  38. }
  39. //hcLee 2016 07 12
  40. timeBoxForSearch.setDefaultDate();
  41. if (shouldReload) {
  42. }
  43. factorCo2DataSource.load().done(function (dbFactorCo2) {
  44. factorCo2 = BWA.Bems.refineFactorCo2DataArray(dbFactorCo2);
  45. });
  46. }
  47. function handleViewHidden() {
  48. visiblePopup(false);
  49. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  50. }
  51. function handleViewShowing() {
  52. $.when(fuelTypesDataSource.load()).done(function (fuelTypes) {
  53. fuelTypes.push({
  54. FuelTypeId: ko.observable(CO2),
  55. Name: ko.observable('CO2')
  56. });
  57. fuelTypes.push({
  58. FuelTypeId: ko.observable(UnionfuelType),
  59. Name: ko.observable(UnionfuelName)
  60. });
  61. fuelTypesForSearch($SearchView.filterObservableArrayForSelectBox('FuelTypeId', fuelTypes));
  62. deferredForSearch.resolve();
  63. handleSearchInSearchView();
  64. });
  65. }
  66. function refreshList() {
  67. }
  68. var searchViewOptions = {
  69. searchViewItems: [
  70. { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch },
  71. { id: 'FuelTypeId', ignoreValue: 0, defaultValue: 1, value: fuelTypeIdForSearch, dataSource: fuelTypesForSearch },
  72. { id: 'DateForHour', type: 'dateRange', isOnlyDate: true },
  73. { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true },
  74. ],
  75. promiseDataInSearchView: deferredForSearch.promise()
  76. };
  77. function handleSearchInSearchView() {
  78. visiblePopup(true);
  79. $("#large-indicator").dxLoadIndicator({
  80. height: 60,
  81. width: 60
  82. });
  83. var date = timeBoxForSearch.getDate(),
  84. timeType = timeBoxForSearch.type(),
  85. fuelTypeId = fuelTypeIdForSearch();
  86. if (fuelTypeId == $Code.FuelType.ELECTRICITY) {
  87. var promises = [];
  88. for (var fi = 2; fi < 4; fi++) {
  89. var p = formulaGet.apiGet({
  90. FacilityTypeId: $Code.FacilityType.ELECTRICITY,
  91. FacilityCode: $Code.FacilityCode.ELECTRICITY,
  92. FormulaId: fi,
  93. TimeIntervalType: timeType,
  94. StartDate: date.startDate,
  95. EndDate: date.endDate
  96. });
  97. promises.push(p);
  98. }
  99. $.when.apply(this, promises)
  100. .done(function (dataArray, dataArray2) {
  101. var DataArray = [];
  102. var DataArray_temp = [];
  103. var DataArray_temp1 = [];
  104. var DataArray_temp2 = [];
  105. _.each(dataArray[0], function (x) {
  106. DataArray.push({
  107. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  108. '심야': x.Value
  109. });
  110. });
  111. _.each(dataArray2[0], function (x) {
  112. DataArray.push({
  113. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  114. '일반': x.Value
  115. });
  116. });
  117. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  118. _.each(dataArray[0], function (x) {
  119. DataArray_temp.push({
  120. DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate()),
  121. '심야': x.Value
  122. });
  123. });
  124. _.each(dataArray2[0], function (x) {
  125. DataArray_temp1.push({
  126. DateTime: moment(x.DateTime).toDate(),//BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  127. '일반': x.Value
  128. });
  129. });
  130. // 배열을 하나로 합치자
  131. var array_length_size = Math.max(DataArray_temp.length, DataArray_temp1.length);
  132. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  133. if (DataArray_temp.length == DataArray_temp1.length) {
  134. for (var i = 0; i < array_length_size; i++) {
  135. DataArray_temp2.push(
  136. {
  137. DateTime: DataArray_temp[i].DateTime,
  138. '심야': DataArray_temp[i].심야,
  139. '일반': DataArray_temp1[i].일반
  140. });
  141. }
  142. }
  143. dataArrayresult = DataArray_temp2;
  144. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  145. var options1 = BWA.ChartOptions.UsageByEnergy.getSeriesOptions(fuelTypeIdForSearch(), timeBoxForSearch.type());
  146. options1.dataSource = DataArray;
  147. chart().option(options1);
  148. visiblePopup(false);
  149. })
  150. .fail(function (error) {
  151. visiblePopup(false);
  152. });
  153. return;
  154. }
  155. var request = energyUsageStatusGet.requestGetForUsgaeStatus.bind(energyUsageStatusGet); // this.apiUri = 'BemsFormula/Calculation'; 이거 사용함.2015 05 15 hcLee
  156. if (fuelTypeId == CO2) {
  157. var promises = [];
  158. var fuelTypes = _.values($Code.FuelType);
  159. _.each(fuelTypes, function (fuelTypeId) {
  160. promises.push(request(fuelTypeId, timeType)(date.startDate, date.endDate));
  161. });
  162. var calculate = factorCo2.calculate;
  163. $.when.apply(this, promises)
  164. .done(function (electricityArray, gasArray) {
  165. var chartDataSource = [];
  166. var chartDataSource_temp = [];
  167. var chartDataSource_temp1 = [];
  168. var chartDataSource_temp2 = [];
  169. var co2Fields = ['ECo2', 'GCo2'];
  170. _.each(arguments, function (array, i) {
  171. var field = co2Fields[i];
  172. _.each(array[0], function (x) {
  173. var data = {
  174. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  175. };
  176. data[field] = calculate(x.Value, fuelTypes[i]);
  177. chartDataSource.push(data);
  178. });
  179. });
  180. _.each(electricityArray[0], function (x) {
  181. chartDataSource_temp.push({
  182. DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate()),
  183. 'ECo2': calculate(x.Value, 1)
  184. });
  185. });
  186. _.each(gasArray[0], function (x) {
  187. chartDataSource_temp1.push({
  188. DateTime: moment(x.DateTime).toDate(),//BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  189. 'GCo2': calculate(x.Value, 2)
  190. });
  191. });
  192. // 배열을 하나로 합치자
  193. var array_length_size = Math.max(chartDataSource_temp.length, chartDataSource_temp1.length);
  194. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  195. if (chartDataSource_temp.length == chartDataSource_temp1.length) {
  196. for (var i = 0; i < array_length_size; i++) {
  197. chartDataSource_temp2.push(
  198. {
  199. DateTime: chartDataSource_temp[i].DateTime,
  200. 'ECo2': chartDataSource_temp[i].ECo2,
  201. 'GCo2': chartDataSource_temp1[i].GCo2
  202. });
  203. }
  204. }
  205. dataArrayresult2 = chartDataSource_temp2;
  206. var options2 = BWA.ChartOptions.UsageByEnergy.getSeriesOptions(fuelTypeId, timeBoxForSearch.type(), date.startDate, date.endDate);
  207. chart().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  208. options2.dataSource = chartDataSource;
  209. chart().option(options2);
  210. visiblePopup(false);
  211. })
  212. .fail(function (error) {
  213. visiblePopup(false);
  214. });
  215. }
  216. if (fuelTypeId == UnionfuelType) {
  217. var promises = [];
  218. var fuelTypes = _.values($Code.FuelType);
  219. _.each(fuelTypes, function (fuelTypeId) {
  220. promises.push(request(fuelTypeId, timeType)(date.startDate, date.endDate));
  221. });
  222. // var calculate = factorCo2.calculate;
  223. $.when.apply(this, promises)
  224. .done(function (electricityArray, gasArray) {
  225. //var chartDataSource = [];
  226. var chartDataSource_temp = [];
  227. var chartDataSource_temp1 = [];
  228. var chartDataSource_temp2 = [];
  229. //var co2Fields = ['UnionE', 'UnionG'];
  230. //_.each(arguments, function (array, i) {
  231. // var field = co2Fields[i];
  232. // _.each(array[0], function (x) {
  233. // var data = {
  234. // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  235. // };
  236. // data[field] = x.Value
  237. // chartDataSource.push(data);
  238. // });
  239. //});
  240. _.each(electricityArray[0], function (x) {
  241. chartDataSource_temp.push({
  242. DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate()),
  243. 'UnionE': x.Value
  244. });
  245. });
  246. _.each(gasArray[0], function (x) {
  247. chartDataSource_temp1.push({
  248. DateTime: moment(x.DateTime).toDate(),//BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  249. 'UnionG': x.Value
  250. });
  251. });
  252. // 배열을 하나로 합치자
  253. var array_length_size = Math.max(chartDataSource_temp.length, chartDataSource_temp1.length);
  254. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  255. if (chartDataSource_temp.length == chartDataSource_temp1.length) {
  256. for (var i = 0; i < array_length_size; i++) {
  257. chartDataSource_temp2.push(
  258. {
  259. DateTime: chartDataSource_temp[i].DateTime,
  260. 'UnionE': chartDataSource_temp[i].UnionE,
  261. 'UnionG': chartDataSource_temp1[i].UnionG
  262. });
  263. }
  264. }
  265. dataArrayresult3 = chartDataSource_temp2;
  266. var options3 = BWA.ChartOptions.UsageByEnergy.getSeriesOptions(fuelTypeId, timeBoxForSearch.type(), date.startDate, date.endDate);
  267. chart().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  268. options3.dataSource = dataArrayresult3;
  269. chart().option(options3);
  270. visiblePopup(false);
  271. })
  272. .fail(function (error) {
  273. visiblePopup(false);
  274. });
  275. }
  276. if (fuelTypeId == $Code.FuelType.GAS || fuelTypeId == $Code.FuelType.WATER) {
  277. request(fuelTypeId, timeType)(date.startDate, date.endDate)
  278. .done(function (dataArray) {
  279. var list = _.map(dataArray, function (x) {
  280. x.DateTime = BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate());
  281. return x;
  282. });
  283. if (list.length == 0)
  284. utils.toast.show('데이터가 없습니다.');
  285. var options3 = BWA.ChartOptions.UsageByEnergy.getSeriesOptions(fuelTypeId, timeBoxForSearch.type(), date.startDate, date.endDate);
  286. chart().option('argumentAxis', null);
  287. options3.dataSource = list;
  288. chart().option(options3);
  289. visiblePopup(false);
  290. })
  291. .fail(function (error) {
  292. visiblePopup(false);
  293. });
  294. request(fuelTypeId, timeType)(date.startDate, date.endDate)
  295. .done(function (dataArray) {
  296. var list1 = _.map(dataArray, function (x) {
  297. x.DateTime = BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate());
  298. return x;
  299. });
  300. dataArrayresult1 = list1;
  301. })
  302. .fail(function (error) {
  303. visiblePopup(false);
  304. });
  305. }
  306. }
  307. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  308. function DataGridPopup_ButtonClick() {
  309. if (fuelTypeIdForSearch() == $Code.FuelType.ELECTRICITY)
  310. DataGridPopup_Visible(true);
  311. else if (fuelTypeIdForSearch() == $Code.FuelType.GAS || fuelTypeIdForSearch() == $Code.FuelType.WATER)
  312. DataGridPopup_Visible1(true);
  313. else if (fuelTypeIdForSearch() == CO2)
  314. DataGridPopup_Visible2(true);
  315. else
  316. DataGridPopup_Visible3(true);
  317. }
  318. function handlePopupShown() {
  319. // 컬럼명 업데이트
  320. var ColumnCaptionName = "";
  321. switch (fuelTypeIdForSearch()) {
  322. case $Code.FuelType.ELECTRICITY:
  323. $("#UsageByEnergyDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
  324. DataGridPopup_Visible(true);
  325. break;
  326. case $Code.FuelType.GAS:
  327. ColumnCaptionName = "가스";
  328. viewModel.UsageByEnergyDataGridOptions1.columns[1].caption = ColumnCaptionName;
  329. $("#UsageByEnergyDataGrid_Container1").dxDataGrid("instance").option("dataSource", dataArrayresult1);
  330. DataGridPopup_Visible1(true);
  331. break;
  332. case $Code.FuelType.WATER:
  333. ColumnCaptionName = "수도";
  334. viewModel.UsageByEnergyDataGridOptions1.columns[1].caption = ColumnCaptionName;
  335. $("#UsageByEnergyDataGrid_Container1").dxDataGrid("instance").option("dataSource", dataArrayresult1);
  336. DataGridPopup_Visible1(true);
  337. break;
  338. case CO2:
  339. $("#UsageByEnergyDataGrid_Container2").dxDataGrid("instance").option("dataSource", dataArrayresult2);
  340. DataGridPopup_Visible2(true);
  341. break;
  342. case UnionfuelType:
  343. $("#UsageByEnergyDataGrid_Container3").dxDataGrid("instance").option("dataSource", dataArrayresult3);
  344. DataGridPopup_Visible3(true);
  345. break;
  346. }
  347. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  348. }
  349. var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), {
  350. refreshList: refreshList,
  351. viewHidden: handleViewHidden, // hcLee 2015 03 23
  352. viewShowing: handleViewShowing,
  353. UsageByEnergyDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick
  354. });
  355. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  356. // 그래프 도표 팝업창
  357. viewModel.UsageByEnergyDataGridPopupOptions = {
  358. width: '480px',
  359. height: '830px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨
  360. contentTemplate: "content",
  361. showTitle: true,
  362. title: "도표",
  363. visible: DataGridPopup_Visible,
  364. dragEnabled: true,
  365. closeOnOutsideClick: true,
  366. shownAction: handlePopupShown,
  367. animation: window.utils.popup.createAnimation(),
  368. shading: false
  369. };
  370. viewModel.UsageByEnergyDataGridPopupOptions1 = {
  371. width: '300px',
  372. height: '830px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨
  373. contentTemplate: "content",
  374. showTitle: true,
  375. title: "도표",
  376. visible: DataGridPopup_Visible1,
  377. dragEnabled: true,
  378. closeOnOutsideClick: true,
  379. shownAction: handlePopupShown,
  380. animation: window.utils.popup.createAnimation(),
  381. shading: false
  382. };
  383. viewModel.UsageByEnergyDataGridPopupOptions2 = {
  384. width: '480px',
  385. height: '830px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨
  386. contentTemplate: "content",
  387. showTitle: true,
  388. title: "도표",
  389. visible: DataGridPopup_Visible2,
  390. dragEnabled: true,
  391. closeOnOutsideClick: true,
  392. shownAction: handlePopupShown,
  393. animation: window.utils.popup.createAnimation(),
  394. shading: false
  395. };
  396. viewModel.UsageByEnergyDataGridPopupOptions3 = {
  397. width: '480px',
  398. height: '830px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨
  399. contentTemplate: "content",
  400. showTitle: true,
  401. title: "도표",
  402. visible: DataGridPopup_Visible3,
  403. dragEnabled: true,
  404. closeOnOutsideClick: true,
  405. shownAction: handlePopupShown,
  406. animation: window.utils.popup.createAnimation(),
  407. shading: false
  408. };
  409. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  410. viewModel.timeBoxForSearch = timeBoxForSearch;
  411. viewModel.popupOptions = {
  412. width: 300,
  413. height: 160,
  414. contentTemplate: "info",
  415. showTitle: false,
  416. title: "메세지",
  417. visible: visiblePopup,
  418. dragEnabled: false,
  419. shading: false,
  420. closeOnOutsideClick: false
  421. };
  422. viewModel.UsageByEnergyDataGridOptions = {
  423. dataSource: dataArrayresult,
  424. columns: [
  425. { dataField: 'DateTime', caption: "날짜", width: '33%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  426. { dataField: '일반', caption: "일반", width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  427. { dataField: '심야', caption: "심야", width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 }
  428. ],
  429. "export": {
  430. enabled: true,
  431. fileName: '에너지사용량 분석(전력)'
  432. }
  433. };
  434. //가스, 수도
  435. viewModel.UsageByEnergyDataGridOptions1 = {
  436. dataSource: dataArrayresult1,
  437. columns: [
  438. { dataField: 'DateTime', caption: "날짜", width: '50%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  439. { dataField: 'Value', width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 }
  440. ],
  441. "export": {
  442. enabled: true,
  443. fileName: '에너지사용량 분석'
  444. }
  445. };
  446. viewModel.UsageByEnergyDataGridOptions2 = {
  447. dataSource: dataArrayresult2,
  448. columns: [
  449. { dataField: 'DateTime', caption: "날짜", width: '33%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  450. { dataField: 'ECo2', caption: "전력 CO2", width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  451. { dataField: 'GCo2', caption: "가스 CO2", width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 }
  452. ],
  453. "export": {
  454. enabled: true,
  455. fileName: '에너지사용량 분석(CO2)'
  456. }
  457. };
  458. viewModel.UsageByEnergyDataGridOptions3 = {
  459. dataSource: dataArrayresult3,
  460. columns: [
  461. { dataField: 'DateTime', caption: "날짜", width: '33%', alignment: 'center', },
  462. { dataField: 'UnionE', caption: "전력", width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  463. { dataField: 'UnionG', caption: "가스", width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 }
  464. ],
  465. "export": {
  466. enabled: true,
  467. fileName: '에너지사용량 분석(전기+가스)'
  468. }
  469. };
  470. // 2017.11.27: 그리드 도표 작업 : 팝업창 추가
  471. return viewModel;
  472. };