4a94190af61efa8f41049e8e8cbc203d521d489f.svn-base 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. $(function () {
  2. 'use strict';
  3. var FfacilityClassForSearch = ko.observableArray();
  4. var FfacilityCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass');
  5. var FfacilityClass = ko.observableArray();
  6. BWA.Popup.Facility = BWA.Popup.Facility || {};
  7. BWA.Popup.Facility.create = window.$FacilitySearchPopup = function (viewModel, selectedFacilityData, options) {
  8. options = options || {};
  9. options.datagridId = options.datagridId || 'facilityDataGridForSearch';
  10. var facilityClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'),
  11. buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true),
  12. floorDataSource = BemsWebApplication.db.createDataSource('CmFloor'),
  13. zoneDataSource = BemsWebApplication.db.createDataSource('CmZone'),
  14. defaultSearchClassArray = $SearchView.createDefaultArray('FacilityClassId'),
  15. defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'),
  16. defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId'),
  17. deferredForSearch = new $.Deferred();
  18. var onSelectedFacilities = options.onSelectedFacilities, isMultipleSelect = options.isMultipleSelect;
  19. var facilityClassesForSearch = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  20. facilityClassValuesForSearch = [ko.observable(), ko.observable(), ko.observable()],
  21. buildingsForSearch = ko.observableArray(),
  22. floorsForSearch = ko.observableArray(),
  23. buildingIdForSearch = ko.observable(),
  24. floorIdForSearch = ko.observable();
  25. var dataViewModel = new BemsWebApplication.CmFacilityViewModel(),
  26. initialized = false,
  27. gridView,
  28. popupVisible = ko.observable(false),
  29. facilityOptions = BemsWebApplication.Factory.Facility,
  30. dataSource = BWA.DataUtil.createDataSource({
  31. dataSourceOptions: facilityOptions.getDataSourceForDataGrid()
  32. }, 'CmFacility');
  33. var dataGridOptions = utils.datagrid.defaultOptions({
  34. dxDataSource: dataSource,
  35. selectedSourceItem: dataViewModel,
  36. datagridId: options.datagridId,
  37. dbId: 'CmFacility',
  38. handleDataGridRowClick: function () {
  39. },
  40. columns: facilityOptions.getColumns([
  41. /* hcLee 2016 03 14
  42. { dataField: 'ClassName', width: '25%' },
  43. { dataField: 'Name', width: '30%' },
  44. { dataField: 'ManufactureModel', width: '15%' },
  45. { dataField: 'Location', width: '30%' } */
  46. {
  47. dataField: 'FirstClassId', width: '12%', caption: '시설(대)', alignment: 'center',
  48. customizeText: function (cellInfo) {
  49. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  50. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  51. return FfacilityClassForSearch()[i].Name();
  52. }
  53. }
  54. }
  55. },
  56. {
  57. dataField: 'SecondClassId', width: '12%', caption: '시설(중)', alignment: 'center',
  58. customizeText: function (cellInfo) {
  59. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  60. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  61. return FfacilityClassForSearch()[i].Name();
  62. }
  63. }
  64. }
  65. },
  66. {
  67. dataField: 'ThirdClassId', width: '12%', caption: '시설(소)', alignment: 'center',
  68. customizeText: function (cellInfo) {
  69. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  70. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  71. return FfacilityClassForSearch()[i].Name();
  72. }
  73. }
  74. }
  75. },
  76. { dataField: 'Name', width: '55%' },
  77. { dataField: 'ManufactureModel', width: '15%', visible: false },
  78. { dataField: 'CmFloor/Name', width: '9%' }
  79. ]),
  80. wordWrapEnabled: true,
  81. cellPrepared: BemsWebApplication.Factory.Facility.cellPrepared,
  82. //searchPanelPlaceHolder: '시설 검색',
  83. });
  84. if (isMultipleSelect) {
  85. dataGridOptions.selection = { mode: 'multiple', allowSelectAll: true };
  86. dataGridOptions.handleDataGridRowClick = function () { };
  87. }
  88. else {
  89. dataGridOptions.handleDataGridRowClick = function (id, dataGrid, clickRow) {
  90. var data = clickRow.data;
  91. if (!_.isUndefined(selectedFacilityData)) {
  92. selectedFacilityData({
  93. SiteId: data.SiteId(),
  94. FacilityCode: data.FacilityCode(),
  95. Name: data.Name(),
  96. FirstClassId: data.FirstClassId(),
  97. SecondClassId: data.SecondClassId(),
  98. ThirdClassId: data.ThirdClassId(),
  99. });
  100. }
  101. if (!_.isUndefined(onSelectedFacilities)) {
  102. onSelectedFacilities([BWA.DataUtil.convertViewModelToJS(data)]);
  103. }
  104. popupVisible(false);
  105. }
  106. }
  107. function initializeSearchClasses(onlyThird) {
  108. if (onlyThird === undefined || onlyThird === false) {
  109. facilityClassesForSearch[1](defaultSearchClassArray.slice(0));
  110. facilityClassValuesForSearch[1](0);
  111. }
  112. facilityClassesForSearch[2](defaultSearchClassArray.slice(0));
  113. facilityClassValuesForSearch[2](0);
  114. }
  115. var handleFirstClassChangedValueInSearchView = function (e) {
  116. if (e.value === 0) {
  117. initializeSearchClasses();
  118. return;
  119. }
  120. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClassesForSearch[1], defaultSearchClassArray);
  121. };
  122. var handleSecondClassChangedValueInSearchView = function (e) {
  123. if (e.value === 0) {
  124. initializeSearchClasses(true);
  125. return;
  126. }
  127. BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClassesForSearch[2], defaultSearchClassArray);
  128. };
  129. var handleBuildingInSearchView = function (e) {
  130. if (e.value === 0) {
  131. floorsForSearch(defaultSearchFloorArray.slice(0));
  132. floorIdForSearch(0);
  133. return 0;
  134. }
  135. BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, floorsForSearch, defaultSearchFloorArray);
  136. }
  137. function handlePopupShowing() {
  138. FfacilityCodeClassDataSource.filter([
  139. ['SiteId', '=', BWA.UserInfo.SiteId()]
  140. ]);
  141. $.when(
  142. FfacilityCodeClassDataSource.load()
  143. ).done(function (Result) {
  144. FfacilityClass = ko.observableArray();
  145. var cnt = 0;
  146. for (var i = 0; i < Result.length; i++) {
  147. FfacilityClass.push(Result[i]);
  148. }
  149. FfacilityClassForSearch($SearchView.createArrayOfSelectBox('FacilityClassId', FfacilityClass()));
  150. });
  151. facilityClassDataSource.filter([
  152. ['SiteId', '=', BWA.UserInfo.SiteId()],
  153. 'and',
  154. ['ParentFacilityClassId', '=', null]
  155. ]);
  156. $.when(facilityClassDataSource.load(), buildingDataSource.load()).done(function (result1, result2) {
  157. // hcLee 2016 02 01
  158. //facilityClassValuesForSearch[0](0);
  159. //facilityClassValuesForSearch[1](0);
  160. //facilityClassValuesForSearch[2](0);
  161. // hcLee 2016 02 01
  162. //if (initialized === false) {
  163. facilityClassesForSearch[0]($SearchView.createArrayOfSelectBox('FacilityClassId', result1[0]));
  164. initializeSearchClasses();
  165. buildingsForSearch($SearchView.createArrayOfSelectBox('BuildingId', result2[0]));
  166. floorsForSearch($SearchView.createArrayOfSelectBox('FloorId', undefined));
  167. // }
  168. deferredForSearch.resolve();
  169. });
  170. }
  171. function handlePopupShown() {
  172. if (initialized === false) {
  173. gridView = $('#facilityDataGridForSearch').dxDataGrid('instance');
  174. $("#facilityDataGridForSearch").dxDataGrid({
  175. paging: {
  176. pageSize: 14
  177. }
  178. });
  179. initialized = true;
  180. }
  181. searchView.show();
  182. gridView.clearSelection();
  183. }
  184. function handlePopupButtonSelect() {
  185. var array = utils.datagrid.getSelectedRowsData(options.datagridId);
  186. if (!_.isUndefined(onSelectedFacilities)) {
  187. onSelectedFacilities(array);
  188. }
  189. if (!_.isUndefined(selectedFacilityData)) {
  190. selectedFacilityData(array);
  191. }
  192. popupVisible(false);
  193. }
  194. function handlePopupButtonClose() {
  195. popupVisible(false);
  196. }
  197. var toolbarItems = [
  198. { location: 'before', text: '찾기' },
  199. { location: 'after', widget: 'button', options: { text: $G('select'), icon: 'save', visible: isMultipleSelect, clickAction: handlePopupButtonSelect } },
  200. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }
  201. ];
  202. var popupOptions = {
  203. width: '950px',
  204. height: '600px',
  205. visible: popupVisible,
  206. closeOnOutsideClick: true,
  207. showingAction: handlePopupShowing,
  208. shownAction: handlePopupShown,
  209. animation: window.utils.popup.createAnimation(),
  210. paging: { pageSize: 14 }
  211. };
  212. var searchView = BWA.Popup.SearchView.create({
  213. parentPopupId: 'popupSearchFacility',
  214. parentPopupVisible: popupVisible,
  215. promiseDataForSearch: deferredForSearch,
  216. searchItems: [
  217. { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: facilityClassValuesForSearch[0], dataSource: facilityClassesForSearch[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
  218. { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: facilityClassValuesForSearch[1], dataSource: facilityClassesForSearch[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
  219. { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: facilityClassValuesForSearch[2], dataSource: facilityClassesForSearch[2] },
  220. { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: buildingIdForSearch, dataSource: buildingsForSearch, handleChangedValue: handleBuildingInSearchView },
  221. { id: 'FloorId', ignoreValue: 0, defaultValue: 0, withCheckId: 'BuildingId', value: floorIdForSearch, dataSource: floorsForSearch },
  222. { id: 'Name' }
  223. ],
  224. handleInitializeUpdate: function () {
  225. },
  226. handleSearch: function (filter, searchItems) {
  227. var eq = BWA.DataUtil.constructEqualFilter;
  228. var and = BWA.DataUtil.andFilter;
  229. filter = [
  230. eq('SiteId', BWA.UserInfo.SiteId())
  231. ].concat(filter)
  232. gridView.filter(filter);
  233. // console.log(filter);
  234. }
  235. });
  236. return {
  237. dataModel: dataViewModel,
  238. dataSource: dataSource,
  239. popupOptions: popupOptions,
  240. searchView: searchView,
  241. toolbarItems: toolbarItems,
  242. dataGridOptions: dataGridOptions,
  243. show: function (callbackOnSelectedFacilities) {
  244. if (_.isFunction(callbackOnSelectedFacilities)) {
  245. onSelectedFacilities = callbackOnSelectedFacilities;
  246. }
  247. popupVisible(true);
  248. }
  249. };
  250. };
  251. // 팝업에서 사용될 때, 선택된 시설 목록을 삭제하는 기능
  252. BWA.Popup.Facility.getDeleteSelectedFacilitiesFunc = function (koGridView, koDataArray) {
  253. return function handleDeleteSelectedFacilities() {
  254. var rows = koGridView().getSelectedRowsData();
  255. if (_.isEmpty(rows)) {
  256. utils.toast.show('선택된 시설이 없습니다.', 'error');
  257. return;
  258. }
  259. _.each(rows, function (row) {
  260. var array = koDataArray();
  261. var length = array.length;
  262. var id = row.FacilityCode();
  263. for (var i = 0 ; i < length ; i++) {
  264. if (id === array[i].FacilityCode()) {
  265. array.splice(i, 1);
  266. break;
  267. }
  268. }
  269. });
  270. koGridView().refresh();
  271. }
  272. };
  273. BWA.Popup.Facility.getReadOnlyDataGridOptions = function (dataSource, koVisible) {
  274. FfacilityCodeClassDataSource.filter([
  275. ['SiteId', '=', BWA.UserInfo.SiteId()]
  276. ]);
  277. $.when(
  278. FfacilityCodeClassDataSource.load()
  279. ).done(function (Result) {
  280. FfacilityClass = ko.observableArray();
  281. var cnt = 0;
  282. for (var i = 0; i < Result.length; i++) {
  283. FfacilityClass.push(Result[i]);
  284. }
  285. FfacilityClassForSearch($SearchView.createArrayOfSelectBox('FacilityClassId', FfacilityClass()));
  286. });
  287. var facilityColumns = BWA.Factory.Facility.getColumns([
  288. {
  289. dataField: 'FirstClassId', width: '15%', caption: '시설(대)', alignment: 'center',
  290. customizeText: function (cellInfo) {
  291. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  292. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  293. return FfacilityClassForSearch()[i].Name();
  294. }
  295. }
  296. }
  297. },
  298. {
  299. dataField: 'SecondClassId', width: '15%', caption: '시설(중)', alignment: 'center',
  300. customizeText: function (cellInfo) {
  301. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  302. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  303. return FfacilityClassForSearch()[i].Name();
  304. }
  305. }
  306. }
  307. },
  308. {
  309. dataField: 'ThirdClassId', width: '15%', caption: '시설(소)', alignment: 'center',
  310. customizeText: function (cellInfo) {
  311. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  312. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  313. return FfacilityClassForSearch()[i].Name();
  314. }
  315. }
  316. }
  317. },
  318. { dataField: 'FacilityCode', width: '30%', visible: false },
  319. { dataField: 'Name', width: '55%' }
  320. ]);
  321. return utils.datagrid.defaultOptions({
  322. width: 675,
  323. visible: koVisible,
  324. pager: {
  325. showPageSizeSelector: false,
  326. allowedPageSizes: [],
  327. visible: true
  328. },
  329. dataSource: dataSource,
  330. columns: facilityColumns
  331. })
  332. };
  333. BWA.Popup.Facility.getModifiableDataGridOptions = function (dataSource, koVisible, koGridView) {
  334. var facilityColumns = BWA.Factory.Facility.getColumns([
  335. {
  336. dataField: 'FirstClassId', width: '15%', caption: '시설(대)', alignment: 'center',
  337. customizeText: function (cellInfo) {
  338. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  339. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  340. return FfacilityClassForSearch()[i].Name();
  341. }
  342. }
  343. }
  344. },
  345. {
  346. dataField: 'SecondClassId', width: '15%', caption: '시설(중)', alignment: 'center',
  347. customizeText: function (cellInfo) {
  348. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  349. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  350. return FfacilityClassForSearch()[i].Name();
  351. }
  352. }
  353. }
  354. },
  355. {
  356. dataField: 'ThirdClassId', width: '15%', caption: '시설(소)', alignment: 'center',
  357. customizeText: function (cellInfo) {
  358. for (var i = 1; i < FfacilityClassForSearch().length; i++) {
  359. if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) {
  360. return FfacilityClassForSearch()[i].Name();
  361. }
  362. }
  363. }
  364. },
  365. { dataField: 'FacilityCode', width: '30%', visible: false },
  366. { dataField: 'Name', width: '55%' }
  367. ]);
  368. return utils.datagrid.defaultOptions({
  369. width: 675,
  370. visible: koVisible,
  371. pager: {
  372. showPageSizeSelector: false,
  373. allowedPageSizes: [],
  374. visible: true
  375. },
  376. dataSource: dataSource,
  377. selection: { mode: 'multiple', allowSelectAll: true },
  378. columns: facilityColumns,
  379. contentReadyAction: function (e) {
  380. koGridView(e.component);
  381. },
  382. })
  383. };
  384. });