c305c26c0422c5198872bda922e14610adaffd06.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. BemsWebApplication.LCCView = 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 barDataArray = [];
  14. var InvestCost = null;
  15. var InvestCostDataSource = BemsWebApplication.db.createDataSource('FmsInvestmentCost');
  16. var budgetCodeClass = null;
  17. var budgetCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsBudgetCodeClass'),
  18. chartPieDay = BWA.Chart.Instance('chartPieDayLCCView', 'dxPieChart'),
  19. chartBarDay = BWA.Chart.Instance('chartBarDayLCCView', 'dxChart'),
  20. chartPieMonth = BWA.Chart.Instance('chartPieMonthLCCView', 'dxPieChart'),
  21. chartBarMonth = BWA.Chart.Instance('chartBarMonthLCCView', 'dxChart');
  22. var LCCViewGet = new BWA.Chart.PointHistory_LCCViewGet(BWA.UserInfo.SiteId());
  23. var LCCViewPreSumGet = new BWA.Chart.PointHistory_LCCViewPreSumGet(BWA.UserInfo.SiteId());
  24. var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly);
  25. var factorToe = null;
  26. var Toe = $Code.FuelType.WATER + 1;
  27. var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  28. 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. */
  60. function handleMonthBarPointClick(clickedPoint) {
  61. var month = clickedPoint.originalArgument;
  62. MakeMonthClickChart(month);
  63. }
  64. function MakeMonthClickChart(month)
  65. {
  66. var pieDataArray = [];
  67. //alert(serviceType[0].Name);
  68. chartPieDay().option('dataSource', pieDataArray);
  69. //loadDailyEnergyUsage(month);
  70. _.each(barDataArray, function (d) {
  71. if (d.DateTime == month) {
  72. for (var s = 0; s < budgetCodeClass.length; s++) {
  73. var fieldName = budgetCodeClass[s].Name();
  74. //data[fieldName] = 0;
  75. pieDataArray.push({
  76. FuelTypeName: budgetCodeClass[s].Name(),
  77. Value: d[fieldName]
  78. })
  79. }
  80. chartPieDay().option('dataSource', pieDataArray);
  81. $('#st2').text(month + '월 운영비 상세비율');
  82. return;
  83. }
  84. });
  85. }
  86. var searchViewOptions = {
  87. searchViewItems: [
  88. { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch },
  89. { id: 'FuelTypeId', ignoreValue: 0, defaultValue: 1, value: fuelTypeIdForSearch, dataSource: fuelTypesForSearch },
  90. { id: 'DateForHour', type: 'dateRange', isOnlyDate: true },
  91. { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true },
  92. ],
  93. promiseDataInSearchView: deferredForSearch.promise()
  94. };
  95. function handleViewShown() {
  96. if (initialized === false) {
  97. //var chartOption = BWA.ChartOptions.LCCView;
  98. budgetCodeClassDataSource.filter([
  99. ['Depth', '=', 0],
  100. ]);
  101. budgetCodeClassDataSource.load().done(function (dbCode) {
  102. budgetCodeClass = dbCode;
  103. BWA.ChartOptions.LCCView.MakeSeries(budgetCodeClass);
  104. chartPieDay = chartPieDay(BWA.ChartOptions.LCCView.getPieChartDayOptions());
  105. chartBarDay = chartBarDay(BWA.ChartOptions.LCCView.getBarChartDayOptions(handleMonthBarPointClick));
  106. chartPieMonth = chartPieMonth(BWA.ChartOptions.LCCView.getPieChartMonthOptions());
  107. chartBarMonth = chartBarMonth(BWA.ChartOptions.LCCView.getBarChartMonthOptions());
  108. handleSearchInSearchView();
  109. });
  110. initialized = true;
  111. }
  112. }
  113. function handleSearchInSearchView() {
  114. visiblePopup(true);
  115. InvestCostDataSource.load().done(function (Costs) {
  116. InvestCost = Costs;
  117. loadMonthlyEnergyUsage();
  118. });
  119. }
  120. function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat, presum, lastMonth) {
  121. var sums = new Array(budgetCodeClass.length);
  122. //var sums = new Array(8);
  123. for (var v = 0; v < sums.length; v++) sums[v] = 0;
  124. //var i = 0;
  125. // 미리 준비한다.
  126. var Datas = new Array();
  127. _.each(loadedDataSources, function (array, i) {
  128. _.each(array, function (x) {
  129. if (i == 0) {
  130. var data = {
  131. DateTime: moment(x.DateTime).format(timeFormat),
  132. };
  133. var b = (function (data) {
  134. var ret;
  135. for (var d = 0; d < Datas.length; d++) {
  136. if (Datas[d].DateTime == data.DateTime) return false;
  137. }
  138. return true;
  139. })(data);
  140. if (b) {
  141. for (var s = 0; s < budgetCodeClass.length; s++) {
  142. var fieldName = budgetCodeClass[s].Name();
  143. data[fieldName] = 0;
  144. var fieldNameS = budgetCodeClass[s].Name() + "누적";
  145. data[fieldNameS] = 0;
  146. }
  147. Datas.push(data);
  148. }
  149. }
  150. else
  151. return false;
  152. });
  153. });
  154. _.each(loadedDataSources, function (array, i) {
  155. _.each(array, function (x) {
  156. var fieldName = budgetCodeClass[i].Name();
  157. _.each(Datas, function (d) {
  158. if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
  159. d[fieldName] += x.Value;
  160. }
  161. });
  162. sums[i] += x.Value;
  163. //barDataArray.push(data);
  164. });
  165. });
  166. //운영비종류별 누적분계산
  167. for (var i=0; i<Datas.length; i++)
  168. CalcPreSum(Datas, i, presum);
  169. var InvestTotal = 0;
  170. _.each(InvestCost, function (c) {
  171. InvestTotal += c.InsvestmentCost();
  172. });
  173. // 운영비합산 차트 준비
  174. for (var i = 0; i < Datas.length; i++) {
  175. Datas[i]["운영비합산"] = 0;
  176. Datas[i]["InvestTotal"] = 0;
  177. for (var s = 0; s < budgetCodeClass.length; s++) {
  178. var fieldName = budgetCodeClass[s].Name();
  179. Datas[i]["운영비합산"] += Datas[i][fieldName+"누적"];
  180. }
  181. Datas[i]["InvestTotal"] = InvestTotal;
  182. }
  183. _.each(Datas, function (x) {
  184. barDataArray.push(x);
  185. if (x.DateTime == lastMonth)
  186. {
  187. pieDataArray.push({
  188. FuelTypeName: "고정비",
  189. Value: x["InvestTotal"]
  190. });
  191. pieDataArray.push({
  192. FuelTypeName: "운영비",
  193. Value: x["운영비합산"]
  194. });
  195. }
  196. });
  197. }
  198. function CalcPreSum(Data, i, presum) {
  199. for (var n=0; n <= i; n++)
  200. {
  201. for (var s = 0; s < budgetCodeClass.length; s++) {
  202. var fieldName = budgetCodeClass[s].Name();
  203. Data[i][fieldName + "누적"] += Data[n][fieldName];
  204. Data[i][fieldName + "누적"] += presum[s];
  205. }
  206. }
  207. }
  208. var fuelTypes = [FuelType.ELECTRICITY, FuelType.GAS, FuelType.WATER];
  209. function loadDailyEnergyUsage(month) {
  210. }
  211. function loadMonthlyEnergyUsage() {
  212. //visiblePopup(true);
  213. var date = timeBoxForSearch.getDate(),
  214. timeType = timeBoxForSearch.type();
  215. var promises = [];
  216. var param = {
  217. SiteId: BWA.UserInfo.SiteId(),
  218. TimeIntervalType: timeType,
  219. StartDate: date.startDate,
  220. EndDate: date.endDate,
  221. };
  222. promises.push(LCCViewPreSumGet.apiGet(_.extend(param)));
  223. //promises.push(LCCViewGet.apiGet(_.extend(param)));
  224. $.when.apply(this, promises).done(function (predata) {
  225. var promises2 = [];
  226. promises2.push(LCCViewGet.apiGet(_.extend(param)));
  227. $.when.apply(this, promises2).done(function (datas) {
  228. //var barDataArray = [];
  229. var pieDataArray = [];
  230. barDataArray = [];
  231. getChartDataFromDataSources(datas, barDataArray, pieDataArray, 'M', predata, date.endDate.getMonth() + 1);
  232. //console.log(barDataArray);
  233. //chartBarDay().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  234. //var options = BWA.ChartOptions.LCCView.getBarChartDaySeriesOptions();
  235. //options.dataSource = barDataArray;
  236. //chartBarDay().option(options);
  237. chartBarDay().option('dataSource', barDataArray);
  238. MakeMonthClickChart(date.endDate.getMonth()+1);
  239. chartBarMonth().option('dataSource', barDataArray);
  240. chartPieMonth().option('dataSource', pieDataArray);
  241. visiblePopup(false);
  242. }).fail(function (error) {
  243. //alert(error);
  244. visiblePopup(false);
  245. });
  246. });
  247. }
  248. function handleViewHidden() {
  249. visiblePopup(false);
  250. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  251. //hideOverlay();
  252. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  253. // dataGrid.clearSelection();
  254. }
  255. function handleViewShowing() {
  256. handleSearchInSearchView(); // 2016 05 10
  257. }
  258. function refreshList() {
  259. //dataSource.pageIndex(0);
  260. //dataSource.load();
  261. }
  262. var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), {
  263. refreshList: refreshList,
  264. viewShowing: handleViewShowing,
  265. });
  266. viewModel.timeBoxForSearch = timeBoxForSearch;
  267. $HourGlassPopup(viewModel, visiblePopup);
  268. return viewModel;
  269. };