603de52afd13250f35896b0ce95d9df6d89f3f47.svn-base 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. BemsWebApplication.MaterialReleaseHistory = function (params, viewInfo) {
  2. "use strict";
  3. var materialClassForSearch = ko.observableArray();
  4. var materialClass = ko.observableArray();
  5. var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');
  6. var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  7. var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()];
  8. var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  9. var first = true;
  10. var workResultCheckItemMaterialPopup, popup, addWorkResultCheckItemPopup = null;
  11. var eq = BWA.DataUtil.constructEqualFilter,
  12. and = BWA.DataUtil.andFilter;
  13. var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true),
  14. materialClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass', true, true),
  15. warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, true),
  16. releaseTypeDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeReleaseType');
  17. var materialClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  18. businessFields = ko.observableArray(),
  19. releaseTypes = ko.observableArray(),
  20. warehouses = ko.observableArray();
  21. var materialClassesForSearch = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  22. materialClassValuesForSearch = [ko.observable(), ko.observable(), ko.observable()],
  23. businessFieldsForSearch = ko.observableArray(),
  24. businessFieldIdForSearch = ko.observable(),
  25. warehousesForSearch = ko.observableArray(),
  26. releaseTypesForSearch = ko.observableArray(),
  27. warehousesIdForSearch = ko.observable();
  28. var deferredForSearch = new $.Deferred();
  29. var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId');
  30. function initializeSearchClasses(onlyThird) {
  31. if (onlyThird === undefined || onlyThird === false) {
  32. searchFacilityClasses[1](defaultSearchClassArray.slice(0));
  33. searchFacilityClassValues[1](0);
  34. }
  35. searchFacilityClasses[2](defaultSearchClassArray.slice(0));
  36. searchFacilityClassValues[2](0);
  37. }
  38. var handleFirstClassChangedValueInSearchView = function (e) {
  39. if (first == true && e.value == null) {
  40. e.value = 0;
  41. first = false;
  42. searchFacilityClassValues[0](0);
  43. }
  44. if (e.value === 0) {
  45. initializeSearchClasses();
  46. return;
  47. }
  48. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray);
  49. };
  50. var handleSecondClassChangedValueInSearchView = function (e) {
  51. if (e.value === 0) {
  52. initializeSearchClasses(true);
  53. return;
  54. }
  55. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray);
  56. };
  57. var dataSourceOptions = {
  58. select: [
  59. 'SiteId',
  60. 'BusinessFieldId',
  61. 'MaterialId',
  62. 'FmsMaterial/MaterialCode',
  63. 'FmsMaterial/Name',
  64. 'FmsMaterial/Standard',
  65. 'FmsMaterial/Unit',
  66. 'MaterialReleaseId',
  67. 'ReleaseTypeId',
  68. 'FmsMaterialCodeReleaseType/Name',
  69. 'ReleaseDate',
  70. 'MaterialCount',
  71. 'WarehouseId',
  72. 'FmsWorkResult/WorkerUserId',
  73. 'FmsWorkResult/CmUser/Name',
  74. 'FmsWorkResult/ConfirmedUserId',
  75. 'FmsWorkResult/CmUser1/Name',
  76. 'FmsWorkResult/FmsWorkOrder/Title',
  77. 'FmsWorkResult/FmsWorkRequest/RequestUserId',
  78. 'FmsWorkResult/ConfirmedUserId',
  79. 'FmsMaterial/FirstClassId',
  80. 'FmsMaterial/SecondClassId',
  81. 'FmsMaterial/ThirdClassId',
  82. 'CmBusinessField/Name'
  83. ],
  84. filter: [
  85. ['SiteId', '=', BWA.UserInfo.SiteId()],
  86. 'and',
  87. ['AdjustmentTypeId', '=', 0]
  88. ],
  89. expand: [
  90. 'FmsMaterial', 'FmsMaterialCodeReleaseType',
  91. 'FmsWorkResult',
  92. 'FmsWorkResult/CmUser',
  93. 'FmsWorkResult/CmUser1',
  94. 'FmsWorkResult/FmsWorkOrder',
  95. 'FmsWorkResult/FmsWorkRequest',
  96. 'CmBusinessField'
  97. ],
  98. extendOptions: {
  99. forceOriginalField: true
  100. }
  101. };
  102. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsMaterialRelease', {
  103. dataSourceOptions: dataSourceOptions,
  104. columns: [
  105. { dataField: 'MaterialReleaseId', caption: $G('number'), width: '10%', alignment: 'center', allowFiltering: false },
  106. { dataField: 'CmBusinessField/Name', caption: $G('businessFieldName'), width: '15%', alignment: 'center', },
  107. { dataField: 'FmsMaterialCodeReleaseType/Name', caption: '출고구분', width: '15%', alignment: 'center', visible: false },
  108. { dataField: 'FmsWorkResult/FmsWorkOrder/Title', caption: '작업명', width: '40%', alignment: 'center' },
  109. {
  110. dataField: 'FmsMaterial/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: 'FmsMaterial/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: 'FmsMaterial/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: 'FmsMaterial/Name', caption: '자재명', width: '20%', alignment: 'center' },
  140. { dataField: 'FmsMaterial/Standard', caption: '규격', width: '20%', alignment: 'center' },
  141. { dataField: 'FmsMaterial/Unit', caption: '단위', width: '10%', alignment: 'center' },
  142. { dataField: 'MaterialCount', caption: '사용수량', width: '15%', alignment: 'center', format: 'fixedPoint' },
  143. {
  144. dataField: 'ReleaseDate', caption: '출고일', width: '15%', alignment: 'center', sortOrder: 'desc', dataType: 'string',
  145. customizeText: function (cellInfo) {
  146. if (cellInfo.value.getMonth() >= 9) {
  147. if (cellInfo.value.getDate() >= 10) {
  148. return cellInfo.value.getFullYear() + "-" + (cellInfo.value.getMonth() + 1) + "-" + cellInfo.value.getDate();
  149. }
  150. else {
  151. return cellInfo.value.getFullYear() + "-" + (cellInfo.value.getMonth() + 1) + "-0" + cellInfo.value.getDate();
  152. }
  153. }
  154. else {
  155. if (cellInfo.value.getDate() >= 10) {
  156. return cellInfo.value.getFullYear() + "-0" + (cellInfo.value.getMonth() + 1) + "-" + cellInfo.value.getDate();
  157. }
  158. else {
  159. return cellInfo.value.getFullYear() + "-0" + (cellInfo.value.getMonth() + 1) + "-0" + cellInfo.value.getDate();
  160. }
  161. }
  162. }
  163. },
  164. { dataField: 'FmsWorkResult/CmUser/Name', caption: '작업자', width: '15%', alignment: 'center' },
  165. { dataField: 'FmsWorkResult/CmUser1/Name', caption: '승인자', width: '15%', alignment: 'center' },
  166. ],
  167. pager: {
  168. },
  169. paging: {
  170. pageSize: 18,
  171. enabled: true
  172. },
  173. searchViewItems: [
  174. { id: 'ReleaseTypeId', ignoreValue: 0, defaultValue: 0, dataSource: releaseTypesForSearch },
  175. { id: 'FmsMaterial/MaterialCode' },
  176. { id: 'FmsMaterial/Name' },
  177. { id: 'FmsMaterial/Standard' },
  178. { id: 'FmsMaterial/Unit' },
  179. { id: 'ReleaseDate', type: 'dateRange', isOnlyDate: true },
  180. { id: 'CmUser/Name' },
  181. { id: 'CmUser1/Name' },
  182. { id: 'FmsMaterial/FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
  183. { id: 'FmsMaterial/SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FmsMaterial/FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
  184. { id: 'FmsMaterial/ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FmsMaterial/FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },
  185. ],
  186. "export": {
  187. enabled: true,
  188. fileName: '자재 사용 내역',
  189. },
  190. onExporting: function (e) {
  191. e.component.columnOption("MaterialReleaseId", "visible", false);
  192. },
  193. onExported: function (e) {
  194. e.component.columnOption("MaterialReleaseId", "visible", true);
  195. },
  196. handleViewShowing: function () {
  197. MaterialCodeClassDataSource.filter([
  198. ['SiteId', '=', BWA.UserInfo.SiteId()]
  199. ]);
  200. $.when(
  201. MaterialCodeClassDataSource.load()
  202. ).done(function (Result) {
  203. materialClass = ko.observableArray();
  204. var cnt = 0;
  205. for (var i = 0; i < Result.length; i++) {
  206. materialClass.push(Result[i]);
  207. if (Result[i].Depth() == 0) {
  208. if (cnt == 0) {
  209. searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(Result[i]));
  210. cnt++;
  211. }
  212. else {
  213. searchFacilityClasses[0].push(Result[i]);
  214. }
  215. }
  216. }
  217. facilityClasses[0](Result[0]);
  218. materialClassForSearch($SearchView.createArrayOfSelectBox('MaterialClassId', materialClass()));
  219. });
  220. materialClassDataSource.filter([
  221. ['SiteId', '=', BWA.UserInfo.SiteId()],
  222. 'and',
  223. ['ParentMaterialClassId', '=', null]
  224. ]);
  225. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName)
  226. if (useBusinessFiltering) {
  227. this.dataSourceOptions.filter.push('and');
  228. this.dataSourceOptions.filter.push([eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]);
  229. businessFieldDataSource.filter([
  230. eq('SiteId', BWA.UserInfo.SiteId()),
  231. and,
  232. [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]
  233. ]);
  234. }
  235. $.when(
  236. businessFieldDataSource.load(),
  237. materialClassDataSource.load(),
  238. warehouseDataSource.load(),
  239. releaseTypeDataSource.load()
  240. ).done(function (dbBusinessFields, dbMaterialClasses, dbWarehouses, dbreleaseTypes) {
  241. dbBusinessFields = dbBusinessFields[0];
  242. dbMaterialClasses = dbMaterialClasses[0];
  243. dbWarehouses = dbWarehouses[0];
  244. materialClasses[0](dbMaterialClasses);
  245. materialClassesForSearch[0]($SearchView.createArrayOfSelectBox('MaterialClassId', dbMaterialClasses));
  246. initializeSearchClasses();
  247. releaseTypes(dbreleaseTypes[0]);
  248. businessFields(dbBusinessFields);
  249. warehouses(dbWarehouses);
  250. releaseTypesForSearch($SearchView.createArrayOfSelectBox('ReleaseTypeId', releaseTypes()));
  251. businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', dbBusinessFields));
  252. warehousesForSearch($SearchView.createArrayOfSelectBox('WarehouseId', dbWarehouses));
  253. deferredForSearch.resolve();
  254. });
  255. },
  256. //handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { //추가
  257. // //dataGrid.clearSelection();
  258. // //var data = clickRow.data;
  259. // //var dataModel = viewModel.dataModel;
  260. // popupVisible(true);
  261. // //workResultCheckItemMaterialPopup.visible(true);
  262. //},
  263. handleViewShown: function () {
  264. }
  265. });
  266. addWorkResultCheckItemPopup = viewModel.addWorkResultCheckItemPopup = BWA.Popup.AddWorkResultCheckItem.create(viewInfo, viewModel);
  267. popup = viewModel.popup = BWA.Popup.WorkHistory.create(viewInfo, viewModel);
  268. workResultCheckItemMaterialPopup = viewModel.workResultCheckItemMaterialPopup = BWA.Popup.WorkResultCheckItemMaterial.create(viewInfo, viewModel);
  269. viewModel.popupOptions.position = { offset: '-200 0' };
  270. viewModel.popupOptions.height = '930px';
  271. viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView;
  272. viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView;
  273. return viewModel;
  274. };