66fccee028388558f56d4d2da94e1741f74d97c4.svn-base 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. BemsWebApplication.ToeEnergyUsage = function (params, viewInfo) {
  2. "use strict";
  3. var initialized = false,
  4. shouldReload = false,
  5. dataSource;
  6. var CODE = $Code,
  7. FuelType = CODE.FuelType,
  8. FacilityType = CODE.FacilityType,
  9. FacilityCode = CODE.FacilityCode,
  10. F = CODE.Formula,
  11. TIT = CODE.TimeIntervalType;
  12. var visiblePopup = ko.observable(false);
  13. var factorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'),
  14. chartPieDay = BWA.Chart.Instance('chartPieDayTOE', 'dxPieChart'),
  15. chartBarDay = BWA.Chart.Instance('chartBarDayTOE', 'dxChart'),
  16. chartPieMonth = BWA.Chart.Instance('chartPieMonthTOE', 'dxPieChart'),
  17. chartBarMonth = BWA.Chart.Instance('chartBarMonthTOE', 'dxChart');
  18. var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly);
  19. var energyUsageStatusGet = new BWA.Chart.EnergyUsageStatusGet(BWA.UserInfo.SiteId());
  20. var factorToe = null;
  21. var Toe = $Code.FuelType.WATER + 1;
  22. var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  23. fuelTypesForSearch = ko.observableArray(),
  24. timeTypesForSearch = ko.observableArray(),
  25. timeTypeIdForSearch = ko.observable(0),
  26. fuelTypeIdForSearch = ko.observable(),
  27. deferredForSearch = new $.Deferred();
  28. var dataArray = ko.observableArray(),
  29. dataDayForPie = ko.observableArray(),
  30. dataMonthForPie = ko.observableArray(),
  31. dataDayForBar = ko.observableArray(),
  32. dataMonthForBar = ko.observableArray();
  33. var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  34. timeTypesForSearch($G.TimeTypes);
  35. var m = moment();
  36. /*dataDayForBar([
  37. { DateTime: new Date(m.year(), m.month(), 1), PowerToe: 40, GasToe: 40, WaterToe: 40 },
  38. { DateTime: new Date(m.year(), m.month(), 2), Value: 50, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  39. { DateTime: new Date(m.year(), m.month(), 3), Value: 60, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  40. { DateTime: new Date(m.year(), m.month(), 4), Value: 80, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  41. { DateTime: new Date(m.year(), m.month(), 5), Value: 100, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  42. { DateTime: new Date(m.year(), m.month(), 6), Value: 40, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  43. { DateTime: new Date(m.year(), m.month(), 7), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  44. { DateTime: new Date(m.year(), m.month(), 31), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 }
  45. ]);
  46. dataMonthForBar(dataDayForBar());
  47. dataDayForPie([
  48. { FuelTypeName: '전기', Value: 320 },
  49. { FuelTypeName: '가스', Value: 350 },
  50. { FuelTypeName: '수도', Value: 360 },
  51. ]);
  52. dataMonthForPie(dataDayForPie());
  53. */
  54. function handleMonthBarPointClick(clickedPoint) {
  55. var month = clickedPoint.originalArgument;
  56. //2016 02 24
  57. var year = month.substr(0, 4);
  58. var month = (month.length == 11) ? month.substr(8, 2) : month.substr(8, 1);
  59. visiblePopup(true);
  60. loadDailyEnergyUsage(year, month);
  61. //console.log(month);
  62. }
  63. function handleViewShown() {
  64. if (initialized === false) {
  65. var chartOption = BWA.ChartOptions.ToeEnergyUsage;
  66. chartPieDay = chartPieDay(chartOption.getPieChartDayOptions());
  67. chartBarDay = chartBarDay(chartOption.getBarChartDayOptions());
  68. chartPieMonth = chartPieMonth(chartOption.getPieChartMonthOptions());
  69. chartBarMonth = chartBarMonth(chartOption.getBarChartMonthOptions(handleMonthBarPointClick));
  70. //$('#chartPieDay').dxPieChart(chartOption.getPieChartDayOptions(dataDayForPie));
  71. //$('#chartBarDay').dxChart(chartOption.getBarChartDayOptions(dataDayForBar));
  72. //$('#chartPieMonth').dxPieChart(chartOption.getPieChartMonthOptions(dataMonthForPie));
  73. //$('#chartBarMonth').dxChart(chartOption.getBarChartMonthOptions(dataMonthForBar));
  74. initialized = true;
  75. }
  76. /*
  77. factorToeDataSource.load().done(function(dbFactorToe) {
  78. factorToe = BWA.Bems.refineFactorToeDataArray(dbFactorToe);
  79. loadMonthlyEnergyUsage();
  80. //loadDailyEnergyUsage();
  81. });*/
  82. }
  83. function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat) {
  84. var pieFields = [$G('electricity'), $G('gas'), $G('water')];
  85. var toeFields = ['ElectricityToe', 'GasToe', 'WaterToe'];
  86. //var pieFields = [$G('electricity'), $G('gas')];
  87. //var toeFields = ['ElectricityToe', 'GasToe',];
  88. var fuelTypes = _.values($Code.FuelType);
  89. var calculate = factorToe.calculate;
  90. _.each(loadedDataSources, function (array, i) {
  91. var field = toeFields[i];
  92. var sum = 0;
  93. _.each(array[0], function (x) {
  94. var data = {
  95. //DateTime: moment(x.DateTime).format(timeFormat), 2016 02 24
  96. DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat),
  97. };
  98. sum += data[field] = calculate(x.Value, fuelTypes[i]);
  99. barDataArray.push(data);
  100. /*
  101. var dataNULL = {
  102. DateTime: moment(x.DateTime).format(timeFormat),
  103. };
  104. dataNULL[field] = 0;
  105. nullArray.push(dataNULL); */
  106. });
  107. pieDataArray.push({
  108. FuelTypeName: pieFields[i],
  109. Value: sum
  110. });
  111. });
  112. //_.each(pieDataArray, function (x) {
  113. // if (x.Value == 0) x.Value = 1;
  114. //});
  115. }
  116. var fuelTypes = [FuelType.ELECTRICITY, FuelType.GAS, FuelType.WATER];
  117. function loadDailyEnergyUsage(year, month) {
  118. /*
  119. var startDate, endDate;
  120. var monthMoment;
  121. if (_.isUndefined(month)) {
  122. monthMoment = moment();
  123. }
  124. else {
  125. monthMoment = moment().month(month - 1);
  126. }
  127. startDate = monthMoment.startOf('month');
  128. endDate = monthMoment.clone().endOf('month'); */
  129. //2016 02 24
  130. var startDate, endDate;
  131. var monthMoment;
  132. monthMoment = moment(year).month(month - 1);
  133. startDate = monthMoment.startOf('month');
  134. endDate = monthMoment.clone().endOf('month');
  135. var promises = [];
  136. _.each(fuelTypes, function (x) {
  137. promises.push(energyUsageStatusGet.requestGetForUsgaeStatus(x, TIT.DAY)
  138. (startDate, endDate));
  139. });
  140. $.when.apply(this, promises).done(function () {
  141. var barDataArray = [];
  142. var pieDataArray = [];
  143. //var nullDataArray = [];
  144. //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D', nullDataArray);
  145. getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D');
  146. /*
  147. var remainDate = _.range(moment().date(), moment().endOf('month').date()+1);
  148. _.each(remainDate, function(date) {
  149. barDataArray.push({
  150. DateTime: date,
  151. ElectricityToe: 0,
  152. WaterToe: 0,
  153. GasToe: 0
  154. });
  155. });*/
  156. //console.log(barDataArray);
  157. //chartBarDay().option('dataSource', null);
  158. chartPieDay().option('dataSource', pieDataArray);
  159. //chartBarDay().option('dataSource', barDataArray);
  160. var options = BWA.ChartOptions.ToeEnergyUsage.getBarChartDayOptions();
  161. options.dataSource = barDataArray;
  162. chartBarDay().option(null);
  163. chartBarDay().option(options);
  164. $('#st1').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 TOE환산 에너지 사용 현황');
  165. $('#st2').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 TOE환산 에너지 전체 사용량 비율');
  166. $('#st3').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 TOE환산 에너지 사용량');
  167. /*
  168. $('#st4').text(new Date().getFullYear() + '년 TOE환산 에너지 사용 현황');
  169. $('#st5').text(new Date().getFullYear() + '년 TOE환산 에너지 전체 사용량 비율');
  170. $('#st6').text(new Date().getFullYear() + '년 TOE환산 에너지 사용량'); */
  171. $('#st4').text('TOE환산 에너지 사용 현황');
  172. $('#st5').text('TOE환산 에너지 전체 사용량 비율');
  173. $('#st6').text('TOE환산 에너지 사용량');
  174. visiblePopup(false);
  175. }).fail(function (error) {
  176. //alert(error);
  177. visiblePopup(false);
  178. });
  179. }
  180. function timeBoxForSearch() {
  181. /*
  182. visiblePopup(true);
  183. $("#large-indicator").dxLoadIndicator({
  184. height: 60,
  185. width: 60
  186. });
  187. var date = timeBoxForSearch.getDate(),
  188. timeType = timeBoxForSearch.type(),
  189. fuelTypeId = fuelTypeIdForSearch*/
  190. loadMonthlyEnergyUsage();
  191. };
  192. function loadMonthlyEnergyUsage() {
  193. visiblePopup(true);
  194. /*
  195. $("#large-indicator").dxLoadIndicator({
  196. height: 60,
  197. width: 60
  198. });*/
  199. var date = timeBoxForSearch.getDate();
  200. var promises = [];
  201. _.each(fuelTypes, function (x) {
  202. promises.push(energyUsageStatusGet.requestGetForUsgaeStatus(x, TIT.MONTH)
  203. // (moment().startOf('year'), moment()));
  204. //(moment().startOf('year'), moment().endOf('year'))); // 2016 02 24 위 막고 이렇게 했다가
  205. (date.startDate, date.endDate)); // 2016 02 24 최종
  206. });
  207. $.when.apply(this, promises).done(function () {
  208. var barDataArray = [];
  209. var pieDataArray = [];
  210. //var nullDataArray = [];
  211. //getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'M', nullDataArray);
  212. getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'M');
  213. //console.log(barDataArray);
  214. chartPieMonth().option('dataSource', pieDataArray);
  215. //chartBarMonth().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  216. //var chartOption = BWA.ChartOptions.ToeEnergyUsage;
  217. //chartBarMonth = chartBarMonth(chartOption.getBarChartMonthOptions(handleMonthBarPointClick));
  218. // chartBarMonth().option('dataSource', null);
  219. // chartBarMonth().option('dataSource', barDataArray);
  220. var options = BWA.ChartOptions.ToeEnergyUsage.getBarChartMonthOptions(handleMonthBarPointClick);
  221. options.dataSource = barDataArray;
  222. chartBarMonth().option(null);
  223. chartBarMonth().option(options);
  224. //$('#chartBarMonth').dxChart(chartOption.getBarChartMonthOptions(barDataArray));
  225. //(chartOption.getBarChartMonthOptions(barDataArray));
  226. //chartBarMonth().getBarChartMonthOptions(barDataArray);
  227. /* var renderOptions = {
  228. force: true,
  229. animate: true,
  230. asyncSeriesRendering: false
  231. }
  232. chartBarMonth().render(renderOptions); */
  233. //2015 11 23 동기화 문제로 여기로이동
  234. //loadDailyEnergyUsage();
  235. loadDailyEnergyUsage(date.endDate.getFullYear().toString(), (date.endDate.getMonth() + 1).toString());
  236. //visiblePopup(false);
  237. }).fail(function (error) {
  238. //alert(error);
  239. visiblePopup(false);
  240. });
  241. }
  242. function handleViewHidden() {
  243. visiblePopup(false);
  244. //hideOverlay();
  245. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  246. // dataGrid.clearSelection();
  247. }
  248. function handleViewShowing() {
  249. factorToeDataSource.load().done(function (dbFactorToe) {
  250. factorToe = BWA.Bems.refineFactorToeDataArray(dbFactorToe);
  251. //loadMonthlyEnergyUsage();
  252. handleSearchInSearchView();
  253. });
  254. }
  255. function handleSearchInSearchView() {
  256. /*
  257. visiblePopup(true);
  258. $("#large-indicator").dxLoadIndicator({
  259. height: 60,
  260. width: 60
  261. });
  262. var date = timeBoxForSearch.getDate(),
  263. timeType = timeBoxForSearch.type(),
  264. fuelTypeId = fuelTypeIdForSearch*/
  265. loadMonthlyEnergyUsage();
  266. };
  267. function refreshList() {
  268. //dataSource.pageIndex(0);
  269. //dataSource.load();
  270. }
  271. var searchViewOptions = {
  272. searchViewItems: [
  273. { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch },
  274. { id: 'DateForHour', type: 'dateRange', isOnlyDate: true },
  275. { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true },
  276. ],
  277. promiseDataInSearchView: deferredForSearch.promise()
  278. };
  279. var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), {
  280. refreshList: refreshList,
  281. viewShowing: handleViewShowing,
  282. });
  283. viewModel.timeBoxForSearch = timeBoxForSearch;
  284. /*
  285. viewModel.popupOptions = {
  286. width: 300,
  287. height: 100,
  288. contentTemplate: "info",
  289. showTitle: false,
  290. title: "메세지",
  291. visible: visiblePopup,
  292. dragEnabled: false,
  293. shading: false,
  294. closeOnOutsideClick: false
  295. };*/
  296. $HourGlassPopup(viewModel, visiblePopup);
  297. return viewModel;
  298. };