e21f37fe34312d128ed0799127dcfb0da3eebbc7.svn-base 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. BemsWebApplication.AlarmGroupUser = function (params, viewInfo) {
  2. "use strict";
  3. var enroll_btn = false;
  4. var row_btn = false;
  5. var up_btn = false;
  6. var pop_init = false;
  7. //권한설정
  8. var hasnotModificationPermission = ko.observable(true);
  9. var visiblePopup = ko.observable(false);
  10. var temp_AlarmGroupId = 0;
  11. var temp_UserId = ko.observableArray();
  12. var eq = BWA.DataUtil.constructEqualFilter,
  13. and = BWA.DataUtil.andFilter;
  14. var dataSource = ko.observableArray();
  15. var BemsAlarmGroupDataSource = BemsWebApplication.db.createDataSource('BemsAlarmGroup', true);
  16. var AlarmGroup = ko.observableArray();
  17. var AlarmGroup_temp = ko.observableArray();
  18. var AlarmGroup_temp1 = ko.observableArray();
  19. var User = ko.observableArray();
  20. var Usertemp = ko.observableArray();
  21. var Usertemp2 = ko.observableArray();
  22. var endpointSelector = "";
  23. var gridData = new Array();
  24. var temp_key, temp_user_id;
  25. if (BemsWebApplication.config.mode == "production") {
  26. endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.production;
  27. } else {
  28. endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.local;
  29. }
  30. var AlarmdataGrid = utils.datagrid.defaultOptions({
  31. dataSource: dataSource,
  32. selection: {
  33. mode: 'single'
  34. },
  35. columns: [
  36. { dataField: 'AlarmGroupId', caption: '알람 그룹 ID', width: '16%', alignment: 'center', sortOrder: 'desc' },
  37. { dataField: 'AlarmGroupName', caption: '알람 그룹 이름', width: '16%', alignment: 'center' },
  38. { dataField: 'UserId', caption: '사용자 ID', width: '16%', alignment: 'center' },
  39. { dataField: 'UserName', caption: '사용자 이름', width: '16%', alignment: 'center' },
  40. { dataField: 'MobilePhoneNo', caption: 'PhoneNo', width: '17%', alignment: 'center' },
  41. { dataField: 'Email', caption: 'Email', width: '17%', alignment: 'center' },
  42. ]
  43. });
  44. var UserDataSource = BWA.DataUtil.createDataSource({
  45. dataSourceOptions: {
  46. store: BemsWebApplication.odata.CmUser,
  47. select: [
  48. 'UserId',
  49. 'Name',
  50. 'DepartmentId',
  51. 'MobilePhoneNo',
  52. 'Email'
  53. ],
  54. filter: [eq('SiteId', BWA.UserInfo.SiteId()),
  55. 'and',
  56. [eq('EmploymentStatus', 1)]
  57. ],
  58. },
  59. }, 'CmUser');
  60. var DepartmentDataSource = BWA.DataUtil.createDataSource({
  61. dataSourceOptions: {
  62. store: BemsWebApplication.odata.CmDepartment,
  63. select: [
  64. 'DepartmentId',
  65. 'Name'
  66. ],
  67. filter: [eq('SiteId', BWA.UserInfo.SiteId())],
  68. },
  69. }, 'CmDepartment');
  70. function AddSelectPoint() {
  71. var store = new DevExpress.data.ODataStore({
  72. url: endpointSelector + "/BemsAlarmGroupUser",
  73. key: ["SiteId", "AlarmGroupId", "UserId"],
  74. keyType: {
  75. SiteId: "Int32",
  76. AlarmGroupId: "Int32",
  77. UserId: "String"
  78. }
  79. });
  80. var temp_group = gridData;
  81. var alarmgroupId = $("#Alarm_Group").dxSelectBox('instance').option('value');
  82. for (var i = 0; i < temp_group.length; i++) {
  83. if (alarmgroupId == temp_group[i].AlarmGroupId) {
  84. utils.toast.show("존재하고 있는 그룹입니다.");
  85. return;
  86. }
  87. }
  88. var keys = $("#Alarm_User").dxDataGrid('instance').getSelectedRowKeys();
  89. if (alarmgroupId == null || keys == null) {
  90. utils.toast.show("필수 데이터가 부족합니다.");
  91. return;
  92. }
  93. for (var i = 0; i < keys.length; i++) {
  94. var num = 0;
  95. var insertData = {
  96. SiteId: BWA.UserInfo.SiteId(), AlarmGroupId: alarmgroupId, UserId: keys[i].UserId
  97. };
  98. store.insert(insertData)
  99. .done(function (values, key) {
  100. if (keys.length - 1 == num) {
  101. utils.toast.show("저장되었습니다.");
  102. visiblePopup(false);
  103. }
  104. num++;
  105. })
  106. .fail(function (error) {
  107. utils.toast.show(error);
  108. });
  109. }
  110. }
  111. function UpdateGridData() {
  112. var store = new DevExpress.data.ODataStore({
  113. url: endpointSelector + "/BemsAlarmGroupUser",
  114. key: ["SiteId", "AlarmGroupId", "UserId"],
  115. keyType: {
  116. SiteId: "Int32",
  117. AlarmGroupId: "Int32",
  118. UserId: "String"
  119. }
  120. });
  121. var keys1 = temp_user_id; //이전
  122. var alarmgroupId = $("#Alarm_Group").dxSelectBox('instance').option('value');
  123. var keys = $("#Alarm_User").dxDataGrid('instance').getSelectedRowKeys(); //현재
  124. if (keys.length == 0) {
  125. utils.toast.show("최소한 1명의 사용자가 등록되야합니다.");
  126. return;
  127. }
  128. var num1 = keys1.length;
  129. for (var i = 0; i < keys1.length; i++) {
  130. var removeData = {
  131. SiteId: BWA.UserInfo.SiteId(), AlarmGroupId: temp_AlarmGroupId, UserId: keys1[i]
  132. };
  133. store.remove(removeData)
  134. .done(function (values, key) {
  135. num1--;
  136. if (num1 == 0) {
  137. var num = keys.length;
  138. for (i = 0; i < keys.length; i++) {
  139. var insertData = {
  140. SiteId: BWA.UserInfo.SiteId(), AlarmGroupId: alarmgroupId, UserId: keys[i].UserId
  141. };
  142. store.insert(insertData)
  143. .done(function (values, key) {
  144. num--;
  145. if (num == 0) {
  146. utils.toast.show("수정되었습니다.");
  147. visiblePopup(false);
  148. }
  149. })
  150. .fail(function (error) {
  151. utils.toast.show(error);
  152. });
  153. }
  154. }
  155. })
  156. .fail(function (error) {
  157. utils.toast.show(error);
  158. });
  159. }
  160. }
  161. function DeleteGridData() {
  162. var store = new DevExpress.data.ODataStore({
  163. url: endpointSelector + "/BemsAlarmGroupUser",
  164. key: ["SiteId", "AlarmGroupId", "UserId"],
  165. keyType: {
  166. SiteId: "Int32",
  167. AlarmGroupId: "Int32",
  168. UserId: "String"
  169. }
  170. });
  171. var keys = $("#Alarm_User").dxDataGrid('instance').getSelectedRowKeys();
  172. for (var i = 0; i < keys.length; i++) {
  173. var num = 0;
  174. var removeData = {
  175. SiteId: BWA.UserInfo.SiteId(), AlarmGroupId: temp_AlarmGroupId, UserId: keys[i].UserId
  176. };
  177. store.remove(removeData)
  178. .done(function (values, key) {
  179. if (keys.length - 1 == num) {
  180. utils.toast.show("삭제되었습니다.");
  181. visiblePopup(false);
  182. }
  183. num++;
  184. })
  185. .fail(function (error) {
  186. utils.toast.show(error);
  187. });
  188. }
  189. }
  190. function GetGridData(AlarmGroup_temp) {
  191. gridData = new Array();
  192. var dataSource1 = new DevExpress.data.DataSource({
  193. store: {
  194. type: "odata",
  195. url: endpointSelector + "/BemsAlarmGroupUser",
  196. },
  197. requireTotalCount: true,
  198. pageSize: 9999,
  199. });
  200. dataSource1.filter([
  201. ["SiteId", "=", BWA.UserInfo.SiteId()]
  202. ]);
  203. dataSource1.load()
  204. .done(function (result) {
  205. var index = 0;
  206. for (var i = 0; i < result.length; i++) {
  207. var setData = {
  208. "Index": 0,
  209. "AlarmGroupId": 0,
  210. "AlarmGroupName": "",
  211. };
  212. var exit = false;
  213. if (AlarmGroup_temp.length != 0) {
  214. for (var j = 0; j < AlarmGroup_temp.length; j++) {
  215. if (result[i].AlarmGroupId == AlarmGroup_temp[j].AlarmGroupId()) {
  216. for (var k = 0; k < gridData.length; k++) {
  217. if (gridData[k].AlarmGroupId == AlarmGroup_temp[j].AlarmGroupId()) {
  218. exit = true;
  219. break;
  220. }
  221. else
  222. exit = false;
  223. }
  224. if (exit == false) {
  225. index++;
  226. setData.Index = index;
  227. setData.AlarmGroupId = AlarmGroup_temp[j].AlarmGroupId();
  228. setData.AlarmGroupName = AlarmGroup_temp[j].Name();
  229. gridData.push(setData);
  230. break;
  231. }
  232. }
  233. }
  234. }
  235. $("#dataGrid").dxDataGrid("instance").option('dataSource', gridData);
  236. $("#dataGrid").dxDataGrid("instance").refresh();
  237. }
  238. })
  239. .fail(function (error) {
  240. utils.toast.show(error);
  241. });
  242. }
  243. var dataGrid = utils.datagrid.defaultOptions({
  244. selection: {
  245. mode: 'single'
  246. },
  247. paging: {
  248. pageSize: 19,
  249. enabled: false
  250. },
  251. onRowClick: function (row) {
  252. var data = row.data;
  253. var j = 0;
  254. row_btn = true;
  255. temp_AlarmGroupId = data.AlarmGroupId;
  256. var dataSource1 = new DevExpress.data.DataSource({
  257. store: {
  258. type: "odata",
  259. url: endpointSelector + "/BemsAlarmGroupUser",
  260. },
  261. requireTotalCount: true,
  262. pageSize: 9999,
  263. });
  264. dataSource1.filter([
  265. ["SiteId", "=", BWA.UserInfo.SiteId()],
  266. "and",
  267. ["AlarmGroupId", "=", temp_AlarmGroupId]
  268. ]);
  269. dataSource1.load()
  270. .done(function (result) {
  271. temp_UserId = new Array();
  272. temp_key = new Array();
  273. temp_user_id = new Array();
  274. var j = 0, t = 0;
  275. for (var i = 0; i < result.length; i++) {
  276. temp_UserId[j] = result[j].UserId;
  277. j++
  278. }
  279. for (var k = 0; k < Usertemp2.length ; k++) {
  280. for (var h = 0; h < temp_UserId.length ; h++) {
  281. if (Usertemp2[k].UserId == temp_UserId[h]) {
  282. temp_key[t] = k;
  283. temp_user_id[t] = Usertemp2[k].UserId;
  284. t++;
  285. break;
  286. }
  287. }
  288. }
  289. visiblePopup(true);
  290. })
  291. .fail(function (error) {
  292. utils.toast.show(error);
  293. });
  294. },
  295. columns:
  296. [
  297. { dataField: 'Index', caption: '번호', width: '30%', alignment: 'center' },
  298. { dataField: 'AlarmGroupId', caption: '그룹 ID', width: '30%', alignment: 'center', visible: false },
  299. { dataField: 'AlarmGroupName', caption: '알람 그룹 이름', width: '70%', alignment: 'center' }
  300. ]
  301. })
  302. function updateButtonClicked() {
  303. UpdateGridData();
  304. setTimeout(function () {
  305. GetGridData(AlarmGroup_temp1);
  306. }, 100);
  307. }
  308. function delButtonClicked() {
  309. DeleteGridData();
  310. setTimeout(function () {
  311. GetGridData(AlarmGroup_temp1);
  312. }, 100);
  313. }
  314. function selectSaveButtonClicked() {
  315. AddSelectPoint();
  316. setTimeout(function () {
  317. GetGridData(AlarmGroup_temp1);
  318. }, 100);
  319. }
  320. function selectButtonClicked() {
  321. enroll_btn = true;
  322. visiblePopup(true);
  323. }
  324. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'BemsAlarmGroupUser', {
  325. popupWidth: 800,
  326. NoSearchView: true, // 2019.07.25 kgpark 검색버튼 삭제
  327. handleViewShowing: function () {
  328. //권한설정
  329. hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));
  330. BemsAlarmGroupDataSource.filter([
  331. ['SiteId', '=', BWA.UserInfo.SiteId()],
  332. ]);
  333. BemsAlarmGroupDataSource.load().done(function (result) { //그룹 정보 가져오기
  334. User = ko.observableArray();
  335. AlarmGroup = result;
  336. $("#Alarm_Group").dxSelectBox({
  337. placeholder: "알람 그룹",
  338. dataSource: AlarmGroup,
  339. displayExpr: 'Name',
  340. valueExpr: 'AlarmGroupId',
  341. });
  342. AlarmGroup_temp1 = result;
  343. GetGridData(result);
  344. UserDataSource.load().done(function (userResult) { //사용자 정보
  345. Usertemp = userResult;
  346. DepartmentDataSource.load().done(function (departmentResult) {
  347. Usertemp2 = new Array();
  348. for (var i = 0; i < Usertemp.length; i++) {
  349. for (var j = 0; j < departmentResult.length; j++) {
  350. if (Usertemp[i].DepartmentId() == departmentResult[j].DepartmentId()) {
  351. var temp = { "UserId": "", "Name": "", "Department": "", "MobilePhoneNo": "", "Email": "" };
  352. temp.UserId = Usertemp[i].UserId();
  353. temp.Name = Usertemp[i].Name();
  354. temp.Department = departmentResult[j].Name();
  355. temp.MobilePhoneNo = Usertemp[i].MobilePhoneNo();
  356. if (temp.MobilePhoneNo == null)
  357. temp.MobilePhoneNo = "";
  358. temp.Email = Usertemp[i].Email();
  359. if (temp.Email == null)
  360. temp.Email = "";
  361. User.push(temp);
  362. Usertemp2.push(temp)
  363. break;
  364. }
  365. }
  366. }
  367. });
  368. });
  369. });
  370. },
  371. handleViewShown: function () {
  372. $("#dataGrid").dxDataGrid({
  373. paging: {
  374. pageSize: 18
  375. }
  376. });
  377. }
  378. });
  379. viewModel.updateButtonClicked = updateButtonClicked;
  380. viewModel.delButtonClicked = delButtonClicked;
  381. viewModel.selectSaveButtonClicked = selectSaveButtonClicked;
  382. viewModel.selectButtonClicked = selectButtonClicked;
  383. viewModel.dataGrid = dataGrid;
  384. viewModel.popupOptions = {
  385. width: 1000,
  386. height: 700,
  387. visible: visiblePopup,
  388. dragEnabled: true,
  389. shading: true,
  390. closeOnOutsideClick: true,
  391. shadingColor: 'transparent',
  392. showTitle: true,
  393. title: "항목 선택",
  394. showCloseButton: true,
  395. onShowing: function () {
  396. $("#Alarm_User").dxDataGrid({
  397. dataSource: User,
  398. selection: { mode: 'multiple', allowSelectAll: true },
  399. columns: [
  400. { dataField: 'UserId', caption: '사용자 ID', width: '18%', alignment: 'center' },
  401. { dataField: 'Name', caption: '사용자 이름', width: '16%', alignment: 'center' },
  402. { dataField: 'Department', caption: '부서', width: '18%', alignment: 'center' },
  403. { dataField: 'MobilePhoneNo', caption: '핸드폰 번호', width: '20%', alignment: 'center' },
  404. { dataField: 'Email', caption: 'Email', width: '28%', alignment: 'center' }
  405. ],
  406. //scrolling: {
  407. // mode: 'standard'
  408. //}
  409. paging: {
  410. pageSize: 12,
  411. enabled: true
  412. },
  413. pager: {
  414. },
  415. });
  416. },
  417. onShown: function (t, tt) {
  418. $("#Alarm_Group").dxSelectBox({
  419. placeholder: "알람 그룹",
  420. dataSource: AlarmGroup,
  421. displayExpr: 'Name',
  422. valueExpr: 'AlarmGroupId',
  423. disabled: false
  424. });
  425. if (enroll_btn) {
  426. $("#Alarm_Group").dxSelectBox('instance').option('value', null);
  427. $("#Alarm_User").dxDataGrid('instance').clearSelection();
  428. $("#updateSaveBtn").dxButton({
  429. visible: false
  430. });
  431. $("#delBtn").dxButton({
  432. visible: false
  433. });
  434. $("#selectSaveBtn").dxButton({
  435. visible: true
  436. });
  437. enroll_btn = false;
  438. }
  439. if (row_btn) {
  440. $("#updateSaveBtn").dxButton({
  441. visible: true
  442. });
  443. $("#delBtn").dxButton({
  444. visible: true
  445. });
  446. $("#selectSaveBtn").dxButton({
  447. visible: false
  448. });
  449. $("#Alarm_Group").dxSelectBox('instance').option('value', temp_AlarmGroupId);
  450. $("#Alarm_Group").dxSelectBox('instance').option('dataSource', AlarmGroup);
  451. $("#Alarm_Group").dxSelectBox('instance').option('disabled', true);
  452. if (temp_key != null) {
  453. var key = temp_key;
  454. key.join(",");
  455. var aa = "[" + key + "]";
  456. $("#Alarm_User").dxDataGrid('instance').selectRowsByIndexes(key);
  457. }
  458. row_btn = false;
  459. }
  460. },
  461. onHidden: function () {
  462. },
  463. hasnotModificationPermission: hasnotModificationPermission //권한설정
  464. }
  465. return viewModel;
  466. };