ae1f52ba7385fd09e00aeb053cde2286b730fb80.svn-base 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. BemsWebApplication.PatrolHistory = function (params, viewInfo) {
  2. "use strict";
  3. var patrolgroupDataSource = BemsWebApplication.db.createDataSource('CmPatrolGroup', true),
  4. patrolcourseDataSource = BemsWebApplication.db.createDataSource('CmPatrolCourse', true);
  5. //var possInView = ko.observableArray();
  6. var patrolgroups = ko.observableArray(),
  7. patrolcourses = ko.observableArray();
  8. var patrolgroupsForSearch = ko.observableArray(),
  9. patrolcoursesForSearch = ko.observableArray(),
  10. patrolgroupIdForSerach = ko.observable(),
  11. patrolcourseIdForSerach = ko.observable(),
  12. defaultSearchPatrolGroupArray = $SearchView.createDefaultArray('PatrolGroupId'),
  13. defaultSearchPatrolCourseArray = $SearchView.createDefaultArray('PatrolCourseId');
  14. var deferredForSearch = new $.Deferred();
  15. /*
  16. function handleBuildingInSearchView(e) {
  17. if( e.value === 0 ) {
  18. floorsForSearch( getDefaultFloorForSearch() );
  19. }
  20. else {
  21. BWA.DataUtil.setArrayDataSourceFilter( floorDataSource, 'BuildingId', e.value, floorsForSearch, getDefaultFloorForSearch() );
  22. }
  23. floorIdForSerach( 0 );
  24. }*/
  25. var PatrolCoursePosDataSource = BWA.DataUtil.createDataSource({
  26. dataSourceOptions: {
  27. select: ['SiteId', 'mId', 'PatrolHistoryId', 'PosId', 'PatrolTime', 'term', 'resultType', 'CmPatrolPos/Name', 'CmPatrolType/Name'],
  28. expand: ['CmPatrolPos', 'CmPatrolType', 'CmPatrolPos/CmBuilding', 'CmPatrolPos/CmFloor'],
  29. extendOptions: {
  30. forceOriginalField: true
  31. },
  32. filter: [
  33. ['SiteId', '=', 0] // 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. }, 'CmPatrolHistoryPos');
  42. var menuDataGridOptions = utils.datagrid.defaultOptions({
  43. dataSource: PatrolCoursePosDataSource,
  44. //dataSource: possInView,
  45. width: '100%',
  46. //height: 706,
  47. height: 405,
  48. datagridId: 'gridContainer2',
  49. dbId: 'CmPatrolHistoryPos',
  50. useNumberColumn: true,
  51. columns: [
  52. { dataField: 'mId', caption: '순서', width: '12%', alignment: 'center', allowFiltering: false, sortOrder: 'asc' },
  53. { dataField: 'CmPatrolPos/Name', caption: '순찰지점', width: '20%', },
  54. {
  55. dataField: 'PatrolTime', caption: '순찰시각', width: '25%', alignment: 'right',
  56. customizeText: function (cellInfo) {
  57. return $G.dateTime(cellInfo.value);
  58. }
  59. },
  60. { dataField: 'term', caption: '이동시간(분)', width: '15%', alignment: 'left' },
  61. { dataField: 'CmPatrolType/Name', caption: '결과', alignment: 'center' },
  62. ],
  63. paging: {
  64. enabled: false,
  65. pageSize: 17
  66. },
  67. pager: {
  68. //allowedPageSizes: true,
  69. showPageSizeSelector: true,
  70. allowedPageSizes: [17, 20],
  71. visible: false
  72. },
  73. /*
  74. handleShowPopup:function(clickdata){
  75. },*/
  76. rowPrepared: function (rowElement, rowInfo) {
  77. if (rowInfo.rowType == 'data') {
  78. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  79. //if (dataGrid.totalCount() - 1 == rowInfo.dataIndex) {
  80. //}
  81. }
  82. },
  83. });
  84. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolHistory', {
  85. rowAlternationEnabled: true,
  86. /*
  87. editing: {
  88. editMode: 'batch',
  89. editEnabled: true,
  90. //removeEnabled: true,
  91. //insertEnabled: true
  92. },*/
  93. dataSourceOptions: {
  94. select: ['SiteId', 'PatrolHistoryId', 'ScheduleId', 'startDate', 'endDate', 'resultTypeId', 'resultDesc', 'resultPosCnt', 'resultNormalCnt', 'resultAbnormalCnt',
  95. 'CmPatrolSchedule/Name', 'CmPatrolSchedule/CmPatrolPlan/Name',
  96. 'CmPatrolSchedule/CmPatrolPlan/CmPatrolGroup/Name', 'CmPatrolSchedule/CmPatrolPlan/CmPatrolCourse/Name', 'CmPatrolType/Name', 'CmPatrolSchedule/CmPatrolPlan/CourseId', 'CmPatrolSchedule/CmPatrolPlan/GroupId'],
  97. expand: ['CmPatrolSchedule', 'CmPatrolSchedule/CmPatrolPlan', 'CmPatrolSchedule/CmPatrolPlan/CmPatrolGroup',
  98. 'CmPatrolSchedule/CmPatrolPlan/CmPatrolCourse', 'CmPatrolType'],
  99. extendOptions: {
  100. forceOriginalField: true,
  101. }
  102. },
  103. columns: [
  104. { dataField: 'PatrolHistoryId', caption: $G('number'), width: '10%', alignment: 'center', sortOrder: 'desc' },
  105. { dataField: 'CmPatrolSchedule/Name', caption: '순찰일정명', width: '20%', alignment: 'center' },
  106. { dataField: 'CmPatrolSchedule/CmPatrolPlan/Name', caption: '순찰계획명', width: '20%', alignment: 'center' },
  107. { dataField: 'CmPatrolSchedule/CmPatrolPlan/CmPatrolGroup/Name', caption: '순찰조', width: '15%', alignment: 'center' },
  108. { dataField: 'CmPatrolSchedule/CmPatrolPlan/CmPatrolCourse/Name', caption: '순찰코스', width: '15%', alignment: 'center' },
  109. //{
  110. // dataField: 'startDate', caption: '순찰일', width: '10%', alignment: 'center',
  111. //customizeText: function (cellInfo) {
  112. // return $G.date(cellInfo.value);
  113. // }
  114. //},
  115. {
  116. dataField: 'startDate', caption: '순찰시작시간', width: '20%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd HH:mm:ss",
  117. customizeText: function (cellInfo) {
  118. return cellInfo.valueText;
  119. }
  120. },
  121. {
  122. dataField: 'endDate', caption: '순찰종료시간', width: '20%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd HH:mm:ss",
  123. /*
  124. calculateCellValue: function (data) {
  125. var result = $G.dateTime(data.endDate());
  126. if (data.resultTypeId() != 2)
  127. result = null;
  128. return result;
  129. },*/
  130. customizeText: function (cellInfo) {
  131. return cellInfo.valueText;
  132. }
  133. },
  134. { dataField: 'resultPosCnt', caption: '전체지점', width: '10%', alignment: 'center' },
  135. { dataField: 'resultNormalCnt', caption: '정상지점', width: '10%', alignment: 'center' },
  136. { dataField: 'resultAbnormalCnt', caption: '이상지점', width: '10%', alignment: 'center' },
  137. //{ dataField: 'CmPatrolType/Name', caption: '결과', width: '20%', alignment: 'center' },
  138. //{ dataField: 'resultDesc', caption: '특이사항', width: '50%', alignment: 'center' },
  139. ],
  140. paging: {
  141. enabled: true,
  142. pageSize: 18
  143. },
  144. pager: {
  145. },
  146. // 2019.04.16. 엑셀출력기능 추가 ~~~
  147. "export": {
  148. enabled: true,
  149. fileName: '순찰 이력',
  150. },
  151. onExporting: function (e) {
  152. e.component.columnOption("PatrolHistoryId", "visible", false);
  153. },
  154. onExported: function (e) {
  155. e.component.columnOption("PatrolHistoryId", "visible", true);
  156. },
  157. // ~~~ 2019.04.16. 엑셀출력기능 추가
  158. useDeleteButton: false,
  159. popupWidth: 720,
  160. promiseDataInSearchView: deferredForSearch.promise(),
  161. searchViewItems: _.compact([
  162. //{ id: 'PatrolGroupId', ignoreValue: 0, defaultValue: 0, value: patrolgroupIdForSerach, dataSource: patrolgroupsForSearch, handleChangedValue: handleBuildingInSearchView },
  163. { id: 'CmPatrolSchedule/CmPatrolPlan/GroupId', ignoreValue: 0, defaultValue: 0, value: patrolgroupIdForSerach, dataSource: patrolgroupsForSearch },
  164. { id: 'CmPatrolSchedule/CmPatrolPlan/CourseId', ignoreValue: 0, defaultValue: 0, value: patrolcourseIdForSerach, dataSource: patrolcoursesForSearch },
  165. { id: 'CmPatrolSchedule/CmPatrolPlan/Name' },
  166. { id: 'startDate', type: 'dateRange', isOnlyDate: true },
  167. //{ id: 'FmsWorkResult/CmUser/Name' },
  168. ]),
  169. handleViewShowing: function () {
  170. patrolgroupDataSource.load().done(function (pgResults) {
  171. patrolgroups(pgResults);
  172. patrolgroupsForSearch(defaultSearchPatrolGroupArray.slice(0).concat(pgResults));
  173. patrolgroupIdForSerach(0);
  174. patrolcourseDataSource.load().done(function (pgResults) {
  175. patrolcourses(pgResults);
  176. patrolcoursesForSearch(defaultSearchPatrolCourseArray.slice(0).concat(pgResults));
  177. patrolcourseIdForSerach(0);
  178. deferredForSearch.resolve();
  179. });
  180. });
  181. },
  182. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  183. dataGrid.clearSelection();
  184. viewModel.isNewInPopup(false); //
  185. var data = clickRow.data;
  186. var dataModel = viewModel.dataModel;
  187. dataModel.PatrolGroupName = $KoSet(dataModel.PatrolGroupName, data['CmPatrolSchedule/CmPatrolPlan/CmPatrolGroup/Name']);
  188. dataModel.PatrolCourseName = $KoSet(dataModel.PatrolCourseName, data['CmPatrolSchedule/CmPatrolPlan/CmPatrolCourse/Name']);
  189. dataModel.PlanName = $KoSet(dataModel.PlanName, data['CmPatrolSchedule/CmPatrolPlan/Name']);
  190. dataModel.Name = $KoSet(dataModel.Name, data['CmPatrolSchedule/Name']);
  191. //dataModel.CourseId = $KoSet(dataModel.CourseId, data.CourseId);
  192. //dataModel.GroupId = $KoSet(dataModel.GroupId, data.GroupId);
  193. var eq = BWA.DataUtil.constructEqualFilter;
  194. var and = BWA.DataUtil.andFilter;
  195. PatrolCoursePosDataSource.filter([
  196. eq('SiteId', data.SiteId()),
  197. and,
  198. eq('PatrolHistoryId', data.PatrolHistoryId()),
  199. ]);
  200. PatrolCoursePosDataSource.load().done(function (poss) {
  201. //possInView(poss);
  202. //$('#gridContainer2').dxDataGrid('instance').refresh();
  203. //viewModel.visibleDeleteButton(false);
  204. popupVisible(true);
  205. });
  206. },
  207. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  208. //if( isNewInPopup() == false ) {
  209. // BWA.DataUtil.setArrayDataSourceFilter(patrolgroupDataSource, 'GroupId', dataViewModel.GroupId(), patrolgroups);
  210. //BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors);
  211. //}
  212. },
  213. viewHidden: function () {
  214. $SearchView.visibleObservable(false);
  215. visiblePopup(false);
  216. },
  217. handlePopupShowing: function (isNewInPopup, dataViewModel, selectedData) {
  218. //viewModel.visibleDeleteButton(false);
  219. /* if (isNewInPopup()) {
  220. dataViewModel.inDate(new Date());
  221. }*/
  222. $("#gridContainer2").dxDataGrid({
  223. paging: {
  224. pageSize: 10,
  225. enabled: true
  226. },
  227. pager: {
  228. allowedPageSizes: false,
  229. visible: true
  230. }
  231. });
  232. },
  233. handleBeforeDelete: function (db) {
  234. /* var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  235. dataViewModel.SiteId = db.SiteId;
  236. dataViewModel.BuildingId = db.BuildingId;
  237. dataViewModel.FloorId = db.FloorId;
  238. dataViewModel.ZoneId = db.ZoneId;
  239. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemoveZoneTempHumiSet', dataViewModel);
  240. promise.done(function () {
  241. ;
  242. });*/
  243. },
  244. /*
  245. beforeInsertingDataViewModel: function (dataModel, dbModelId) {
  246. dataModel.inDate(new Date());
  247. var dfd = $.Deferred();
  248. //alert(dataModel.Name());
  249. if (_.isEmpty(dataModel.Name()) || dataModel.term() == null)
  250. dfd.resolve(false, '(*) 표시 항목은 필수 입력 사항 입니다!');
  251. return dfd.resolve(true);
  252. },
  253. beforeUpdateDataViewModel: function () {
  254. //handlePopupButtonSave: function () {
  255. if (_.isEmpty(viewModel.dataModel.Name())) {
  256. utils.toast.show('순찰계획명이 공백입니다.', 'error');
  257. return 0;
  258. }
  259. if (viewModel.dataModel.term() == null) {
  260. utils.toast.show('순찰주기가 공백입니다.', 'error');
  261. return 0;
  262. }
  263. // 수정시에 시간변경
  264. viewModel.dataModel.inDate(new Date());
  265. return 2;
  266. },
  267. */
  268. handleAfterInsert: function (db) {
  269. /*
  270. var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  271. dataViewModel.SiteId = db.SiteId;
  272. dataViewModel.BuildingId = db.BuildingId;
  273. dataViewModel.FloorId = db.FloorId;
  274. dataViewModel.ZoneId = db.ZoneId;
  275. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/AddZoneTempHumiSet', dataViewModel);
  276. promise.done(function () {
  277. ;
  278. });*/
  279. },
  280. });
  281. /*
  282. function getDefaultFloorForSearch() {
  283. return $SearchView.createDefaultArray( 'FloorId' );
  284. }
  285. floorDataSource.filter('BuildingId', -1); */
  286. // 콤보, text 등록먼저후 생기는 팝업에서 안보이는 문제해결
  287. viewModel.dataModel.PatrolGroupName = ko.observable();
  288. viewModel.dataModel.PatrolCourseName = ko.observable();
  289. viewModel.dataModel.PlanName = ko.observable();
  290. viewModel.dataModel.Name = ko.observable();
  291. //viewModel.dataModel.GroupId = ko.observable();
  292. //viewModel.dataModel.CourseId= ko.observable();
  293. viewModel.patrolgroups = patrolgroups;
  294. viewModel.patrolcourses = patrolcourses;
  295. viewModel.menuDataGridOptions = menuDataGridOptions;
  296. /*
  297. viewModel.popupInsertButtonOptions.action = function () {
  298. alert('insett');
  299. }*/
  300. return viewModel;
  301. };