3b78a0b05ab60873433de20cb0bbcc334d22d2a0.svn-base 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. BemsWebApplication.BudgetExecuteView = 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('chartPieDayBEV', 'dxPieChart'),
  19. chartPieDay2 = BWA.Chart.Instance('chartPieDay2BEV', 'dxPieChart'),
  20. chartBarDay = BWA.Chart.Instance('chartBarDayBEV', 'dxChart');
  21. //chartPieMonth = BWA.Chart.Instance('chartPieMonth', 'dxPieChart'),
  22. //chartBarMonth = BWA.Chart.Instance('chartBarMonth', 'dxChart');
  23. var LCCViewGet = new BWA.Chart.PointHistory_LCCViewGet(BWA.UserInfo.SiteId());
  24. var LCCViewPreSumGet = new BWA.Chart.PointHistory_LCCViewPreSumGet(BWA.UserInfo.SiteId());
  25. var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly);
  26. var factorToe = null;
  27. var Toe = $Code.FuelType.WATER + 1;
  28. var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  29. fuelTypesForSearch = ko.observableArray(),
  30. timeTypesForSearch = ko.observableArray(),
  31. timeTypeIdForSearch = ko.observable(0),
  32. fuelTypeIdForSearch = ko.observable(),
  33. deferredForSearch = new $.Deferred();
  34. var dataArray = ko.observableArray(),
  35. dataDayForPie = ko.observableArray(),
  36. dataMonthForPie = ko.observableArray(),
  37. dataDayForBar = ko.observableArray(),
  38. dataMonthForBar = ko.observableArray()
  39. ;
  40. var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  41. timeTypesForSearch($G.TimeTypes);
  42. var m = moment();
  43. /*dataDayForBar([
  44. { DateTime: new Date(m.year(), m.month(), 1), PowerToe: 40, GasToe: 40, WaterToe: 40 },
  45. { DateTime: new Date(m.year(), m.month(), 2), Value: 50, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  46. { DateTime: new Date(m.year(), m.month(), 3), Value: 60, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  47. { DateTime: new Date(m.year(), m.month(), 4), Value: 80, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  48. { DateTime: new Date(m.year(), m.month(), 5), Value: 100, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  49. { DateTime: new Date(m.year(), m.month(), 6), Value: 40, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  50. { DateTime: new Date(m.year(), m.month(), 7), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  51. { DateTime: new Date(m.year(), m.month(), 31), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 }
  52. ]);
  53. dataMonthForBar(dataDayForBar());
  54. dataDayForPie([
  55. { FuelTypeName: '전기', Value: 320 },
  56. { FuelTypeName: '가스', Value: 350 },
  57. { FuelTypeName: '수도', Value: 360 },
  58. ]);
  59. dataMonthForPie(dataDayForPie());
  60. */
  61. function handleMonthBarPointClick(clickedPoint) {
  62. var month = clickedPoint.originalArgument;
  63. MakeMonthClickChart(month);
  64. }
  65. function MakeMonthClickChart(month)
  66. {
  67. var pieDataArray = [];
  68. var pieDataArray2 = [];
  69. //alert(serviceType[0].Name);
  70. chartPieDay().option('dataSource', pieDataArray);
  71. chartPieDay2().option('dataSource', pieDataArray2);
  72. //loadDailyEnergyUsage(month);
  73. _.each(barDataArray, function (d) {
  74. if (d.DateTime == month) {
  75. for (var s = 0; s < budgetCodeClass.length; s++) {
  76. var fieldNameB = budgetCodeClass[s].Name() + "_B";
  77. pieDataArray.push({
  78. FuelTypeName: "예산 " + budgetCodeClass[s].Name(),
  79. Value: d[fieldNameB]
  80. })
  81. var fieldName = budgetCodeClass[s].Name();
  82. pieDataArray2.push({
  83. FuelTypeName: budgetCodeClass[s].Name(),
  84. Value: d[fieldName]
  85. })
  86. }
  87. chartPieDay().option('dataSource', pieDataArray);
  88. chartPieDay2().option('dataSource', pieDataArray2);
  89. $('#st2').text(month + '월 예산 비율');
  90. $('#st4').text(month + '월 실적 비율');
  91. return;
  92. }
  93. });
  94. }
  95. var searchViewOptions = {
  96. searchViewItems: [
  97. { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch },
  98. { id: 'FuelTypeId', ignoreValue: 0, defaultValue: 1, value: fuelTypeIdForSearch, dataSource: fuelTypesForSearch },
  99. { id: 'DateForHour', type: 'dateRange', isOnlyDate: true },
  100. { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true },
  101. ],
  102. promiseDataInSearchView: deferredForSearch.promise()
  103. };
  104. function handleViewShown() {
  105. if (initialized === false) {
  106. //var chartOption = BWA.ChartOptions.LCCView;
  107. budgetCodeClassDataSource.filter([
  108. ['Depth', '=', 0],
  109. ]);
  110. budgetCodeClassDataSource.load().done(function (dbCode) {
  111. budgetCodeClass = dbCode;
  112. BWA.ChartOptions.BudgetExecuteView.MakeSeries(budgetCodeClass);
  113. chartPieDay = chartPieDay(BWA.ChartOptions.BudgetExecuteView.getPieChartDayOptions());
  114. chartPieDay2 = chartPieDay2(BWA.ChartOptions.BudgetExecuteView.getPieChartDayOptions());
  115. chartBarDay = chartBarDay(BWA.ChartOptions.BudgetExecuteView.getBarChartDayOptions(handleMonthBarPointClick));
  116. //chartPieMonth = chartPieMonth(BWA.ChartOptions.BudgetExecuteView.getPieChartMonthOptions());
  117. //chartBarMonth = chartBarMonth(BWA.ChartOptions.BudgetExecuteView.getBarChartMonthOptions());
  118. InvestCostDataSource.load().done(function (Costs) {
  119. InvestCost = Costs;
  120. });
  121. handleSearchInSearchView();
  122. //loadMonthlyEnergyUsage();
  123. //loadDailyEnergyUsage();
  124. });
  125. //$('#chartPieDay').dxPieChart(chartOption.getPieChartDayOptions(dataDayForPie));
  126. //$('#chartBarDay').dxChart(chartOption.getBarChartDayOptions(dataDayForBar));
  127. //$('#chartPieMonth').dxPieChart(chartOption.getPieChartMonthOptions(dataMonthForPie));
  128. //$('#chartBarMonth').dxChart(chartOption.getBarChartMonthOptions(dataMonthForBar));
  129. initialized = true;
  130. }
  131. }
  132. function handleSearchInSearchView() {
  133. visiblePopup(true);
  134. $("#large-indicator").dxLoadIndicator({
  135. height: 60,
  136. width: 60
  137. });
  138. loadMonthlyEnergyUsage();
  139. }
  140. function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat, presum, lastMonth) {
  141. var sums = new Array(budgetCodeClass.length);
  142. var sums2 = new Array(budgetCodeClass.length);
  143. //var sums = new Array(8);
  144. for (var v = 0; v < sums.length; v++){
  145. sums[v] = 0;
  146. sums2[v] = 0;
  147. }
  148. //var i = 0;
  149. // 미리 준비한다.
  150. var Datas = new Array();
  151. _.each(loadedDataSources, function (array, i) {
  152. _.each(array, function (x) {
  153. if (i == 0) {
  154. var data = {
  155. DateTime: moment(x.DateTime).format(timeFormat),
  156. };
  157. var b = (function (data) {
  158. var ret;
  159. for (var d = 0; d < Datas.length; d++) {
  160. if (Datas[d].DateTime == data.DateTime) return false;
  161. }
  162. return true;
  163. })(data);
  164. if (b) {
  165. for (var s = 0; s < budgetCodeClass.length; s++) {
  166. var fieldName = budgetCodeClass[s].Name();
  167. data[fieldName] = 0;
  168. var fieldNameS = budgetCodeClass[s].Name() + "누적";
  169. data[fieldNameS] = 0;
  170. }
  171. Datas.push(data);
  172. var data2 = {
  173. DateTime: moment(x.DateTime).format(timeFormat),
  174. };
  175. for (var s = 0; s < budgetCodeClass.length; s++) {
  176. var fieldName = budgetCodeClass[s].Name() + "_B";
  177. data2[fieldName] = 0;
  178. var fieldNameS = budgetCodeClass[s].Name() + "_B누적";
  179. data2[fieldNameS] = 0;
  180. }
  181. Datas.push(data2);
  182. }
  183. }
  184. else
  185. return false;
  186. });
  187. });
  188. _.each(loadedDataSources, function (array, i) {
  189. _.each(array, function (x) {
  190. var fieldName = budgetCodeClass[i].Name();
  191. var fieldName2 = budgetCodeClass[i].Name() + "_B";
  192. _.each(Datas, function (d) {
  193. if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
  194. d[fieldName] += x.Value;
  195. d[fieldName2] += x.Value2;
  196. }
  197. });
  198. sums[i] += x.Value;
  199. sums2[i] += x.Value2;
  200. //barDataArray.push(data);
  201. });
  202. });
  203. /*
  204. //운영비종류별 누적분계산
  205. for (var i=0; i<Datas.length; i++)
  206. CalcPreSum(Datas, i, presum);
  207. var InvestTotal = 0;
  208. _.each(InvestCost, function (c) {
  209. InvestTotal += c.InsvestmentCost();
  210. });
  211. // 운영비합산 차트 준비
  212. for (var i = 0; i < Datas.length; i++) {
  213. Datas[i]["운영비합산"] = 0;
  214. Datas[i]["InvestTotal"] = 0;
  215. for (var s = 0; s < budgetCodeClass.length; s++) {
  216. var fieldName = budgetCodeClass[s].Name();
  217. Datas[i]["운영비합산"] += Datas[i][fieldName+"누적"];
  218. }
  219. Datas[i]["InvestTotal"] = InvestTotal;
  220. }
  221. _.each(Datas, function (x) {
  222. barDataArray.push(x);
  223. if (x.DateTime == lastMonth)
  224. {
  225. pieDataArray.push({
  226. FuelTypeName: "고정비",
  227. Value: x["InvestTotal"]
  228. });
  229. pieDataArray.push({
  230. FuelTypeName: "운영비",
  231. Value: x["운영비합산"]
  232. });
  233. }
  234. });*/
  235. _.each(Datas, function (x) {
  236. barDataArray.push(x);
  237. });
  238. }
  239. function CalcPreSum(Data, i, presum) {
  240. for (var n=0; n <= i; n++)
  241. {
  242. for (var s = 0; s < budgetCodeClass.length; s++) {
  243. var fieldName = budgetCodeClass[s].Name();
  244. Data[i][fieldName + "누적"] += Data[n][fieldName];
  245. Data[i][fieldName + "누적"] += presum[s];
  246. }
  247. }
  248. }
  249. var fuelTypes = [FuelType.ELECTRICITY, FuelType.GAS, FuelType.WATER];
  250. function loadDailyEnergyUsage(month) {
  251. }
  252. function loadMonthlyEnergyUsage() {
  253. visiblePopup(true);
  254. $("#large-indicator").dxLoadIndicator({
  255. height: 60,
  256. width: 60
  257. });
  258. var date = timeBoxForSearch.getDate(),
  259. timeType = timeBoxForSearch.type();
  260. var promises = [];
  261. var param = {
  262. SiteId: BWA.UserInfo.SiteId(),
  263. TimeIntervalType: timeType,
  264. StartDate: date.startDate,
  265. EndDate: date.endDate,
  266. };
  267. /*
  268. promises.push(LCCViewPreSumGet.apiGet(_.extend(param)));
  269. $.when.apply(this, promises).done(function (predata) {
  270. var promises2 = [];
  271. promises2.push(LCCViewGet.apiGet(_.extend(param)));
  272. $.when.apply(this, promises2).done(function (datas) {
  273. var pieDataArray = [];
  274. barDataArray = [];
  275. getChartDataFromDataSources(datas, barDataArray, pieDataArray, 'M', predata, date.endDate.getMonth() + 1);
  276. chartBarDay().option('dataSource', barDataArray);
  277. MakeMonthClickChart(date.endDate.getMonth()+1);
  278. visiblePopup(false);
  279. }).fail(function (error) {
  280. //alert(error);
  281. visiblePopup(false);
  282. });
  283. }); */
  284. var promises2 = [];
  285. promises2.push(LCCViewGet.apiGet(_.extend(param)));
  286. $.when.apply(this, promises2).done(function (datas) {
  287. var pieDataArray = [];
  288. barDataArray = [];
  289. getChartDataFromDataSources(datas, barDataArray, pieDataArray, 'M', null, date.endDate.getMonth() + 1);
  290. chartBarDay().option('dataSource', barDataArray);
  291. MakeMonthClickChart(date.endDate.getMonth() + 1);
  292. visiblePopup(false);
  293. }).fail(function (error) {
  294. //alert(error);
  295. visiblePopup(false);
  296. });
  297. }
  298. function handleViewHidden() {
  299. visiblePopup(false);
  300. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  301. //hideOverlay();
  302. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  303. // dataGrid.clearSelection();
  304. }
  305. function handleViewShowing() {
  306. }
  307. function refreshList() {
  308. //dataSource.pageIndex(0);
  309. //dataSource.load();
  310. }
  311. var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), {
  312. refreshList: refreshList,
  313. viewShowing: handleViewShowing,
  314. });
  315. viewModel.timeBoxForSearch = timeBoxForSearch;
  316. viewModel.popupOptions = {
  317. width: 300,
  318. height: 100,
  319. contentTemplate: "info",
  320. showTitle: false,
  321. title: "메세지",
  322. visible: visiblePopup,
  323. dragEnabled: false,
  324. shading: false,
  325. closeOnOutsideClick: false
  326. };
  327. return viewModel;
  328. };