a64ae0da9093348346939eceb644a7165e668a2f.svn-base 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839
  1. BemsWebApplication.RefrigeratorAnalysis = function(params, viewInfo) {
  2. "use strict";
  3. var initialized = false,
  4. shouldReload = false,
  5. datagrid = null,
  6. check_input = ko.observable(true),
  7. check_out = ko.observable(true),
  8. check_s = ko.observable(true),
  9. currentTabIndex = ko.observable(0),
  10. facilityViewModel = new BWA.CmFacilityViewModel(),
  11. dataSource;
  12. var m_Facility;
  13. var multiViewItems = [{
  14. template: 'mainCharts'
  15. }, {
  16. template: 'subCharts',
  17. check_input: check_input,
  18. check_out : check_out,
  19. check_s : check_s,
  20. }
  21. ];
  22. //var buttonInstance = $('#check_input').dxChechkBox('instance');
  23. var facilityDataSource = BWA.db.createDataSource('CmFacility'),
  24. facilitiesForSearch = ko.observableArray(),
  25. facilityCodeForSearch = ko.observable(0),
  26. deferredForSearch = new $.Deferred();
  27. var dataArraycoolingApproaches = [];
  28. var dataSourceCop = ko.observableArray(),
  29. dataSourceLoadRate = ko.observableArray(),
  30. dataSourceElectricityLoadRate = ko.observableArray(),
  31. dataSourceTemperatureCop = ko.observableArray(),
  32. dataSourceCoolingApproach = ko.observableArray();
  33. //todayValue = ko.observable(0)
  34. var visiblePopup = ko.observable(false);
  35. var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  36. var timeBoxForSearch = BWA.SearchView.createDateTimeBox();
  37. var chartCop = BWA.Chart.Instance('chartCop', 'dxChart'),
  38. chartLoadRate = BWA.Chart.Instance('chartLoadRate', 'dxChart'),
  39. chartGasLoadRate = BWA.Chart.Instance('chartGasLoadRate', 'dxChart'),
  40. chartElectricityLoadRate = BWA.Chart.Instance('chartElectricityLoadRate', 'dxChart'),
  41. chartTemperatureCop = BWA.Chart.Instance('chartTemperatureCop', 'dxChart'),
  42. chartCopLoadRate = BWA.Chart.Instance('chartCopLoadRate', 'dxChart'),
  43. chartReturnEfficiency = BWA.Chart.Instance('chartReturnEfficiency', 'dxChart'),
  44. chartATF = BWA.Chart.Instance('chartATF', 'dxChart'),
  45. chartEFFSW = BWA.Chart.Instance('chartEFFSW', 'dxChart'),
  46. chartCoolingApproach = BWA.Chart.Instance('chartCoolingApproach', 'dxChart')
  47. //chartCoolingApproach_ChangeSeries = BWA.Chart.Instance('chartCoolingApproach', 'dxChart')
  48. ;
  49. var m = moment();
  50. dataSourceCop([
  51. { DateTime: new Date(m.year(), m.month(), 1), Value: 50 },
  52. { DateTime: new Date(m.year(), m.month(), 2), Value: 50 },
  53. { DateTime: new Date(m.year(), m.month(), 3), Value: 60 },
  54. { DateTime: new Date(m.year(), m.month(), 4), Value: 80 },
  55. { DateTime: new Date(m.year(), m.month(), 5), Value: 100 },
  56. { DateTime: new Date(m.year(), m.month(), 6), Value: 40, },
  57. { DateTime: new Date(m.year(), m.month(), 7), Value: 120 },
  58. { DateTime: new Date(m.year(), m.month(), 31), Value: 120 }
  59. ]);
  60. // 추가 2015 04 20 hcLee ->
  61. var CODE = $Code,
  62. FuelType = CODE.FuelType,
  63. FT = CODE.FacilityType,
  64. FC = CODE.FacilityCode,
  65. F = CODE.Formula,
  66. TIT = CODE.TimeIntervalType;
  67. // 추가 2015 04 20 hcLee <-
  68. var chartLayout = new BWA.ChartLayout({
  69. divs: [{
  70. id: 'regrigeratorDetail'
  71. }, {
  72. id: 'cop',
  73. chartId: 'chartCop'
  74. }, {
  75. id: 'loadRate',
  76. chartId: 'chartLoadRate'
  77. }, {
  78. id: 'GasLoadRate',
  79. chartId: 'chartGasLoadRate'
  80. }, {
  81. id: 'electricityLoadRate',
  82. chartId: 'chartElectricityLoadRate'
  83. }, {
  84. id: 'temperatureCop',
  85. chartId: 'chartTemperatureCop'
  86. }, {
  87. id: 'CopLoadRate',
  88. chartId: 'chartCopLoadRate'
  89. }, {
  90. id: 'returnEfficiency',
  91. chartId: 'chartReturnEfficiency'
  92. }, {
  93. id: 'ATF',
  94. chartId: 'chartATF'
  95. }, {
  96. id: 'EFFSW',
  97. chartId: 'chartEFFSW'
  98. }, {
  99. id: 'coolingApproach',
  100. chartId: 'chartCoolingApproach'
  101. }
  102. ],
  103. multiViewOptions: {
  104. viewIndex: currentTabIndex,
  105. viewCount: 2
  106. }
  107. });
  108. //dataMonthForBar(dataDayForBar());
  109. //dataDayForPie([
  110. // { FuelTypeName: '전기', Value: 320 },
  111. // { FuelTypeName: '가스', Value: 350 },
  112. // { FuelTypeName: '수도', Value: 360 },
  113. //]);
  114. //dataMonthForPie(dataDayForPie());
  115. function handleViewShown() {
  116. if (initialized === false) {
  117. var chartOption = BWA.ChartOptions.RefrigeratorAnalysis;
  118. // chart 설정, 최초 한번
  119. chartCop = chartCop(chartOption.getCopChartOptions($Code.TimeType.HOUR));
  120. chartLoadRate = chartLoadRate(chartOption.getLoadRateChartOptions($Code.TimeType.HOUR));
  121. chartGasLoadRate = chartGasLoadRate(chartOption.getGasLoadRateChartOptions($Code.TimeType.HOUR));
  122. chartElectricityLoadRate = chartElectricityLoadRate(chartOption.getElectricityLoadRateChartOptions($Code.TimeType.HOUR));
  123. chartTemperatureCop = chartTemperatureCop(chartOption.getTemperatureCopChartOptions($Code.TimeType.HOUR));
  124. chartCopLoadRate = chartCopLoadRate(chartOption.getCopLoadRateChartOptions($Code.TimeType.HOUR));
  125. chartReturnEfficiency = chartReturnEfficiency(chartOption.getReturnEfficiencyChartOptions($Code.TimeType.HOUR));
  126. chartATF = chartATF(chartOption.getATFChartOptions($Code.TimeType.HOUR));
  127. chartEFFSW = chartEFFSW(chartOption.getEFFSWChartOptions($Code.TimeType.HOUR));
  128. chartCoolingApproach = chartCoolingApproach(chartOption.getCoolingApproachChartOptions($Code.TimeType.HOUR));
  129. initialized = true;
  130. }
  131. var eq = BWA.DataUtil.constructEqualFilter;
  132. facilityDataSource.filter([
  133. eq('SiteId', BWA.UserInfo.SiteId()),
  134. 'and',
  135. eq('FacilityTypeId', $Code.FacilityType.REFRIGERATOR) // 냉동기($Code.FacilityType.REFRIGERATOR)
  136. ]);
  137. facilityDataSource.load().done(function (facilities) {
  138. facilitiesForSearch(facilities);
  139. if (_.isEmpty(facilities) === false) {
  140. var f = facilities[0]; // 첫번째 설비 그려주기 위해
  141. handleSelectedFacilityInSearchView(f);
  142. handleSearchInSearchView();
  143. var datagrid = $('#refrigeratorDataGridViewInSearchView').dxDataGrid('instance');
  144. if (_.has(datagrid, 'selectRows')) {
  145. datagrid.selectRows(f);
  146. }
  147. }
  148. });
  149. }
  150. $('#temperatureCop').css('visibility', 'hidden');
  151. $('#coolingApproach').css('margin-left', '10.5%');
  152. if (shouldReload) {
  153. //shouldReload = false;
  154. //dataSource.pageIndex(0);
  155. //dataSource.load();
  156. }
  157. function handleViewHidden() {
  158. //hideOverlay();
  159. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  160. // dataGrid.clearSelection();
  161. //chartLayout.multiViewOptions.viewCount = 1;
  162. //var view = $('#RefrigeratorAnalysisView');
  163. //view.
  164. //$('#RefrigeratorAnalysisView').sideOverlayVisible(false);
  165. //$('#RefrigeratorAnalysisView').paging.hideNextButton(true);
  166. //$('#RefrigeratorAnalysisView').paging.hideNextButton(true);
  167. var paging = BWA.ChartLayout.Paging;
  168. paging.sideOverlayVisible(false);
  169. //paging.hideNextButton(true);
  170. //paging.hidePrevButton(true);
  171. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  172. visiblePopup(false);
  173. }
  174. function handleViewShowing() {
  175. }
  176. function refreshList() {
  177. //dataSource.pageIndex(0);
  178. //dataSource.load();
  179. }
  180. var searchViewOptions = {
  181. searchViewItems: [
  182. { id: 'FacilityCode', ignoreValue: 0, defaultValue: 0, value: facilityCodeForSearch, dataSource: facilitiesForSearch },
  183. ],
  184. promiseDataInSearchView: deferredForSearch.promise()
  185. };
  186. function handleSelectedFacilityInSearchView(facility) {
  187. m_Facility = facility;
  188. return;
  189. }
  190. function setChartElectricityByLoadRate(loadRateDataArray, electricityDataArray) {
  191. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  192. loadRateDataArray, electricityDataArray, 'LoadRate', 'EV');
  193. //chartElectricityLoadRate().option('dataSource', dataArray);
  194. var options = BWA.ChartOptions.RefrigeratorAnalysis.getElectricityLoadRateChartOptions(timeBoxForSearch.type());
  195. //chartElectricityLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  196. options.dataSource = dataArray;
  197. chartElectricityLoadRate().option(options);
  198. }
  199. function setChartGasByLoadRate(loadRateDataArray, gasDataArray) {
  200. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  201. loadRateDataArray, gasDataArray, 'LoadRate', 'm');
  202. //chartGasLoadRate().option('dataSource', dataArray); // 아래 4줄로 변경
  203. var options = BWA.ChartOptions.RefrigeratorAnalysis.getGasLoadRateChartOptions(timeBoxForSearch.type());
  204. //chartGasLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  205. options.dataSource = dataArray;
  206. chartGasLoadRate().option(options);
  207. }
  208. function setChartCopByTemperature(temperatureDataArray, copDataArray, loadDataArray) {
  209. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  210. temperatureDataArray, copDataArray, 'Temperature', 'Cop');
  211. var dataArray2 = BWA.Chart.getRelationDataArrayOnDateTime(
  212. temperatureDataArray, loadDataArray, 'Temperature', 'load');
  213. _.each(dataArray2, function (x) {
  214. dataArray.push(x);
  215. });
  216. //console.log(dataArray);
  217. //chartTemperatureCop().option('dataSource', dataArray);
  218. var options = BWA.ChartOptions.RefrigeratorAnalysis.getTemperatureCopChartOptions(timeBoxForSearch.type());
  219. //chartTemperatureCop().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  220. options.dataSource = dataArray;
  221. chartTemperatureCop().option(options);
  222. }
  223. function setChartCopLoadRates(copDataArray, loadRateDataArray) {
  224. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  225. copDataArray, loadRateDataArray, 'cop', 'LoadRate');
  226. //chartCopLoadRate().option('dataSource', dataArray);
  227. var options = BWA.ChartOptions.RefrigeratorAnalysis.getCopLoadRateChartOptions(timeBoxForSearch.type());
  228. //chartCopLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  229. options.dataSource = dataArray;
  230. chartCopLoadRate().option(options);
  231. }
  232. function setChartReturnEfficiency(pkwDataArray, CoolAbtyDataArray) {
  233. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  234. pkwDataArray, CoolAbtyDataArray, 'pkwh', 'CoolAbty');
  235. //chartReturnEfficiency().option('dataSource', dataArray);
  236. var options = BWA.ChartOptions.RefrigeratorAnalysis.getReturnEfficiencyChartOptions(timeBoxForSearch.type());
  237. //chartReturnEfficiency().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  238. options.dataSource = dataArray;
  239. chartReturnEfficiency().option(options);
  240. }
  241. function setChartATF(tempDataArray, atfDataArray, maxValueatf) {
  242. //var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  243. // tempDataArray, atfDataArray, 'temp', 'atf');
  244. var dataArray = [];
  245. _.each(tempDataArray, function (x) {
  246. dataArray.push({
  247. //DateTime: moment(x.DateTime).toDate(),
  248. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  249. temp: x.Value
  250. });
  251. });
  252. _.each(atfDataArray, function (x) {
  253. dataArray.push({
  254. //DateTime: moment(x.DateTime).toDate(),
  255. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  256. atf: x.Value
  257. });
  258. });
  259. //chartATF().option('dataSource', dataArray);
  260. var options = BWA.ChartOptions.RefrigeratorAnalysis.getATFChartOptions(timeBoxForSearch.type());
  261. //chartATF().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  262. options.valueAxis[0].tickInterval = Math.round(maxValueatf / 5)+1;
  263. options.dataSource = dataArray;
  264. chartATF().option(options);
  265. }
  266. function setChartEFFSW(effDataArray, swDataArray) {
  267. //var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  268. // tempDataArray, atfDataArray, 'temp', 'atf');
  269. var dataArray = [];
  270. _.each(effDataArray, function (x) {
  271. dataArray.push({
  272. //DateTime: moment(x.DateTime).toDate(),
  273. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  274. eff: x.Value
  275. });
  276. });
  277. _.each(swDataArray, function (x) {
  278. dataArray.push({
  279. //DateTime: moment(x.DateTime).toDate(),
  280. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  281. sw: x.Value
  282. });
  283. });
  284. //chartEFFSW().option('dataSource', dataArray);
  285. var options = BWA.ChartOptions.RefrigeratorAnalysis.getEFFSWChartOptions(timeBoxForSearch.type());
  286. //chartEFFSW().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  287. options.dataSource = dataArray;
  288. chartEFFSW().option(options);
  289. }
  290. function handleSearchInSearchView(filter, searchViewItems) {
  291. //console.log(filter);
  292. //console.log(searchViewItems);
  293. if (m_Facility == null) return;
  294. visiblePopup(true);
  295. $("#large-indicator").dxLoadIndicator({
  296. height: 60,
  297. width: 60
  298. });
  299. var f = m_Facility.toJS();
  300. facilityViewModel.fromJS(f); // 선택한 설비
  301. //var timeIntervalType = $Code.TimeIntervalType.QUARTERMIN;
  302. var timeIntervalType = timeBoxForSearch.type();
  303. // $Code.FacilityType.REFRIGERATOR -> 이 화면은 냉동기 -> REFRIGERATOR: 2, 냉동기 (DB FacilityType 테이블 내용과 같아야 한다.)
  304. var formula = $Code.Formula[$Code.FacilityType.REFRIGERATOR]; // 1~ 6까지
  305. var formulaIds = _.values(formula);
  306. var date = timeBoxForSearch.getDate();
  307. // var startDate = moment().
  308. var promises = [];
  309. _.each(formulaIds, function (formulaId) {
  310. var p = formulaGet.apiGet({
  311. FacilityTypeId: f.FacilityTypeId,
  312. FacilityCode: f.FacilityCode, // 선택한 설비별 포뮬러를 가져온다
  313. FormulaId: formulaId,
  314. TimeIntervalType: timeIntervalType,
  315. StartDate: date.startDate,
  316. EndDate: date.endDate
  317. });
  318. promises.push(p);
  319. });
  320. // 외기 온도와 습도를 위해 추가 hcLee 2015 04 20 ->
  321. var commonParameters = {
  322. TimeIntervalType: timeBoxForSearch.type(),
  323. StartDate: date.startDate,
  324. EndDate: date.endDate
  325. };
  326. var temperatureParameters = {
  327. FacilityTypeId: FT.OUTDOOR,
  328. FacilityCode: FC.OUTDOOR,
  329. FormulaId: F[FT.OUTDOOR].TEMPERATURE,
  330. };
  331. var humidityParameters = _.extend({}, temperatureParameters, {
  332. FormulaId: F[FT.OUTDOOR].HUMIDITY,
  333. });
  334. promises.push(formulaGet.apiGet(_.extend(temperatureParameters, commonParameters)));
  335. promises.push(formulaGet.apiGet(_.extend(humidityParameters, commonParameters)));
  336. // 외기 온도와 습도를 위해 추가 hcLee 2015 04 20 <-
  337. $.when.apply(this, promises)
  338. .done(function (cops, loadRates, coolingApproaches,
  339. ratedCapacities, electricities, temperatures, gas, pkwh, CoolAbty, atf, eff, sw,
  340. c_out_temp, h_temp,
  341. OUTtemperatures, humidities) { // done의 리턴 파라메터는 정해져 있다 2015 04 20, 끝에 2개 (OUTtemperatures, humidities)추가
  342. cops = cops[0];
  343. loadRates = loadRates[0];
  344. var maxValuecops = 0;
  345. var maxValueloadRates = 0;
  346. _.each(cops, function (x) {
  347. if (maxValuecops < x.Value) maxValuecops = x.Value;
  348. });
  349. _.each(loadRates, function (x) {
  350. if (maxValueloadRates < x.Value) maxValueloadRates = x.Value;
  351. });
  352. coolingApproaches = coolingApproaches[0];
  353. /*
  354. var maxValuecoolingApproaches = 0;
  355. _.each(coolingApproaches, function (x) {
  356. if (maxValuecoolingApproaches < x.Value) maxValuecoolingApproaches= x.Value; // 2015 07 02 쿨링어프로치의 온도들은 외기온도가 아니기 떄문에 min max가 없는 걸로 일단 처리 한다.
  357. });*/
  358. dataArraycoolingApproaches = coolingApproaches;
  359. ratedCapacities = ratedCapacities[0]; // 추가 hcLee 2015 04 20
  360. electricities = electricities[0]; // 전력량
  361. temperatures = temperatures[0]; // 냉각수 입구 온도
  362. gas = gas[0];
  363. pkwh = pkwh[0];
  364. CoolAbty = CoolAbty[0];
  365. //OUTtemperatures = OUTtemperatures[0];
  366. atf = atf[0];
  367. var maxValueatf = 0;
  368. _.each(atf, function (x) {
  369. if (maxValueatf < x.Value) maxValueatf = x.Value;
  370. });
  371. eff = eff[0];
  372. sw = sw[0];
  373. c_out_temp = c_out_temp[0];
  374. h_temp = h_temp[0];
  375. var dataArray = [];
  376. _.each(OUTtemperatures[0], function (x) {
  377. dataArray.push({
  378. //DateTime: moment(x.DateTime).toDate(),
  379. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  380. Temperature: x.Value
  381. });
  382. });
  383. _.each(humidities[0], function (x) {
  384. dataArray.push({
  385. //DateTime: moment(x.DateTime).toDate(),
  386. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  387. Humidity: x.Value
  388. });
  389. });
  390. var copDataArray = BWA.Chart.mapNewWithConvertingDateTime(cops, timeBoxForSearch.type());
  391. var loadRateDataArray = BWA.Chart.mapNewWithConvertingDateTime(loadRates, timeBoxForSearch.type());
  392. _.each(OUTtemperatures[0], function (x) {
  393. copDataArray.push({
  394. //DateTime: moment(x.DateTime).toDate(),
  395. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  396. Temperature: x.Value
  397. });
  398. loadRateDataArray.push({
  399. //DateTime: moment(x.DateTime).toDate(),
  400. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  401. Temperature: x.Value
  402. });
  403. });
  404. _.each(humidities[0], function (x) {
  405. copDataArray.push({
  406. //DateTime: moment(x.DateTime).toDate(),
  407. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  408. Humidity: x.Value
  409. });
  410. loadRateDataArray.push({
  411. //DateTime: moment(x.DateTime).toDate(),
  412. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  413. Humidity: x.Value
  414. });
  415. });
  416. BWA.Chart.mapWithConvertingDateTime(coolingApproaches, timeBoxForSearch.type());
  417. // 1차트 냉동기 COP
  418. // chartCop().option('dataSource', copDataArray); 2015 06 25 아래 4줄로 변경
  419. var options = BWA.ChartOptions.RefrigeratorAnalysis.getCopChartOptions(timeBoxForSearch.type());
  420. //chartCop().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  421. options.valueAxis[0].tickInterval = Math.round(maxValuecops / 5)+1;
  422. options.dataSource = copDataArray;
  423. chartCop().option(options);
  424. // 2차트 부하율
  425. //chartLoadRate().option('dataSource', loadRateDataArray);
  426. options = BWA.ChartOptions.RefrigeratorAnalysis.getLoadRateChartOptions(timeBoxForSearch.type());
  427. options.valueAxis[0].tickInterval = Math.round(maxValueloadRates / 5) + 1;
  428. //chartLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  429. options.dataSource = loadRateDataArray;
  430. chartLoadRate().option(options);
  431. // 3차트 추가 가스량vs부하
  432. //chartGasLoadRate().option('dataSource', loadRateDataArray);
  433. setChartGasByLoadRate(loadRates, gas);
  434. //$('#electricityLoadRate').css('visibility', 'hidden'); // hcLee 2015 06 26 이렇게 하는 방벙도 있지만 페이지 정리까지 할려면 일이 크다.
  435. //$('#electricityLoadRate').css('width', '0%');
  436. // 4차트 냉동기 소비전력과 부하율 관계 -> 차트4
  437. setChartElectricityByLoadRate(loadRates, electricities);
  438. // 5차트 냉각수 입구 온도와 COP, 부하율 관계
  439. setChartCopByTemperature(temperatures, cops, loadRates);
  440. // 6차트 COP와 부하율 분석 (다음페이지 첫 차트)
  441. setChartCopLoadRates(cops, loadRates);
  442. // 7차트 수반송 효율
  443. setChartReturnEfficiency(pkwh, CoolAbty);
  444. // 8차트 ATF
  445. //setChartATF(temperatures, atf);
  446. setChartATF(OUTtemperatures[0], atf, maxValueatf);
  447. // 9차트 EFFSW
  448. setChartEFFSW(eff, sw);
  449. // 마지막차트 냉동기 시간대별 쿨링어프로치
  450. _.each(temperatures, function (x) {
  451. coolingApproaches.push({
  452. //DateTime: moment(x.DateTime).toDate(),
  453. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  454. c_in_temp: x.Value
  455. });
  456. });
  457. _.each(c_out_temp, function (x) {
  458. coolingApproaches.push({
  459. //DateTime: moment(x.DateTime).toDate(),
  460. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  461. c_out_temp: x.Value
  462. });
  463. });
  464. _.each(h_temp, function (y) {
  465. coolingApproaches.push({
  466. //DateTime: moment(y.DateTime).toDate(),
  467. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(y.DateTime).toDate()),
  468. h_temp: y.Value
  469. });
  470. });
  471. //chartCoolingApproach().option('dataSource', coolingApproaches);
  472. options = BWA.ChartOptions.RefrigeratorAnalysis.getCoolingApproachChartOptions(timeBoxForSearch.type());
  473. //chartCoolingApproach().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  474. //options.valueAxis[0].tickInterval = Math.round(maxValuecoolingApproaches / 10); // 2015 07 02 쿨링어프로치의 온도들은 외기온도가 아니기 떄문에 min max가 없는 걸로 일단 처리 한다.
  475. options.dataSource = coolingApproaches;
  476. chartCoolingApproach().option(options);
  477. visiblePopup(false);
  478. })
  479. .fail(function (error) {
  480. //alert(error);
  481. visiblePopup(false);
  482. });
  483. }
  484. var viewModel = $.extend(BWA.CommonView.create(
  485. params, viewInfo, searchViewOptions, ko.observable(null),
  486. handleViewShown, null, handleSearchInSearchView,
  487. undefined, chartLayout), {
  488. facility: facilityViewModel,
  489. viewHidden: handleViewHidden, // hcLee 2015 06 03
  490. refreshList: refreshList,
  491. viewShowing: handleViewShowing,
  492. scrolling: { mode: 'infinite' },
  493. waterCoolingDataGridOptions: {
  494. dataSource: facilitiesForSearch,
  495. columns: [
  496. { dataField: 'Name', caption: $G('facilityName'), width: '100%', alignment: 'left' }
  497. ],
  498. filterRow: {
  499. visible: true,
  500. showOperationChooser: false
  501. },
  502. selection: {
  503. mode: 'single'
  504. },
  505. rowClick: function(clickRow) {
  506. handleSelectedFacilityInSearchView(clickRow.data);
  507. }
  508. },
  509. contentReadyAction: function(e) {
  510. datagrid = e.component;
  511. },
  512. });
  513. viewModel.check_input_f = function () {
  514. setCheckBoxChart();
  515. }
  516. var valueAxises = [
  517. {
  518. title: {
  519. text: $G('coolingApproach')
  520. }
  521. },
  522. {
  523. //pane: 'topPane',
  524. name: 'intemp',
  525. position: 'right',
  526. //valueMarginsEnabled: true,
  527. //minValueMargin: 0,
  528. //maxValueMargin: 0,
  529. //min: -20,
  530. //max: 40,
  531. label: {
  532. font: { color: '#c96374' },
  533. visible: true,
  534. //format: 'largeNumber'
  535. },
  536. title: {
  537. text: '냉각수 입구온도'
  538. }
  539. }, {
  540. //pane: 'topPane',
  541. name: 'outtemp',
  542. //min: 0,
  543. //max: 100,
  544. position: 'right',
  545. grid: {
  546. visible: true
  547. },
  548. label: {
  549. font: { color: '#00A7C6' },
  550. visible: true,
  551. //format: 'largeNumber'
  552. },
  553. title: {
  554. text: '냉각수 출구온도'
  555. }
  556. }, {
  557. //pane: 'topPane',
  558. name: 'htemp',
  559. //min: 0,
  560. //max: 100,
  561. position: 'right',
  562. grid: {
  563. visible: true
  564. },
  565. label: {
  566. font: { color: 'darkgreen' },
  567. visible: true,
  568. //format: 'largeNumber'
  569. },
  570. title: {
  571. text: '습구온도'
  572. }
  573. }];
  574. var seriesS = [
  575. {
  576. type: 'bar',
  577. argumentField: 'DateTime',
  578. //argumentField: 'string',
  579. valueField: 'Value',
  580. width: 5,
  581. //valueField: 'h_temp',
  582. name: $G('coolingApproach'),
  583. label: {
  584. visible: false,
  585. },
  586. point: { size: 8 }
  587. },
  588. {
  589. type: 'spline',
  590. color: '#c96374',
  591. //pane: 'topPane',
  592. axis: 'intemp',
  593. valueField: 'c_in_temp',
  594. point: { size: 1 },
  595. name: $G('outdoorTemperature'),
  596. label: {
  597. visible: false,
  598. font: { color: '#c96374', },
  599. customizeText: function () {
  600. return this.valueText + ' °C';
  601. }
  602. }
  603. }, {
  604. type: 'spline',
  605. //pane: 'topPane',
  606. axis: 'outtemp',
  607. color: '#00A7C6',
  608. valueField: 'c_out_temp',
  609. point: { size: 1 },
  610. name: '냉각수 출구온도',
  611. label: {
  612. font: { color: '#00A7C6', },
  613. visible: false,
  614. customizeText: function () {
  615. return this.valueText + ' °C';
  616. }
  617. }
  618. }, {
  619. type: 'spline',
  620. // pane: 'topPane',
  621. axis: 'htemp',
  622. color: 'darkgreen',
  623. valueField: 'h_temp',
  624. point: { size: 1 },
  625. name: '습구온도',
  626. label: {
  627. font: { color: 'darkgreen', },
  628. visible: false,
  629. customizeText: function () {
  630. return this.valueText + ' °C';
  631. }
  632. }
  633. }];
  634. function setCheckBoxChart()
  635. {
  636. /*
  637. var cO = BWA.ChartOptions.RefrigeratorAnalysis;
  638. var S = chartCoolingApproach(cO.getCoolingApproachSeriesOptions(check_input(), check_out(), check_s()));
  639. var V = chartCoolingApproach(cO.getCoolingApproachvalueAxisOptions(check_input(), check_out(), check_s()));
  640. var chart = $('#chartCoolingApproach').dxChart('instance');
  641. chart.option('valueAxis', V);
  642. chart.option('series', S); */ // 이렇게 옵션에서 가져오면 안됨.
  643. // OK 코드
  644. var chart = $('#chartCoolingApproach').dxChart('instance');
  645. var valueAxisNew = [];
  646. valueAxisNew.push(valueAxises[0]);
  647. if (check_input()) valueAxisNew.push(valueAxises[1]);
  648. if (check_out()) valueAxisNew.push(valueAxises[2]);
  649. if (check_s()) valueAxisNew.push(valueAxises[3]);
  650. chart.option('valueAxis', valueAxisNew);
  651. var seriesNew = [];
  652. seriesNew.push(seriesS[0]);
  653. if (check_input()) seriesNew.push(seriesS[1]);
  654. if (check_out()) seriesNew.push(seriesS[2]);
  655. if (check_s()) seriesNew.push(seriesS[3]);
  656. chart.option('series', seriesNew);
  657. // OK 코드
  658. }
  659. viewModel.check_out_f = function () {
  660. setCheckBoxChart();
  661. }
  662. viewModel.check_s_f = function () {
  663. setCheckBoxChart();
  664. }
  665. check_input.subscribe(viewModel.check_input_f);
  666. check_out.subscribe(viewModel.check_out_f);
  667. check_s.subscribe(viewModel.check_s_f);
  668. viewModel.popupOptions = {
  669. width: 300,
  670. height: 100,
  671. contentTemplate: "info",
  672. showTitle: false,
  673. title: "메세지",
  674. visible: visiblePopup,
  675. dragEnabled: false,
  676. shading: false,
  677. closeOnOutsideClick: false
  678. };
  679. viewModel.timeBoxForSearch = timeBoxForSearch;
  680. viewModel.currentTabIndex = currentTabIndex;
  681. viewModel.multiViewItems = [{
  682. facility: facilityViewModel,
  683. template: 'mainCharts'
  684. }, {
  685. template: 'subCharts',
  686. check_input: check_input,
  687. check_out: check_out,
  688. check_s: check_s,
  689. }
  690. ];
  691. //ko.applyBindgings(viewModel, check_input);
  692. //ko.a
  693. //ko.applyBindings(viewModel, document.getElementById("multiview"));
  694. return viewModel;
  695. };