08bf6d3cf7b236956dd94edf59aceeea8a00311b.svn-base 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. BemsWebApplication.PatrolReport = 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. var eq = BWA.DataUtil.constructEqualFilter;
  16. //var budgetDataSource = BWA.DataUtil.createDataSource({
  17. // dataSourceOptions: {
  18. // store: BemsWebApplication.odata.CmPatrolHistoryEx,
  19. // select: ['SiteId'],
  20. // filter: ['SiteId', '=', BWA.UserInfo.SiteId()]
  21. // }
  22. //});
  23. /*
  24. function handleBuildingInSearchView(e) {
  25. if( e.value === 0 ) {
  26. floorsForSearch( getDefaultFloorForSearch() );
  27. }
  28. else {
  29. BWA.DataUtil.setArrayDataSourceFilter( floorDataSource, 'BuildingId', e.value, floorsForSearch, getDefaultFloorForSearch() );
  30. }
  31. floorIdForSerach( 0 );
  32. }*/
  33. /*var PatrolHistoryDataSource = BWA.DataUtil.createDataSource({
  34. dataSourceOptions: {
  35. select: ['SiteId', 'PatrolHistoryId', 'ScheduleId', 'startDate', 'endDate',
  36. 'resultTypeId', 'resultDesc',
  37. 'CmPatrolSchedule/Name',
  38. 'CmPatrolSchedule/CmPatrolPlan/Name',
  39. 'CmPatrolSchedule/CmPatrolPlan/CmPatrolGroup/Name',
  40. 'CmPatrolSchedule/CmPatrolPlan/CmPatrolCourse/Name',
  41. 'CmPatrolType/Name',
  42. 'CmPatrolSchedule/CmPatrolPlan/CourseId',
  43. 'CmPatrolSchedule/CmPatrolPlan/GroupId'],
  44. expand: ['CmPatrolSchedule', 'CmPatrolSchedule/CmPatrolPlan',
  45. 'CmPatrolSchedule/CmPatrolPlan/CmPatrolGroup',
  46. 'CmPatrolSchedule/CmPatrolPlan/CmPatrolCourse', 'CmPatrolType'],
  47. extendOptions: {
  48. forceOriginalField: true
  49. },
  50. filter: [
  51. ['SiteId', '=', 0] // 초기화를 위해서 0
  52. ]
  53. }
  54. }, 'CmPatrolHistory');*/
  55. /*
  56. var PatrolCoursePosDataSource = BWA.DataUtil.createDataSource({
  57. dataSourceOptions: {
  58. select: ['SiteId', 'mId', 'PatrolHistoryId', 'PosId', 'PatrolTime', 'term', 'resultType', 'CmPatrolPos/Name', 'CmPatrolType/Name' ],
  59. expand: ['CmPatrolPos', 'CmPatrolType', 'CmPatrolPos/CmBuilding', 'CmPatrolPos/CmFloor'],
  60. extendOptions: {
  61. forceOriginalField: true
  62. },
  63. filter: [
  64. ['SiteId', '=', 0] // 4
  65. //eq('SiteId', 0), // 초기화를 위해서 0
  66. // eq('SiteId', BWA.UserInfo.SiteId()),
  67. // and,
  68. // ['FmsWorkRequest/WorkProgressId', '=', $Code.WorkProgress.WORKING] // 4
  69. // //, and, ['FmsWorkRequest/WorkProgressId', '<=', 5]
  70. ]
  71. }
  72. }, 'CmPatrolHistoryPos');
  73. var menuDataGridOptions = utils.datagrid.defaultOptions({
  74. dataSource: PatrolCoursePosDataSource,
  75. width: '100%',
  76. height: 400,
  77. datagridId: 'gridContainer2',
  78. dbId: 'CmPatrolHistoryPos',
  79. useNumberColumn: true,
  80. columns: [
  81. { dataField: 'mId', caption: '순서', width: '10%', alignment: 'center', allowFiltering: false, sortOrder: 'asc' },
  82. { dataField: 'CmPatrolPos/Name', caption: '순찰지점', width: '30%', },
  83. { dataField: 'PatrolTime', caption: '순찰시각', width: '25%', alignment: 'right',
  84. customizeText: function (cellInfo) {
  85. return $G.dateTime(cellInfo.value);
  86. }
  87. },
  88. { dataField: 'term', caption: '이동시간(분)', width: '15%', alignment: 'left' },
  89. { dataField: 'CmPatrolType/Name', caption: '결과', alignment: 'center' },
  90. ],
  91. paging: {
  92. enabled: false,
  93. pageSize: 17
  94. },
  95. pager: {
  96. //allowedPageSizes: true,
  97. showPageSizeSelector: true,
  98. allowedPageSizes: [17, 20],
  99. visible: false
  100. },
  101. rowPrepared: function (rowElement, rowInfo) {
  102. if (rowInfo.rowType == 'data') {
  103. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  104. }
  105. },
  106. });
  107. */
  108. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolHistoryEx', {
  109. rowAlternationEnabled: true,
  110. dataSourceOptions: {
  111. store: BemsWebApplication.odata.CmPatrolHistoryEx,
  112. select: ['SiteId', 'PatrolHistoryId', 'startDate', 'TotalCnt', 'OkCnt', 'ErrorCnt', 'TotalTimeMin'],
  113. filter: eq('SiteId', BWA.UserInfo.SiteId())
  114. },
  115. columns: [
  116. // { dataField: 'SiteId', caption: '순찰 건수', width: '15%', alignment: 'center' },
  117. { dataField: 'PatrolHistoryId', caption: $G('number'), width: '10%', alignment: 'center', sortOrder: 'desc' },
  118. {
  119. dataField: 'startDate', caption: '순찰일', width: '20%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd",
  120. customizeText: function (cellInfo) {
  121. return cellInfo.valueText;
  122. }
  123. },
  124. { dataField: 'TotalCnt', caption: '순찰 건수', width: '15%', alignment: 'center' },
  125. { dataField: 'OkCnt', caption: '정상 건수', width: '15%', alignment: 'center' },
  126. { dataField: 'ErrorCnt', caption: '이상 건수', width: '15%', alignment: 'center' },
  127. {
  128. dataField: 'TotalTimeMin', caption: '순찰시간', width: '15%', alignment: 'center',
  129. customizeText: function (cellInfo) {
  130. var hours = Math.round(cellInfo.value / 60);
  131. var minutes = cellInfo.value % 60;
  132. return hours + ":" + minutes;
  133. }
  134. },
  135. /*
  136. {
  137. dataField: 'startDate', caption: '순찰일', width: '10%', alignment: 'center',
  138. customizeText: function (cellInfo) {
  139. return $G.date(cellInfo.value);
  140. }
  141. },*/
  142. /*
  143. {
  144. dataField: 'startDate', caption: '순찰시작시간', width: '20%', alignment: 'center',
  145. customizeText: function (cellInfo) {
  146. return $G.dateTime(cellInfo.value);
  147. }
  148. },
  149. {
  150. dataField: 'endDate', caption: '순찰종료시간', width: '20%', alignment: 'center',
  151. customizeText: function (cellInfo) {
  152. return $G.dateTime(cellInfo.value);
  153. }
  154. },
  155. { dataField: 'CmPatrolType/Name', caption: '결과', width: '20%', alignment: 'center' },
  156. { dataField: 'resultDesc', caption: '특이사항', width: '30%', alignment: 'center' }, */
  157. ],
  158. paging: {
  159. enabled: true,
  160. pageSize: 18
  161. },
  162. pager: {
  163. },
  164. // 2019.04.16. 엑셀출력기능 추가 ~~~
  165. "export": {
  166. enabled: true,
  167. fileName: '순찰 보고서',
  168. },
  169. onExporting: function (e) {
  170. e.component.columnOption("PatrolHistoryId", "visible", false);
  171. },
  172. onExported: function (e) {
  173. e.component.columnOption("PatrolHistoryId", "visible", true);
  174. },
  175. // ~~~ 2019.04.16. 엑셀출력기능 추가
  176. popupWidth: 720,
  177. promiseDataInSearchView: deferredForSearch.promise(),
  178. searchViewItems: _.compact([
  179. //{ id: 'PatrolGroupId', ignoreValue: 0, defaultValue: 0, value: patrolgroupIdForSerach, dataSource: patrolgroupsForSearch, handleChangedValue: handleBuildingInSearchView },
  180. // { id: 'CmPatrolPlan/GroupId', ignoreValue: 0, defaultValue: 0, value: patrolgroupIdForSerach, dataSource: patrolgroupsForSearch },
  181. // { id: 'CmPatrolPlan/CourseId', ignoreValue: 0, defaultValue: 0, value: patrolcourseIdForSerach, dataSource: patrolcoursesForSearch },
  182. // { id: 'CmPatrolPlan/Name' },
  183. { id: 'startDate', type: 'dateRange', isOnlyDate: true },
  184. //{ id: 'FmsWorkResult/CmUser/Name' },
  185. ]),
  186. handleViewShowing: function () {
  187. //budgetDataSource.load().done(function (pgResults) {
  188. //});
  189. patrolgroupDataSource.load().done(function (pgResults) {
  190. patrolgroups(pgResults);
  191. patrolgroupsForSearch(defaultSearchPatrolGroupArray.slice(0).concat(pgResults));
  192. patrolgroupIdForSerach(0);
  193. patrolcourseDataSource.load().done(function (pgResults) {
  194. patrolcourses(pgResults);
  195. patrolcoursesForSearch(defaultSearchPatrolCourseArray.slice(0).concat(pgResults));
  196. patrolcourseIdForSerach(0);
  197. deferredForSearch.resolve();
  198. });
  199. });
  200. },
  201. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  202. dataGrid.clearSelection();
  203. viewModel.isNewInPopup(false); //
  204. var data = clickRow.data;
  205. /*
  206. var dataModel = viewModel.dataModel;
  207. dataModel.PatrolGroupName = $KoSet(dataModel.PatrolGroupName, data['CmPatrolPlan/CmPatrolGroup/Name']);
  208. dataModel.PatrolCourseName = $KoSet(dataModel.PatrolCourseName, data['CmPatrolPlan/CmPatrolCourse/Name']);
  209. dataModel.Name = $KoSet(dataModel.Name, data['CmPatrolPlan/Name']);
  210. var eq = BWA.DataUtil.constructEqualFilter;
  211. var and = BWA.DataUtil.andFilter;
  212. PatrolCoursePosDataSource.filter([
  213. eq('SiteId', data.SiteId()),
  214. and,
  215. eq('PatrolHistoryId', data.PatrolHistoryId()),
  216. ]);
  217. PatrolCoursePosDataSource.load().done(function (poss) {
  218. //possInView(poss);
  219. //$('#gridContainer2').dxDataGrid('instance').refresh();
  220. //viewModel.visibleDeleteButton(false);
  221. //popupVisible(true);
  222. }); */
  223. var siteId = data.SiteId();
  224. var formatStr = 'YYYY-MM-DD HH:mm:ss';
  225. var startDate = moment(data.startDate()).startOf('day').format(formatStr);
  226. var endDate = moment(data.startDate()).endOf('day').format(formatStr);
  227. var url = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).urlFor('service');
  228. var url = url + '/Report/PatrolReportView.aspx' + '?SiteId=' + siteId + '&StartDate=' + startDate + '&EndDate=' + endDate;
  229. window.open(url);
  230. /*var eq = BWA.DataUtil.constructEqualFilter;
  231. var and = BWA.DataUtil.andFilter;
  232. //tempDate =
  233. PatrolHistoryDataSource.filter([
  234. eq('SiteId', data.SiteId()),
  235. and,
  236. ['startDate', '>=', moment(data.startDate()).startOf('day').toDate()],
  237. and,
  238. ['startDate', '<=', moment(data.startDate()).endOf('day').toDate()],
  239. ]);
  240. PatrolHistoryDataSource.load().done(function (poss) {
  241. //possInView(poss);
  242. //$('#gridContainer2').dxDataGrid('instance').refresh();
  243. //viewModel.visibleDeleteButton(false);
  244. //popupVisible(true);
  245. // 종화 작업을 위한 확인 코드 시작 2016
  246. var hdata = poss[0];
  247. // 첫번째 순번 -> 알아서 작성 poss 갯수만큼
  248. // 순찰계획명
  249. alert(hdata['CmPatrolSchedule/Name']());
  250. // 순찰조
  251. alert(hdata['CmPatrolSchedule/CmPatrolPlan/CmPatrolGroup/Name']());
  252. // 순찰코스
  253. alert(hdata['CmPatrolSchedule/CmPatrolPlan/CmPatrolCourse/Name']());
  254. // 시간
  255. alert(hdata.startDate());
  256. // 시간
  257. alert(hdata.endDate());
  258. // 결과
  259. alert(hdata['CmPatrolType/Name']());
  260. // 여기서 report 링크 !!
  261. }); */
  262. },
  263. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  264. //if( isNewInPopup() == false ) {
  265. // BWA.DataUtil.setArrayDataSourceFilter(patrolgroupDataSource, 'GroupId', dataViewModel.GroupId(), patrolgroups);
  266. //BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors);
  267. //}
  268. },
  269. viewHidden: function () {
  270. $SearchView.visibleObservable(false);
  271. visiblePopup(false);
  272. },
  273. handlePopupShowing: function (isNewInPopup, dataViewModel, selectedData) {
  274. /* if (isNewInPopup()) {
  275. dataViewModel.inDate(new Date());
  276. }*/
  277. },
  278. handleBeforeDelete: function (db) {
  279. /* var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  280. dataViewModel.SiteId = db.SiteId;
  281. dataViewModel.BuildingId = db.BuildingId;
  282. dataViewModel.FloorId = db.FloorId;
  283. dataViewModel.ZoneId = db.ZoneId;
  284. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemoveZoneTempHumiSet', dataViewModel);
  285. promise.done(function () {
  286. ;
  287. });*/
  288. },
  289. /*
  290. beforeInsertingDataViewModel: function (dataModel, dbModelId) {
  291. dataModel.inDate(new Date());
  292. var dfd = $.Deferred();
  293. //alert(dataModel.Name());
  294. if (_.isEmpty(dataModel.Name()) || dataModel.term() == null)
  295. dfd.resolve(false, '(*) 표시 항목은 필수 입력 사항 입니다!');
  296. return dfd.resolve(true);
  297. },
  298. beforeUpdateDataViewModel: function () {
  299. //handlePopupButtonSave: function () {
  300. if (_.isEmpty(viewModel.dataModel.Name())) {
  301. utils.toast.show('순찰계획명이 공백입니다.', 'error');
  302. return 0;
  303. }
  304. if (viewModel.dataModel.term() == null) {
  305. utils.toast.show('순찰주기가 공백입니다.', 'error');
  306. return 0;
  307. }
  308. // 수정시에 시간변경
  309. viewModel.dataModel.inDate(new Date());
  310. return 2;
  311. },
  312. */
  313. handleAfterInsert: function (db) {
  314. /*
  315. var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  316. dataViewModel.SiteId = db.SiteId;
  317. dataViewModel.BuildingId = db.BuildingId;
  318. dataViewModel.FloorId = db.FloorId;
  319. dataViewModel.ZoneId = db.ZoneId;
  320. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/AddZoneTempHumiSet', dataViewModel);
  321. promise.done(function () {
  322. ;
  323. });*/
  324. },
  325. });
  326. /*
  327. function getDefaultFloorForSearch() {
  328. return $SearchView.createDefaultArray( 'FloorId' );
  329. }
  330. floorDataSource.filter('BuildingId', -1); */
  331. // 콤보, text 등록먼저후 생기는 팝업에서 안보이는 문제해결
  332. viewModel.dataModel.PatrolGroupName = ko.observable();
  333. viewModel.dataModel.PatrolCourseName = ko.observable();
  334. viewModel.dataModel.Name = ko.observable();
  335. //viewModel.dataModel.GroupId = ko.observable();
  336. //viewModel.dataModel.CourseId= ko.observable();
  337. viewModel.patrolgroups = patrolgroups;
  338. viewModel.patrolcourses = patrolcourses;
  339. //viewModel.menuDataGridOptions = menuDataGridOptions;
  340. /*
  341. viewModel.popupInsertButtonOptions.action = function () {
  342. alert('insett');
  343. }*/
  344. return viewModel;
  345. };