f757c8c77c31271b0c9b1908beba28091eb3cbc2.svn-base 18 KB

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