d6b6595f0c706db91330230492317697cab9870e.svn-base 17 KB

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