7fca146b8d808df4577cd0a4f65ea00ab0326d21.svn-base 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. BemsWebApplication.LocEnergyConsumption = function (params, viewInfo) {
  2. "use strict";
  3. var BUILDING_DEPTH = 1,
  4. FLOOR_DEPTH = 2,
  5. ZONE_DEPTH = 3;
  6. var CODE = $Code,
  7. FuelType = CODE.FuelType,
  8. FT = CODE.FacilityType,
  9. FC = CODE.FacilityCode,
  10. F = CODE.Formula,
  11. TIT = CODE.TimeIntervalType;
  12. var visiblePopup = ko.observable(false);
  13. var initialized = false,
  14. shouldReload = false,
  15. dataSource;
  16. var pointHistoryGet = new BWA.Chart.PointHistoryGet(BWA.UserInfo.SiteId()),
  17. timeBoxForSearch = BWA.SearchView.createDateTimeBox(),
  18. formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  19. var UnionfuelType = 4, UnionfuelName = "혼합";
  20. var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true),
  21. floorDataSource = BemsWebApplication.db.createDataSource('CmFloor'),
  22. zoneDataSource = BemsWebApplication.db.createDataSource('CmZone'),
  23. fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  24. BemsFactorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'),
  25. buildings = ko.observableArray(),
  26. timeTypesForSearch = ko.observableArray(),
  27. timeTypeIdForSearch = ko.observable(0),
  28. floorsForSearch = ko.observableArray(),
  29. zonesForSearch = ko.observableArray(),
  30. fuelTypesForSearch = ko.observableArray(),
  31. FactorToe = ko.observableArray(),
  32. buildingIdForSearch = ko.observable(),
  33. buildingNameForSearch = ko.observable(),
  34. floorIdForSearch = ko.observable(),
  35. floorNameForSearch = ko.observable(),
  36. zoneIdForSearch = ko.observable(),
  37. zoneNameForSearch = ko.observable(),
  38. fuelTypeIdForSearch = ko.observable(),
  39. deferredForSearch = new $.Deferred();
  40. var deferredForLoadData = new $.Deferred();
  41. var chart = BWA.Chart.Instance('chartLEC', 'dxChart');
  42. var locationEnableForSearch = ko.observable(true);
  43. var chartDataArray = ko.observableArray();
  44. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  45. // 팝업창뷰 보이기 속성 제어용 변수 선언
  46. var DataGridPopup_Visible = ko.observable(false);
  47. // 그래프 출력 이후 엑셀출력을 위한 팝업창을 위해 임시 저장용 배열 선언
  48. var dataArrayresult = ko.observableArray();
  49. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  50. chartDataArray([
  51. { DateTime: new Date(2014, 11, 16, 0), OutdoorTemperature: -3.4, OutdoorHumidity: 40, Value: 30 },
  52. { DateTime: new Date(2014, 11, 16, 0, 15), OutdoorTemperature: -1.1, OutdoorHumidity: 44, Value: 32 },
  53. { DateTime: new Date(2014, 11, 16, 0, 30), OutdoorTemperature: 3, OutdoorHumidity: 48, Value: 33 },
  54. { DateTime: new Date(2014, 11, 16, 0, 45), OutdoorTemperature: 4, OutdoorHumidity: 55, Value: 34 },
  55. { DateTime: new Date(2014, 11, 16, 1), OutdoorTemperature: 8, OutdoorHumidity: 54, Value: 50 },
  56. { DateTime: new Date(2014, 11, 16, 2), OutdoorTemperature: 10, OutdoorHumidity: 53, Value: 60 },
  57. { DateTime: new Date(2014, 11, 16, 3), OutdoorTemperature: 11, Value: 80 },
  58. { DateTime: new Date(2014, 11, 16, 4), OutdoorTemperature: 12, OutdoorHumidity: 48, Value: 100 },
  59. { DateTime: new Date(2014, 11, 16, 5), OutdoorTemperature: 12, OutdoorHumidity: 40 },
  60. { DateTime: new Date(2014, 11, 16, 6), Value: 120 }
  61. ]);
  62. var goalUpperBound = ko.observable(40);
  63. function handleClickTreeItem(element, data) {
  64. var eq = BWA.DataUtil.constructEqualFilter;
  65. var depth = data.depth;
  66. switch (depth) {
  67. case BUILDING_DEPTH: // building
  68. data = data.data;
  69. buildingIdForSearch(data.BuildingId());
  70. buildingNameForSearch(data.Name());
  71. floorIdForSearch(null);
  72. floorNameForSearch('');
  73. zoneIdForSearch(null);
  74. zoneNameForSearch('');
  75. break;
  76. case FLOOR_DEPTH: // floor
  77. buildingNameForSearch(data.parentData.data.Name());
  78. data = data.data;
  79. buildingIdForSearch(data.BuildingId());
  80. floorIdForSearch(data.FloorId());
  81. floorNameForSearch(data.Name());
  82. zoneIdForSearch(null);
  83. zoneNameForSearch('');
  84. break;
  85. case ZONE_DEPTH: // zone
  86. floorNameForSearch(data.parentData.data.Name());
  87. buildingNameForSearch(data.parentData.parentData.data.Name());
  88. data = data.data;
  89. buildingIdForSearch(data.BuildingId());
  90. floorIdForSearch(data.FloorId());
  91. zoneIdForSearch(data.ZoneId());
  92. zoneNameForSearch(data.Name());
  93. break;
  94. }
  95. }
  96. function handleSearchViewInitializeUpdate() {
  97. $('#locationTreeViewInSearchViewTEMP').cwTreeView({
  98. width: '40%',
  99. height: '480px',
  100. onClickTreeItem: handleClickTreeItem,
  101. delegateDataSource: BWA.DataUtil.getLocationDataSourceDelegateForTreeView(
  102. buildingDataSource,
  103. floorDataSource,
  104. zoneDataSource
  105. )
  106. });
  107. }
  108. function handleViewShown() {
  109. if (initialized === false) {
  110. chart = chart(BWA.ChartOptions.LocEnergyConsumption.getChartOptions(timeBoxForSearch.type(), goalUpperBound));
  111. floorNameForSearch('');
  112. zoneNameForSearch('');
  113. initialized = true;
  114. }
  115. if (shouldReload) {
  116. }
  117. }
  118. function handleViewHidden() {
  119. visiblePopup(false);
  120. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  121. }
  122. function handleViewShowing() {
  123. $.when(fuelTypesDataSource.load(), buildingDataSource.load(), BemsFactorToeDataSource.load()).done(function (fuelTypes, dbBuildings, dbFactorToe) {
  124. var varFuelTypeId = ko.observable(false);
  125. var varName = ko.observable(false);
  126. varFuelTypeId(UnionfuelType);
  127. varName(UnionfuelName);
  128. fuelTypes = fuelTypes[0];
  129. dbFactorToe = dbFactorToe[0];
  130. FactorToe = dbFactorToe;
  131. //fuelTypes.push({ //혼합
  132. // FuelTypeId: varFuelTypeId,
  133. // Name: varName
  134. //});
  135. dbBuildings = dbBuildings[0];
  136. fuelTypesForSearch(_.rest(fuelTypes));
  137. deferredForSearch.resolve();
  138. if (_.isEmpty(dbBuildings) === false) {
  139. buildingIdForSearch(dbBuildings[0].BuildingId());
  140. buildingNameForSearch(dbBuildings[0].Name());
  141. handleSearchInSearchView();
  142. }
  143. });
  144. }
  145. function refreshList() {
  146. }
  147. function SetPointer(values1, values2) {
  148. var len = 0;
  149. var tmpArray = new Array();
  150. var values1MinMax = 0;
  151. var values2MinMax = 0;
  152. if (values1.length > values2.length) {
  153. len = values2.length;
  154. } else {
  155. len = values1.length;
  156. }
  157. if (len <= 1) {
  158. utils.toast.show("지표를 연산 할 데이터 범위가 적어도 하나 이상 존재해야 합니다.");
  159. $('#pointerText').text("상관성 지표 : 연산 데이터가 부족합니다.");
  160. } else {
  161. var values1Min = 9999;
  162. var values1Max = -9999;
  163. for (var i = 0; i < values1.length; i++) {
  164. if (values1[i].Value <= values1Min)
  165. values1Min = values1[i].Value;
  166. if (values1[i].Value >= values1Max)
  167. values1Max = values1[i].Value;
  168. }
  169. values1MinMax = values1Max - values1Min;
  170. var values2Min = 9999;
  171. var values2Max = -9999;
  172. for (var i = 0; i < values2.length; i++) {
  173. if (values2[i].Value <= values2Min)
  174. values2Min = values2[i].Value;
  175. if (values2[i].Value >= values2Max)
  176. values2Max = values2[i].Value;
  177. }
  178. values2MinMax = values2Max - values2Min;
  179. for (var i = 0; i < len - 1; i++) {
  180. tmpArray.push((((values1[i].Value - values1[i + 1].Value) / values1MinMax * 100) / ((values2[i].Value - values2[i + 1].Value) / values2MinMax * 100)).toFixed(2));
  181. }
  182. var sum = 0;
  183. var cnt = 0;
  184. for (var j = 0; j < tmpArray.length; j++) {
  185. if (isFinite(tmpArray[j]) && !isNaN(tmpArray[j])) {
  186. sum = sum + Math.abs(parseFloat(tmpArray[j].toString()));
  187. cnt++;
  188. }
  189. }
  190. if (isFinite((sum / cnt).toFixed(2)) && !isNaN((sum / cnt).toFixed(2))) {
  191. $('#pointerText').text("상관성 지표 : " + (sum / cnt).toFixed(2).toString() + "%");
  192. } else {
  193. $('#pointerText').text("상관성 지표 : 0%");
  194. }
  195. }
  196. }
  197. var searchViewOptions = {
  198. searchViewItems: [
  199. { id: 'FuelTypeId', ignoreValue: 0, defaultValue: $Code.FuelType.ELECTRICITY, value: fuelTypeIdForSearch, dataSource: fuelTypesForSearch }
  200. ],
  201. promiseDataInSearchView: deferredForSearch.promise()
  202. };
  203. function handleSearchInSearchView() {
  204. visiblePopup(true);
  205. $("#large-indicator").dxLoadIndicator({
  206. height: 60,
  207. width: 60
  208. });
  209. var date = timeBoxForSearch.getDate(),
  210. timeType = timeBoxForSearch.type();
  211. var commonParameters = {
  212. TimeIntervalType: timeBoxForSearch.type(),
  213. StartDate: date.startDate,
  214. EndDate: date.endDate
  215. };
  216. var pointHistoryParameters = {
  217. BuildingId: buildingIdForSearch(),
  218. FloorId: floorIdForSearch(),
  219. ZoneId: zoneIdForSearch(),
  220. FuelTypeId: fuelTypeIdForSearch()
  221. };
  222. var temperatureParameters = {
  223. FacilityTypeId: FT.OUTDOOR,
  224. FacilityCode: FC.OUTDOOR,
  225. FormulaId: F[FT.OUTDOOR].TEMPERATURE,
  226. };
  227. var humidityParameters = _.extend({}, temperatureParameters, {
  228. FormulaId: F[FT.OUTDOOR].HUMIDITY,
  229. });
  230. if (pointHistoryParameters.FuelTypeId == 4) {
  231. var pointHistoryParametersELECTRICITY = {
  232. BuildingId: buildingIdForSearch(),
  233. FloorId: floorIdForSearch(),
  234. ZoneId: zoneIdForSearch(),
  235. FuelTypeId: $Code.FuelType.ELECTRICITY
  236. };
  237. var pointHistoryParametersGAS = {
  238. BuildingId: buildingIdForSearch(),
  239. FloorId: floorIdForSearch(),
  240. ZoneId: zoneIdForSearch(),
  241. FuelTypeId: $Code.FuelType.GAS
  242. };
  243. $.when(
  244. pointHistoryGet.apiGet(_.extend(pointHistoryParametersELECTRICITY, commonParameters)),
  245. pointHistoryGet.apiGet(_.extend(pointHistoryParametersGAS, commonParameters)),
  246. formulaGet.apiGet(_.extend(temperatureParameters, commonParameters)))
  247. .done(function (elevalues, gasvalues, temperatures) {
  248. var unionvalues, unionlength;
  249. var maxValue = 0;
  250. var dataArray = [];
  251. for (var i = 0; i < elevalues[0].length; i++) {
  252. elevalues[0][i].Value *= FactorToe[0].kcal();
  253. }
  254. for (var j = 0; j < gasvalues[0].length; j++) {
  255. gasvalues[0][j].Value *= FactorToe[1].kcal();
  256. }
  257. for (var i = 0; i < elevalues[0].length; i++) {
  258. for (var j = 0; j < gasvalues[0].length; j++) {
  259. if (elevalues[0][i].DateTime == gasvalues[0][j].DateTime) {
  260. elevalues[0][i].Value += gasvalues[0][j].Value;
  261. break;
  262. }
  263. }
  264. }
  265. SetPointer(elevalues[0], temperatures[0]);
  266. _.each(elevalues[0], function (x) {
  267. dataArray.push({
  268. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  269. Value: x.Value
  270. });
  271. if (maxValue < x.Value) maxValue = x.Value;
  272. });
  273. _.each(temperatures[0], function (x) {
  274. dataArray.push({
  275. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  276. Temperature: x.Value
  277. });
  278. });
  279. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  280. // 출력용
  281. maxValue = 0;
  282. var dataArray_Temp = [];
  283. var dataArray_Temp1 = [];
  284. var dataArray_Temp2 = [];
  285. _.each(elevalues[0], function (x) {
  286. dataArray_Temp1.push({
  287. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  288. Value: x.Value
  289. });
  290. if (maxValue < x.Value) maxValue = x.Value;
  291. });
  292. _.each(temperatures[0], function (x) {
  293. dataArray_Temp2.push({
  294. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  295. Temperature: x.Value
  296. });
  297. });
  298. // 배열을 하나로 합치자
  299. var array_length_size = Math.max(dataArray_Temp1.length, dataArray_Temp2.length);
  300. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  301. if (dataArray_Temp1.length == dataArray_Temp2.length) {
  302. for (var i = 0; i < array_length_size; i++) {
  303. dataArray_Temp.push(
  304. {
  305. DateTime: dataArray_Temp1[i].DateTime,
  306. Value: dataArray_Temp1[i].Value,
  307. Temperature: dataArray_Temp2[i].Temperature
  308. });
  309. }
  310. }
  311. dataArrayresult = dataArray_Temp;
  312. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  313. var options = BWA.ChartOptions.LocEnergyConsumption.getSeriesOptions(timeBoxForSearch.type(), UnionfuelType, goalUpperBound());
  314. options.valueAxis[0].tickInterval = Math.round(maxValue / 10);
  315. options.dataSource = dataArray;
  316. chart().option(options);
  317. $('#st').text('' + "" + buildingNameForSearch() + " - " +
  318. floorNameForSearch() + " - " + zoneNameForSearch());
  319. visiblePopup(false);
  320. })
  321. .fail(function (error) {
  322. visiblePopup(false);
  323. });
  324. }
  325. else {
  326. $.when(
  327. pointHistoryGet.apiGet(_.extend(pointHistoryParameters, commonParameters)),
  328. formulaGet.apiGet(_.extend(temperatureParameters, commonParameters)))
  329. .done(function (values, temperatures) {
  330. var maxValue = 0;
  331. var dataArray = [];
  332. SetPointer(values[0], temperatures[0]);
  333. _.each(values[0], function (x) {
  334. dataArray.push({
  335. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  336. Value: x.Value
  337. });
  338. if (maxValue < x.Value) maxValue = x.Value;
  339. });
  340. _.each(temperatures[0], function (x) {
  341. dataArray.push({
  342. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  343. Temperature: x.Value
  344. });
  345. });
  346. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  347. // 출력용
  348. maxValue = 0;
  349. var dataArray_Temp = [];
  350. var dataArray_Temp1 = [];
  351. var dataArray_Temp2 = [];
  352. _.each(values[0], function (x) {
  353. dataArray_Temp1.push({
  354. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  355. Value: x.Value
  356. });
  357. if (maxValue < x.Value) maxValue = x.Value;
  358. });
  359. _.each(temperatures[0], function (x) {
  360. dataArray_Temp2.push({
  361. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  362. Temperature: x.Value
  363. });
  364. });
  365. // 배열을 하나로 합치자
  366. var array_length_size = Math.max(dataArray_Temp1.length, dataArray_Temp2.length);
  367. // 크기가 동일한 경우에만 허용함 (예외 방어용)
  368. if (dataArray_Temp1.length == dataArray_Temp2.length) {
  369. for (var i = 0; i < array_length_size; i++) {
  370. dataArray_Temp.push(
  371. {
  372. DateTime: dataArray_Temp1[i].DateTime,
  373. Value: dataArray_Temp1[i].Value,
  374. Temperature: dataArray_Temp2[i].Temperature
  375. });
  376. }
  377. // 만약 일렬로 병합을 원한다면 아래코드를 사용
  378. //dataArray_Temp = dataArray_Temp1.concat(dataArray_Temp2);
  379. }
  380. dataArrayresult = dataArray_Temp;
  381. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  382. var options = BWA.ChartOptions.LocEnergyConsumption.getSeriesOptions(timeBoxForSearch.type(), fuelTypeIdForSearch(), goalUpperBound());
  383. options.valueAxis[0].tickInterval = Math.round(maxValue / 10);
  384. options.dataSource = dataArray;
  385. chart().option(options);
  386. $('#st').text('' + "" + buildingNameForSearch() + " - " +
  387. floorNameForSearch() + " - " + zoneNameForSearch());
  388. visiblePopup(false);
  389. })
  390. .fail(function (error) {
  391. visiblePopup(false);
  392. });
  393. }
  394. }
  395. function handleMenuItemClick(e) {
  396. var chartIntance = chart();
  397. var chartOptions = chartIntance._options;
  398. var series = chartIntance.getAllSeries();
  399. var table = [];
  400. var columns = [chartOptions.argumentAxis.title];
  401. var values = {};
  402. _.each(chartOptions.valueAxis, function (a) {
  403. columns.push(a.title.text);
  404. });
  405. _.each(series, function (s, i) {
  406. _.each(s.pointsByArgument, function (point, argument) {
  407. var array = values[argument];
  408. if (_.isArray(array) === false) {
  409. array = values[argument] = [];
  410. }
  411. array[i] = point.value;
  412. });
  413. });
  414. var csvRows = [columns.join(',')];
  415. _.each(values, function (values, argument) {
  416. csvRows.push([$G.dateTime(moment(Number(argument))), values.join(',')].join(','));
  417. });
  418. var csvContent = csvRows.join("\r\n");
  419. var agent = navigator.userAgent.toLowerCase();
  420. if (window.navigator.msSaveOrOpenBlob) {
  421. var fileData = ['\uFEFF' + csvContent];
  422. var blobObject = new Blob(fileData);
  423. window.navigator.msSaveOrOpenBlob(blobObject, 'export.csv');
  424. }
  425. else {
  426. var csvString = 'data:text/csv;utf-8,\uFEFF' + encodeURI(csvContent);
  427. var a = $('#csvExporter');
  428. a.attr({
  429. 'href': csvString,
  430. 'target': '_blank',
  431. 'download': 'export.csv'
  432. });
  433. // a.trigger('click');
  434. var aa = document.getElementById('csvExporter');
  435. aa.click();
  436. }
  437. }
  438. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  439. function DataGridPopup_ButtonClick() {
  440. DataGridPopup_Visible(true);
  441. }
  442. function handlePopupShown() {
  443. var ColumnCaptionName = "";
  444. switch (fuelTypeIdForSearch()) {
  445. case $Code.FuelType.ELECTRICITY:
  446. ColumnCaptionName = "전기";
  447. break;
  448. case $Code.FuelType.GAS:
  449. ColumnCaptionName = "가스";
  450. break;
  451. case $Code.FuelType.WATER:
  452. ColumnCaptionName = "수도";
  453. break;
  454. case UnionfuelType:
  455. ColumnCaptionName = UnionfuelName;
  456. break;
  457. }
  458. viewModel.LocEnergyConsumptionDataGridOptions.columns[1].caption = ColumnCaptionName;
  459. // 데이타소스 업데이트
  460. $("#LocEnergyConsumptionDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
  461. // 팝업창 갱신
  462. DataGridPopup_Visible(true);
  463. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  464. }
  465. var viewModel = $.extend(BWA.CommonView.create(
  466. params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null,
  467. handleSearchInSearchView, handleSearchViewInitializeUpdate), {
  468. refreshList: refreshList,
  469. viewShowing: handleViewShowing,
  470. viewHidden: handleViewHidden, // hcLee 2015 03 23
  471. locationEnableForSearch: locationEnableForSearch,
  472. handleMenuItemClick: handleMenuItemClick,
  473. menuItems: [{
  474. text: '엑셀(csv) 내보내기'
  475. }]
  476. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  477. , LocEnergyConsumptionDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick
  478. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  479. });
  480. viewModel.timeBoxForSearch = timeBoxForSearch;
  481. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  482. // 그래프 도표 팝업창
  483. viewModel.LocEnergyConsumptionDataGridPopupOptions = {
  484. width: '480px',
  485. height: '750px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨
  486. contentTemplate: "content",
  487. showTitle: true,
  488. title: "도표",
  489. visible: DataGridPopup_Visible,
  490. dragEnabled: true,
  491. closeOnOutsideClick: true,
  492. shownAction: handlePopupShown,
  493. animation: window.utils.popup.createAnimation()
  494. };
  495. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  496. // 에너지사용량 조회중 팝업창
  497. viewModel.popupOptions = {
  498. width: 300,
  499. height: 140, // cyim 2017.05.29 : 조회 팝업창 출력안되는 문제 수정
  500. contentTemplate: "info",
  501. showTitle: false,
  502. title: "작업 중",
  503. visible: visiblePopup,
  504. dragEnabled: false,
  505. shading: false,
  506. closeOnOutsideClick: false
  507. };
  508. // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  509. // 주석이 너무 없음. 나중에 변경 작업을 진행하는 누군가가 시간 소비를 하지 않기 위해...남김
  510. // 시간 포맷은 그래프에 귀속해야 되므로 포맷은 변경하지 않는 것이 유리함
  511. // 전기,가스,수도 와 같이 선택적으로 변경해야 된다면 아래와 같이 캡션은 고정하지 말것
  512. viewModel.LocEnergyConsumptionDataGridOptions = {
  513. dataSource: dataArrayresult,
  514. paging: { pageSize: 17 },
  515. columns: [
  516. { dataField: 'DateTime', caption: "날짜", width: '33%', alignment: 'center', },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  517. { dataField: 'Value', width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  518. { dataField: 'Temperature', caption: "외기온도", width: '33%', alignment: 'center', format: 'fixedPoint', precision: 2 }
  519. ],
  520. // 엑셀 출력
  521. "export": {
  522. enabled: true,
  523. fileName: '에너지 사용량(외기온도)'
  524. }
  525. };
  526. /// 2017.09.08 : 그리드 도표 작업 : 팝업창 추가
  527. return viewModel;
  528. };