10d237371d18c43d59251e1e2ababf669ac24e02.svn-base 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. BemsWebApplication.FacilityWorkHistory2 = function (params, viewInfo) {
  2. "use strict";
  3. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName);
  4. var facilityClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass');
  5. var facilityClassDataSource2 = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass');
  6. var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true),
  7. floorDataSource = BemsWebApplication.db.createDataSource('CmFloor');
  8. var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true),
  9. workTypeDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeType'),
  10. progressDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeProgress'),
  11. searchBuildingId = ko.observable(),
  12. searchBuildings = ko.observableArray(),
  13. searchFloorId = ko.observable(),
  14. businessFields = ko.observableArray(),
  15. workTypes = ko.observableArray(),
  16. progresses = ko.observableArray(), //CmFacility
  17. facilityClass = ko.observableArray(),
  18. searchFloors = ko.observableArray(),
  19. floors = ko.observableArray(),
  20. buildings = ko.observableArray();
  21. var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  22. var defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'),
  23. defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId');
  24. var isVisibleExecutionButton = ko.observable(true);
  25. var handleBuildingInSearchView = function (e) {
  26. if (e.value === 0) {
  27. searchFloors(defaultSearchFloorArray.slice(0));
  28. searchFloorId(0);
  29. return 0;
  30. }
  31. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, searchFloors, defaultSearchFloorArray);
  32. }
  33. var FmsMaterialExdataSource = new DevExpress.data.DataSource({
  34. store: BemsWebApplication.odata.FmsMaterialEx,
  35. requireTotalCount: true,
  36. pageSize: 100
  37. });
  38. var isWorkDone = ko.observable(false);
  39. var isWorkHold = ko.observable(false);
  40. var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  41. searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()];
  42. var isAddHistoryButton = ko.observable(false);
  43. var defaultSearchClassArray = $SearchView.createDefaultArray('FacilityClassId');
  44. var imagefileUrl1 = ko.observable(), imagefileUrl2 = ko.observable();
  45. var popup, addWorkResultCheckItemPopup = null, workExecutionRegisterPopup = null;
  46. var deferredForSearch = new $.Deferred();
  47. var workTypesForSearch = ko.observableArray(),
  48. facilityClassForSearch = ko.observableArray(),
  49. businessFieldsForSearch = ko.observableArray(),
  50. progressesForSearch = ko.observableArray();
  51. var eq = BWA.DataUtil.constructEqualFilter,
  52. and = BWA.DataUtil.andFilter,
  53. noteq = BWA.DataUtil.constructNotEqualFilter;
  54. var selectedFacilityData = ko.observable(),
  55. selectedUserData = params.selectedUserData || ko.observable();
  56. var dataSourceOptions = {
  57. select: [
  58. 'SiteId',
  59. 'WorkRequestId',
  60. 'FacilityCode',
  61. 'CmFacility/FirstClassId',
  62. 'CmFacility/SecondClassId',
  63. 'CmFacility/ThirdClassId',
  64. 'CmFacility/Name',
  65. 'CmFacility/BuildingId',
  66. 'CmFacility/FloorId',
  67. 'CmFacility/BemsFacilityType/Name',
  68. 'FmsWorkOrder/FmsWorkRequest/WorkTypeId',
  69. 'FmsWorkOrder/FmsWorkRequest/BusinessFieldId',
  70. 'FmsWorkOrder/Title',
  71. 'FmsWorkOrder/OrderDate',
  72. 'FmsWorkOrder/StartWorkDate',
  73. 'FmsWorkOrder/FmsWorkResult/StartDate',
  74. 'FmsWorkOrder/FmsWorkResult/EndDate',
  75. 'FmsWorkOrder/FmsWorkResult/ConfirmedUserId',
  76. 'FmsWorkOrder/FmsWorkResult/ConfirmedDate',
  77. 'FmsWorkOrder/FmsWorkRequest/WorkProgressId',
  78. 'FmsWorkOrder/FmsWorkRequest/StartWorkDate',
  79. 'FmsWorkOrder/FmsWorkRequest/CmBusinessField/Name',
  80. 'FmsWorkOrder/CmUser/Name', // 작업지시자
  81. //'CmUser1/Name', // 반려자
  82. 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeType/Name',
  83. 'FmsWorkOrder/CmBusinessField/Name',
  84. 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeProgress/Name',
  85. 'FmsWorkOrder/FmsWorkResult/CmUser/Name', // 작업자
  86. 'FmsWorkOrder/FmsWorkResult/CmUser1/Name', // 승인자
  87. 'FmsWorkOrder/Content', // 2016 05 30 추가
  88. ],
  89. expand: [
  90. 'CmFacility/BuildingId',
  91. 'CmFacility/FloorId',
  92. 'FmsWorkOrder/FmsWorkRequest',
  93. 'FmsWorkOrder/FmsWorkResult',
  94. 'FmsWorkOrder/FmsWorkResult/CmUser',
  95. 'FmsWorkOrder/FmsWorkResult/CmUser1',
  96. 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeType',
  97. 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeProgress',
  98. 'FmsWorkOrder/FmsWorkRequest/CmBusinessField',
  99. 'FmsWorkOrder/CmBusinessField',
  100. 'FmsWorkOrder/CmUser',
  101. 'CmFacility',
  102. 'CmFacility/BemsFacilityType',
  103. ],
  104. extendOptions: {
  105. forceOriginalField: true
  106. }
  107. };
  108. if (!useBusinessFiltering) {
  109. dataSourceOptions.filter = [
  110. eq('SiteId', BWA.UserInfo.SiteId()),
  111. and,
  112. ['FmsWorkOrder/FmsWorkRequest/WorkProgressId', '=', 6]
  113. ];
  114. }
  115. else {
  116. dataSourceOptions.filter = [
  117. eq('SiteId', BWA.UserInfo.SiteId()),
  118. and,
  119. ['FmsWorkOrder/FmsWorkRequest/WorkProgressId', '=', 6],
  120. and,
  121. [eq('FmsWorkOrder/FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkOrder/FmsWorkRequest/BusinessFieldId', 1)]];
  122. }
  123. var searchFirstClassId = false, searchSecondClassId = false, searchThirdClassId = false;
  124. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsWorkOrderToFacility', {
  125. popupWidth: 1060,
  126. //번호/설비유형/설비명/작업구분/작업명/작업시작일/작업완료일/작업자/승인자"로
  127. dataSourceOptions: dataSourceOptions,
  128. columns: [
  129. { dataField: 'WorkRequestId', caption: $G('number'), width: '5%', alignment: 'center' },
  130. { dataField: 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '7%', alignment: 'center' },
  131. {
  132. dataField: 'FmsWorkOrder/FmsWorkResult/StartDate', caption: '시작일', width: '9%', alignment: 'center',
  133. customizeText: function (cellInfo) { return $G.date(cellInfo.value); }
  134. },
  135. {
  136. dataField: 'FmsWorkOrder/FmsWorkResult/EndDate', caption: '종료일', width: '9%', alignment: 'center', sortOrder: 'desc',
  137. customizeText: function (cellInfo) { return $G.date(cellInfo.value); }
  138. },
  139. {
  140. dataField: 'CmFacility/FirstClassId', caption: '대분류', width: '14%', alignment: 'center',
  141. customizeText: function (cellInfo) {
  142. for (var i = 1; i < facilityClassForSearch().length; i++) {
  143. if (facilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  144. return facilityClassForSearch()[i].Name();
  145. }
  146. }
  147. }
  148. },
  149. {
  150. dataField: 'CmFacility/SecondClassId', caption: '중분류', width: '14%', alignment: 'center', customizeText: function (cellInfo) {
  151. for (var i = 1; i < facilityClassForSearch().length; i++) {
  152. if (facilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  153. return facilityClassForSearch()[i].Name();
  154. }
  155. }
  156. }
  157. },
  158. {
  159. dataField: 'CmFacility/ThirdClassId', caption: '소분류', width: '14%', alignment: 'center', customizeText: function (cellInfo) {
  160. for (var i = 1; i < facilityClassForSearch().length; i++) {
  161. if (facilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  162. return facilityClassForSearch()[i].Name();
  163. }
  164. }
  165. }
  166. },
  167. { dataField: 'CmFacility/BemsFacilityType/Name', caption: '설비유형', width: '14%', alignment: 'center', visible: false },
  168. { dataField: 'CmFacility/Name', caption: '설비명칭', width: '20%', alignment: 'center' },
  169. { dataField: 'FmsWorkOrder/Title', caption: '작업명', width: '38%', alignment: 'center' },
  170. { dataField: 'FmsWorkOrder/FmsWorkResult/CmUser/Name', caption: '작업자', width: '10%', alignment: 'center', visible: false },
  171. { dataField: 'FmsWorkOrder/FmsWorkResult/CmUser1/Name', caption: '승인자', width: '10%', alignment: 'center', visible: false }
  172. ],
  173. searchViewItems: [
  174. { id: 'FmsWorkOrder/FmsWorkRequest/BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: businessFieldsForSearch },
  175. // 2016 03 09 이처럼 id가 CmFacility/FirstClassId 같이 관계키인 경우 이벤트가 연결되지 않는다. handleFirstClassChangedValueInSearchView를 직접연결한다.
  176. { id: 'CmFacility/FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
  177. { id: 'CmFacility/SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'CmFacility/FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
  178. { id: 'CmFacility/ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'CmFacility/FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },
  179. { id: 'CmFacility/Name' },
  180. { id: 'FmsWorkOrder/Title' },
  181. { id: 'FmsWorkOrder/FmsWorkRequest/WorkProgressId' },
  182. { id: 'CmFacility/BuildingId', ignoreValue: 0, defaultValue: 0, value: searchBuildingId, dataSource: searchBuildings, handleChangedValue: handleBuildingInSearchView },
  183. { id: 'CmFacility/FloorId', ignoreValue: 0, defaultValue: 0, withCheckId: 'CmFacility/BuildingId', value: searchFloorId, dataSource: searchFloors },
  184. { id: 'FmsWorkOrder/FmsWorkResult/StartDate', type: 'dateRange', isOnlyDate: true },
  185. //{ id: 'FmsWorkOrder/FmsWorkResult/EndDate', type: 'dateRange' },
  186. { id: 'FmsWorkOrder/FmsWorkResult/EndDate', type: 'dateRange', isOnlyDate: true },
  187. { id: 'FmsWorkOrder/FmsWorkResult/CmUser/Name' },
  188. { id: 'FmsWorkOrder/FmsWorkResult/CmUser1/Name' },
  189. { id: 'FmsWorkOrder/FmsWorkRequest/WorkTypeId', ignoreValue: 0, defaultValue: 0, dataSource: workTypesForSearch },
  190. ],
  191. promiseDataInSearchView: deferredForSearch.promise(),
  192. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  193. dataGrid.clearSelection();
  194. var data = clickRow.data;
  195. var dataModel = viewModel.dataModel;
  196. if (data['FmsWorkOrder/FmsWorkRequest/WorkProgressId']() >= $Code.WorkProgress.WORK_COMPLETE)
  197. isWorkDone(true);
  198. else
  199. isWorkDone(false);
  200. if (data['FmsWorkOrder/FmsWorkRequest/WorkProgressId']() == $Code.WorkProgress.WORK_HOLD) {
  201. isWorkHold(true);
  202. isWorkDone(false);
  203. }
  204. else {
  205. isWorkHold(false);
  206. }
  207. isVisibleExecutionButton(false);
  208. if (popup && popup.handleBeforeShowingPopupForEdit) {
  209. popup.handleBeforeShowingPopupForEdit(data, dataModel);
  210. }
  211. popupVisible(true);
  212. },
  213. handlePopupShowing: function () {
  214. viewModel.visibleEditButton(false);
  215. viewModel.visibleDeleteButton(false);
  216. if (popup && popup.handlePopupShowing) {
  217. popup.handlePopupShowing.apply(this, arguments);
  218. }
  219. },
  220. handlePopupShown: function (editMode, isNewInPopup, dataModel) {
  221. if (popup && popup.handlePopupShown) {
  222. popup.handlePopupShown.apply(this, arguments);
  223. }
  224. },
  225. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  226. //if (isNewInPopup() == false) {
  227. // BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.FirstClassId(), facilityClasses[1]).done(function () {
  228. // BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.SecondClassId(), facilityClasses[2]);
  229. // });
  230. // BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors).done(function () {
  231. // BWA.DataUtil.setArrayDataSourceFilter(zoneDataSource, 'FloorId', dataViewModel.FloorId(), zones);
  232. // });
  233. //}
  234. },
  235. handleViewShowing: function (dataModel) {
  236. FmsMaterialExdataSource.filter([
  237. ["SiteId", "=", BWA.UserInfo.SiteId()]
  238. ]);
  239. FmsMaterialExdataSource.load().done(function (result) {
  240. if (result != null) {
  241. viewModel.dataModel.MaterialExdataSource(result);
  242. }
  243. }).fail(function (error) {
  244. utils.toast.show(error);
  245. });
  246. facilityClassDataSource.filter([
  247. ['SiteId', '=', BWA.UserInfo.SiteId()],
  248. 'and',
  249. ['ParentFacilityClassId', '=', null]
  250. ]);
  251. facilityClassDataSource2.filter([
  252. ['SiteId', '=', BWA.UserInfo.SiteId()]
  253. ]);
  254. if (useBusinessFiltering) {
  255. businessFieldDataSource.filter([
  256. eq('SiteId', BWA.UserInfo.SiteId()),
  257. and,
  258. [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]
  259. ]);
  260. }
  261. $.when(
  262. businessFieldDataSource.load(),
  263. workTypeDataSource.load(),
  264. progressDataSource.load(),
  265. facilityClassDataSource.load(),
  266. buildingDataSource.load(),
  267. facilityClassDataSource2.load()
  268. ).done(function (businessFieldResult, workTypeResult, progressResult, facilityClassResult, result2, facilityClassResult2) {
  269. businessFields(businessFieldResult[0]);
  270. workTypes(workTypeResult[0]);
  271. progresses(progressResult[0]);
  272. facilityClass(facilityClassResult2[0]);
  273. facilityClassForSearch($SearchView.createArrayOfSelectBox('FacilityClassId', facilityClass()));
  274. businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', businessFields()));
  275. workTypesForSearch($SearchView.createArrayOfSelectBox('WorkTypeId', workTypes()));
  276. progressesForSearch($SearchView.createArrayOfSelectBox('ProgressId', progresses()));
  277. facilityClasses[0](facilityClassResult[0]);
  278. searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(facilityClassResult[0]));
  279. initializeSearchClasses();
  280. buildings(result2[0]);
  281. searchFloors(defaultSearchFloorArray.slice(0));
  282. searchBuildings(defaultSearchBuildingArray.slice(0).concat(result2[0]));
  283. deferredForSearch.resolve();
  284. viewModel.gridView().refresh();
  285. });
  286. },
  287. handleViewShown: function () {
  288. }
  289. });
  290. floorDataSource.filter('CmFacility/BuildingId', -1);
  291. var handleFirstClassChangedValueInSearchView = function (e) {
  292. if (e.value === 0) {
  293. initializeSearchClasses();
  294. return;
  295. }
  296. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray);
  297. };
  298. var handleSecondClassChangedValueInSearchView = function (e) {
  299. if (e.value === 0) {
  300. initializeSearchClasses(true);
  301. return;
  302. }
  303. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray);
  304. };
  305. function initializeSearchClasses(onlyThird) {
  306. if (onlyThird === undefined || onlyThird === false) {
  307. searchFacilityClasses[1](defaultSearchClassArray.slice(0));
  308. searchFacilityClassValues[1](0);
  309. }
  310. searchFacilityClasses[2](defaultSearchClassArray.slice(0));
  311. searchFacilityClassValues[2](0);
  312. }
  313. viewModel.handleSelectBoxChangeFirstClass = function (e) {
  314. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[1]);
  315. viewModel.dataModel.SecondClassId(null);
  316. viewModel.dataModel.ThirdClassId(null);
  317. };
  318. viewModel.handleSelectBoxChangeSecondClass = function (e) {
  319. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[2]);
  320. viewModel.dataModel.ThirdClassId(null);
  321. };
  322. addWorkResultCheckItemPopup = viewModel.addWorkResultCheckItemPopup = BWA.Popup.AddWorkResultCheckItem.create(viewInfo, viewModel);
  323. viewModel.businessFields = businessFields;
  324. viewModel.workTypes = workTypes;
  325. //viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView;
  326. //viewModel.dataModel.ParentFacilityName = $KoSet(viewModel.dataModel.ParentFacilityName, '');
  327. viewModel.searchFacilityClasses = searchFacilityClasses;
  328. // 2016 03 09 이처럼 id가 CmFacility/FirstClassId 같이 관계키인 경우 이벤트가 연결되지 않는다. handleFirstClassChangedValueInSearchView를 직접연결한다. dxview도 수정했다.
  329. viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView;
  330. viewModel.imagefileUrl1 = imagefileUrl1;
  331. viewModel.imagefileUrl2 = imagefileUrl2;
  332. viewModel.isAddHistoryButton = isAddHistoryButton;
  333. popup = viewModel.popup = BWA.Popup.FacilityWorkHistory2.create(viewInfo, viewModel);
  334. //workExecutionRegisterPopup = viewModel.workExecutionRegisterPopup = BWA.Popup.WorkExecutionRegister.create(viewInfo, viewModel);
  335. viewModel.isWorkDone = isWorkDone;
  336. viewModel.isWorkHold = isWorkHold;
  337. viewModel.buildings = buildings;
  338. viewModel.floors = floors;
  339. viewModel.facilityClasses = facilityClasses;
  340. viewModel.dataModel.MaterialExdataSource = ko.observable();
  341. viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView;
  342. return viewModel;
  343. };