2220b3da228da476ec38e4888f1d82329203b250.svn-base 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. BemsWebApplication.PatrolPos = function (params, viewInfo) {
  2. "use strict";
  3. var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true),
  4. floorDataSource = BemsWebApplication.db.createDataSource('CmFloor', true);
  5. var buildings = ko.observableArray(),
  6. floors = ko.observableArray();
  7. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;
  8. var buildingsForSearch = ko.observableArray(),
  9. floorsForSearch = ko.observableArray(),
  10. buildingIdForSerach = ko.observable(),
  11. floorIdForSerach = ko.observable(),
  12. defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'),
  13. defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId');
  14. var deferredForSearch = new $.Deferred();
  15. var CmPatrolPosDataSource = BemsWebApplication.db.createDataSource('CmPatrolPos');
  16. var PatrolPosInfo = ko.observableArray();
  17. var RowName, RowBuildingId, RowFloorId;
  18. function handleBuildingInSearchView(e) {
  19. if (e.value === 0) {
  20. floorsForSearch(getDefaultFloorForSearch());
  21. }
  22. else {
  23. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, floorsForSearch, getDefaultFloorForSearch());
  24. }
  25. floorIdForSerach(0);
  26. }
  27. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolPos', {
  28. rowAlternationEnabled: true,
  29. /*
  30. editing: {
  31. editMode: 'batch',
  32. editEnabled: true,
  33. //removeEnabled: true,
  34. //insertEnabled: true
  35. },*/
  36. dataSourceOptions: {
  37. select: ['SiteId', 'FloorId', 'BuildingId', 'PosId', 'Name', 'CmBuilding/Name', 'CmFloor/Name', 'PosDesc', 'TagId'],
  38. expand: ['CmBuilding', 'CmFloor'],
  39. extendOptions: {
  40. forceOriginalField: true,
  41. }
  42. },
  43. columns: [
  44. { dataField: 'PosId', caption: $G('number'), width: '10%', alignment: 'center', sortOrder: 'desc' },
  45. /*
  46. { dataField: 'CmBuilding/Name', caption: $G('buildingName'), width: '22%', alignment: 'center', allowEditing: false },
  47. { dataField: 'CmFloor/Name', caption: $G('floorName'), width: '23%', alignment: 'center', allowEditing: false },
  48. { dataField: 'Name', caption: $G('zoneName'), width: '40%', alignment: 'center', allowEditing: false }, */
  49. { dataField: 'CmBuilding/Name', caption: $G('buildingName'), width: '20%', alignment: 'center' },
  50. { dataField: 'CmFloor/Name', caption: $G('floorName'), width: '20%', alignment: 'center' },
  51. { dataField: 'Name', caption: '순찰지점명', width: '30%', alignment: 'center' },
  52. { dataField: 'TagId', caption: '지점TAG ID', width: '30%', alignment: 'center' },
  53. { dataField: 'PosDesc', caption: '설명', width: '30%', alignment: 'center' },
  54. //{ dataField: 'Target_temperature', caption: '목표온도', width: '40%', alignment: 'center' },
  55. //{ dataField: 'Target_humidity', caption: '목표습도', width: '40%', alignment: 'center' }
  56. //utils.datagrid.columnIsUse( '15%' )
  57. ],
  58. popupWidth: 480,
  59. promiseDataInSearchView: deferredForSearch.promise(),
  60. searchViewItems: [
  61. { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: buildingIdForSerach, dataSource: buildingsForSearch, handleChangedValue: handleBuildingInSearchView },
  62. { id: 'FloorId', ignoreValue: 0, defaultValue: 0, value: floorIdForSerach, dataSource: floorsForSearch }, //withCheckId: 'BuildingId',
  63. { id: 'Name' }
  64. ],
  65. handleViewShowing: function () {
  66. buildingDataSource.load().done(function (buildingResults) {
  67. buildings(buildingResults);
  68. //buildingsForSearch( $SearchView.createArrayOfSelectBox( 'BuildingId', buildings() ) );
  69. //floorsForSearch( getDefaultFloorForSearch() );
  70. buildingsForSearch(defaultSearchBuildingArray.slice(0).concat(buildingResults));
  71. floorsForSearch(defaultSearchFloorArray.slice(0));
  72. buildingIdForSerach(0);
  73. floorIdForSerach(0);
  74. deferredForSearch.resolve();
  75. });
  76. },
  77. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  78. dataGrid.clearSelection();
  79. // hcLee 2016 02 16 키필드가 콤보로 제공될때 등록시만 보이고 수정시에는 안보기에 하기 위하여 꼭 필요 !!!
  80. viewModel.isNewInPopup(false); //
  81. var data = clickRow.data;
  82. var dataModel = viewModel.dataModel;
  83. dataModel.BuildingName = $KoSet(dataModel.BuildingName, data['CmBuilding/Name']);
  84. dataModel.FloorName = $KoSet(dataModel.FloorName, data['CmFloor/Name']);
  85. RowName = data.Name;
  86. RowFloorId = data.FloorId;
  87. RowBuildingId = data.BuildingId;
  88. popupVisible(true);
  89. },
  90. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  91. if (isNewInPopup() == false) {
  92. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors);
  93. }
  94. },
  95. viewHidden: function () {
  96. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  97. visiblePopup(false);
  98. },
  99. handlePopupShowing: function (that) {
  100. CmPatrolPosDataSource.filter([
  101. ["SiteId", "=", BWA.UserInfo.SiteId()]
  102. ]);
  103. CmPatrolPosDataSource.load().done(function (result) {
  104. PatrolPosInfo(result);
  105. });
  106. },
  107. handleBeforeDelete: function (db) {
  108. /* var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  109. dataViewModel.SiteId = db.SiteId;
  110. dataViewModel.BuildingId = db.BuildingId;
  111. dataViewModel.FloorId = db.FloorId;
  112. dataViewModel.ZoneId = db.ZoneId;
  113. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemoveZoneTempHumiSet', dataViewModel);
  114. promise.done(function () {
  115. ;
  116. });*/
  117. },
  118. beforeInsertingDataViewModel: function (dataModel, dbModelId) {
  119. var dfd = $.Deferred();
  120. var isDuplicated = false;
  121. for (var i = 0; i < PatrolPosInfo().length; i++) {
  122. if (dataModel.Name() == PatrolPosInfo()[i].Name() && dataModel.BuildingId() == PatrolPosInfo()[i].BuildingId() && dataModel.FloorId() == PatrolPosInfo()[i].FloorId()) {
  123. isDuplicated = true;
  124. }
  125. }
  126. if (!BWA.DataUtil.isValidInputValue(dataModel.Name()))
  127. return dfd.resolve(false, '저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)');
  128. else {
  129. if (isDuplicated)
  130. return dfd.resolve(false, '이미 동일 정보가 존재합니다.');
  131. else
  132. return dfd.resolve(true);
  133. }
  134. },
  135. beforeUpdateDataViewModel: function () {
  136. var isDuplicated = false;
  137. for (var i = 0; i < PatrolPosInfo().length; i++) {
  138. if (viewModel.dataModel.Name() == PatrolPosInfo()[i].Name() && (RowName() != PatrolPosInfo()[i].Name())
  139. && viewModel.dataModel.BuildingId() == PatrolPosInfo()[i].BuildingId() && (RowBuildingId() != PatrolPosInfo()[i].BuildingId())
  140. && viewModel.dataModel.FloorId() == PatrolPosInfo()[i].FloorId() && (RowFloorId() != PatrolPosInfo()[i].FloorId())) {
  141. isDuplicated = true;
  142. }
  143. }
  144. if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) {
  145. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  146. return 0;
  147. }
  148. else {
  149. if (isDuplicated) {
  150. utils.toast.show('이미 동일 이름이 존재합니다.', 'error');
  151. return 0;
  152. }
  153. else
  154. return 2;
  155. }
  156. },
  157. handleAfterInsert: function (db) {
  158. /*
  159. var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  160. dataViewModel.SiteId = db.SiteId;
  161. dataViewModel.BuildingId = db.BuildingId;
  162. dataViewModel.FloorId = db.FloorId;
  163. dataViewModel.ZoneId = db.ZoneId;
  164. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/AddZoneTempHumiSet', dataViewModel);
  165. promise.done(function () {
  166. ;
  167. });*/
  168. },
  169. });
  170. function getDefaultFloorForSearch() {
  171. return $SearchView.createDefaultArray('FloorId');
  172. }
  173. floorDataSource.filter('BuildingId', -1);
  174. // 콤보, text 등록먼저후 생기는 팝업에서 안보이는 문제해결
  175. viewModel.dataModel.BuildingName = ko.observable();
  176. viewModel.dataModel.FloorName = ko.observable();
  177. viewModel.buildings = buildings;
  178. //viewModel.buildingsForSearch = buildingsForSearch;
  179. viewModel.floors = floors;
  180. //viewModel.floorsForSearch = floorsForSearch;
  181. viewModel.handleSelectBoxChangeBuilding = function (e) {
  182. floorDataSource.filter([
  183. eq('SiteId', BWA.UserInfo.SiteId()),
  184. and,
  185. eq('BuildingId', e.value)
  186. ]);
  187. $.when(floorDataSource.load()
  188. ).done(function (Result) {
  189. floors(Result);
  190. });
  191. //BWA.DataUtil.setArrayDataSourceFilter( floorDataSource, '', , );
  192. viewModel.dataModel.FloorId(null);
  193. }
  194. /*
  195. viewModel.searchViewPopup = BWA.Popup.SearchView.create({
  196. parentPopupId: 'popupDetail',
  197. parentPopupVisible: viewModel.popupVisible,
  198. handleSearch: function (filter, searchItems) {
  199. }
  200. });*/
  201. /*
  202. viewModel.popupInsertButtonOptions.action = function () {
  203. alert('insett');
  204. }*/
  205. return viewModel;
  206. };