6eeacea56fe3f2178f2bc65b1e9cba3a4a6d7ceb.svn-base 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. BemsWebApplication.FacilityTaskReport = 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 useBusinessFiltering = ko.observable(false);
  13. var visiblePopup = ko.observable(false);
  14. //var barDataArray = [];
  15. var works = ko.observableArray();
  16. var works2 = ko.observableArray();
  17. var works3 = ko.observableArray(); // bar chart용
  18. var works4 = ko.observableArray(); // bar chart용
  19. var eq = BWA.DataUtil.constructEqualFilter,
  20. and = BWA.DataUtil.andFilter;
  21. //or = BWA.DataUtil.orFilter;
  22. var BFDataSource = BemsWebApplication.db.createDataSource('CmBusinessField'),
  23. progressDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeProgress'),
  24. chartPieDay = BWA.Chart.Instance('chartPieDayTReport', 'dxPieChart'),
  25. chartBarDay = BWA.Chart.Instance('chartBarDayTReport', 'dxChart');
  26. //chartPieMonth = BWA.Chart.Instance('chartPieMonth', 'dxPieChart'),
  27. //chartBarMonth = BWA.Chart.Instance('chartBarMonth', 'dxChart');
  28. var BF = ko.observableArray(),
  29. progresses = ko.observableArray();
  30. var LCCViewGet = new BWA.Chart.PointHistory_LCCViewGet(BWA.UserInfo.SiteId());
  31. var LCCViewPreSumGet = new BWA.Chart.PointHistory_LCCViewPreSumGet(BWA.UserInfo.SiteId());
  32. var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly);
  33. var factorToe = null;
  34. var Toe = $Code.FuelType.WATER + 1;
  35. var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  36. fuelTypesForSearch = ko.observableArray(),
  37. timeTypesForSearch = ko.observableArray(),
  38. timeTypeIdForSearch = ko.observable(0),
  39. fuelTypeIdForSearch = ko.observable(),
  40. deferredForSearch = new $.Deferred();
  41. var dataArray = ko.observableArray(),
  42. dataDayForPie = ko.observableArray(),
  43. dataMonthForPie = ko.observableArray(),
  44. dataDayForBar = ko.observableArray(),
  45. dataMonthForBar = ko.observableArray()
  46. ;
  47. var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  48. timeTypesForSearch($G.TimeTypes);
  49. var m = moment();
  50. /*dataDayForBar([
  51. { DateTime: new Date(m.year(), m.month(), 1), PowerToe: 40, GasToe: 40, WaterToe: 40 },
  52. { DateTime: new Date(m.year(), m.month(), 2), Value: 50, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  53. { DateTime: new Date(m.year(), m.month(), 3), Value: 60, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  54. { DateTime: new Date(m.year(), m.month(), 4), Value: 80, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  55. { DateTime: new Date(m.year(), m.month(), 5), Value: 100, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  56. { DateTime: new Date(m.year(), m.month(), 6), Value: 40, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  57. { DateTime: new Date(m.year(), m.month(), 7), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 },
  58. { DateTime: new Date(m.year(), m.month(), 31), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 }
  59. ]);
  60. dataMonthForBar(dataDayForBar());
  61. dataDayForPie([
  62. { FuelTypeName: '전기', Value: 320 },
  63. { FuelTypeName: '가스', Value: 350 },
  64. { FuelTypeName: '수도', Value: 360 },
  65. ]);
  66. dataMonthForPie(dataDayForPie());
  67. */
  68. var workDataSource = BWA.DataUtil.createDataSource({
  69. dataSourceOptions: {
  70. select: [
  71. 'SiteId', 'WorkRequestId', 'FmsWorkRequest/FmsWorkCodeType/Name',
  72. 'FmsWorkRequest/WorkTypeId', 'Title', 'OrderDate', 'FmsWorkRequest/WorkProgressId',
  73. 'CmUser/Name', // 작업지시자
  74. 'FmsWorkRequest/CmBusinessField/Name',
  75. 'BusinessFieldId', 'FmsWorkRequest/CmBusinessField/Name', 'FmsWorkRequest/BusinessFieldId'
  76. ],
  77. expand: ['FmsWorkRequest',
  78. 'FmsWorkResult',
  79. 'FmsWorkResult/CmUser',
  80. 'FmsWorkResult/IsConfirmed',
  81. 'FmsWorkResult/ConfirmedDate',
  82. 'FmsWorkRequest/FmsWorkCodeType',
  83. 'FmsWorkRequest/CmBusinessField',
  84. 'FmsWorkRequest/FmsWorkCodeProgress',
  85. 'CmBusinessField', 'CmUser'],
  86. extendOptions: {
  87. forceOriginalField: true,
  88. }
  89. },
  90. }, 'FmsWorkOrder');
  91. //}, 'FmsWorkRequest');
  92. // 2016 05 11 추가
  93. var workDataSource2 = BWA.DataUtil.createDataSource({
  94. dataSourceOptions: {
  95. select: [
  96. 'SiteId', 'WorkRequestId',
  97. 'StartDate', 'EndDate',
  98. 'ConfirmedDate', 'ConfirmedUserId', 'IsConfirmed',
  99. 'CauseClassId', 'Content',
  100. 'FmsWorkRequest/WorkTypeId',
  101. 'FmsWorkOrder/Title',
  102. 'FmsWorkOrder/OrderDate',
  103. 'FmsWorkRequest/WorkProgressId',
  104. 'CmUser/Name', // 작업자
  105. 'CmUser1/Name', // 승인자
  106. 'FmsWorkRequest/FmsWorkCodeType/Name',
  107. 'FmsWorkRequest/CmBusinessField/Name',
  108. 'FmsWorkRequest/FmsWorkCodeProgress/Name',
  109. 'FmsWorkOrder/BusinessFieldId',
  110. 'FmsWorkOrder/Content',
  111. 'FmsWorkRequest/Content',
  112. ],
  113. expand: [
  114. 'FmsWorkRequest',
  115. 'FmsWorkOrder',
  116. 'FmsWorkRequest/FmsWorkCodeType',
  117. 'FmsWorkRequest/CmBusinessField',
  118. 'FmsWorkRequest/FmsWorkCodeProgress',
  119. 'FmsWorkOrder/CmBusinessField', 'CmUser', 'CmUser1'],
  120. extendOptions: {
  121. forceOriginalField: true
  122. }
  123. },
  124. }, 'FmsWorkResult');
  125. function handleViewShown() {
  126. if (initialized === false) {
  127. BFDataSource.filter([
  128. eq('SiteId', BWA.UserInfo.SiteId()),//**kgpark
  129. ]);
  130. $.when(
  131. BFDataSource.load(),
  132. progressDataSource.load()
  133. ).done(function (BFResult, progressResult) {
  134. BF = BFResult[0];
  135. progresses = progressResult[0];
  136. BWA.ChartOptions.FacilityTaskReport.MakeSeries(progresses);
  137. chartPieDay = chartPieDay(BWA.ChartOptions.FacilityTaskReport.getPieChartDayOptions());
  138. chartBarDay = chartBarDay(BWA.ChartOptions.FacilityTaskReport.getBarChartDayOptions());
  139. handleSearchInSearchView();
  140. });
  141. initialized = true;
  142. }
  143. else
  144. handleSearchInSearchView();
  145. }
  146. function handleSearchInSearchView() {
  147. if (!useBusinessFiltering) {
  148. workDataSource.filter([
  149. eq('SiteId', BWA.UserInfo.SiteId()),
  150. and,
  151. eq('FmsWorkRequest/WorkProgressId', 3) // 대기
  152. ]);
  153. } else {
  154. workDataSource.filter([
  155. eq('SiteId', BWA.UserInfo.SiteId()),
  156. and,
  157. eq('FmsWorkRequest/WorkProgressId', 3), // 대기
  158. and,
  159. [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]);
  160. }
  161. workDataSource.load().done(function (workResult) {
  162. works(workResult);
  163. });
  164. if (!useBusinessFiltering) {
  165. workDataSource2.filter([
  166. eq('SiteId', BWA.UserInfo.SiteId()),
  167. and,
  168. [
  169. eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORKING),
  170. 'or',
  171. eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORK_HOLD)
  172. ]
  173. ]);
  174. } else {
  175. workDataSource2.filter([
  176. eq('SiteId', BWA.UserInfo.SiteId()),
  177. and,
  178. [eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORKING), 'or', eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORK_HOLD)],
  179. and,
  180. [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]);
  181. }
  182. workDataSource2.load().done(function (workResult) {
  183. works2(workResult);
  184. });
  185. if (!useBusinessFiltering) {
  186. workDataSource.filter([
  187. [
  188. eq('SiteId', BWA.UserInfo.SiteId()),
  189. and,
  190. [eq('FmsWorkRequest/WorkProgressId', 3),
  191. 'or',
  192. eq('FmsWorkRequest/WorkProgressId', 4),
  193. 'or',
  194. eq('FmsWorkRequest/WorkProgressId', 5),
  195. 'or',
  196. eq('FmsWorkRequest/WorkProgressId', 7)], // 작업보류 추가 2016 05 10
  197. ]
  198. ]);
  199. } else {
  200. workDataSource.filter([
  201. eq('SiteId', BWA.UserInfo.SiteId()),
  202. and,
  203. [
  204. [eq('FmsWorkRequest/WorkProgressId', 3),
  205. 'or',
  206. eq('FmsWorkRequest/WorkProgressId', 4),
  207. 'or',
  208. eq('FmsWorkRequest/WorkProgressId', 5),
  209. 'or',
  210. eq('FmsWorkRequest/WorkProgressId', 7)], // 작업보류 추가 2016 05 10
  211. ],
  212. and,
  213. [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]);
  214. }
  215. workDataSource.load().done(function (workResult) {
  216. works3(workResult);
  217. var now = new Date();
  218. now = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0);
  219. //now = new Date(2015, 8, 1, 0, 0, 0);
  220. if (!useBusinessFiltering) {
  221. workDataSource.filter([
  222. [
  223. eq('SiteId', BWA.UserInfo.SiteId()),
  224. and,
  225. eq('FmsWorkRequest/WorkProgressId', 6), // 완료승인
  226. and,
  227. eq('FmsWorkResult/IsConfirmed', true),
  228. and,
  229. ['FmsWorkResult/ConfirmedDate', ">=", now]
  230. ]
  231. ]);
  232. } else {
  233. workDataSource.filter([
  234. eq('SiteId', BWA.UserInfo.SiteId()),
  235. and,
  236. [
  237. eq('FmsWorkRequest/WorkProgressId', 6), // 완료승인
  238. and,
  239. eq('FmsWorkResult/IsConfirmed', true),
  240. and,
  241. ['FmsWorkResult/ConfirmedDate', ">=", now]
  242. ],
  243. and,
  244. [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]);
  245. }
  246. workDataSource.load().done(function (workResult2) {
  247. works4(workResult2);
  248. var pieDataArray = [];
  249. var barDataArray = [];
  250. _.each(BF, function (x) {
  251. barDataArray.push({
  252. PType: x.Name(),
  253. 작업대기: getWorkProcessCount(workResult, 3, x.BusinessFieldId()),
  254. 작업진행: getWorkProcessCount(workResult, 4, x.BusinessFieldId()),
  255. 작업완료: getWorkProcessCount(workResult, 5, x.BusinessFieldId()),
  256. 작업승인: getWorkProcessCount(workResult2, 6, x.BusinessFieldId()),
  257. 작업보류: getWorkProcessCount(workResult, 7, x.BusinessFieldId()),
  258. });
  259. });
  260. //2015 11 24 차트 다시 그리지 않는 문제
  261. //chartBarDay().option('dataSource', barDataArray); 대신 아래3줄로 변경
  262. var options = BWA.ChartOptions.FacilityTaskReport.getBarChartDayOptions();
  263. options.dataSource = barDataArray;
  264. chartBarDay().option(options);
  265. _.each(progresses, function (x) {
  266. if (x.WorkProgressId() >= 3)
  267. pieDataArray.push({
  268. FuelTypeName: x.Name(),
  269. Value: (x.WorkProgressId() == 6) ? workResult2.length : getWorkProcessCount(workResult, x.WorkProgressId(), null)
  270. })
  271. });
  272. chartPieDay().option('dataSource', pieDataArray);
  273. });
  274. });
  275. $("#large-indicator").dxLoadIndicator({
  276. height: 60,
  277. width: 60
  278. });
  279. }
  280. function handleViewHidden() {
  281. visiblePopup(false);
  282. }
  283. function handleViewShowing() {
  284. useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName);
  285. }
  286. function getWorkProcessCount(datas, type, bf) {
  287. var cnt = 0;
  288. _.each(datas, function (x) {
  289. if (x['SiteId']() == BWA.UserInfo.SiteId() && x['FmsWorkRequest/WorkProgressId']() == type && (bf == null || x['FmsWorkRequest/BusinessFieldId']() == bf)) //**kgpark
  290. //alert(x.BusinessFieldId());
  291. //alert(x['FmsWorkRequest/WorkProgressId']());
  292. //if (x.FmsWorkRequest/WorkProgressId() == type && x.BusinessFieldId() == bf)
  293. cnt++;
  294. });
  295. return cnt;
  296. }
  297. function refreshList() {
  298. //dataSource.pageIndex(0);
  299. //dataSource.load();
  300. }
  301. //var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), {
  302. var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, null, ko.observable(null), handleViewShown), {
  303. refreshList: refreshList,
  304. viewShowing: handleViewShowing,
  305. workDataGridOptions: utils.datagrid.defaultOptions({
  306. rowClick: function (row) {
  307. //selData = row.data;
  308. /*fName(row.values[1]);
  309. Name(row.values[2]);
  310. Energy(row.values[3]);
  311. Type(row.values[4]);
  312. getValue(row.values[5]);
  313. setValue(row.values[6]);
  314. visiblePopup(true);*/
  315. },
  316. //rowAlternationEnabled: true,
  317. useNumberColumn: true,
  318. dataSource: works,
  319. datagridId: 'gridContainer',
  320. paging: {
  321. enabled: true,
  322. pageSize: 6
  323. },
  324. pager: {
  325. //allowedPageSizes: true,
  326. showPageSizeSelector: false,
  327. allowedPageSizes: [6],
  328. visible: true
  329. },
  330. columns: [
  331. { dataField: 'WorkRequestId', caption: $G('number'), width: '8%', alignment: 'center' },
  332. { dataField: 'FmsWorkRequest/CmBusinessField/Name', caption: $G('businessFieldName'), width: '15%', alignment: 'center' },
  333. { dataField: 'FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '15%', alignment: 'center' },
  334. {
  335. dataField: 'OrderDate', caption: $G('orderedDate'), width: '20%', alignment: 'center', sortOrder: 'desc',
  336. customizeText: function (cellInfo) {
  337. return $G.date(cellInfo.value);
  338. }
  339. },
  340. { dataField: 'Title', caption: '작업명', width: '30%', alignment: 'center' },
  341. //{ dataField: 'CmUser/Name', caption: '작업지시자', width: '8%', alignment: 'center' },
  342. ],
  343. }),
  344. workDataGridOptions2: utils.datagrid.defaultOptions({
  345. rowClick: function (row) {
  346. //selData = row.data;
  347. /*fName(row.values[1]);
  348. Name(row.values[2]);
  349. Energy(row.values[3]);
  350. Type(row.values[4]);
  351. getValue(row.values[5]);
  352. setValue(row.values[6]);
  353. visiblePopup(true);*/
  354. },
  355. //rowAlternationEnabled: true,
  356. dataSource: works2,
  357. datagridId: 'gridContainer2',
  358. useNumberColumn: true,
  359. paging: {
  360. enabled: true,
  361. pageSize: 6
  362. },
  363. pager: {
  364. //allowedPageSizes: true,
  365. showPageSizeSelector: false,
  366. allowedPageSizes: [6],
  367. visible: true
  368. },
  369. columns: [
  370. { dataField: 'WorkRequestId', caption: $G('number'), width: '8%', alignment: 'center' },
  371. { dataField: 'FmsWorkRequest/CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center' },
  372. { dataField: 'FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '10%', alignment: 'center' },
  373. {
  374. dataField: 'FmsWorkOrder/OrderDate', caption: $G('orderedDate'), width: '15%', alignment: 'center', sortOrder: 'desc',
  375. customizeText: function (cellInfo) {
  376. return $G.date(cellInfo.value);
  377. }
  378. },
  379. {
  380. dataField: 'EndDate', caption: '종료예정일', width: '15%', alignment: 'center',
  381. customizeText: function (cellInfo) {
  382. return $G.date(cellInfo.value);
  383. }
  384. },
  385. { dataField: 'FmsWorkOrder/Title', caption: '작업명', width: '30%', alignment: 'center' },
  386. { dataField: 'CmUser/Name', caption: '작업자', width: '10%', alignment: 'center' },
  387. ],
  388. })
  389. });
  390. viewModel.timeBoxForSearch = timeBoxForSearch;
  391. viewModel.popupOptions = {
  392. width: 300,
  393. height: 100,
  394. contentTemplate: "info",
  395. showTitle: false,
  396. title: "메세지",
  397. visible: visiblePopup,
  398. dragEnabled: false,
  399. shading: false,
  400. closeOnOutsideClick: false
  401. };
  402. return viewModel;
  403. };