54085c283f7c44c9522a0cc018913a805bc6b7d3.svn-base 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. $(function () {
  2. 'use strict';
  3. var materialClassForSearch = ko.observableArray();
  4. var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');
  5. var UserGroupDataSource = BemsWebApplication.db.createDataSource('CmUserGroupPermission');
  6. var first = true;
  7. var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId');
  8. var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  9. var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()];
  10. var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  11. BWA.Popup.Material = BWA.Popup.Material || {};
  12. BWA.Popup.Material.create = function (viewModel, options) {
  13. options = options || {};
  14. options.datagridId = options.datagridId || 'materialDataGridForSearch';
  15. var onSelectedMaterials = options.onSelectedMaterials, isMultipleSelect = options.isMultipleSelect;
  16. //var dataViewModel = new BemsWebApplication.FmsMaterialViewModel(),
  17. var dataViewModel = new BemsWebApplication.FmsMaterialExViewModel(),
  18. initialized = false,
  19. gridView,
  20. popupVisible = ko.observable(false),
  21. materialFactory = BemsWebApplication.Factory.Material;
  22. //var dataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: materialFactory.getDataSourceForDataGrid() }, 'FmsMaterial');
  23. var MenuPermission;
  24. var dataSource = BWA.DataUtil.createDataSource({
  25. dataSourceOptions: {
  26. store: BemsWebApplication.odata.FmsMaterialEx,
  27. select: [
  28. 'SiteId',
  29. 'BusinessFieldId',
  30. 'MaterialId',
  31. 'MaterialCode',
  32. 'Name',
  33. 'FirstClassId',
  34. 'SecondClassId',
  35. 'ThirdClassId',
  36. 'LocationId',
  37. 'MaterialTypeId',
  38. 'TradeCompanyId',
  39. 'WarehouseId',
  40. 'Rfid',
  41. 'Unit',
  42. 'DurableYears',
  43. 'ReasonableStockCount',
  44. 'Manufacturer',
  45. 'Standard',
  46. 'FinalPrice',
  47. 'ImageFileId',
  48. 'Note',
  49. 'IsDiscontinued',
  50. 'IsUse',
  51. 'FinalStockCount',
  52. 'FinalTotalStockAmount',
  53. 'StockCount',
  54. 'StockAmount',
  55. ],
  56. },
  57. });
  58. var materialClass = ko.observableArray();
  59. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;
  60. var userInfo = BWA.UserInfo;
  61. //자재 검색시 나타나는 팝업은 공통 및 자신이 포함된 비즈니스 영역만 해당됨
  62. for (var i = 0; i < BWA.UserInfo.MenuPermissions().length; i++) {
  63. if (BWA.UserInfo.MenuPermissions()[i].MenuId == 'PurchaseRequest') {
  64. MenuPermission = BWA.UserInfo.MenuPermissions()[i].MenuPermission;
  65. break;
  66. }
  67. }
  68. if (MenuPermission >= 4) {
  69. dataSource.filter([
  70. eq('SiteId', userInfo.SiteId()),
  71. and,
  72. [
  73. eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()),
  74. 'or',
  75. eq('BusinessFieldId', 1)
  76. ]
  77. ]);
  78. }
  79. else {
  80. dataSource.filter([
  81. eq('SiteId', userInfo.SiteId())
  82. ]);
  83. }
  84. var dataGridOptions = utils.datagrid.defaultOptions({
  85. dxDataSource: dataSource,
  86. selectedSourceItem: dataViewModel,
  87. //datagridId: options.datagridId,
  88. //dbId: 'FmsMaterialEx',
  89. handleDataGridRowClick: function () {
  90. },
  91. //columns: materialFactory.getColumns([
  92. // //{ dataField: 'ClassName', width: '25%' },
  93. // { dataField: 'MaterialCode', width: '30%' },
  94. // { dataField: 'Name', width: '55%' },
  95. // //{ dataField: 'StockCount', width: '15%' , caption: '재고수량', alignment: 'center'}
  96. //]),
  97. columns: [
  98. //{ dataField: 'ClassName', width: '25%' },
  99. { dataField: 'MaterialCode', width: '30%', caption: '자재코드', alignment: 'center', visible: false },
  100. {
  101. dataField: 'FirstClassId', width: '19%', caption: '자재(대)', alignment: 'center',
  102. customizeText: function (cellInfo) {
  103. for (var i = 1; i < materialClassForSearch().length; i++) {
  104. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  105. return materialClassForSearch()[i].Name();
  106. }
  107. }
  108. }
  109. },
  110. {
  111. dataField: 'SecondClassId', width: '19%', caption: '자재(중)', alignment: 'center',
  112. customizeText: function (cellInfo) {
  113. for (var i = 1; i < materialClassForSearch().length; i++) {
  114. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  115. return materialClassForSearch()[i].Name();
  116. }
  117. }
  118. }
  119. },
  120. {
  121. dataField: 'ThirdClassId', width: '19%', caption: '자재(소)', alignment: 'center',
  122. customizeText: function (cellInfo) {
  123. if (cellInfo.value == null) {
  124. return;
  125. }
  126. else {
  127. for (var i = 1; i < materialClassForSearch().length; i++) {
  128. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  129. return materialClassForSearch()[i].Name();
  130. }
  131. }
  132. }
  133. }
  134. },
  135. { dataField: 'Name', width: '35%', caption: '자재명', alignment: 'center' },
  136. { dataField: 'Standard', width: '35%', caption: '규격', alignment: 'center' },
  137. { dataField: 'Unit', width: '15%', caption: '단위', alignment: 'center' },
  138. { dataField: 'StockCount', width: '15%', caption: '재고수량', alignment: 'center', format: 'currency' }
  139. ],
  140. paging: {
  141. pageSize: 15,
  142. enabled: false
  143. },
  144. wordWrapEnabled: true,
  145. cellPrepared: BemsWebApplication.Factory.Material.cellPrepared
  146. });
  147. if (isMultipleSelect) {
  148. dataGridOptions.selection = { mode: 'multiple', allowSelectAll: true };
  149. dataGridOptions.handleDataGridRowClick = function () { };
  150. }
  151. else {
  152. dataGridOptions.handleDataGridRowClick = function (id, dataGrid, clickRow) {
  153. var data = clickRow.data;
  154. if (!_.isUndefined(onSelectedMaterials)) {
  155. onSelectedMaterials([BWA.DataUtil.convertViewModelToJS(data)]);
  156. //{
  157. // SiteId: data.SiteId(),
  158. // BusinessFieldId: data.BusinessFieldId(),
  159. // MaterialId: data.MaterialId(),
  160. // MaterialCode: data.MaterialCode(),
  161. // FinalPrice: data.FinalPrice(),
  162. // TradeCompanyId: _.isUndefined(data.TradeCompanyId) ? undefined : data.TradeCompanyId(),
  163. // 'FmsMaterialTradeCompany/Name': data['FmsMaterialTradeCompany/Name'],
  164. // Name: data.Name()
  165. //}]);
  166. }
  167. // TODO : 어기서 데이터가 전체선택시와 단일선택시 어찌 바뀌는가...
  168. popupVisible(false);
  169. }
  170. }
  171. function handlePopupShowing() {
  172. MaterialCodeClassDataSource.filter([
  173. ['SiteId', '=', BWA.UserInfo.SiteId()]
  174. ]);
  175. $.when(
  176. MaterialCodeClassDataSource.load()
  177. ).done(function (Result) {
  178. materialClass = ko.observableArray();
  179. var cnt = 0;
  180. for (var i = 0; i < Result.length; i++) {
  181. materialClass.push(Result[i]);
  182. if (Result[i].Depth() == 0) {
  183. if (cnt == 0) {
  184. searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(Result[i]));
  185. cnt++;
  186. }
  187. else {
  188. searchFacilityClasses[0].push(Result[i]);
  189. }
  190. }
  191. }
  192. facilityClasses[0](Result[0]);
  193. materialClassForSearch($SearchView.createArrayOfSelectBox('MaterialClassId', materialClass()));
  194. });
  195. }
  196. function handlePopupShown() {
  197. if (initialized === false) {
  198. gridView = $('#materialDataGridForSearch').dxDataGrid('instance');
  199. $("#materialDataGridForSearch").dxDataGrid({
  200. paging: {
  201. pageSize: 14,
  202. enabled: false
  203. }
  204. });
  205. initialized = true;
  206. }
  207. gridView.clearSelection();
  208. gridView.refresh();
  209. searchView.show();
  210. }
  211. function handlePopupButtonSelect() {
  212. var array = utils.datagrid.getSelectedRowsData(options.datagridId);
  213. if (!_.isUndefined(onSelectedMaterials)) {
  214. onSelectedMaterials(array);
  215. }
  216. popupVisible(false);
  217. }
  218. viewModel.handleSelectBoxChangeFirstClass = function (e) {
  219. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, facilityClasses[1]);
  220. viewModel.dataModel.SecondClassId(null);
  221. viewModel.dataModel.ThirdClassId(null);
  222. };
  223. viewModel.handleSelectBoxChangeSecondClass = function (e) {
  224. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, facilityClasses[2]);
  225. viewModel.dataModel.ThirdClassId(null);
  226. };
  227. var handleFirstClassChangedValueInSearchView = function (e) {
  228. if (first == true && e.value == null) {
  229. e.value = 0;
  230. first = false;
  231. searchFacilityClassValues[0](0);
  232. }
  233. if (e.value === 0) {
  234. initializeSearchClasses();
  235. return;
  236. }
  237. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray);
  238. };
  239. var handleSecondClassChangedValueInSearchView = function (e) {
  240. if (e.value === 0) {
  241. initializeSearchClasses(true);
  242. return;
  243. }
  244. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray);
  245. };
  246. function initializeSearchClasses(onlyThird) {
  247. if (onlyThird === undefined || onlyThird === false) {
  248. searchFacilityClasses[1](defaultSearchClassArray.slice(0));
  249. searchFacilityClassValues[1](0);
  250. }
  251. searchFacilityClasses[2](defaultSearchClassArray.slice(0));
  252. searchFacilityClassValues[2](0);
  253. }
  254. function handlePopupButtonClose() {
  255. popupVisible(false);
  256. }
  257. var toolbarItems = [
  258. { location: 'before', text: '자재 선택' },
  259. { location: 'after', widget: 'button', options: { text: $G('select'), icon: 'save', visible: isMultipleSelect, clickAction: handlePopupButtonSelect } },
  260. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }
  261. ];
  262. var popupOptions = {
  263. width: '850px',
  264. height: '600px',
  265. visible: popupVisible,
  266. closeOnOutsideClick: true,
  267. showingAction: handlePopupShowing,
  268. shownAction: handlePopupShown,
  269. animation: window.utils.popup.createAnimation()
  270. };
  271. var searchView = BWA.Popup.SearchView.create({
  272. parentPopupId: 'popupSearchMaterial',
  273. parentPopupVisible: popupVisible,
  274. searchItems: [
  275. { id: 'MaterialCode' },
  276. { id: 'Name' },//
  277. { id: 'Standard' },
  278. { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
  279. { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
  280. { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },
  281. ],
  282. handleInitializeUpdate: function () {
  283. },
  284. handleSearch: function (filter, searchItems) {
  285. if (MenuPermission >= 4) {
  286. filter = [
  287. eq('SiteId', userInfo.SiteId()),
  288. and,
  289. [
  290. eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()),
  291. 'or',
  292. eq('BusinessFieldId', 1)
  293. ]
  294. ].concat(filter)
  295. }
  296. else {
  297. filter = [
  298. eq('SiteId', userInfo.SiteId())
  299. ].concat(filter)
  300. }
  301. gridView.filter(filter);
  302. }
  303. });
  304. viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView;
  305. viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView;
  306. viewModel.facilityClasses = facilityClasses;
  307. viewModel.searchItems = searchView.searchItems;
  308. return {
  309. dataModel: dataViewModel,
  310. dataSource: dataSource,
  311. popupOptions: popupOptions,
  312. toolbarItems: toolbarItems,
  313. dataGridOptions: dataGridOptions,
  314. searchView: searchView,
  315. show: function () {
  316. popupVisible(true);
  317. }
  318. };
  319. };
  320. });