634163d82f9b351ac3d268a3713e5b604dd593c0.svn-base 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. $(function () {
  2. 'use strict';
  3. BemsWebApplication.Popup.PurchaseOrderStatusByPurchaseRequest = {
  4. create: function (viewInfo, viewModel, forApprovalOptions) {
  5. var materials = ko.observableArray();
  6. var materialFactory = BWA.Factory.Material,
  7. purchaseProgressCode = BWA.Code.PurchaseProgress,
  8. materialGridView,
  9. materialDataGridOptions = undefined;
  10. var materialsDataSource = materialFactory.getBasicDataSourceRef({
  11. dbModeIId: 'FmsMaterialPurchaseRequestMaterial',
  12. primaryKeyDataField: 'PurchaseRequestId'
  13. }),
  14. materialsForPurchaseOrderDataSource = materialFactory.getBasicDataSourceRef({
  15. dbModeIId: 'FmsMaterialPurchaseOrderMaterial',
  16. primaryKeyDataField: 'PurchaseOrderId',
  17. expand: ['FmsMaterialPurchaseOrder'],
  18. moreSelectFields: [
  19. 'FmsMaterialPurchaseOrder/StoredDueDate',
  20. 'FmsMaterialPurchaseOrder/OrderDate',
  21. 'FmsMaterial/TradeCompanyId',
  22. 'FmsMaterial/FinalPrice'
  23. ]
  24. });
  25. function handlePopupShowing(isNewInPopup, dataModel) {
  26. $("#gridContainer2").dxDataGrid({
  27. paging: {
  28. pageSize: 12,
  29. enabled: true
  30. }
  31. });
  32. var userInfo = BWA.UserInfo;
  33. if (isNewInPopup()) {
  34. var progressId = $Code.PurchaseProgress.PURCHASE_REQUEST;
  35. if (userInfo.isDependBusinessField(viewInfo.viewName)) {
  36. BWA.db.CmBusinessField.byKey({
  37. SiteId: userInfo.SiteId(),
  38. BusinessFieldId: userInfo.BusinessFieldId()
  39. }).done(function (businessField) {
  40. dataModel.BusinessFieldName(businessField.Name);
  41. });
  42. }
  43. dataModel.ProgressId(progressId);
  44. dataModel.ProgressName(purchaseProgressCode.getName(progressId));
  45. dataModel.BusinessFieldId(userInfo.BusinessFieldId());
  46. dataModel.RequestUserId(userInfo.UserId());
  47. dataModel.RequesterName(userInfo.Name());
  48. dataModel.RequestDate(new Date());
  49. dataModel.PurchaseHopeDate(moment().add(1, 'd').toDate());
  50. }
  51. }
  52. function handleDeleteSelectedMaterials() {
  53. }
  54. function handlePopupShown(editMode, isNew, dataViewModel) {
  55. }
  56. // 구매신청 정보가 저장된 후에 호출 된다.
  57. // 등록이면 responseKey가 있고, 수정이면 없다.
  58. function handleAfterSave(responseKey) {
  59. }
  60. function handleAfterLoadingModelByKey(data, dataViewModel) {
  61. if (dataViewModel.ProgressId() !== $Code.PurchaseProgress.PURCHASE_REQUEST) {
  62. viewModel.visibleEditButton(false);
  63. viewModel.visibleDeleteButton(false);
  64. }
  65. dataViewModel.ProgressName(purchaseProgressCode.getName(dataViewModel.ProgressId()));
  66. var eq = BWA.DataUtil.constructEqualFilter;
  67. var and = BWA.DataUtil.andFilter;
  68. materialsDataSource.filter([
  69. eq('SiteId', dataViewModel.SiteId()),
  70. and,
  71. eq('BusinessFieldId', dataViewModel.BusinessFieldId()),
  72. and,
  73. eq('PurchaseRequestId', dataViewModel.PurchaseRequestId())
  74. ]);
  75. materialsForPurchaseOrderDataSource.filter([
  76. eq('SiteId', dataViewModel.SiteId()),
  77. and,
  78. eq('BusinessFieldId', dataViewModel.BusinessFieldId()),
  79. and,
  80. eq('FmsMaterialPurchaseOrder/PurchaseRequestId', dataViewModel.PurchaseRequestId())
  81. ]);
  82. $.when(
  83. materialsDataSource.load(),
  84. materialsForPurchaseOrderDataSource.load())
  85. .done(function (dbRequestMaterials, dbOrderMaterials) {
  86. dbRequestMaterials = dbRequestMaterials[0];
  87. dbOrderMaterials = dbOrderMaterials[0];
  88. var materialArray = [];
  89. _.each(dbRequestMaterials, function (requestMaterial) {
  90. var materialId = requestMaterial.MaterialId();
  91. var material = BWA.DataUtil.convertViewModelToJS(requestMaterial);
  92. var orderMaterial = BWA.DataUtil.popFromArray(dbOrderMaterials, function (m) {
  93. return (m.MaterialId() === materialId);
  94. });
  95. if (orderMaterial) {
  96. material.PurchaseOrderCount = orderMaterial.MaterialCount();
  97. material.StoredDueDate = orderMaterial['FmsMaterialPurchaseOrder/StoredDueDate']();
  98. material.OrderDate = orderMaterial['FmsMaterialPurchaseOrder/OrderDate']();
  99. }
  100. materialArray.push(material);
  101. });
  102. if (_.isEmpty(dbOrderMaterials) === false) {
  103. _.each(dbOrderMaterials, function (m) {
  104. // 같은 자재에 대해 발주가 여러개라면 더해준다.
  105. var dupOrderMaterial = _.find(materialArray, function (mm) {
  106. return mm.MaterialId === m.MaterialId();
  107. });
  108. if (dupOrderMaterial) {
  109. dupOrderMaterial.PurchaseOrderCount += m.MaterialCount();
  110. return;
  111. }
  112. var material = BWA.DataUtil.convertViewModelToJS(m);
  113. material.PurchaseOrderCount = m.MaterialCount();
  114. delete material.MaterialCount;
  115. material.StoredDueDate = m['FmsMaterialPurchaseOrder/StoredDueDate']();
  116. material.OrderDate = m['FmsMaterialPurchaseOrder/OrderDate']();
  117. materialArray.push(material);
  118. });
  119. }
  120. materials(materialArray);
  121. });
  122. }
  123. function handleBeforeShowingPopupForEdit(rowData, dataViewModel) {
  124. dataViewModel.BusinessFieldName = $KoSet(dataViewModel.BusinessFieldName, rowData['CmBusinessField/Name']);
  125. dataViewModel.RequesterName = $KoSet(dataViewModel.RequesterName, rowData['CmUser/Name']);
  126. dataViewModel.ApprovalUserName = $KoSet(dataViewModel.ApprovalUserName, rowData['CmUser1/Name']);
  127. dataViewModel.PurchaseTypeName = $KoSet(dataViewModel.PurchaseTypeName, rowData['FmsMaterialCodePurchaseType/Name']);
  128. }
  129. viewModel.popupVisible.subscribe(function (visible) {
  130. if (!visible) {
  131. materials([]);
  132. }
  133. });
  134. viewModel.dataModel.BusinessFieldName = ko.observable();
  135. viewModel.dataModel.ProgressName = ko.observable();
  136. viewModel.dataModel.RequesterName = ko.observable();
  137. viewModel.dataModel.PurchaseTypeName = ko.observable();
  138. var materialColumns = materialFactory.getColumns([
  139. { dataField: 'MaterialCode', width: '20%' },
  140. { dataField: 'Name', width: '30%' },
  141. { dataField: 'Standard', width: '30%', alignment: 'center', caption: '규격' },
  142. { dataField: 'Unit', width: '15%', alignment: 'center', caption: '단위' }
  143. ]);
  144. materialDataGridOptions = utils.datagrid.defaultOptions({
  145. width: 840,
  146. visible: viewModel.viewModeInPopup,
  147. pager: {
  148. showPageSizeSelector: false,
  149. allowedPageSizes: []
  150. },
  151. dataSource: materials,
  152. columns: materialColumns.concat([
  153. { dataField: 'MaterialCount', width: '15%', alignment: 'center', caption: '구매신청수량', format: 'currency' },
  154. { dataField: 'PurchaseOrderCount', width: '15%', alignment: 'center', caption: $G('purchaseOrderCount'), format: 'currency' },
  155. { dataField: 'StoredDueDate', width: '15%', alignment: 'center', caption: $G('storedDueDate') },
  156. ]),
  157. rowPrepared: function (rowElement, rowInfo) {
  158. if (rowInfo.rowType == 'data') {
  159. var data = rowInfo.data;
  160. if (data.MaterialCount !== data.PurchaseOrderCount) {
  161. rowElement.css('background-color', 'rgba(255,0,0,0.1)');
  162. }
  163. }
  164. }
  165. });
  166. return {
  167. materialDataGridOptions: materialDataGridOptions,
  168. handleAfterLoadingModelByKey: handleAfterLoadingModelByKey,
  169. handlePopupShowing: handlePopupShowing,
  170. handlePopupShown: handlePopupShown,
  171. handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit,
  172. };
  173. }
  174. }
  175. });