669ab103fc265fbc155ac1a7d2c5eed5403e3f1c.svn-base 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. $(function () {
  2. 'use strict';
  3. BemsWebApplication.Popup.MaterialStockAdjustment2 = {
  4. create: function (viewInfo, viewModel, forApprovalOptions) {
  5. var materials = ko.observableArray(),
  6. materialsInView = ko.observableArray(),
  7. businessFields = ko.observableArray();
  8. var materialFactory = BWA.Factory.Material,
  9. //purchaseProgressCode = BWA.Code.PurchaseProgress,
  10. materialGridView,
  11. materialDataGridOptions,
  12. modifiableMaterialDataGridOptions = undefined;
  13. var materialsDataSource = materialFactory.getBasicDataSourceRef({
  14. dbModeIId: 'FmsMaterialRelease',
  15. primaryKeyDataField: 'MaterialReleaseId'
  16. });
  17. function isValidateWithFunction(errorMessage) {
  18. if (_.isEmpty(materials())) {
  19. errorMessage.message = '구매요청한 자재가 없습니다.';
  20. return false;
  21. }
  22. return true;
  23. }
  24. function handlePopupShowing(isNewInPopup, dataModel) {
  25. //viewModel.isEditModeInPopup.subscribe(function (value) {
  26. // if (value) {
  27. // visibleApprovalButton(false);
  28. // }
  29. // else {
  30. // if (viewModel.dataModel.IsConfirmed()) {
  31. // visibleApprovalButton(false);
  32. // } else {
  33. // visibleApprovalButton(true);
  34. // }
  35. // }
  36. // //utils.toast.show('isEditModeInPopup : ' + value);
  37. //});
  38. //viewModel.isNewInPopup.subscribe(function (value) {
  39. // visibleApprovalButton(false);
  40. //});
  41. $("#gridContainer2").dxDataGrid({
  42. paging: {
  43. pageSize: 9,
  44. enabled: true
  45. }
  46. });
  47. $("#gridContainer3").dxDataGrid({
  48. paging: {
  49. pageSize: 9,
  50. enabled: true
  51. }
  52. });
  53. var userInfo = BWA.UserInfo;
  54. if (isNewInPopup()) {
  55. if (userInfo.isDependBusinessField(viewInfo.viewName)) {
  56. BWA.db.CmBusinessField.byKey({
  57. SiteId: userInfo.SiteId(), BusinessFieldId: userInfo.BusinessFieldId()
  58. }).done(function (businessField) {
  59. dataModel.BusinessFieldName(businessField.Name);
  60. });
  61. }
  62. dataModel.BusinessFieldId(userInfo.BusinessFieldId());
  63. dataModel.AdjustmentUserId(userInfo.UserId());
  64. dataModel.AdjustmentUserName(userInfo.Name());
  65. dataModel.IsConfirmed(false);
  66. dataModel.AdjustmentTypeId(1);
  67. dataModel.ReleaseTypeId(2);
  68. dataModel.ReleaseTypeName(viewModel.releaseTypes()[1].Name());
  69. dataModel.ReleaseDate(new Date());
  70. dataModel.ReleaseTotalCost(0);
  71. }
  72. }
  73. function handleDeleteSelectedMaterials() {
  74. var rows = materialGridView.getSelectedRowsData();
  75. if (_.isEmpty(rows)) {
  76. utils.toast.show('선택된 자재가 없습니다.', 'error');
  77. return;
  78. }
  79. _.each(rows, function (row) {
  80. var array = materials();
  81. var length = array.length;
  82. var id = row.MaterialId();
  83. for (var i = 0 ; i < length ; i++) {
  84. if (id === array[i].MaterialId()) {
  85. materials().splice(i, 1);
  86. break;
  87. }
  88. }
  89. });
  90. materialGridView.refresh();
  91. }
  92. function handlePopupShown(editMode, isNew, dataViewModel) {
  93. /*
  94. if (isNew) {
  95. viewModel.visibleApprovalButton(false);
  96. }
  97. else {
  98. if (viewModel.dataModel.IsConfirmed()) {
  99. viewModel.visibleApprovalButton(false);
  100. viewModel.visibleEditButton(false);
  101. viewModel.visibleDeleteButton(false);
  102. }
  103. else {
  104. viewModel.visibleApprovalButton(true);
  105. viewModel.visibleEditButton(true);
  106. viewModel.visibleDeleteButton(true);
  107. }
  108. }
  109. */
  110. }
  111. function handleAfterLoadingModelByKey(data, dataViewModel) {
  112. var eq = BWA.DataUtil.constructEqualFilter;
  113. var and = BWA.DataUtil.andFilter;
  114. materialsDataSource.filter([
  115. eq('SiteId', dataViewModel.SiteId()),
  116. and,
  117. eq('BusinessFieldId', dataViewModel.BusinessFieldId()),
  118. and,
  119. eq('MaterialReleaseId', dataViewModel.MaterialReleaseId())
  120. ]);
  121. materialsDataSource.load().done(function (dbMaterials) {
  122. materialsInView(dbMaterials);
  123. });
  124. }
  125. function handleBeforeShowingPopupForEdit(rowData, dataViewModel) {
  126. dataViewModel.BusinessFieldName(rowData['CmBusinessField/Name']());
  127. dataViewModel.AdjustmentUserName(rowData['CmUser1/Name']());
  128. dataViewModel.ReleaseTypeName(rowData['FmsMaterialCodeReleaseType/Name']());
  129. dataViewModel.AdjustmentTypeName(rowData['FmsMaterialCodeAdjustmentType/Name']());
  130. dataViewModel.ReleaseTotalCost(rowData['ReleaseTotalCost']());
  131. }
  132. viewModel.popupVisible.subscribe(function (visible) {
  133. if (!visible) {
  134. materialsInView([]);
  135. materials([]);
  136. }
  137. });
  138. viewModel.isEditModeInPopup.subscribe(function (isEditMode) {
  139. if (isEditMode) {
  140. viewModel.visibleApprovalButton(false);
  141. materials(materialsInView.slice(0));
  142. } else {
  143. viewModel.visibleApprovalButton(true);
  144. }
  145. });
  146. viewModel.dataModel.BusinessFieldName = ko.observable();
  147. viewModel.dataModel.AdjustmentUserName = ko.observable();
  148. viewModel.dataModel.ApprovalUserName = ko.observable();
  149. viewModel.dataModel.ReleaseTypeName = ko.observable();
  150. viewModel.dataModel.AdjustmentTypeName = ko.observable();
  151. viewModel.dataModel.ReleaseTotalCost = ko.observable();
  152. var materialColumns = materialFactory.getColumns([
  153. { dataField: 'MaterialCode', width: '30%' },
  154. { dataField: 'Name', width: '30%' },
  155. { dataField: 'StockCountByPoint', caption: '재고수량', alignment: 'center', width: '20%', format: 'currency' },
  156. ]);
  157. materialDataGridOptions = utils.datagrid.defaultOptions({
  158. width: 500,
  159. visible: viewModel.viewModeInPopup,
  160. pager: {
  161. showPageSizeSelector: false,
  162. allowedPageSizes: []
  163. },
  164. dataSource: materialsInView,
  165. columns: materialColumns.concat([
  166. { dataField: 'MaterialCount', width: '20%', alignment: 'center', caption: $G('materialCount'), format: 'currency' }
  167. ])
  168. });
  169. if (_.isObject(forApprovalOptions) === false) {
  170. modifiableMaterialDataGridOptions = utils.datagrid.defaultOptions({
  171. width: 500,
  172. pager: {
  173. showPageSizeSelector: false,
  174. allowedPageSizes: []
  175. },
  176. visible: viewModel.isEditModeInPopup,
  177. dataSource: materials,
  178. selection: { mode: 'multiple', allowSelectAll: true },
  179. columns: materialColumns.concat([
  180. {
  181. dataField: 'MaterialCount', width: '20%', type: 'number',
  182. caption: $G('materialCount'), alignment: 'center',
  183. cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({
  184. min: 1,
  185. max: 1000000,
  186. dataField: 'MaterialCount',
  187. convertValueWhenValueChanged: function (value) {
  188. return Math.max(1, value);
  189. }
  190. })
  191. }]),
  192. cellClick: function (e) {
  193. utils.datagrid.cellClickEventForDataGridTemplate(e, 'MaterialCount');
  194. },
  195. contentReadyAction: function (e) {
  196. materialGridView = e.component;
  197. },
  198. });
  199. viewModel.materialSearchPopup = BWA.Popup.Material.create(viewModel, {
  200. isMultipleSelect: true,
  201. onSelectedMaterials: function (selectedMaterials) {
  202. var materialReleaseId = viewModel.dataModel.MaterialReleaseId();
  203. _.each(selectedMaterials, function (sm) {
  204. // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.
  205. var found = _.some(materials(), function (m) {
  206. try {
  207. return m.MaterialId() === sm.MaterialId();
  208. } catch (e) {
  209. return m.MaterialId === sm.MaterialId;
  210. }
  211. });
  212. if (found) return;
  213. materials.push({
  214. SiteId: sm.SiteId,
  215. //PurchaseRequestId: ko.observable(purchaseRequestId),
  216. MaterialId: sm.MaterialId,
  217. Name: sm.Name,
  218. MaterialCode: sm.MaterialCode,
  219. //MaterialCount: sm.MaterialCount,
  220. MaterialCount: ko.observable(1),
  221. FinalPrice: sm.FinalPrice,
  222. // 자재정산은 반납도 하는 관계로 수량 한도를 설정하지 않음
  223. StockCountByPoint: sm.StockCount
  224. });
  225. });
  226. materialGridView.refresh();
  227. }
  228. });
  229. }
  230. return {
  231. materialGridView: materialGridView,
  232. materials: materials,
  233. businessFields: businessFields,
  234. isValidateWithFunction: isValidateWithFunction,
  235. materialDataGridOptions: materialDataGridOptions,
  236. modifiableMaterialDataGridOptions: modifiableMaterialDataGridOptions,
  237. handleAfterLoadingModelByKey: handleAfterLoadingModelByKey,
  238. //handleAfterSave: handleAfterSave,
  239. handlePopupShowing: handlePopupShowing,
  240. handlePopupShown: handlePopupShown,
  241. handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit,
  242. handleDeleteSelectedMaterials: handleDeleteSelectedMaterials
  243. };
  244. }
  245. }
  246. });
  247. // 구매신청 정보가 저장된 후에 호출 된다.
  248. // 등록이면 responseKey가 있고, 수정이면 없다.
  249. //function handleAfterSave(responseKey) {
  250. //var array = materials();
  251. //if (_.isEmpty(array)) {
  252. // return;
  253. //}
  254. //var siteId, purchaseRequestId, businessFieldId;
  255. //if (_.isUndefined(responseKey)) {
  256. // var dataModel = viewModel.dataModel;
  257. // siteId = dataModel.SiteId();
  258. // businessFieldId = dataModel.BusinessFieldId();
  259. // purchaseRequestId = dataModel.PurchaseRequestId();
  260. //}
  261. //else {
  262. // siteId = responseKey.SiteId;
  263. // businessFieldId = responseKey.BusinessFieldId;
  264. // purchaseRequestId = responseKey.PurchaseRequestId;
  265. //}
  266. //var postData;
  267. //var parameters = {
  268. // SiteId: siteId,
  269. // BusinessFieldId: businessFieldId,
  270. // PurchaseRequestId: purchaseRequestId
  271. //};
  272. //postData = _.map(array, function(m) {
  273. // return {
  274. // SiteId: siteId,
  275. // BusinessFieldId: businessFieldId,
  276. // PurchaseRequestId: purchaseRequestId,
  277. // MaterialId: m.MaterialId(),
  278. // MaterialCount: m.MaterialCount()
  279. // };
  280. //});
  281. //BWA.api.post('FmsMaterialPurchaseRequestMaterial', postData, parameters);
  282. //}
  283. //function handleAfterLoadingModelByKey(data, dataViewModel) {
  284. //if (dataViewModel.ProgressId() !== $Code.PurchaseProgress.PURCHASE_REQUEST) {
  285. // viewModel.visibleEditButton(false);
  286. // viewModel.visibleDeleteButton(false);
  287. //}
  288. //dataViewModel.ProgressName(purchaseProgressCode.getName(dataViewModel.ProgressId()));
  289. //var eq = BWA.DataUtil.constructEqualFilter;
  290. //var and = BWA.DataUtil.andFilter;
  291. //materialsDataSource.filter([
  292. // eq('SiteId', dataViewModel.SiteId()),
  293. // and,
  294. // eq('BusinessFieldId', dataViewModel.BusinessFieldId()),
  295. // and,
  296. // eq('PurchaseRequestId', dataViewModel.PurchaseRequestId())
  297. //]);
  298. //materialsDataSource.load().done(function(dbMaterials) {
  299. // materialsInView(dbMaterials);
  300. //});
  301. //}