b89b347c3e18de8fb126035644433dc78034909a.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. BemsWebApplication.ServiceEnergyUsageKC = function (params, viewInfo) {
  2. "use strict";
  3. var initialized = false,
  4. shouldReload = false,
  5. dataSource;
  6. var CODE = $Code,
  7. FuelType = CODE.g_fuelTypes,
  8. FacilityType = CODE.FacilityType,
  9. FacilityCode = CODE.FacilityCode,
  10. F = CODE.Formula,
  11. TIT = CODE.TimeIntervalType;
  12. var visiblePopup = ko.observable(false);
  13. var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly);
  14. var serviceTypesDataSource = BemsWebApplication.db.createDataSource('BemsServiceType'),
  15. factorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'),
  16. //fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  17. factorCo2DataSource = BemsWebApplication.db.createDataSource('BemsFactorCo2'),
  18. chartPieDaySU = BWA.Chart.Instance('chartPieDaySU', 'dxPieChart'),
  19. chartBarDaySU = BWA.Chart.Instance('chartBarDaySU', 'dxChart'),
  20. chartPieMonthSU = BWA.Chart.Instance('chartPieMonthSU', 'dxPieChart'),
  21. chartBarMonthSU = BWA.Chart.Instance('chartBarMonthSU', 'dxChart');
  22. //var energyUsageStatusGet = new BWA.Chart.EnergyUsageStatusGet(BWA.UserInfo.SiteId());
  23. var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId());
  24. var serviceType = null;
  25. var factorToeKcal = null;
  26. //var Toe = $Code.FuelType.WATER + 1;
  27. //var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  28. var //fuelTypesForSearch = ko.observableArray(),
  29. timeTypesForSearch = ko.observableArray(),
  30. timeTypeIdForSearch = ko.observable(0),
  31. fuelTypeIdForSearch = ko.observable(),
  32. deferredForSearch = new $.Deferred();
  33. var dataArray = ko.observableArray(),
  34. dataDayForPie = ko.observableArray(),
  35. dataMonthForPie = ko.observableArray(),
  36. dataDayForBar = ko.observableArray(),
  37. dataMonthForBar = ko.observableArray()
  38. ;
  39. var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  40. timeTypesForSearch($G.TimeTypes);
  41. var m = moment();
  42. dataDayForBar([
  43. { DateTime: new Date(m.year(), m.month(), 1), PowerToe: 40, GasToe: 40, WaterToe: 40 },
  44. { DateTime: new Date(m.year(), m.month(), 2), Value: 50, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  45. { DateTime: new Date(m.year(), m.month(), 3), Value: 60, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  46. { DateTime: new Date(m.year(), m.month(), 4), Value: 80, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  47. { DateTime: new Date(m.year(), m.month(), 5), Value: 100, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  48. { DateTime: new Date(m.year(), m.month(), 6), Value: 40, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  49. { DateTime: new Date(m.year(), m.month(), 7), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  50. { DateTime: new Date(m.year(), m.month(), 31), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 }
  51. ]);
  52. dataMonthForBar(dataDayForBar());
  53. dataDayForPie([
  54. { FuelTypeName: '전기', Value: 320 },
  55. { FuelTypeName: '가스', Value: 350 },
  56. { FuelTypeName: '수도', Value: 360 },
  57. ]);
  58. dataMonthForPie(dataDayForPie());
  59. function handleMonthBarPointClick(clickedPoint) {
  60. var month = clickedPoint.originalArgument;
  61. //2016 02 26
  62. var year = month.substr(0, 4);
  63. var month = (month.length == 11) ? month.substr(8, 2) : month.substr(8, 1);
  64. visiblePopup(true);
  65. loadDailyEnergyUsage(year, month);
  66. //console.log(month);
  67. }
  68. function handleViewShown() {
  69. if (initialized === false) {
  70. var chartOption = BWA.ChartOptions.ServiceEnergyUsageKC;
  71. serviceTypesDataSource.filter([
  72. ['ServiceTypeId', '<', 100]
  73. //'and',
  74. //['ServiceTypeId', '>', 0]
  75. ]);
  76. //if ()
  77. serviceTypesDataSource.load().done(function (dbServieType) {
  78. serviceType = dbServieType;
  79. chartOption.MakeSeries(serviceType);
  80. //loadDailyEnergyUsage();
  81. //loadMonthlyEnergyUsage();
  82. chartPieDaySU = chartPieDaySU(chartOption.getPieChartDayOptions());
  83. chartBarDaySU = chartBarDaySU(chartOption.getBarChartDayOptions());
  84. chartPieMonthSU = chartPieMonthSU(chartOption.getPieChartMonthOptions());
  85. chartBarMonthSU = chartBarMonthSU(chartOption.getBarChartMonthOptions(handleMonthBarPointClick));
  86. initialized = true;
  87. });
  88. }
  89. /*
  90. factorToeDataSource.load().done(function (dbFactorToe) {
  91. factorToeKcal = BWA.Bems.refineFactorKCalDataArray(dbFactorToe);
  92. });
  93. loadDailyEnergyUsage();
  94. loadMonthlyEnergyUsage(); */
  95. }
  96. function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat) {
  97. /*
  98. var pieFields = [$G('electricity'), $G('gas'), $G('water')];
  99. var toeFields = ['ElectricityToe', 'GasToe', 'WaterToe'];
  100. var fuelTypes = _.values($Code.FuelType);
  101. var calculate = factorToe.calculate;
  102. _.each(loadedDataSources, function(array, i) {
  103. var field = toeFields[i];
  104. var sum = 0;
  105. _.each(array[0], function (x) {
  106. //var field2 = serviceType[x.serviceType].Name();
  107. var data = {
  108. DateTime: moment(x.DateTime).format(timeFormat),
  109. };
  110. sum += data[field] = calculate(x.Value, fuelTypes[i]);
  111. //sum2 += data[field2] = calculate(x.Value, fuelTypes[i]);
  112. barDataArray.push(data);
  113. });
  114. //alert(serviceType[0].Name);
  115. pieDataArray.push({
  116. //FuelTypeName: pieFields[i],
  117. FuelTypeName: serviceType[i].Name(),
  118. Value: sum
  119. });
  120. }); */
  121. //var pieFields = [$G('electricity'), $G('gas'), $G('water')];
  122. //var toeFields = ['ElectricityToe', 'GasToe', 'WaterToe'];
  123. //var fuelTypes = _.values($Code.FuelType);
  124. var calculate = factorToeKcal.calculate;
  125. _.each(loadedDataSources, function (array, i) {
  126. _.each(array[0], function (x) {
  127. x.Value = calculate(x.Value, FuelType[i].FuelTypeId());
  128. });
  129. });
  130. //var sums =new Number[8];
  131. var sums = new Array(serviceType.length);
  132. //var sums = new Array(8);
  133. for (var v = 0; v < sums.length; v++) sums[v] = 0;
  134. // 미리 준비한다.
  135. var Datas = new Array();
  136. _.each(loadedDataSources, function (array, i) {
  137. _.each(array[0], function (x) {
  138. if (i == 0) {
  139. var data = {
  140. //DateTime: moment(x.DateTime).format(timeFormat),
  141. DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat),
  142. };
  143. var b = (function (data) {
  144. var ret;
  145. for (var d = 0; d < Datas.length; d++) {
  146. if (Datas[d].DateTime == data.DateTime) return false;
  147. }
  148. return true;
  149. })(data);
  150. if (b) {
  151. for (var s = 1; s < serviceType.length; s++) {
  152. var fieldName = serviceType[s].Name();
  153. data[fieldName] = 0;
  154. }
  155. Datas.push(data);
  156. }
  157. }
  158. else
  159. return false;
  160. });
  161. });
  162. _.each(loadedDataSources, function (array, i) {
  163. _.each(array[0], function (x) {
  164. var fieldName = serviceType[x.ServiceType].Name();
  165. _.each(Datas, function (d) {
  166. if (timeFormat == 'M') {
  167. if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) {
  168. d[fieldName] += x.Value;
  169. }
  170. }
  171. else {
  172. if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
  173. d[fieldName] += x.Value;
  174. }
  175. }
  176. });
  177. sums[x.ServiceType] += x.Value;
  178. //barDataArray.push(data);
  179. });
  180. });
  181. _.each(Datas, function (x) {
  182. barDataArray.push(x);
  183. });
  184. //alert(serviceType[0].Name);
  185. _.each(sums, function (x, i) {
  186. if (i > 0)
  187. pieDataArray.push({
  188. FuelTypeName: serviceType[i].Name(),
  189. Value: x
  190. });
  191. });
  192. }
  193. function getChartDataFromDataSources2(loadedDataSources, barDataArray, pieDataArray, timeFormat) {
  194. var calculate = factorToeKcal.calculate;
  195. /* _.each(loadedDataSources, function (array, i) {
  196. _.each(array, function (x) {
  197. x.Value = calculate(x.Value, FuelType[i].FuelTypeId());
  198. });
  199. }); */
  200. var sums = new Array(serviceType.length);
  201. for (var v = 0; v < sums.length; v++) sums[v] = 0;
  202. // 미리 준비한다.
  203. var Datas = new Array();
  204. _.each(loadedDataSources, function (array, i) {
  205. _.each(array, function (x) {
  206. if (i == 0) {
  207. var data = {
  208. //DateTime: moment(x.DateTime).format(timeFormat),
  209. DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat),
  210. };
  211. var b = (function (data) {
  212. var ret;
  213. for (var d = 0; d < Datas.length; d++) {
  214. if (Datas[d].DateTime == data.DateTime) return false;
  215. }
  216. return true;
  217. })(data);
  218. if (b) {
  219. for (var s = 1; s < serviceType.length; s++) {
  220. var fieldName = serviceType[s].Name();
  221. data[fieldName] = 0;
  222. }
  223. Datas.push(data);
  224. }
  225. }
  226. else
  227. return false;
  228. });
  229. });
  230. _.each(loadedDataSources, function (array, i) {
  231. _.each(array, function (x) {
  232. var fieldName = serviceType[x.ServiceType].Name();
  233. _.each(Datas, function (d) {
  234. if (timeFormat == 'M') {
  235. if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) {
  236. d[fieldName] += x.Value;
  237. }
  238. }
  239. else {
  240. if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
  241. d[fieldName] += x.Value;
  242. }
  243. }
  244. });
  245. sums[x.ServiceType] += x.Value;
  246. //barDataArray.push(data);
  247. });
  248. });
  249. _.each(Datas, function (x) {
  250. barDataArray.push(x);
  251. });
  252. //alert(serviceType[0].Name);
  253. _.each(sums, function (x, i) {
  254. if (i > 0)
  255. pieDataArray.push({
  256. FuelTypeName: serviceType[i].Name(),
  257. Value: x
  258. });
  259. });
  260. }
  261. function handleSearchInSearchView() {
  262. loadMonthlyEnergyUsage();
  263. };
  264. //var fuelTypes = [FuelType.ELECTRICITY, FuelType.GAS, FuelType.WATER];
  265. function loadDailyEnergyUsage(year, month) {
  266. /*
  267. var startDate, endDate;
  268. var monthMoment;
  269. if (_.isUndefined(month)) {
  270. monthMoment = moment();
  271. }
  272. else {
  273. monthMoment = moment().month(month - 1);
  274. }
  275. startDate = monthMoment.startOf('month');
  276. endDate = monthMoment.clone().endOf('month'); */
  277. //2016 02 26
  278. var startDate, endDate;
  279. var monthMoment;
  280. monthMoment = moment(year).month(month - 1);
  281. startDate = monthMoment.startOf('month');
  282. endDate = monthMoment.clone().endOf('month');
  283. var commonParameters = {
  284. TimeIntervalType: TIT.DAY,
  285. StartDate: startDate,
  286. EndDate: endDate
  287. };
  288. var pointHistoryParameters = {
  289. BuildingId: 0,
  290. FloorId: null,
  291. ZoneId: null,
  292. FuelTypeId: fuelTypeIdForSearch()
  293. };
  294. var promises = [];
  295. /* _.each(FuelType, function (x) {
  296. if (x.FuelTypeId() < 3) {
  297. pointHistoryParameters.FuelTypeId = x.FuelTypeId();
  298. promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters)));
  299. }
  300. //promises.push(energyUsageStatusGet.requestGetForEnergyService(x, TIT.DAY,7)
  301. //(startDate, endDate));
  302. });*/
  303. pointHistoryParameters.FuelTypeId = -1;
  304. promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters)));
  305. $.when.apply(this, promises).done(function (v) {
  306. var barDataArray = [];
  307. var pieDataArray = [];
  308. //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D');
  309. getChartDataFromDataSources2(v, barDataArray, pieDataArray, 'D');
  310. /*
  311. var remainDate = _.range(moment().date(), moment().endOf('month').date() + 1);
  312. _.each(remainDate, function(date) {
  313. barDataArray.push({
  314. DateTime: date,
  315. ElectricityToe: 0,
  316. WaterToe: 0,
  317. GasToe: 0
  318. });
  319. });
  320. console.log(barDataArray); */
  321. //2015 11 23 차트 다시 그리지 않는 문제
  322. //chartBarDay().option('dataSource', barDataArray); // 대신 아래3줄로 변경
  323. var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartDayOptions();
  324. options.dataSource = barDataArray;
  325. chartBarDaySU().option(null);
  326. chartBarDaySU().option(options);
  327. chartPieDaySU().option('dataSource', pieDataArray);
  328. visiblePopup(false);
  329. $('#st1').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용 현황');
  330. $('#st2').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 전체 사용량 비율');
  331. $('#st3').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용량');
  332. $('#st4').text('kcal환산 용도별 사용 현황');
  333. $('#st5').text('kcal환산 용도별 전체 사용량 비율');
  334. $('#st6').text('kcal환산 용도별 사용량');
  335. })
  336. .fail(function (error) {
  337. //alert(error);
  338. visiblePopup(false);
  339. });
  340. }
  341. function loadMonthlyEnergyUsage() {
  342. visiblePopup(true);
  343. var date = timeBoxForSearch.getDate();
  344. var commonParameters = {
  345. TimeIntervalType: TIT.MONTH,
  346. // StartDate: moment().startOf('year'),
  347. // EndDate: moment()
  348. StartDate: date.startDate,
  349. EndDate: date.endDate
  350. };
  351. var pointHistoryParameters = {
  352. BuildingId: 0,
  353. FloorId: null,
  354. ZoneId: null,
  355. FuelTypeId: fuelTypeIdForSearch()
  356. };
  357. var promises = [];
  358. /*
  359. _.each(FuelType, function (x) {
  360. if (x.FuelTypeId() < 3) {
  361. pointHistoryParameters.FuelTypeId = x.FuelTypeId();
  362. promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters)));
  363. }
  364. });*/
  365. pointHistoryParameters.FuelTypeId = -1;
  366. promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters)));
  367. //pointHistoryParameters.FuelTypeId = 1;
  368. //promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters)));
  369. $.when.apply(this, promises).done(function (v) {
  370. var barDataArray = [];
  371. var pieDataArray = [];
  372. //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'M');
  373. getChartDataFromDataSources2(v, barDataArray, pieDataArray, 'M');
  374. console.log(barDataArray);
  375. //2015 11 23 차트 다시 그리지 않는 문제
  376. //chartBarMonth().option('dataSource', barDataArray); 대신 아래3줄로 변경
  377. var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartMonthOptions(handleMonthBarPointClick);
  378. options.dataSource = barDataArray;
  379. chartBarMonthSU().option(null);
  380. chartBarMonthSU().option(options);
  381. chartPieMonthSU().option('dataSource', pieDataArray);
  382. //visiblePopup(false);
  383. loadDailyEnergyUsage(date.endDate.getFullYear().toString(), (date.endDate.getMonth() + 1).toString());
  384. })
  385. .fail(function (error) {
  386. //alert(error);
  387. visiblePopup(false);
  388. });
  389. }
  390. function handleViewHidden() {
  391. visiblePopup(false);
  392. //hideOverlay();
  393. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  394. // dataGrid.clearSelection();
  395. }
  396. function handleViewShowing() {
  397. factorToeDataSource.load().done(function (dbFactorToe) {
  398. factorToeKcal = BWA.Bems.refineFactorKCalDataArray(dbFactorToe);
  399. handleSearchInSearchView();
  400. });
  401. }
  402. function refreshList() {
  403. //dataSource.pageIndex(0);
  404. //dataSource.load();
  405. }
  406. var searchViewOptions = {
  407. searchViewItems: [
  408. { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch },
  409. { id: 'DateForHour', type: 'dateRange', isOnlyDate: true },
  410. { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true },
  411. ],
  412. promiseDataInSearchView: deferredForSearch.promise()
  413. };
  414. var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), {
  415. //var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, null, ko.observable(null), handleViewShown), {
  416. refreshList: refreshList,
  417. viewShowing: handleViewShowing,
  418. });
  419. viewModel.timeBoxForSearch = timeBoxForSearch;
  420. $HourGlassPopup(viewModel, visiblePopup);
  421. return viewModel;
  422. };