c982c45f294f8397585f59aa67ea3c824ccf36d0.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. BemsWebApplication.PatrolCourse = 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 CmPatrolCourseDataSource = BemsWebApplication.db.createDataSource('CmPatrolCourse');
  8. var PatrolCourseInfo = ko.observableArray();
  9. var RowName;
  10. /*
  11. var commandButtonOptions = [ {
  12. icon: 'edit',
  13. id: 'create1',
  14. title: '순찰코스 순서저장',
  15. disabled: disableOrderUpdate,
  16. action: handleOrderUpdate
  17. }];*/
  18. /*
  19. var selectedPatrolPosData = ko.observable();
  20. selectedPatrolPosData.subscribe(function (value) {
  21. if (isMainContactor) {
  22. viewModel.dataModel.MainContactorlPosId(value.UserId);
  23. viewModel.dataModel.MainContactorUserName(value.Name);
  24. }
  25. else {
  26. viewModel.dataModel.SubContactorUserId(value.UserId);
  27. viewModel.dataModel.SubContactorUserName(value.Name);
  28. }
  29. });*/
  30. var PatrolCourseDataSource = BWA.db.createDataSource('CmPatrolCourse'),
  31. // PatrolCoursePosDataSource = BWA.db.createDataSource('CmPatrolCoursePos'),
  32. PatrolCoursePosDataSource = BWA.DataUtil.createDataSource({
  33. dataSourceOptions: {
  34. select: ['SiteId', 'PatrolCourseId', 'PosId', 'CourseOrder', 'CmPatrolCourse/Name', 'CmPatrolPos/Name', 'CmPatrolPos/CmBuilding/Name', 'CmPatrolPos/CmFloor/Name'],
  35. //select: ['SiteId', 'PatrolCourseId', 'PosId', 'CourseOrder', 'CmPatroPos/Name', 'CmPatroPos/CmBuilding/Name', 'CmPatroPos/CmFloor/Name'],
  36. expand: ['CmPatrolCourse', 'CmPatrolPos', 'CmPatrolPos/CmBuilding', 'CmPatrolPos/CmFloor'],
  37. extendOptions: {
  38. forceOriginalField: true
  39. },
  40. filter: [
  41. ['SiteId', '=', BWA.UserInfo.SiteId()] // 4
  42. //eq('SiteId', 0), // 초기화를 위해서 0
  43. // eq('SiteId', BWA.UserInfo.SiteId()),
  44. // and,
  45. // ['FmsWorkRequest/WorkProgressId', '=', $Code.WorkProgress.WORKING] // 4
  46. // //, and, ['FmsWorkRequest/WorkProgressId', '<=', 5]
  47. ]
  48. }
  49. }, 'CmPatrolCoursePos'),
  50. possInView = ko.observableArray(),
  51. //PatrolCoursePermissionDataArray = ko.observableArray(),
  52. deleteDisabled = ko.observable(true),
  53. popupVisible = ko.observable(false),
  54. upDisabled = ko.observable(true),
  55. downDisabled = ko.observable(true),
  56. reSelectRow = ko.observable(false),
  57. disableOrderUpdate = ko.observable(true),
  58. selectedPatrolCourse = ko.observable(null),
  59. selectedCoursePos = ko.observable(null),
  60. rowIndex,
  61. viewModel,
  62. //gridView,
  63. sidemenuHashSet;
  64. //var datagrid = $('#EnergySavingControlDataGridViewInSearchView').dxDataGrid('instance');
  65. //var gridView = $('#gridContainer2').dxDataGrid('instance');
  66. //var headerCheckBoxValues = [ko.observable(false), ko.observable(false), ko.observable(false)];
  67. //gridView = $('#gridContainer2').dxDataGrid('instance');
  68. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  69. // menuDataGridOptions -> PatrolCoursePos
  70. var menuDataGridOptions = utils.datagrid.defaultOptions({
  71. //dataSource: PatrolCoursePosDataSource,
  72. dataSource: possInView,
  73. width: '100%',
  74. //height: 706,
  75. height: 685,
  76. datagridId: 'gridContainer2',
  77. dbId: 'CmPatrolCoursePos',
  78. //useNumberColumn: true,
  79. columns: [
  80. { dataField: 'CourseOrder', caption: '순서', width: '15%', alignment: 'center', sortOrder: 'asc' },
  81. // { dataField: 'PosId', caption: '순찰지점', width: '35%', },
  82. // { dataField: 'CmPatrolCourse/Name', caption: '순찰코스명', width: '35%', },
  83. { dataField: 'CmPatrolPos/Name', caption: '순찰지점명', width: '35%', },
  84. { dataField: 'CmPatrolPos/CmBuilding/Name', caption: '빌딩', width: '25%',},
  85. { dataField: 'CmPatrolPos/CmFloor/Name', caption: '층', width: '25%'},
  86. // { dataField: 'CourseOrder', caption: '순서', width: '25%' },
  87. ],
  88. paging: {
  89. enabled: true,
  90. pageSize: 19
  91. },
  92. pager: {
  93. },
  94. selection: {
  95. mode: 'multiple',
  96. allowSelectAll: true,
  97. },
  98. /*
  99. handleShowPopup:function(clickdata){
  100. },*/
  101. rowPrepared: function (rowElement, rowInfo) {
  102. if (rowInfo.rowType == 'data' && reSelectRow()) {
  103. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  104. if (dataGrid.totalCount() - 1 == rowInfo.dataIndex) {
  105. dataGrid.selectRowsByIndexes(rowIndex);
  106. upDisabled(rowIndex == 0 ? true : false);
  107. downDisabled(rowIndex == dataGrid.totalCount() - 1 ? true : false);
  108. reSelectRow(false);
  109. }
  110. }
  111. },
  112. //byKey(key)
  113. //getKeyByRowIndex(rowIndex)
  114. selectionChanged: function (clickRow) {
  115. var array = utils.datagrid.getSelectedRowsData('gridContainer2');
  116. deleteDisabled(!(array.length > 0));
  117. if (array.length == 1) {
  118. selectedCoursePos(array[0]);
  119. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  120. //var index = dataGrid.getRowIndexByKey(dataGrid.getSelectedRowKeys());
  121. rowIndex = dataGrid.getRowIndexByKey(clickRow.currentSelectedRowKeys[0]);
  122. //dataGrid.selectRowsByIndexes(rowIndexes);
  123. upDisabled(rowIndex == 0 ? true : false);
  124. downDisabled(rowIndex == dataGrid.totalCount() - 1 ? true : false);
  125. }
  126. else {
  127. if (reSelectRow() == false) {
  128. upDisabled(true);
  129. downDisabled(true);
  130. }
  131. }
  132. //$('#gridContainer2').dxDataGrid('instance').selectRowsByIndexes(0);
  133. /*
  134. if (reSelectRow()) {
  135. $('#gridContainer2').dxDataGrid('instance').selectRowsByIndexes(rowIndex);
  136. reSelectRow(false);
  137. }*/
  138. },
  139. /*
  140. contentReadyAction: function(e) {
  141. //gridView = e.component;
  142. //datagrid.filter(null);
  143. },*/
  144. });
  145. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolCourse', {
  146. dataSourceOptions: {
  147. select: ['SiteId', 'PatrolCourseId', 'Name',],
  148. extendOptions: {
  149. forceOriginalField: true
  150. },
  151. filter: [
  152. ['SiteId', '=', BWA.UserInfo.SiteId()]
  153. ]
  154. },
  155. height: 685,
  156. popupWidth: 480,
  157. columns: [
  158. { dataField: 'Number', caption: $G('number'), width: '20%', allowSorting: false },
  159. { dataField: 'Name', caption: '순찰코스명', width: '80%' }
  160. ],
  161. paging: {
  162. enabled: true,
  163. pageSize: 19
  164. },
  165. pager: {
  166. },
  167. NoSearchView: true, // 2019.07.25 kgpark 검색버튼 삭제
  168. handleViewShown: function () {
  169. sidemenuHashSet = $SideMenu.getSidemenuHashSet();
  170. //$SearchView.setPopupVisibleObservable(null);
  171. $SearchView.visibleObservable(false);
  172. },
  173. handlePopupShowing2: function (selectedId) {
  174. var data = selectedPatrolCourse();
  175. selectedId.SiteId = data.SiteId();
  176. selectedId.PatrolCourseId = data.PatrolCourseId();
  177. selectedId.Name = data.Name();
  178. },
  179. /*
  180. handleAfterLoadingModelByKey: function(data, dataViewModel, isNewInPopup) {
  181. },*/
  182. handlePopupShowing: function (that) {
  183. CmPatrolCourseDataSource.filter([
  184. ["SiteId", "=", BWA.UserInfo.SiteId()]
  185. ]);
  186. CmPatrolCourseDataSource.load().done(function (result) {
  187. PatrolCourseInfo(result);
  188. });
  189. },
  190. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  191. var data = clickRow.data;
  192. selectedPatrolCourse(data);
  193. LoadCoursePos();
  194. RowName = data.Name;
  195. //$('#gridContainer2').dxDataGrid('instance').selectRowsByIndexes(1);
  196. },
  197. beforeInsertingDataViewModel: function (dataModel, dbModelId) {
  198. var dfd = $.Deferred();
  199. var isDuplicated = false;
  200. for (var i = 0; i < PatrolCourseInfo().length; i++) {
  201. if (dataModel.Name() == PatrolCourseInfo()[i].Name()) {
  202. isDuplicated = true;
  203. }
  204. }
  205. if (!BWA.DataUtil.isValidInputValue(dataModel.Name()))
  206. return dfd.resolve(false, '저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)');
  207. else {
  208. if (isDuplicated)
  209. return dfd.resolve(false, '이미 동일 정보가 존재합니다.');
  210. else
  211. return dfd.resolve(true);
  212. }
  213. },
  214. beforeUpdateDataViewModel: function () {
  215. var isDuplicated = false;
  216. for (var i = 0; i < PatrolCourseInfo().length; i++) {
  217. if (viewModel.dataModel.Name() == PatrolCourseInfo()[i].Name() && (RowName() != PatrolCourseInfo()[i].Name())) {
  218. isDuplicated = true;
  219. }
  220. }
  221. if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) {
  222. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  223. return 0;
  224. }
  225. else {
  226. if (isDuplicated) {
  227. utils.toast.show('이미 동일 이름이 존재합니다.', 'error');
  228. return 0;
  229. }
  230. else
  231. return 2;
  232. }
  233. },
  234. });
  235. function handleOrderUp() {
  236. disableOrderUpdate(false);
  237. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  238. //rowIndex--;
  239. //dataGrid.selectRowsByIndexes(rowIndex);
  240. //return;
  241. var data = selectedCoursePos();
  242. var oldOrder = data.CourseOrder();
  243. rowIndex--;
  244. //dataGrid.selectRowsByIndexes(rowIndex);
  245. //var data2 = dataGrid.byKey(dataGrid.getKeyByRowIndex(rowIndex))
  246. dataGrid.byKey(dataGrid.getKeyByRowIndex(rowIndex)).done(function (dataObject) {
  247. data.CourseOrder(dataObject.CourseOrder());
  248. //data.CourseOrder(100);
  249. dataObject.CourseOrder(oldOrder);
  250. reSelectRow(true);
  251. $('#gridContainer2').dxDataGrid('instance').refresh();
  252. });
  253. //dataGrid.selectRowsByIndexes(rowIndex);
  254. //var data2 = dataGrid.getSelectedRowsData();
  255. // data.CourseOrder(data2[0].CourseOrder());
  256. //data.CourseOrder(100);
  257. // data2[0].CourseOrder(oldOrder);
  258. //dataGrid.selectRowsByIndexes(rowIndex);
  259. //dataGrid.selectRowsByIndexes(-1);
  260. //dataGrid.selectRowsByIndexes(rowIndex);
  261. /*
  262. var chage = new Array();
  263. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  264. var data = selectedCoursePos();
  265. chage.push({
  266. SiteId: data.SiteId(),
  267. PatrolCourseId: data.PatrolCourseId(),
  268. PosId: data.PosId(),
  269. CourseOrder: data.CourseOrder()
  270. });
  271. rowIndex--;
  272. dataGrid.selectRowsByIndexes(rowIndex);
  273. data = dataGrid.getSelectedRowsData();
  274. chage.push({
  275. SiteId: data[0].SiteId(),
  276. PatrolCourseId: data[0].PatrolCourseId(),
  277. PosId: data[0].PosId(),
  278. CourseOrder: data[0].CourseOrder()
  279. });
  280. reSelectRow(true);
  281. BWA.api.post('CmPatrolCourse/ChangeCourseOrder', chage).done(function () {
  282. // 재로드하는 걸로
  283. utils.toast.show($G('successDatabaseProcessMsg'));
  284. LoadCoursePos();
  285. });
  286. */
  287. }
  288. function handleOrderDown() {
  289. disableOrderUpdate(false);
  290. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  291. var data = selectedCoursePos();
  292. var oldOrder = data.CourseOrder();
  293. rowIndex++;
  294. dataGrid.byKey(dataGrid.getKeyByRowIndex(rowIndex)).done(function (dataObject) {
  295. data.CourseOrder(dataObject.CourseOrder());
  296. dataObject.CourseOrder(oldOrder);
  297. reSelectRow(true);
  298. $('#gridContainer2').dxDataGrid('instance').refresh();
  299. });
  300. //dataGrid.selectRowsByIndexes(rowIndex);
  301. //var data2 = dataGrid.getSelectedRowsData();
  302. // data.CourseOrder(data2[0].CourseOrder());
  303. //data.CourseOrder(100);
  304. // data2[0].CourseOrder(oldOrder);
  305. //dataGrid.selectRowsByIndexes(rowIndex);
  306. //dataGrid.selectRowsByIndexes(-1);
  307. return;
  308. var chage = new Array();
  309. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  310. var data = selectedCoursePos();
  311. chage.push({
  312. SiteId: data.SiteId(),
  313. PatrolCourseId: data.PatrolCourseId(),
  314. PosId: data.PosId(),
  315. CourseOrder: data.CourseOrder()
  316. });
  317. rowIndex++
  318. dataGrid.selectRowsByIndexes(rowIndex);
  319. data = dataGrid.getSelectedRowsData();
  320. chage.push({
  321. SiteId: data[0].SiteId(),
  322. PatrolCourseId: data[0].PatrolCourseId(),
  323. PosId: data[0].PosId(),
  324. CourseOrder: data[0].CourseOrder()
  325. });
  326. reSelectRow(true);
  327. BWA.api.post('CmPatrolCourse/ChangeCourseOrder', chage).done(function () {
  328. // 재로드하는 걸로
  329. utils.toast.show($G('successDatabaseProcessMsg'));
  330. LoadCoursePos();
  331. });
  332. }
  333. function handleDelete() {
  334. DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) {
  335. if (result) {
  336. var array = utils.datagrid.getSelectedRowsData('gridContainer2');
  337. var data = selectedPatrolCourse();
  338. var PatrolCourseId = data.PatrolCourseId();
  339. var postData;
  340. postData = _.map(array, function (m) {
  341. return {
  342. SiteId: m.SiteId(),
  343. PatrolCourseId: PatrolCourseId,
  344. PosId: m.PosId(),
  345. };
  346. });
  347. BWA.api.post('CmPatrolCourse/DeleteCoursePos', postData).done(function () {
  348. utils.toast.show($G('successDatabaseProcessMsg'));
  349. PatrolCoursePosDataSource.load().done(function (poss) {
  350. possInView(poss);
  351. $('#gridContainer2').dxDataGrid('instance').refresh();
  352. });
  353. });
  354. }
  355. });
  356. }
  357. // GroupUser 추가
  358. function handlePosAdd() {
  359. viewModel.PatrolPosSearchPopup.show();
  360. }
  361. function handleEdit() {
  362. /*
  363. var data = selectedPatrolCourse();
  364. viewModel.dataModel = data;
  365. viewModel.dataModel.SiteId = $KoSet(viewModel.dataModel.SiteId, data['SiteId']);
  366. viewModel.dataModel.PatrolCourseId = $KoSet(viewModel.dataModel.PatrolCourseId, data['PatrolCourseId']);
  367. viewModel.dataModel.Name = $KoSet(viewModel.dataModel.Name, data['Name']); */
  368. //viewModel.popupVisible(false);
  369. viewModel.popupVisible(true);
  370. //viewModel.popupVisible(true);
  371. }
  372. //onSelectedMaterials: function(selectedMaterials) {
  373. function onSelectedposs(selectedposs) {
  374. if (selectedposs.length <= 0) return;
  375. var data = selectedPatrolCourse();
  376. var PatrolCourseId = data.PatrolCourseId();
  377. $('#gridContainer2').dxDataGrid('instance').refresh();
  378. // 여기서 바로 저장 하자 !!
  379. var postData;
  380. try {
  381. postData = _.map(selectedposs, function (m) {
  382. return {
  383. SiteId: m.SiteId(),
  384. PatrolCourseId: PatrolCourseId,
  385. BuildingId: m.BuildingId(),
  386. FloorId: m.FloorId(),
  387. PosId: m.PosId(),
  388. };
  389. });
  390. } catch (e) {
  391. postData = _.map(selectedposs, function (m) {
  392. return {
  393. SiteId: m.SiteId,
  394. PatrolCourseId: PatrolCourseId,
  395. BuildingId: m.BuildingId,
  396. FloorId: m.FloorId,
  397. PosId: m.PosId,
  398. };
  399. });
  400. }
  401. BWA.api.post('CmPatrolCourse/AddCoursePos', postData).done(function () {
  402. // 재로드하는 걸로
  403. LoadCoursePos();
  404. utils.toast.show($G('successDatabaseProcessMsg'));
  405. });
  406. }
  407. function handleOrderUpdate() {
  408. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  409. var chage = new Array();
  410. var total = dataGrid.totalCount();
  411. for (var i = 0; i < total; i++) {
  412. dataGrid.byKey(dataGrid.getKeyByRowIndex(i)).done(function (data) {
  413. chage.push({
  414. SiteId: data.SiteId(),
  415. PatrolCourseId: data.PatrolCourseId(),
  416. PosId: data.PosId(),
  417. CourseOrder: data.CourseOrder()
  418. });
  419. });
  420. }
  421. BWA.api.post('CmPatrolCourse/UpdateCourseOrder', chage).done(function () {
  422. utils.toast.show($G('successDatabaseProcessMsg'));
  423. //LoadCoursePos();
  424. disableOrderUpdate(true);
  425. });
  426. }
  427. function LoadCoursePos() {
  428. var eq = BWA.DataUtil.constructEqualFilter;
  429. var and = BWA.DataUtil.andFilter;
  430. var data = selectedPatrolCourse();
  431. PatrolCoursePosDataSource.filter([
  432. eq('SiteId', data.SiteId()),
  433. and,
  434. eq('PatrolCourseId', data.PatrolCourseId()),
  435. ]);
  436. PatrolCoursePosDataSource.load().done(function (poss) {
  437. possInView(poss);
  438. $('#gridContainer2').dxDataGrid('instance').refresh();
  439. });
  440. disableOrderUpdate(true);
  441. }
  442. viewModel.popupVisible.subscribe(function (visible) {
  443. var i = {};
  444. });
  445. viewModel.menuDataGridOptions = menuDataGridOptions;
  446. viewModel.handlePosAdd = handlePosAdd;
  447. viewModel.handleEdit = handleEdit;
  448. viewModel.handleDelete = handleDelete;
  449. viewModel.handleOrderUpdate = handleOrderUpdate;
  450. viewModel.handleOrderUp = handleOrderUp;
  451. viewModel.handleOrderDown = handleOrderDown;
  452. viewModel.selectedPatrolCourse = selectedPatrolCourse;
  453. viewModel.selectedCoursePos = selectedCoursePos;
  454. viewModel.deleteDisabled = deleteDisabled;
  455. viewModel.upDisabled = upDisabled;
  456. viewModel.downDisabled = downDisabled;
  457. viewModel.reSelectRow = reSelectRow;
  458. viewModel.disableOrderUpdate = disableOrderUpdate;
  459. //viewModel.handleSearchInSearchView = handleSearchInSearchView;
  460. viewModel.PatrolPosSearchPopup = $PatrolPosSearchPopup(viewModel, null, true, onSelectedposs);
  461. //viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData, true, onSelectedposs);
  462. //viewModel.toolbarItems.push({location: 'after', widget: 'button', options: { text: $G('close'), icon: 'save', clickAction: handleOrderUpdate } });
  463. // viewModel.commandButtonOptions = commandButtonOptions;
  464. viewModel.handleSearchInSearchView2 = function (filter) {
  465. var filterA = [];
  466. _.each(filter, function (x) {
  467. filterA.push(x);
  468. });
  469. PatrolCoursePosDataSource.filter(filterA);
  470. PatrolCoursePosDataSource.load().done(function (result) {
  471. //PatrolCoursePermissionDataArray.load().done(function (result) {
  472. //PatrolCoursePermissionDataArray(result);
  473. });
  474. };
  475. return viewModel;
  476. };