704b812cf0dbb484618db351d7f81247202d8286.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. BemsWebApplication.Zone = function (params, viewInfo) {
  2. "use strict";
  3. var ZoneInfo = ko.observableArray();
  4. var CmZoneDataSource = BemsWebApplication.db.createDataSource('CmZone');
  5. var RowBuildingId;
  6. var RowName, RowFloorId;
  7. var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true),
  8. floorDataSource = BemsWebApplication.db.createDataSource('CmFloor', true);
  9. var buildings = ko.observableArray(),
  10. floors = ko.observableArray();
  11. var buildingsForSearch = ko.observableArray(),
  12. floorsForSearch = ko.observableArray(),
  13. buildingIdForSerach = ko.observable(),
  14. floorIdForSerach = ko.observable(),
  15. defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'),
  16. defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId');
  17. var deferredForSearch = new $.Deferred();
  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, 'CmZone', {
  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', 'ZoneId', 'Name', 'CmBuilding/Name', 'CmFloor/Name', 'Target_temperature', 'Target_humidity'],
  38. expand: ['CmBuilding', 'CmFloor'],
  39. extendOptions: {
  40. forceOriginalField: true,
  41. }
  42. },
  43. columns: [
  44. { dataField: 'ZoneId', caption: $G('number'), width: '15%', 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: '22%', alignment: 'center' },
  50. { dataField: 'CmFloor/Name', caption: $G('floorName'), width: '23%', alignment: 'center' },
  51. { dataField: 'Name', caption: $G('zoneName'), width: '40%', alignment: 'center' },
  52. //{ dataField: 'Target_temperature', caption: '목표온도', width: '40%', alignment: 'center' },
  53. //{ dataField: 'Target_humidity', caption: '목표습도', width: '40%', alignment: 'center' }
  54. //utils.datagrid.columnIsUse( '15%' )
  55. ],
  56. paging: {
  57. pageSize: 18
  58. },
  59. pager: {},
  60. // 2019.04.17 엑셀 출력 기능 추가 ~~~
  61. "export": {
  62. enabled: true,
  63. fileName: '구역 정보 목록'
  64. },
  65. onExporting: function (e) {
  66. e.component.columnOption("ZoneId", "visible", false);
  67. },
  68. onExported: function (e) {
  69. e.component.columnOption("ZoneId", "visible", true);
  70. },
  71. // ~~~ 2019.04.17 엑셀 출력 기능 추가
  72. popupWidth: 480,
  73. promiseDataInSearchView: deferredForSearch.promise(),
  74. searchViewItems: [
  75. { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: buildingIdForSerach, dataSource: buildingsForSearch, handleChangedValue: handleBuildingInSearchView },
  76. { id: 'FloorId', ignoreValue: 0, defaultValue: 0, value: floorIdForSerach, dataSource: floorsForSearch }, //withCheckId: 'BuildingId',
  77. { id: 'Name' }
  78. ],
  79. handleViewShowing: function () {
  80. buildingDataSource.load().done(function (buildingResults) {
  81. buildings(buildingResults);
  82. //buildingsForSearch( $SearchView.createArrayOfSelectBox( 'BuildingId', buildings() ) );
  83. //floorsForSearch( getDefaultFloorForSearch() );
  84. buildingsForSearch(defaultSearchBuildingArray.slice(0).concat(buildingResults));
  85. floorsForSearch(defaultSearchFloorArray.slice(0));
  86. buildingIdForSerach(0);
  87. floorIdForSerach(0);
  88. deferredForSearch.resolve();
  89. });
  90. },
  91. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  92. dataGrid.clearSelection();
  93. // hcLee 2016 02 16 키필드가 콤보로 제공될때 등록시만 보이고 수정시에는 안보기에 하기 위하여 꼭 필요 !!!
  94. viewModel.isNewInPopup(false);
  95. //$("#textBuildingName").show();
  96. var data = clickRow.data;
  97. var dataModel = viewModel.dataModel;
  98. dataModel.BuildingName = $KoSet(dataModel.BuildingName, data['CmBuilding/Name']);
  99. dataModel.FloorName = $KoSet(dataModel.FloorName, data['CmFloor/Name']);
  100. RowBuildingId = data.BuildingId;
  101. RowFloorId = data.FloorId;
  102. RowName = data.Name;
  103. //alert(dataModel.BuildingName());
  104. popupVisible(true);
  105. },
  106. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  107. if (isNewInPopup() == false) {
  108. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors);
  109. }
  110. },
  111. viewHidden: function () {
  112. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  113. visiblePopup(false);
  114. },
  115. handleBeforeDelete: function (db) {
  116. //alert('handleAfterDelete ' + db.SiteId + db.BuildingId + db.FloorId + db.ZoneId);
  117. var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  118. dataViewModel.SiteId = db.SiteId;
  119. dataViewModel.BuildingId = db.BuildingId;
  120. dataViewModel.FloorId = db.FloorId;
  121. dataViewModel.ZoneId = db.ZoneId;
  122. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemoveZoneTempHumiSet', dataViewModel);
  123. promise.done(function () {
  124. });
  125. },
  126. // 이름 중복 방지
  127. handlePopupShowing: function () {
  128. CmZoneDataSource.filter([
  129. ["SiteId", "=", BWA.UserInfo.SiteId()]
  130. ]);
  131. CmZoneDataSource.load().done(function (result) {
  132. ZoneInfo(result);
  133. });
  134. },
  135. beforeInsertingDataViewModel: function (dataModel, dbModelId) {
  136. var dfd = $.Deferred();
  137. var isDuplicated = false;
  138. for (var i = 0; i < ZoneInfo().length; i++) {
  139. if (dataModel.BuildingId() == ZoneInfo()[i].BuildingId() && dataModel.FloorId() == ZoneInfo()[i].FloorId() && dataModel.Name() == ZoneInfo()[i].Name()) {
  140. isDuplicated = true;
  141. break;
  142. }
  143. }
  144. if (!BWA.DataUtil.isValidInputValue(dataModel.BuildingId())
  145. || !BWA.DataUtil.isValidInputValue(dataModel.FloorId())
  146. || !BWA.DataUtil.isValidInputValue(dataModel.Name()))
  147. return dfd.resolve(false, '저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)');
  148. else {
  149. if (isDuplicated)
  150. return dfd.resolve(false, '이미 동일 정보가 존재합니다 (빌딩 명칭, 층 명칭, 구역 명칭 확인 필요)');
  151. else
  152. return dfd.resolve(true);
  153. }
  154. },
  155. beforeUpdateDataViewModel: function () {
  156. var isDuplicated = false;
  157. for (var i = 0; i < ZoneInfo().length; i++) {
  158. if (viewModel.dataModel.Name() == ZoneInfo()[i].Name() && RowName() != ZoneInfo()[i].Name()
  159. && viewModel.dataModel.BuildingId() == ZoneInfo()[i].BuildingId() && viewModel.dataModel.FloorId() == ZoneInfo()[i].FloorId()) {
  160. isDuplicated = true;
  161. break;
  162. }
  163. }
  164. if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())
  165. || !BWA.DataUtil.isValidInputValue(viewModel.dataModel.FloorId())
  166. || !BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) {
  167. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  168. return 0;
  169. }
  170. else {
  171. if (isDuplicated) {
  172. utils.toast.show('이미 동일 명칭이 존재합니다 (빌딩 명칭, 층 명칭, 구역 명칭 확인 필요)', 'error');
  173. return 0;
  174. }
  175. else
  176. return 2;
  177. }
  178. },
  179. handleAfterInsert: function (db) {
  180. //alert('handleAfterInsert' + db.SiteId + db.BuildingId + db.FloorId + db.ZoneId);
  181. //var data = new CmZoneTempHumiSet();
  182. var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel']();
  183. dataViewModel.SiteId = db.SiteId;
  184. dataViewModel.BuildingId = db.BuildingId;
  185. dataViewModel.FloorId = db.FloorId;
  186. dataViewModel.ZoneId = db.ZoneId;
  187. /*
  188. dataViewModel.T1 = 0;
  189. dataViewModel.T2 = 0;
  190. dataViewModel.T3 = 0;
  191. dataViewModel.T4 = 0;
  192. dataViewModel.T5 = 0;
  193. dataViewModel.T6 = 0;
  194. dataViewModel.T7 = 0;
  195. dataViewModel.T8 = 0;
  196. dataViewModel.T9 = 0;
  197. dataViewModel.T10 = 0;
  198. dataViewModel.T11 = 0;
  199. dataViewModel.T12 = 0;
  200. dataViewModel.H1 = 0;
  201. dataViewModel.H2 = 0;
  202. dataViewModel.H3 = 0;
  203. dataViewModel.H4 = 0;
  204. dataViewModel.H5 = 0;
  205. dataViewModel.H6 = 0;
  206. dataViewModel.H7 = 0;
  207. dataViewModel.H8 = 0;
  208. dataViewModel.H9 = 0;
  209. dataViewModel.H10 = 0;
  210. dataViewModel.H11 = 0;
  211. dataViewModel.H12 = 0;*/
  212. //r promise = BemsWebApplication.api.post('BemsMonitoringPoint/AddZoneTempHumi', dataViewModel.toJS());
  213. var promise = BemsWebApplication.api.post('BemsMonitoringPoint/AddZoneTempHumiSet', dataViewModel);
  214. promise.done(function () {
  215. ;
  216. });
  217. },
  218. });
  219. function getDefaultFloorForSearch() {
  220. return $SearchView.createDefaultArray('FloorId');
  221. }
  222. floorDataSource.filter('BuildingId', -1);
  223. //viewModel.dataModel.ClassName = ko.observable();
  224. viewModel.dataModel.BuildingName = ko.observable();
  225. viewModel.dataModel.FloorName = ko.observable();
  226. viewModel.buildings = buildings;
  227. //viewModel.buildingsForSearch = buildingsForSearch;
  228. viewModel.floors = floors;
  229. //viewModel.floorsForSearch = floorsForSearch;
  230. viewModel.handleSelectBoxChangeBuilding = function (e) {
  231. //BWA.DataUtil.setArrayDataSourceFilter( floorDataSource, 'BuildingId', e.value, floors );
  232. if (viewModel.dataModel.BuildingId() != null) {
  233. floorDataSource.filter([
  234. ['SiteId', '=', BWA.UserInfo.SiteId()],
  235. "and",
  236. ['BuildingId', '=', viewModel.dataModel.BuildingId()]
  237. ]);
  238. }
  239. floorDataSource.load().done(function (result) {
  240. floors(result);
  241. });
  242. viewModel.dataModel.FloorId(null);
  243. }
  244. viewModel.searchViewPopup = BWA.Popup.SearchView.create({
  245. parentPopupId: 'popupDetail',
  246. parentPopupVisible: viewModel.popupVisible,
  247. handleSearch: function (filter, searchItems) {
  248. }
  249. });
  250. /*
  251. viewModel.popupInsertButtonOptions.action = function () {
  252. alert('insett');
  253. }*/
  254. return viewModel;
  255. };