2888a74d43c1a141c5aa93f1cd26e90005fb891f.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. $(function () {
  2. 'use strict';
  3. BemsWebApplication.Popup.MaterialStored = {
  4. create: function (viewInfo, viewModel, forApprovalOptions) {
  5. var material = BWA.db.createDataSource('FmsMaterialStored', true, true),
  6. materials = ko.observableArray(),
  7. dataModelMaterial = new BWA.FmsMaterialViewModel();
  8. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;
  9. var materialFactory = BWA.Factory.Material,
  10. purchaseProgressCode = BWA.Code.PurchaseProgress,
  11. materialGridView,
  12. materialDataGridOptions = undefined;
  13. var materialsDataSource = materialFactory.getBasicDataSourceRef({
  14. dbModeIId: 'FmsMaterialPurchaseRequestMaterial',
  15. primaryKeyDataField: 'PurchaseRequestId'
  16. }),
  17. materialsForPurchaseRequestDataSource = materialFactory.getBasicDataSourceRef({
  18. dbModeIId: 'FmsMaterialPurchaseRequestMaterial',
  19. primaryKeyDataField: 'PurchaseRequestId',
  20. moreSelectFields: [
  21. 'FmsMaterial/Unit', 'FmsMaterial/Standard',
  22. 'FmsMaterial/TradeCompanyId',
  23. 'FmsMaterial/FinalPrice']
  24. });
  25. function loadMaterialsInPurchaseRequest(purchaseRequest) {
  26. materialsForPurchaseRequestDataSource.filter([
  27. eq('SiteId', purchaseRequest.SiteId),
  28. and,
  29. eq('BusinessFieldId', purchaseRequest.BusinessFieldId),
  30. and,
  31. eq('PurchaseRequestId', purchaseRequest.PurchaseRequestId)
  32. ]);
  33. // 선택된 구매요청에 대한 자재들을 로드한다.
  34. var promise = materialsForPurchaseRequestDataSource.load();
  35. promise.then(function (dbMaterials) {
  36. var companies = [];
  37. materials(_.map(dbMaterials, function (m) {
  38. m.Unit = m['FmsMaterial/Unit'];
  39. m.Standard = m['FmsMaterial/Standard'];
  40. m.UnitCost = m['FmsMaterial/FinalPrice'];
  41. if (m.UnitCost() === null) {
  42. m.UnitCost(0);
  43. }
  44. return m;
  45. }));
  46. });
  47. }
  48. // 구매신청 정보가 저장된 후에 호출 된다.
  49. // 등록이면 responseKey가 있고, 수정이면 없다.
  50. function handleAfterSave(responseKey, response) {
  51. BWA.db.FmsMaterialPurchaseRequest.update({
  52. SiteId: response.SiteId,
  53. BusinessFieldId: response.BusinessFieldId,
  54. PurchaseRequestId: response.PurchaseRequestId
  55. }, {
  56. ProgressId: $Code.PurchaseProgress.MATERIAL_STORED
  57. });
  58. }
  59. function handlePopupShowing(isNewInPopup, dataModel) {
  60. var userInfo = BWA.UserInfo;
  61. if (isNewInPopup()) {
  62. var progressId = $Code.PurchaseProgress.MATERIAL_STORED;
  63. dataModel.ProgressName(purchaseProgressCode.getName(progressId));
  64. dataModel.BusinessFieldId(userInfo.BusinessFieldId());
  65. dataModel.StoredUserId(userInfo.UserId());
  66. dataModel.StoredUserName(userInfo.Name());
  67. dataModel.StoredDate(new Date());
  68. }
  69. }
  70. function handlePopupShown(isEditMode, isNew, dataViewModel) {
  71. var warehouses = viewModel.warehouses();
  72. if (!_.isEmpty(warehouses)) {
  73. dataViewModel.WarehouseId(warehouses[0].WarehouseId());
  74. }
  75. if (isEditMode) {
  76. if (isNew) {
  77. dataViewModel.IsApproval(false);
  78. }
  79. var userInfo = BWA.UserInfo;
  80. dataViewModel.BusinessFieldId(userInfo.BusinessFieldId());
  81. dataViewModel.BusinessFieldName(userInfo.BusinessFieldName());
  82. }
  83. }
  84. function handleAfterLoadingModelByKey(data, dataViewModel) {
  85. var progressId = dataViewModel.ProgressId();
  86. if (progressId !== $Code.PurchaseProgress.MATERIAL_STORED) {
  87. viewModel.visibleEditButton(false);
  88. viewModel.visibleDeleteButton(false);
  89. }
  90. dataViewModel.ProgressName(purchaseProgressCode.getName(progressId));
  91. var eq = BWA.DataUtil.constructEqualFilter;
  92. var and = BWA.DataUtil.andFilter;
  93. materialsDataSource.filter([
  94. eq('SiteId', dataViewModel.SiteId()),
  95. and,
  96. eq('BusinessFieldId', dataViewModel.BusinessFieldId()),
  97. and,
  98. eq('PurchaseRequestId', dataViewModel.PurchaseRequestId())
  99. ]);
  100. materialsDataSource.load().done(function (dbMaterials) {
  101. materials(dbMaterials);
  102. });
  103. }
  104. function handleBeforeShowingPopupForEdit(rowData, dataViewModel) {
  105. dataViewModel.BusinessFieldName = $KoSet(dataViewModel.BusinessFieldName, rowData['CmBusinessField/Name']);
  106. dataViewModel.StoredUserName = $KoSet(dataViewModel.StoredUserName, rowData['CmUser/Name']);
  107. dataViewModel.PurchaseRequestTitle = $KoSet(dataViewModel.PurchaseRequestTitle, rowData['FmsMaterialPurchaseRequest/Title']);
  108. dataViewModel.ApprovalUserName = $KoSet(dataViewModel.ApprovalUserName, rowData['CmUser1/Name']);
  109. dataViewModel.WarehouseName = $KoSet(dataViewModel.WarehouseName, rowData['FmsMaterialWarehouse/Name']);
  110. dataViewModel.ProgressId = $KoSet(dataViewModel.ProgressId, rowData['FmsMaterialPurchaseRequest/ProgressId']);
  111. dataViewModel.ProgressName = $KoSet(dataViewModel.ProgressName, rowData['FmsMaterialPurchaseRequest/FmsMaterialCodeProgress/Name']);
  112. dataModelMaterial.Name(rowData['FmsMaterial/Name']());
  113. dataModelMaterial.Unit(rowData['FmsMaterial/Unit']());
  114. dataModelMaterial.Standard(rowData['FmsMaterial/Standard']());
  115. }
  116. function handleButtonSearchPurchaseRequest() {
  117. viewModel.purchaseRequestSearchPopup.show();
  118. }
  119. function handleButtonSearchMaterial() {
  120. viewModel.materialSearchPopup.show();
  121. }
  122. viewModel.popupVisible.subscribe(function (visible) {
  123. if (!visible) {
  124. materials([]);
  125. }
  126. });
  127. viewModel.dataModel.StoredCount.subscribe(function (count) {
  128. viewModel.dataModel.StockCount(count);
  129. });
  130. viewModel.dataModel.PurchaseRequestTitle = ko.observable();
  131. viewModel.dataModel.BusinessFieldName = ko.observable();
  132. viewModel.dataModel.ProgressName = ko.observable();
  133. viewModel.dataModel.StoredUserName = ko.observable();
  134. viewModel.dataModel.WarehouseName = ko.observable();
  135. materialDataGridOptions = utils.datagrid.defaultOptions({
  136. width: 650,
  137. visible: true,
  138. pager: {
  139. showPageSizeSelector: false,
  140. allowedPageSizes: []
  141. },
  142. dataSource: materials,
  143. columns: materialFactory.getColumns([
  144. { dataField: 'MaterialCode', width: '35%' },
  145. { dataField: 'Name', width: '40%' },
  146. { dataField: 'MaterialCount', width: '15%', alignment: 'center', caption: $G('materialCount') },
  147. {
  148. dataField: 'UnitCost', width: '20%', alignment: 'center', caption: $G('unitCost')
  149. }
  150. ]),
  151. contentReadyAction: function (e) {
  152. materialGridView = e.component;
  153. },
  154. rowPrepared: function (rowElement, rowInfo) {
  155. var data = rowInfo.data;
  156. if (data.MaterialId() === viewModel.dataModel.MaterialId()) {
  157. var color;
  158. if (data.MaterialCount() === viewModel.dataModel.StoredCount()) {
  159. color = 'rgba(0,255,0,0.1)';
  160. }
  161. else {
  162. color = 'rgba(255,0,0,0.1)';
  163. }
  164. rowElement.css('background-color', color);
  165. }
  166. },
  167. rowClick: function (clickRow) {
  168. var data = clickRow.data;
  169. if (viewModel.isEditModeInPopup()) {
  170. dataModelMaterial.MaterialId(data.MaterialId());
  171. dataModelMaterial.Name(data.Name());
  172. dataModelMaterial.Unit(data.Unit());
  173. dataModelMaterial.Standard(data.Standard());
  174. viewModel.dataModel.MaterialId(data.MaterialId());
  175. viewModel.dataModel.StoredCount(data.MaterialCount());
  176. viewModel.dataModel.UnitCost(data.UnitCost());
  177. }
  178. }
  179. });
  180. if (_.isObject(forApprovalOptions) === false) {
  181. viewModel.materialSearchPopup = BWA.Popup.Material.create(viewModel, {
  182. isMultipleSelect: false,
  183. onSelectedMaterials: function (selectedMaterial) {
  184. var purchaseRequestId = viewModel.dataModel.PurchaseRequestId();
  185. var dm = viewModel.dataModel;
  186. var m = selectedMaterial[0];
  187. viewModel.dataModel.MaterialId(m.MaterialId);
  188. viewModel.dataModel.UnitCost(m.FinalPrice);
  189. dataModelMaterial.fromJS(m);
  190. materialGridView.refresh();
  191. }
  192. });
  193. viewModel.purchaseRequestSearchPopup = BWA.Popup.PurchaseRequestSearch.create(viewModel, {
  194. filter: [
  195. eq('SiteId', BWA.UserInfo.SiteId()),
  196. and,
  197. [ // 구매요청에서 자재입고 승인 전까지 입고가 가능하다.
  198. ['ProgressId', '>=', $Code.PurchaseProgress.PURCHASE_REQUEST_APPROVAL],
  199. and,
  200. ['ProgressId', '<', $Code.PurchaseProgress.MATERIAL_STORED_APPROVAL]
  201. ]
  202. ],
  203. onSelectedPurchaseRequest: function (purchaseRequest) {
  204. var purchaseRequestId = purchaseRequest.PurchaseRequestId;
  205. loadMaterialsInPurchaseRequest(purchaseRequest);
  206. viewModel.dataModel.PurchaseRequestId(purchaseRequest.PurchaseRequestId);
  207. viewModel.dataModel.PurchaseRequestTitle(purchaseRequest.Title);
  208. }
  209. });
  210. }
  211. return {
  212. dataModelMaterial: dataModelMaterial,
  213. materialDataGridOptions: materialDataGridOptions,
  214. handleAfterLoadingModelByKey: handleAfterLoadingModelByKey,
  215. handleAfterSave: handleAfterSave,
  216. handlePopupShowing: handlePopupShowing,
  217. handlePopupShown: handlePopupShown,
  218. handleButtonSearchPurchaseRequest: handleButtonSearchPurchaseRequest,
  219. handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit,
  220. handleButtonSearchMaterial: handleButtonSearchMaterial,
  221. };
  222. }
  223. }
  224. });