ef467529b583eb025727dd332923f00f7bd42594.svn-base 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. BemsWebApplication.PurchaseOrder = function (params, viewInfo) {
  2. 'use strict';
  3. var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true),
  4. materialDataSource = BemsWebApplication.db.createDataSource('FmsMaterial', true, true),
  5. progressDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeProgress'),
  6. businessFields = ko.observableArray();
  7. var popup;
  8. var deferredForSearch = new $.Deferred();
  9. var businessFieldsForSearch = ko.observableArray(), progressesForSearch = ko.observableArray();
  10. var eq = BWA.DataUtil.constructEqualFilter;
  11. var and = BWA.DataUtil.andFilter;
  12. var dataSourceOptions = {
  13. select: [
  14. 'SiteId', 'BusinessFieldId', 'PurchaseOrderId', 'Title', 'OrderDate', 'StoredDueDate',
  15. 'CmFile/Name',
  16. 'FmsMaterialTradeCompany/Name',
  17. 'FmsMaterialPurchaseRequest/Title',
  18. 'FmsMaterialPurchaseRequest/Reason',
  19. 'FmsMaterialPurchaseRequest/FmsMaterialCodeProgress/Name',
  20. 'CmBusinessField/Name', 'CmUser/Name'
  21. ],
  22. filter: [
  23. eq('SiteId', BWA.UserInfo.SiteId()),
  24. and,
  25. [
  26. eq('FmsMaterialPurchaseRequest/ProgressId', $Code.PurchaseProgress.PURCHASE_REQUEST_APPROVAL),
  27. 'or',
  28. eq('FmsMaterialPurchaseRequest/ProgressId', $Code.PurchaseProgress.PURCHASE_ORDER_REQUEST)
  29. ]
  30. ],
  31. expand: [
  32. 'CmUser', 'FmsMaterialTradeCompany', 'CmFile',
  33. 'FmsMaterialPurchaseRequest', 'CmBusinessField',
  34. 'FmsMaterialPurchaseRequest/FmsMaterialCodeProgress',
  35. 'FmsMaterialPurchaseOrderMaterial/FmsMaterial'
  36. ],
  37. extendOptions: {
  38. forceOriginalField: true
  39. }
  40. }
  41. var viewModel;
  42. var viewOptions = {
  43. popupWidth: 1450,
  44. dataSourceOptions: dataSourceOptions,
  45. columns: [
  46. { dataField: 'PurchaseOrderId', caption: $G('number'), width: '10%', alignment: 'center' },
  47. { dataField: 'CmBusinessField/Name', caption: $G('businessField'), width: '10%', alignment: 'center' },
  48. { dataField: 'FmsMaterialPurchaseRequest/FmsMaterialCodeProgress/Name', caption: $G('progressStatus'), width: '10%', alignment: 'center' },
  49. { dataField: 'Title', caption: $G('purchaseOrderTitle'), width: '40%', alignment: 'center' },
  50. { dataField: 'CmUser/Name', caption: $G('purchaseOrdererName'), width: '10%', alignment: 'center' },
  51. {
  52. dataField: 'OrderDate', caption: $G('purchaseOrderDate'), width: '15%', alignment: 'center', sortOrder: 'desc', dataType: "shortDate", format: "yyyy-MM-dd",
  53. customizeText: function (cellInfo) {
  54. return cellInfo.valueText;
  55. }
  56. },
  57. {
  58. dataField: 'StoredDueDate', caption: $G('storedDueDate'), width: '15%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd",
  59. customizeText: function (cellInfo) {
  60. return cellInfo.valueText;
  61. }
  62. }
  63. ],
  64. paging: {
  65. pageSize: 18,
  66. enabled: true
  67. },
  68. pager: {},
  69. "export": {
  70. enabled: true,
  71. fileName: '발주 신청 목록',
  72. },
  73. onExporting: function (e) {
  74. e.component.columnOption("PurchaseOrderId", "visible", false);
  75. },
  76. onExported: function (e) {
  77. e.component.columnOption("PurchaseOrderId", "visible", true);
  78. },
  79. promiseDataInSearchView: deferredForSearch.promise(),
  80. searchViewItems: [
  81. { id: 'BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: businessFieldsForSearch },
  82. { id: 'OrderDate', type: 'dateRange', isOnlyDate: true },
  83. { id: 'Title' },
  84. { id: 'CmUser/Name' },
  85. //{ id: 'FmsMaterialTradeCompany/Name' },
  86. { id: 'FmsMaterial/Name', filterFormatString: 'FmsMaterialPurchaseOrderMaterial/any(c: substringof(\'{0}\', c/FmsMaterial/Name))', type: 'formatting' },
  87. //{ id: 'FmsMaterial/Name'},
  88. { id: 'FmsMaterialPurchaseRequest/ProgressId', ignoreValue: 0, defaultValue: 0, dataSource: progressesForSearch }
  89. ],
  90. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  91. dataGrid.clearSelection();
  92. var data = clickRow.data;
  93. var dataModel = viewModel.dataModel;
  94. popup.handleBeforeShowingPopupForEdit(data, dataModel);
  95. popupVisible(true);
  96. },
  97. handleAfterLoadingModelByKey: function (data, dataViewModel) {
  98. popup.handleAfterLoadingModelByKey(data, dataViewModel);
  99. },
  100. handlePopupShowing: function (isNewInPopup, dataViewModel) {
  101. popup.handlePopupShowing(isNewInPopup, dataViewModel);
  102. },
  103. handleSaveInPopup: function () {
  104. if (_.isEmpty(viewModel.popup.materials())) {
  105. utils.toast.show('선택된 발주등록 자재가 없습니다.', 'error');
  106. return false;
  107. }
  108. if ($G.date(viewModel.dataModel.StoredDueDate()) < $G.date(viewModel.dataModel.OrderDate())) {
  109. utils.toast.show('입고예정일은 발주일 이후로 설정하시기 바랍니다.', 'error');
  110. return;
  111. }
  112. if (_.isEmpty(viewModel.dataModel.PurchaseRequestTitle())) {
  113. utils.toast.show('선택된 구매요청 제목이 없습니다.', 'error');
  114. return;
  115. }
  116. BWA.db.FmsMaterialPurchaseOrder.insert(viewModel.dataModel.toJS()).done(function (response, responseKey) {
  117. if (popup && popup.handleAfterSave) {
  118. popup.handleAfterSave(response, responseKey);
  119. }
  120. });
  121. },
  122. beforeUpdateDataViewModel: function () {
  123. if (_.isEmpty(viewModel.popup.materials())) {
  124. utils.toast.show('선택된 발주등록 자재가 없습니다.', 'error');
  125. return 0;
  126. }
  127. if ($G.date(viewModel.dataModel.StoredDueDate()) < $G.date(viewModel.dataModel.OrderDate())) {
  128. utils.toast.show('입고예정일은 발주일 이후로 설정하시기 바랍니다.', 'error');
  129. return 0;
  130. }
  131. var keys = BWA.db.extractKeysObject('FmsMaterialPurchaseOrder', viewModel.dataModel);
  132. BWA.db.FmsMaterialPurchaseOrder.update(keys, viewModel.dataModel.toJS()).done(function (response, responseKey) {
  133. if (popup && popup.handleAfterSave) {
  134. popup.handleAfterSave(response, responseKey);
  135. }
  136. });
  137. return 1;
  138. },
  139. handleAfterSaveInPopup: function (responseKey, response) {
  140. popup.handleAfterSave(responseKey, response);
  141. },
  142. handlePopupShown: function (editMode, isNew, dataViewModel) {
  143. popup.handlePopupShown(editMode, isNew, dataViewModel);
  144. },
  145. handleViewShowing: function (dataModel) {
  146. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName)
  147. this.dataSourceOptions.filter.splice(0, this.dataSourceOptions.filter.length);
  148. this.dataSourceOptions.filter.push([eq('SiteId', BWA.UserInfo.SiteId())]);
  149. if (useBusinessFiltering) {
  150. this.dataSourceOptions.filter.push('and');
  151. this.dataSourceOptions.filter.push([eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId())]);
  152. businessFieldDataSource.filter([
  153. eq('SiteId', BWA.UserInfo.SiteId()),
  154. 'and',
  155. ['BusinessFieldId', '=', BWA.UserInfo.BusinessFieldId()],
  156. ]);
  157. }
  158. else {
  159. this.dataSourceOptions.filter.push('and');
  160. this.dataSourceOptions.filter.push(['BusinessFieldId', '<>', 1]);
  161. businessFieldDataSource.filter([
  162. eq('SiteId', BWA.UserInfo.SiteId()),
  163. 'and',
  164. ['BusinessFieldId', '<>', 1]
  165. ]);
  166. }
  167. $.when(
  168. businessFieldDataSource.load(),
  169. progressDataSource.load())
  170. .done(function (dbBusinessField, dbProgresses) {
  171. dbBusinessField = dbBusinessField[0];
  172. dbProgresses = dbProgresses[0];
  173. businessFields(dbBusinessField);
  174. businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', dbBusinessField));
  175. progressesForSearch($SearchView.createArrayOfSelectBox('ProgressId', dbProgresses));
  176. deferredForSearch.resolve();
  177. });
  178. },
  179. handleViewShown: function (dataViewModel, isEditModeInPopup) {
  180. popup.handleViewShown(dataViewModel, isEditModeInPopup);
  181. },
  182. handleSaveSuccess: function () {
  183. popup.handleSaveSuccess();
  184. },
  185. isValidateWithFunction: function (errorMessage) {
  186. return popup.isValidateWithFunction(errorMessage);
  187. },
  188. mandatoryFields: [
  189. { dataField: 'BusinessFieldId', name: $G('businessField') },
  190. { dataField: 'Title', name: $G('requestTitle') }
  191. ],
  192. getAddedToolbarItemsInPopup: function (e) {
  193. var isEditModeInPopup = e.isEditModeInPopup,
  194. isNewInPopup = e.isNewInPopup;
  195. return [{
  196. location: 'after', widget: 'button', options: {
  197. text: $G('materialInsertion'), icon: 'search', visible: isNewInPopup, //isEditModeInPopup,
  198. clickAction: function () {
  199. viewModel.materialSearchPopup.show();
  200. }
  201. }
  202. }, {
  203. location: 'after', widget: 'button', options: {
  204. text: $G('materialDeletion'), icon: 'remove', type: 'danger', visible: isNewInPopup,//isEditModeInPopup,
  205. clickAction: function () {
  206. popup.handleDeleteSelectedMaterials();
  207. }
  208. }
  209. }];
  210. }
  211. };
  212. viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsMaterialPurchaseOrder', viewOptions);
  213. viewModel.businessFields = businessFields;
  214. popup = viewModel.popup = BWA.Popup.PurchaseOrder.create(viewInfo, viewModel);
  215. return viewModel;
  216. };