856a86b5e48385d22da71afe4fe82d48ea3445ce.svn-base 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. 
  2. BemsWebApplication.MaterialStockStatus2 = function (params, viewInfo) {
  3. "use strict";
  4. var materialFactory = BemsWebApplication.Factory.Material;
  5. var imagefileUrl = ko.observable();
  6. var SiteID = BWA.UserInfo.SiteId();
  7. var materialClassForSearch = ko.observableArray();
  8. var materialClass = ko.observableArray();
  9. var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()];
  10. var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  11. var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  12. var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');
  13. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;
  14. var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true),
  15. materialClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass', true, true),
  16. materialTypeDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeType', true, true),
  17. tradeCompanyDataSource = BemsWebApplication.db.createDataSource('FmsMaterialTradeCompany', true, true),
  18. warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, true),
  19. locationDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeLocation', true, true);
  20. var materialClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  21. businessFields = ko.observableArray(),
  22. materialTypes = ko.observableArray(),
  23. tradeCompanies = ko.observableArray(),
  24. warehouses = ko.observableArray(),
  25. locations = ko.observableArray();
  26. var materialClassesForSearch = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  27. materialTypesForSearch = ko.observableArray(),
  28. materialClassValuesForSearch = [ko.observable(), ko.observable(), ko.observable()],
  29. businessFieldsForSearch = ko.observableArray(),
  30. materialTypeIdForSearch = ko.observable(),
  31. businessFieldIdForSearch = ko.observable();
  32. var deferredForSearch = new $.Deferred();
  33. var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId');
  34. function initializeSearchClasses(onlyThird) {
  35. if (onlyThird === undefined || onlyThird === false) {
  36. searchFacilityClasses[1](defaultSearchClassArray.slice(0));
  37. searchFacilityClassValues[1](0);
  38. }
  39. searchFacilityClasses[2](defaultSearchClassArray.slice(0));
  40. searchFacilityClassValues[2](0);
  41. }
  42. var handleFirstClassChangedValueInSearchView = function (e) {
  43. if (e.value === 0) {
  44. initializeSearchClasses();
  45. return;
  46. }
  47. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray);
  48. };
  49. var handleSecondClassChangedValueInSearchView = function (e) {
  50. if (searchFacilityClassValues[1]() == null) {
  51. initializeSearchClasses();
  52. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', 0, searchFacilityClasses[1], defaultSearchClassArray);
  53. }
  54. if (e.value === 0) {
  55. initializeSearchClasses(true);
  56. return;
  57. }
  58. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray);
  59. };
  60. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsMaterial', {
  61. dataSourceOptions: {
  62. store: BemsWebApplication.odata.FmsMaterialEx,
  63. select: [
  64. 'SiteId',
  65. 'BusinessFieldId',
  66. 'MaterialId',
  67. 'MaterialCode',
  68. 'Name',
  69. 'FirstClassId',
  70. 'SecondClassId',
  71. 'ThirdClassId',
  72. 'LocationId',
  73. 'MaterialTypeId',
  74. 'TradeCompanyId',
  75. 'WarehouseId',
  76. 'WHouseName',
  77. 'Rfid',
  78. 'Unit',
  79. 'DurableYears',
  80. 'ReasonableStockCount',
  81. 'Manufacturer',
  82. 'Standard',
  83. 'FinalPrice',
  84. 'ImageFileId',
  85. 'Note',
  86. 'IsDiscontinued',
  87. 'IsUse',
  88. 'FinalStockCount',
  89. 'FinalTotalStockAmount',
  90. 'StockCount',
  91. 'StockAmount',
  92. 'CmBusinessField/Name',
  93. 'FmsMaterialCodeType/Name',
  94. ],
  95. filter: [
  96. ['SiteId', '=', SiteID]
  97. ],
  98. expand: [
  99. 'CmBusinessField',
  100. 'FmsMaterialCodeType',
  101. ],
  102. extendOptions: {
  103. forceOriginalField: true
  104. }
  105. },
  106. columns: [
  107. { dataField: 'MaterialId', caption: $G('number'), width: '10%', alignment: 'center', allowFiltering: false, sortOrder: 'desc' },
  108. { dataField: 'CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center', },
  109. {
  110. dataField: 'FirstClassId', width: '15%', caption: '자재(대)', alignment: 'center',
  111. customizeText: function (cellInfo) {
  112. for (var i = 1; i < materialClassForSearch().length; i++) {
  113. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  114. return materialClassForSearch()[i].Name();
  115. }
  116. }
  117. }
  118. },
  119. {
  120. dataField: 'SecondClassId', width: '15%', caption: '자재(중)', alignment: 'center',
  121. customizeText: function (cellInfo) {
  122. for (var i = 1; i < materialClassForSearch().length; i++) {
  123. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  124. return materialClassForSearch()[i].Name();
  125. }
  126. }
  127. }
  128. },
  129. {
  130. dataField: 'ThirdClassId', width: '15%', caption: '자재(소)', alignment: 'center',
  131. customizeText: function (cellInfo) {
  132. for (var i = 1; i < materialClassForSearch().length; i++) {
  133. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  134. return materialClassForSearch()[i].Name();
  135. }
  136. }
  137. }
  138. },
  139. { dataField: 'Name', caption: '자재명', width: '30%', alignment: 'center' },
  140. { dataField: 'Standard', caption: '규격', width: '30%', alignment: 'center' },
  141. { dataField: 'Unit', caption: '단위', width: '10%', alignment: 'center' },
  142. { dataField: 'ReasonableStockCount', caption: '적정재고수량', width: '15%', alignment: 'center', format: 'fixedPoint' },
  143. { dataField: 'StockCount', caption: '재고수량', width: '10%', alignment: 'center', format: 'fixedPoint' },
  144. { dataField: 'StockAmount', caption: '재고금액', width: '10%', alignment: 'center', format: 'fixedPoint' },
  145. { dataField: 'WHouseName', caption: '창고', width: '10%', alignment: 'center' },
  146. ],
  147. paging: {
  148. pageSize: 18,
  149. enabled: true
  150. },
  151. pager: {},
  152. "export": {
  153. enabled: true,
  154. fileName: '재고 현황',
  155. },
  156. onExporting: function (e) {
  157. e.component.columnOption("MaterialId", "visible", false);
  158. },
  159. onExported: function (e) {
  160. e.component.columnOption("MaterialId", "visible", true);
  161. },
  162. wordWrapEnabled: true,
  163. searchViewItems: [
  164. { id: 'MaterialCode' },
  165. { id: 'Name' },
  166. { id: 'Standard' },
  167. { id: 'Unit' },
  168. { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
  169. { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
  170. { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },
  171. ],
  172. promiseDataInSearchView: deferredForSearch.promise(),
  173. handleViewShowing: function () {
  174. MaterialCodeClassDataSource.filter([
  175. ['SiteId', '=', SiteID]
  176. ]);
  177. $.when(
  178. MaterialCodeClassDataSource.load()
  179. ).done(function (Result) {
  180. materialClass = ko.observableArray();
  181. var cnt = 0;
  182. for (var i = 0; i < Result.length; i++) {
  183. materialClass.push(Result[i]);
  184. if (Result[i].Depth() == 0) {
  185. if (cnt == 0) {
  186. searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(Result[i]));
  187. cnt++;
  188. }
  189. else {
  190. searchFacilityClasses[0].push(Result[i]);
  191. }
  192. }
  193. }
  194. facilityClasses[0](Result[0]);
  195. materialClassForSearch($SearchView.createArrayOfSelectBox('MaterialClassId', materialClass()));
  196. });
  197. materialClassDataSource.filter([
  198. ['SiteId', '=', SiteID],
  199. 'and',
  200. ['ParentMaterialClassId', '=', null]
  201. ]);
  202. materialClassDataSource.filter([
  203. ['SiteId', '=', SiteID],
  204. 'and',
  205. ['ParentMaterialClassId', '=', null]
  206. ]);
  207. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName)
  208. if (useBusinessFiltering) {
  209. this.dataSourceOptions.filter.push([eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]);
  210. businessFieldDataSource.filter([
  211. eq('SiteId', SiteID),
  212. and,
  213. [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]
  214. ]);
  215. }
  216. $.when(
  217. businessFieldDataSource.load(),
  218. materialClassDataSource.load(),
  219. materialTypeDataSource.load(),
  220. tradeCompanyDataSource.load(),
  221. warehouseDataSource.load(),
  222. locationDataSource.load()
  223. ).done(function (dbBusinessFields, dbMaterialClasses, dbMaterialTypes, dbTradeCompanies, dbWarehouses, dbLocations) {
  224. dbBusinessFields = dbBusinessFields[0];
  225. dbMaterialClasses = dbMaterialClasses[0];
  226. dbMaterialTypes = dbMaterialTypes[0];
  227. dbTradeCompanies = dbTradeCompanies[0];
  228. dbWarehouses = dbWarehouses[0];
  229. dbLocations = dbLocations[0];
  230. materialClasses[0](dbMaterialClasses);
  231. materialClassesForSearch[0]($SearchView.createArrayOfSelectBox('MaterialClassId', dbMaterialClasses));
  232. initializeSearchClasses();
  233. businessFields(dbBusinessFields);
  234. materialTypes(dbMaterialTypes);
  235. tradeCompanies(dbTradeCompanies);
  236. warehouses(dbWarehouses);
  237. locations(dbLocations);
  238. businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', dbBusinessFields));
  239. materialTypesForSearch($SearchView.createArrayOfSelectBox('MaterialTypeId', dbMaterialTypes));
  240. deferredForSearch.resolve();
  241. });
  242. },
  243. handleViewShown: function (dataViewModel, isEditModeInPopup) {
  244. },
  245. handleSaveSuccess: function () {
  246. },
  247. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  248. if (isNewInPopup() == false) {
  249. BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', dataViewModel.FirstClassId(), materialClasses[1]).done(function () {
  250. BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', dataViewModel.SecondClassId(), materialClasses[2]);
  251. });
  252. BWA.DataUtil.setArrayDataSourceFilter(warehouseDataSource, 'BusinessFieldId', dataViewModel.BusinessFieldId(), warehouses);
  253. if (_.isNull(dataViewModel.ImageFileId()) === false) {
  254. imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.ImageFileId()));
  255. }
  256. else {
  257. imagefileUrl("images/default.png");
  258. }
  259. }
  260. },
  261. handlePopupShowing: function (isNewInPopup) {
  262. if (isNewInPopup() == false) {
  263. // 이전 이미지 잔상 문제로 인한 방어코드
  264. // 이미지 경로 강제 초기화
  265. imagefileUrl(undefined);
  266. }
  267. viewModel.toolbarItems[1].options.visible(false);
  268. viewModel.toolbarItems[2].options.visible(false);
  269. },
  270. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  271. dataGrid.clearSelection();
  272. viewModel.isNewInPopup(false);
  273. var data = clickRow.data;
  274. var dataModel = viewModel.dataModel;
  275. var firstClassname, secondClassname, thirdClassname, companyname;
  276. for (var i = 1; i < materialClassForSearch().length; i++) {
  277. if (materialClassForSearch()[i].MaterialClassId() == data.FirstClassId()) {
  278. firstClassname = materialClassForSearch()[i].Name();
  279. break;
  280. }
  281. }
  282. for (var i = 1; i < materialClassForSearch().length; i++) {
  283. if (materialClassForSearch()[i].MaterialClassId() == data.SecondClassId()) {
  284. secondClassname = materialClassForSearch()[i].Name();
  285. break;
  286. }
  287. }
  288. for (var i = 1; i < materialClassForSearch().length; i++) {
  289. if (materialClassForSearch()[i].MaterialClassId() == data.ThirdClassId()) {
  290. thirdClassname = materialClassForSearch()[i].Name();
  291. break;
  292. }
  293. }
  294. dataModel.ClassName = $KoSet(dataModel.ClassName, materialFactory.formatClassName(firstClassname, secondClassname, thirdClassname));
  295. dataModel.Note = $KoSet(dataModel.Note, data['Note']);
  296. dataModel.BusinessFieldName = $KoSet(dataModel.BusinessFieldName, data['CmBusinessField/Name']);
  297. dataModel.Name = $KoSet(dataModel.Name, data['Name']);//자재명
  298. dataModel.Standard = $KoSet(dataModel.Standard, data['Standard']);// 규격
  299. dataModel.Unit = $KoSet(dataModel.Unit, data['Unit']); //단위
  300. dataModel.Rfid = $KoSet(dataModel.Rfid, data['Rfid']);
  301. dataModel.IsDiscontinued = $KoSet(dataModel.IsDiscontinued, data['IsDiscontinued']);//단종여부
  302. dataModel.ReasonableStockCount = $KoSet(dataModel.ReasonableStockCount, data['ReasonableStockCount']);//적정재고량
  303. dataModel.DurableYears = $KoSet(dataModel.DurableYears, data['DurableYears']); //내용연수
  304. dataModel.FinalPrice = $KoSet(dataModel.FinalPrice, data['FinalPrice']); //단가
  305. dataModel.MaterialTypeName = $KoSet(dataModel.MaterialTypeName, data['FmsMaterialCodeType/Name']); //자재구분
  306. dataModel.IsUse(true);
  307. dataModel.Manufacturer = $KoSet(dataModel.Manufacturer, data['Manufacturer']);
  308. popupVisible(true);
  309. }
  310. });
  311. viewModel.handleSelectBoxChangeBusinessField = function (e) {
  312. BWA.DataUtil.setArrayDataSourceFilter(warehouseDataSource, 'BusinessFieldId', e.value, warehouses);
  313. viewModel.dataModel.WarehouseId(null);
  314. }
  315. viewModel.handleSelectBoxChangeFirstClass = function (e) {
  316. BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', e.value, materialClasses[1]);
  317. viewModel.dataModel.SecondClassId(null);
  318. viewModel.dataModel.ThirdClassId(null);
  319. }
  320. viewModel.handleSelectBoxChangeSecondClass = function (e) {
  321. BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', e.value, materialClasses[2]);
  322. viewModel.dataModel.ThirdClassId(null);
  323. }
  324. viewModel.dataModel.ClassName = ko.observable();
  325. viewModel.materialClasses = materialClasses;
  326. viewModel.materialTypes = materialTypes;
  327. viewModel.tradeCompanies = tradeCompanies;
  328. viewModel.warehouses = warehouses;
  329. viewModel.locations = locations;
  330. viewModel.businessFields = businessFields;
  331. viewModel.dataModel.BusinessFieldName = ko.observable();
  332. viewModel.dataModel.Note = ko.observable();
  333. viewModel.dataModel.MaterialTypeName = ko.observable();
  334. viewModel.dataModel.Standard = ko.observable();// 규격
  335. viewModel.dataModel.Unit = ko.observable();//단위
  336. viewModel.dataModel.DurableYears = ko.observable();//내용연수
  337. viewModel.dataModel.Rfid = ko.observable();
  338. viewModel.dataModel.TradeCompanyName = ko.observable();
  339. viewModel.dataModel.FinalPrice = ko.observable(); //단가
  340. viewModel.dataModel.ReasonableStockCount = ko.observable(); //적정재고량
  341. viewModel.dataModel.IsDiscontinued = ko.observable();//단종여부
  342. viewModel.dataModel.IsUse = ko.observable();//사용여부
  343. viewModel.imagefileUrl = imagefileUrl;
  344. viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView;
  345. viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView;
  346. return viewModel;
  347. };