fc3ab9993a5a5111453b87dcb8fbb4d9330f211c.svn-base 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. BemsWebApplication.PatrolGroup = function (params, viewInfo) {
  2. "use strict";
  3. // Permission Index
  4. var PI_SEARCH = 0,
  5. PI_MODIFICATION = 1,
  6. PI_BUSINESS_FIELD = 2;
  7. var selectedUserData = ko.observable();
  8. var eq = BWA.DataUtil.constructEqualFilter;
  9. var and = BWA.DataUtil.andFilter;
  10. selectedUserData.subscribe(function (value) {
  11. if (isMainContactor) {
  12. viewModel.dataModel.MainContactorUserId(value.UserId);
  13. viewModel.dataModel.MainContactorUserName(value.Name);
  14. }
  15. else {
  16. viewModel.dataModel.SubContactorUserId(value.UserId);
  17. viewModel.dataModel.SubContactorUserName(value.Name);
  18. }
  19. });
  20. var CmPatrolGroupDataSource = BemsWebApplication.db.createDataSource('CmPatrolGroup');
  21. var PatrolGroupInfo = ko.observableArray();
  22. var RowName;
  23. var PatrolGroupDataSource = BWA.db.createDataSource('CmPatrolGroup'),
  24. // PatrolGroupUserDataSource = BWA.db.createDataSource('CmPatrolGroupUser'),
  25. PatrolGroupUserDataSource = BWA.DataUtil.createDataSource({
  26. dataSourceOptions: {
  27. select: ['SiteId', 'UserId', 'CmUser/Name', 'CmUser/CmDepartment/Name', ],
  28. expand: ['CmUser', 'CmUser/CmDepartment'],
  29. extendOptions: {
  30. forceOriginalField: true
  31. },
  32. filter: [
  33. ['SiteId', '=', BWA.UserInfo.SiteId()] // 4
  34. //eq('SiteId', 0), // 초기화를 위해서 0
  35. // eq('SiteId', BWA.UserInfo.SiteId()),
  36. // and,
  37. // ['FmsWorkRequest/WorkProgressId', '=', $Code.WorkProgress.WORKING] // 4
  38. // //, and, ['FmsWorkRequest/WorkProgressId', '<=', 5]
  39. ]
  40. }
  41. }, 'CmPatrolGroupUser'),
  42. usersInView = ko.observableArray(),
  43. //PatrolGroupPermissionDataArray = ko.observableArray(),
  44. deleteDisabled = ko.observable(true),
  45. popupVisible = ko.observable(false),
  46. selectedPatrolGroup = ko.observable(null),
  47. viewModel,
  48. //gridView,
  49. sidemenuHashSet;
  50. //var datagrid = $('#EnergySavingControlDataGridViewInSearchView').dxDataGrid('instance');
  51. //var gridView = $('#gridContainer2').dxDataGrid('instance');
  52. //var headerCheckBoxValues = [ko.observable(false), ko.observable(false), ko.observable(false)];
  53. //gridView = $('#gridContainer2').dxDataGrid('instance');
  54. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  55. // menuDataGridOptions -> PatrolGroupUser
  56. var menuDataGridOptions = utils.datagrid.defaultOptions({
  57. //dataSource: PatrolGroupUserDataSource,
  58. dataSource: usersInView,
  59. width: '100%',
  60. //height: 706,
  61. height: 685,
  62. columns: [
  63. { dataField: 'UserId', caption: '아이디', width: '35%', sortOrder: 'asc' },
  64. //{ dataField: 'CmSite/Name', caption: '아이디', width: '35%', sortOrder: 'asc' },
  65. // { dataField: 'CmPatrolGroup/Name', caption: '아이디', width: '35%', sortOrder: 'asc' },
  66. { dataField: 'CmUser/Name', caption: $G('name'), width: '25%' },
  67. { dataField: 'CmUser/CmDepartment/Name', caption: '부서', width: '25%' },
  68. ],
  69. // hcLee 2015 11 09
  70. paging: {
  71. enabled: true,
  72. pageSize: 19
  73. },
  74. pager: {
  75. },
  76. selection: {
  77. mode: 'multiple',
  78. allowSelectAll: true,
  79. },
  80. //rowClick:
  81. selectionChanged: function (clickRow) {
  82. var array = utils.datagrid.getSelectedRowsData('gridContainer2');
  83. deleteDisabled(!(array.length > 0));
  84. /*
  85. if (array.length > 0) $('#delete').attr("disabled", true);
  86. else $('#delete').attr("disabled", true);
  87. $('#delete').disabled = true;
  88. $('#delete').prop("disabled", true);
  89. //$('#delete').dxButton('instance').disabled = true;
  90. document.getElementById("delete").disabled = true; */
  91. /*
  92. var array = utils.datagrid.getSelectedRowsData('gridContainer2');
  93. DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) {
  94. if (result) {
  95. return BWA.api.post('CmPatrolGroup/DeleteGroupUser', array);
  96. }
  97. });*/
  98. },
  99. /*
  100. contentReadyAction: function(e) {
  101. //gridView = e.component;
  102. //datagrid.filter(null);
  103. },*/
  104. });
  105. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolGroup', {
  106. height: 685,
  107. popupWidth: 480,
  108. columns: [
  109. { dataField: 'Number', caption: $G('number'), width: '20%', allowSorting: false },
  110. { dataField: 'Name', caption: '순찰조명', width: '80%' }
  111. ],
  112. paging: {
  113. enabled: true,
  114. pageSize: 19
  115. },
  116. /*
  117. searchViewItems: [
  118. { id: 'MenuPath' },
  119. { id: 'Name' }
  120. ],*/
  121. pager: {
  122. },
  123. NoSearchView: true, // 2019.07.25 kgpark 검색버튼 삭제
  124. handleViewShown: function () {
  125. sidemenuHashSet = $SideMenu.getSidemenuHashSet();
  126. //$SearchView.setPopupVisibleObservable(null);
  127. $SearchView.visibleObservable(false);
  128. },
  129. handlePopupShowing2: function (selectedId) {
  130. var data = selectedPatrolGroup();
  131. selectedId.SiteId = data.SiteId();
  132. selectedId.PatrolGroupId = data.PatrolGroupId();
  133. selectedId.Name = data.Name();
  134. },
  135. /*
  136. handleAfterLoadingModelByKey: function(data, dataViewModel, isNewInPopup) {
  137. },*/
  138. /*
  139. handlePopupShowing: function(that) {
  140. },*/
  141. handlePopupShowing: function (isNewInPopup, dataViewModel) {
  142. CmPatrolGroupDataSource.filter([
  143. ["SiteId", "=", BWA.UserInfo.SiteId()]
  144. ]);
  145. CmPatrolGroupDataSource.load().done(function (result) {
  146. PatrolGroupInfo(result);
  147. });
  148. },
  149. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  150. var data = clickRow.data;
  151. RowName = data.Name;
  152. selectedPatrolGroup(data);
  153. PatrolGroupUserDataSource.filter([
  154. eq('SiteId', data.SiteId()),
  155. and,
  156. eq('PatrolGroupId', data.PatrolGroupId()),
  157. ]);
  158. PatrolGroupUserDataSource.load().done(function (users) {
  159. usersInView(users);
  160. /*
  161. PatrolGroupPermissionDataArray(_.map(dbPermissions, function(p) {
  162. var menu = sidemenuHashSet[p.MenuId()];
  163. if (_.has(menu, 'Name')) {
  164. p.Name = ko.observable(menu.Name);
  165. p.MenuPath = ko.observable(menu.MenuPath);
  166. }
  167. return p;
  168. })); */
  169. //gridView.refresh();
  170. //dataGrid.refresh();
  171. $('#gridContainer2').dxDataGrid('instance').refresh();
  172. });
  173. //var data = clickRow.data;
  174. },
  175. beforeInsertingDataViewModel: function (dataModel, dbModelId) {
  176. var dfd = $.Deferred();
  177. var isDuplicated = false;
  178. for (var i = 0; i < PatrolGroupInfo().length; i++) {
  179. if (dataModel.Name() == PatrolGroupInfo()[i].Name()) {
  180. isDuplicated = true;
  181. }
  182. }
  183. if (!BWA.DataUtil.isValidInputValue(dataModel.Name()))
  184. return dfd.resolve(false, '저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)');
  185. else {
  186. if (isDuplicated)
  187. return dfd.resolve(false, '이미 동일 정보가 존재합니다.');
  188. else
  189. return dfd.resolve(true);
  190. }
  191. },
  192. beforeUpdateDataViewModel: function () {
  193. var isDuplicated = false;
  194. for (var i = 0; i < PatrolGroupInfo().length; i++) {
  195. if (viewModel.dataModel.Name() == PatrolGroupInfo()[i].Name() && (RowName() != PatrolGroupInfo()[i].Name())) {
  196. isDuplicated = true;
  197. }
  198. }
  199. if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) {
  200. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  201. return 0;
  202. }
  203. else {
  204. if (isDuplicated) {
  205. utils.toast.show('이미 동일 이름이 존재합니다.', 'error');
  206. return 0;
  207. }
  208. else
  209. return 2;
  210. }
  211. },
  212. // Group 추가
  213. //handleSaveInPopup: function (dataViewModel, popupVisible) {
  214. // console.log('save!');
  215. //}
  216. });
  217. function handleDelete() {
  218. DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) {
  219. if (result) {
  220. var array = utils.datagrid.getSelectedRowsData('gridContainer2');
  221. var data = selectedPatrolGroup();
  222. var PatrolGroupId = data.PatrolGroupId();
  223. var postData;
  224. postData = _.map(array, function (m) {
  225. return {
  226. SiteId: m.SiteId(),
  227. PatrolGroupId: PatrolGroupId,
  228. UserId: m.UserId(),
  229. };
  230. });
  231. BWA.api.post('CmPatrolGroup/DeleteGroupUser', postData).done(function () {
  232. utils.toast.show($G('successDatabaseProcessMsg'));
  233. PatrolGroupUserDataSource.load().done(function (users) {
  234. usersInView(users);
  235. $('#gridContainer2').dxDataGrid('instance').refresh();
  236. });
  237. });
  238. }
  239. });
  240. }
  241. // GroupUser 추가
  242. function handleUserAdd() {
  243. viewModel.userSearchPopup.show();
  244. }
  245. function handleEdit() {
  246. /*
  247. var data = selectedPatrolGroup();
  248. viewModel.dataModel = data;
  249. viewModel.dataModel.SiteId = $KoSet(viewModel.dataModel.SiteId, data['SiteId']);
  250. viewModel.dataModel.PatrolGroupId = $KoSet(viewModel.dataModel.PatrolGroupId, data['PatrolGroupId']);
  251. viewModel.dataModel.Name = $KoSet(viewModel.dataModel.Name, data['Name']); */
  252. //viewModel.popupVisible(false);
  253. viewModel.popupVisible(true);
  254. //viewModel.popupVisible(true);
  255. }
  256. //onSelectedMaterials: function(selectedMaterials) {
  257. function onSelectedUsers(selectedUsers) {
  258. var data = selectedPatrolGroup();
  259. var PatrolGroupId = data.PatrolGroupId();
  260. //$('#gridContainer2').dxDataGrid('instance').refresh();
  261. var postData;
  262. postData = _.map(selectedUsers, function (m) {
  263. try {
  264. return {
  265. SiteId: m.SiteId(),
  266. PatrolGroupId: PatrolGroupId,
  267. UserId: m.UserId(),
  268. };
  269. } catch (e) {
  270. return {
  271. SiteId: m.SiteId,
  272. PatrolGroupId: PatrolGroupId,
  273. UserId: m.UserId,
  274. };
  275. }
  276. });
  277. BWA.api.post('CmPatrolGroup/UpdateGroupUser', postData).done(function () {
  278. _.each(selectedUsers, function (sm) {
  279. // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.
  280. // JD : 팝업에서 전체선택시 추가로 하면 오류 발생함. 이에 대한 회피 코드로 try-catch
  281. // JD : 근본적인 원인은 시간 관계상 차후로 넘김
  282. //var found = _.some(PatrolGroupUserDataSource, function (m) {
  283. var found = _.some(usersInView(), function (m) {
  284. try {
  285. return m.UserId() === sm.UserId();
  286. } catch (e) {
  287. return m.UserId() === sm.UserId;
  288. }
  289. });
  290. if (found) return;
  291. try {
  292. usersInView.push({
  293. SiteId: ko.observable(sm.SiteId()),
  294. PatrolGroupId: ko.observable(PatrolGroupId),
  295. UserId: ko.observable(sm.UserId()),
  296. 'CmUser/Name': ko.observable(sm.Name()),
  297. 'CmUser/CmDepartment/Name': ko.observable(sm.CmDepartment_Name()),
  298. });
  299. } catch (e) {
  300. usersInView.push({
  301. SiteId: ko.observable(sm.SiteId),
  302. PatrolGroupId: ko.observable(PatrolGroupId),
  303. UserId: ko.observable(sm.UserId),
  304. 'CmUser/Name': ko.observable(sm.Name),
  305. 'CmUser/CmDepartment/Name': ko.observable(sm.CmDepartment_Name),
  306. });
  307. }
  308. });
  309. PatrolGroupUserDataSource.filter([
  310. eq('SiteId', data.SiteId()),
  311. and,
  312. eq('PatrolGroupId', data.PatrolGroupId()),
  313. ]);
  314. PatrolGroupUserDataSource.load().done(function (users) {
  315. usersInView(users);
  316. $('#gridContainer2').dxDataGrid('instance').refresh();
  317. });
  318. utils.toast.show($G('successDatabaseProcessMsg'));
  319. });
  320. }
  321. viewModel.popupVisible.subscribe(function (visible) {
  322. var i = {};
  323. });
  324. viewModel.menuDataGridOptions = menuDataGridOptions;
  325. viewModel.handleUserAdd = handleUserAdd;
  326. viewModel.handleEdit = handleEdit;
  327. viewModel.handleDelete = handleDelete;
  328. viewModel.selectedPatrolGroup = selectedPatrolGroup;
  329. viewModel.deleteDisabled = deleteDisabled;
  330. //viewModel.handleSearchInSearchView = handleSearchInSearchView;
  331. viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData, true, onSelectedUsers);
  332. viewModel.handleSearchInSearchView2 = function (filter) {
  333. var filterA = [];
  334. _.each(filter, function (x) {
  335. filterA.push(x);
  336. });
  337. PatrolGroupUserDataSource.filter(filterA);
  338. PatrolGroupUserDataSource.load().done(function (result) {
  339. //PatrolGroupPermissionDataArray.load().done(function (result) {
  340. //PatrolGroupPermissionDataArray(result);
  341. });
  342. };
  343. return viewModel;
  344. };