912e0f2bb855cd80de27d8b76ecc6f434b90af57.svn-base 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. BemsWebApplication.Facility = function(params, viewInfo) {
  2. "use strict";
  3. var facilityClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass');
  4. var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true),
  5. floorDataSource = BemsWebApplication.db.createDataSource('CmFloor'),
  6. zoneDataSource = BemsWebApplication.db.createDataSource('CmZone')
  7. ;
  8. var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  9. var buildings = ko.observableArray(),
  10. floors = ko.observableArray(),
  11. zones = ko.observableArray();
  12. var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  13. searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()],
  14. searchBuildings = ko.observableArray(),
  15. searchFloors = ko.observableArray(),
  16. searchBuildingId = ko.observable(),
  17. searchFloorId = ko.observable();
  18. var imagefileUrl = ko.observable(),
  19. uploadedFileInfo = {},
  20. dropZone = null;
  21. var isMainContactor = true,
  22. selectedUserData = ko.observable(),
  23. selectedFacility = ko.observable(),
  24. selectedFacilityDataInSearchParentPopup = ko.observable();
  25. var searchDeferred = new $.Deferred();
  26. var defaultSearchClassArray = $SearchView.createDefaultArray('FacilityClassId'),
  27. defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'),
  28. defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId');
  29. var tabsVisible = ko.observable(false),
  30. currentTabIndex = ko.observable(0);
  31. selectedFacilityDataInSearchParentPopup.subscribe(function(value) {
  32. viewModel.dataModel.ParentFacilityCode(value.FacilityCode);
  33. viewModel.dataModel.ParentFacilityName(value.Name);
  34. });
  35. selectedUserData.subscribe(function(value) {
  36. if (isMainContactor) {
  37. viewModel.dataModel.MainContactorUserId(value.UserId);
  38. viewModel.dataModel.MainContactorUserName(value.Name);
  39. }
  40. else {
  41. viewModel.dataModel.SubContactorUserId(value.UserId);
  42. viewModel.dataModel.SubContactorUserName(value.Name);
  43. }
  44. });
  45. var handleFirstClassChangedValueInSearchView = function(e) {
  46. if (e.value === 0) {
  47. initializeSearchClasses();
  48. return;
  49. }
  50. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray);
  51. };
  52. var handleSecondClassChangedValueInSearchView = function(e) {
  53. if (e.value === 0) {
  54. initializeSearchClasses(true);
  55. return;
  56. }
  57. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray);
  58. };
  59. var handleBuildingInSearchView = function(e) {
  60. if (e.value === 0) {
  61. searchFloors(defaultSearchFloorArray.slice(0));
  62. searchFloorId(0);
  63. return 0;
  64. }
  65. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, searchFloors, defaultSearchFloorArray);
  66. }
  67. function initializeSearchClasses(onlyThird) {
  68. if (onlyThird === undefined || onlyThird === false) {
  69. searchFacilityClasses[1](defaultSearchClassArray.slice(0));
  70. searchFacilityClassValues[1](0);
  71. }
  72. searchFacilityClasses[2](defaultSearchClassArray.slice(0));
  73. searchFacilityClassValues[2](0);
  74. }
  75. function setupDropZone(isEditModeInPopup, dataViewModel) {
  76. var timer = null;
  77. isEditModeInPopup.subscribe(function(value) {
  78. if (value) {
  79. if (timer) {
  80. clearInterval(timer);
  81. }
  82. timer = setInterval(function() {
  83. if ($('#facilityDropZone').length) {
  84. if (_.isNull(dropZone)) {
  85. dropZone = BWA.DropZone.create({
  86. id: '#facilityDropZone',
  87. categoryId: $Code.FileCategory.FACILITY,
  88. uploadedFileInfo: uploadedFileInfo,
  89. handleRemoveBeforePromise: function() {
  90. var keys = BWA.db.extractKeysObject('CmFacility', dataViewModel);
  91. return BWA.db.CmFacility.update(keys, { FileId: null });
  92. },
  93. handleSuccess: function(fileInfo) {
  94. dataViewModel.FileId(fileInfo.FileId);
  95. },
  96. handleRemovedFile: function() {
  97. dataViewModel.FileId(null);
  98. },
  99. });
  100. uploadedFileInfo.SiteId = dataViewModel.SiteId();
  101. uploadedFileInfo.FileId = dataViewModel.FileId();
  102. if (uploadedFileInfo.FileId) {
  103. BWA.db.CmFile.byKey(uploadedFileInfo).done(function(data) {
  104. dropZone.removeAllFiles();
  105. dropZone.emit('addedfile', {
  106. name: data.Name,
  107. size: data.FileSize
  108. });
  109. //dropZone.options.maxFiles = 0; // 이게 있으면 삭제후 다시 업로드가 안 된다.
  110. });
  111. }
  112. }
  113. }
  114. }, 100);
  115. }
  116. else {
  117. if (timer) {
  118. clearInterval(timer);
  119. timer = null;
  120. }
  121. dropZone = null;
  122. }
  123. });
  124. }
  125. var facilityOptions = BemsWebApplication.Factory.Facility;
  126. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmFacility', {
  127. dataSourceOptions: facilityOptions.getDataSourceForDataGrid(),
  128. //dataSourceOptions: {
  129. // store: BemsWebApplication.odata.Facility,
  130. // select: [ 'SiteId' , 'FacilityCode' , 'ParentFacilityName', 'FirstClassName', 'SecondClassName', 'ThirdClassName', 'Name', 'Nickname',
  131. // 'BuildingName', 'FloorName', 'ZoneName', 'ManufactureModel', 'MainContactorUserName', 'SubContactorUserName' ]
  132. //},
  133. columns: facilityOptions.getColumns([
  134. { dataField: 'FacilityCode' },
  135. { dataField: 'ClassName' },
  136. { dataField: 'Name' },
  137. { dataField: 'ManufactureModel' },
  138. { dataField: 'MainContactorUserName' },
  139. { dataField: 'SubContactorUserName' },
  140. { dataField: 'Location' }
  141. ]),
  142. popupWidth: '740px',
  143. wordWrapEnabled: true,
  144. cellPrepared: BemsWebApplication.Factory.Facility.cellPrepared,
  145. searchViewItems: [
  146. { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
  147. { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
  148. { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },
  149. { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: searchBuildingId, dataSource: searchBuildings, handleChangedValue: handleBuildingInSearchView },
  150. { id: 'FloorId', ignoreValue: 0, defaultValue: 0, withCheckId: 'BuildingId', value: searchFloorId, dataSource: searchFloors },
  151. { id: 'Name' }
  152. ],
  153. promiseDataInSearchView: searchDeferred.promise(),
  154. handleViewShowing: function() {
  155. facilityClassDataSource.filter([
  156. ['SiteId', '=', BWA.UserInfo.SiteId()],
  157. 'and',
  158. ['ParentFacilityClassId', '=', null]
  159. ]);
  160. $.when(facilityClassDataSource.load(), buildingDataSource.load()).done(function(result1, result2) {
  161. facilityClasses[0](result1[0]);
  162. searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(result1[0]));
  163. initializeSearchClasses();
  164. buildings(result2[0]);
  165. searchBuildings(defaultSearchBuildingArray.slice(0).concat(result2[0]));
  166. searchFloors(defaultSearchFloorArray.slice(0));
  167. searchDeferred.resolve();
  168. });
  169. },
  170. handleViewShown: function(dataViewModel, isEditModeInPopup) {
  171. setupDropZone(isEditModeInPopup, dataViewModel);
  172. },
  173. handlePopupShowing: function(isNewInPopup) {
  174. tabsVisible(isNewInPopup() == false);
  175. },
  176. handlePopupShown: function(isEditModeInPopup, isNewInPopup, dataViewModel) {
  177. if (isNewInPopup === false) {
  178. //viewModel.childFacilitiesMultiView.load();
  179. }
  180. viewModel.searchViewPopup.show();
  181. },
  182. //handlePopupHiding: function() {
  183. // if (_.isNull(dropZone) === false) {
  184. // dropZone.dispose();
  185. // }
  186. //},
  187. //handleCancelInPopup: function() {
  188. // if (_.isNull(dropZone) === false) {
  189. // dropZone.dispose();
  190. // }
  191. //},
  192. handleSaveSuccess: function() {
  193. if (_.isNull(dropZone) === false) {
  194. dropZone.resetUploadedFileInfo();
  195. }
  196. },
  197. handleAfterLoadingModelByKey: function(data, dataViewModel, isNewInPopup) {
  198. if (isNewInPopup() == false) {
  199. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.FirstClassId(), facilityClasses[1]).done(function() {
  200. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.SecondClassId(), facilityClasses[2]);
  201. });
  202. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors).done(function() {
  203. BWA.DataUtil.setArrayDataSourceFilter(zoneDataSource, 'FloorId', dataViewModel.FloorId(), zones);
  204. });
  205. if (_.isNull(dataViewModel.FileId()) === false) {
  206. imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId()));
  207. }
  208. else {
  209. imagefileUrl(undefined);
  210. }
  211. selectedFacility(dataViewModel);
  212. }
  213. },
  214. handleDataGridRowClick: function(id, dataGrid, clickRow, popupVisible) {
  215. dataGrid.clearSelection();
  216. var data = clickRow.data;
  217. var dataModel = viewModel.dataModel;
  218. dataModel.ParentFacilityName = $KoSet(dataModel.ParentFacilityName, data.ParentFacilityName);
  219. dataModel.ClassName = $KoSet(dataModel.ClassName,
  220. BWA.Factory.Facility.formatClassName(data.FirstClassName(), data.SecondClassName(), data.ThirdClassName()));
  221. dataModel.BuildingName = $KoSet(dataModel.BuildingName, data.BuildingName);
  222. dataModel.FloorName = $KoSet(dataModel.FloorName, data.FloorName);
  223. dataModel.ZoneName = $KoSet(dataModel.ZoneName, data.ZoneName);
  224. dataModel.MainContactorUserName = $KoSet(dataModel.MainContactorUserName, data.MainContactorUserName);
  225. dataModel.SubContactorUserName = $KoSet(dataModel.SubContactorUserName, data.SubContactorUserName);
  226. popupVisible(true);
  227. }
  228. });
  229. //var handleSelectBoxCompany = function( e ) {
  230. // viewModel.dataModel.CompanyId(e.value);
  231. //};
  232. floorDataSource.filter('BuildingId', -1);
  233. zoneDataSource.filter('FloorId', -1);
  234. viewModel.handleSelectBoxChangeFirstClass = function(e) {
  235. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[1]);
  236. viewModel.dataModel.SecondClassId(null);
  237. viewModel.dataModel.ThirdClassId(null);
  238. }
  239. viewModel.handleSelectBoxChangeSecondClass = function(e) {
  240. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[2]);
  241. viewModel.dataModel.ThirdClassId(null);
  242. }
  243. viewModel.handleSelectBoxChangeBuilding = function(e) {
  244. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, floors);
  245. viewModel.dataModel.FloorId(null);
  246. viewModel.dataModel.ZoneId(null);
  247. }
  248. viewModel.handleSelectBoxChangeFloor = function(e) {
  249. BWA.DataUtil.setArrayDataSourceFilter(zoneDataSource, 'FloorId', e.value, zones);
  250. viewModel.dataModel.ZoneId(null);
  251. }
  252. viewModel.buttonSearchFacility = function() {
  253. viewModel.facilitySearchPopup.show();
  254. };
  255. viewModel.buttonSearchMainContactorUser = function(e) {
  256. isMainContactor = true;
  257. viewModel.userSearchPopup.show();
  258. }
  259. viewModel.buttonSearchSubContactorUser = function(e) {
  260. isMainContactor = false;
  261. viewModel.userSearchPopup.show();
  262. }
  263. viewModel.tabsOptions = {
  264. visible: tabsVisible,
  265. selectedIndex: currentTabIndex,
  266. dataSource: [
  267. { text: '시설정보' },
  268. { text: '작업이력' },
  269. { text: '하위시설' },
  270. { text: '점검항목' },
  271. { text: '법정항목' },
  272. { text: '운전일자항목' }
  273. ]
  274. };
  275. //viewModel.companyDataSource = companies;
  276. //viewModel.handleSelectBoxCompany = handleSelectBoxCompany;
  277. viewModel.dataModel.ClassName = ko.observable();
  278. viewModel.facilityClasses = facilityClasses;
  279. viewModel.searchFacilityClasses = searchFacilityClasses;
  280. viewModel.buildings = buildings;
  281. viewModel.floors = floors;
  282. viewModel.zones = zones;
  283. viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData);
  284. viewModel.facilitySearchPopup = BWA.Popup.Facility.create(viewModel, selectedFacilityDataInSearchParentPopup);
  285. var multiViewDataSource = [{
  286. viewModel: viewModel,
  287. imagefileUrl: imagefileUrl,
  288. template: 'facility'
  289. }];
  290. //viewModel.childFacilitiesMultiView = BWA.Facility.createChildFacilitiesMultiViewInPopup(viewModel,selectedFacility);
  291. BWA.Popup.WorkResult.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource);
  292. BWA.Facility.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource);
  293. BWA.FacilityCheckItem.setupMultiViewInPopup($Code.WorkType.REGULAR_CHECK, 'checkItems',
  294. 'checkItemDataGrid', viewModel, selectedFacility, multiViewDataSource);
  295. BWA.FacilityCheckItem.setupMultiViewInPopup($Code.WorkType.LEGAL_CHECK, 'legalCheckItems',
  296. 'legalCheckItemDataGrid', viewModel, selectedFacility, multiViewDataSource);
  297. //BWA.CheckGroupManagement.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource);
  298. //BWA.LegalCheckGroupManagement.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource);
  299. viewModel.searchViewPopup = BWA.Popup.SearchView.create({
  300. parentPopupId: 'popupDetail',
  301. parentPopupVisible: viewModel.popupVisible,
  302. handleSearch: function(filter, searchItems) {
  303. }
  304. });
  305. // viewModel.searchViewPopup
  306. viewModel.multiViewOptions = {
  307. height: '560px',
  308. selectedIndex: currentTabIndex,
  309. dataSource: multiViewDataSource
  310. };
  311. return viewModel;
  312. };