2af59871b291f6e941bdaa11f50d49a38f692764.svn-base 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  1. BemsWebApplication.MaterialStockAdjustment = function (params, viewInfo, forApprovalOptions) {
  2. "use strict";
  3. var endpointSelector = "";
  4. if (BemsWebApplication.config.mode == "production") {
  5. endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.production;
  6. } else {
  7. endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.local;
  8. }
  9. var materialClassForSearch = ko.observableArray();
  10. var materialClass = ko.observableArray();
  11. var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');
  12. var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  13. var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()];
  14. var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
  15. var first = true, popupVisible1 = ko.observable(false);
  16. var visibleApprovalButton = ko.observable();
  17. var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true),
  18. materialClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass', true, true),
  19. warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, true),
  20. releaseTypeDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeReleaseType'),
  21. adjustmentTypeDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeAdjustmentType');
  22. var materialClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  23. businessFields = ko.observableArray(),
  24. releaseTypes = ko.observableArray(),
  25. warehouses = ko.observableArray(),
  26. materials = ko.observableArray(),
  27. adjustmentTypes = ko.observableArray();
  28. var forApprovalViewOptions, forApprovalPopupOptions, popup;
  29. var materialClassesForSearch = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
  30. materialClassValuesForSearch = [ko.observable(), ko.observable(), ko.observable()],
  31. businessFieldsForSearch = ko.observableArray(),
  32. businessFieldIdForSearch = ko.observable(),
  33. warehousesForSearch = ko.observableArray(),
  34. warehousesIdForSearch = ko.observable(),
  35. releaseTypesForSearch = ko.observableArray(),
  36. adjustmentTypesForSearch = ko.observableArray();
  37. if (_.isObject(forApprovalOptions)) {
  38. forApprovalViewOptions = forApprovalOptions.viewOptions;
  39. forApprovalPopupOptions = forApprovalOptions.popupOptions;
  40. }
  41. var deferredForSearch = new $.Deferred();
  42. var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId');
  43. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;
  44. function initializeSearchClasses(onlyThird) {
  45. if (onlyThird === undefined || onlyThird === false) {
  46. searchFacilityClasses[1](defaultSearchClassArray.slice(0));
  47. searchFacilityClassValues[1](0);
  48. }
  49. searchFacilityClasses[2](defaultSearchClassArray.slice(0));
  50. searchFacilityClassValues[2](0);
  51. }
  52. var handleFirstClassChangedValueInSearchView = function (e) {
  53. if (first == true && e.value == null) {
  54. e.value = 0;
  55. first = false;
  56. searchFacilityClassValues[0](0);
  57. }
  58. if (e.value === 0) {
  59. initializeSearchClasses();
  60. return;
  61. }
  62. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray);
  63. };
  64. var handleSecondClassChangedValueInSearchView = function (e) {
  65. if (searchFacilityClassValues[1]() == null) {
  66. initializeSearchClasses();
  67. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', 0, searchFacilityClasses[1], defaultSearchClassArray);
  68. }
  69. if (e.value === 0) {
  70. initializeSearchClasses(true);
  71. return;
  72. }
  73. BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray);
  74. };
  75. var dataSourceOptions = {
  76. select: [
  77. 'SiteId',
  78. 'BusinessFieldId',
  79. 'MaterialId',
  80. 'FmsMaterial/MaterialCode',
  81. 'FmsMaterial/Name',
  82. 'FmsMaterial/Unit',
  83. 'MaterialReleaseId',
  84. 'ReleaseTypeId',
  85. 'FmsMaterialCodeReleaseType/Name',
  86. 'FmsMaterialCodeAdjustmentType/Name',
  87. 'ReleaseDate',
  88. 'MaterialCount',
  89. 'ReleaseTotalCost',
  90. 'WarehouseId',
  91. 'CmUser1/Name',
  92. 'CmUser/Name',
  93. 'IsConfirmed',
  94. 'ConfirmedUserId',
  95. 'AdjustmentTypeId',
  96. 'StockCountByPoint',
  97. 'FmsMaterial/FirstClassId',
  98. 'FmsMaterial/SecondClassId',
  99. 'FmsMaterial/ThirdClassId',
  100. 'CmBusinessField/Name',
  101. 'FmsMaterial/Standard'
  102. ],
  103. filter: [
  104. ['SiteId', '=', BWA.UserInfo.SiteId()],
  105. 'and',
  106. ['AdjustmentTypeId', '<>', 0]
  107. ],
  108. expand: [
  109. 'CmUser', 'CmUser1',
  110. 'FmsMaterial',
  111. 'FmsMaterialCodeReleaseType',
  112. 'CmBusinessField',
  113. 'FmsMaterialCodeAdjustmentType'
  114. ],
  115. extendOptions: {
  116. forceOriginalField: true
  117. }
  118. };
  119. var viewModel;
  120. var viewOptions = {
  121. dataSourceOptions: dataSourceOptions,
  122. columns: [
  123. { dataField: 'MaterialReleaseId', caption: $G('number'), width: '8%', alignment: 'center', allowFiltering: false },
  124. { dataField: 'CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center', },
  125. { dataField: 'FmsMaterialCodeReleaseType/Name', caption: '출고구분', width: '10%', alignment: 'center', visible: false },
  126. { dataField: 'FmsMaterialCodeAdjustmentType/Name', caption: '정산사유', width: '10%', alignment: 'center' },
  127. { dataField: 'FmsMaterial/MaterialCode', caption: '자재코드', width: '20%', alignment: 'center', visible: false },
  128. {
  129. dataField: 'FmsMaterial/FirstClassId', width: '13%', caption: '자재(대)', alignment: 'center',
  130. customizeText: function (cellInfo) {
  131. for (var i = 1; i < materialClassForSearch().length; i++) {
  132. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  133. return materialClassForSearch()[i].Name();
  134. }
  135. }
  136. }
  137. },
  138. {
  139. dataField: 'FmsMaterial/SecondClassId', width: '13%', caption: '자재(중)', alignment: 'center',
  140. customizeText: function (cellInfo) {
  141. for (var i = 1; i < materialClassForSearch().length; i++) {
  142. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  143. return materialClassForSearch()[i].Name();
  144. }
  145. }
  146. }
  147. },
  148. {
  149. dataField: 'FmsMaterial/ThirdClassId', width: '13%', caption: '자재(소)', alignment: 'center',
  150. customizeText: function (cellInfo) {
  151. for (var i = 1; i < materialClassForSearch().length; i++) {
  152. if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
  153. return materialClassForSearch()[i].Name();
  154. }
  155. }
  156. }
  157. },
  158. { dataField: 'FmsMaterial/Name', caption: '자재명', width: '20%', alignment: 'center' },
  159. { dataField: 'FmsMaterial/Standard', caption: '규격', width: '20%', alignment: 'center' },
  160. { dataField: 'FmsMaterial/Unit', caption: '단위', width: '8%', alignment: 'center' },
  161. { dataField: 'MaterialCount', caption: '수량', width: '8%', alignment: 'center', format: 'fixedPoint' },
  162. {
  163. dataField: 'ReleaseDate', caption: '출고일', width: '20%', alignment: 'center', sortOrder: 'desc', dataType: "shortDate", format: "yyyy-MM-dd hh:mm:ss",
  164. customizeText: function (cellInfo) {
  165. return cellInfo.valueText;
  166. }
  167. },
  168. { dataField: 'CmUser1/Name', caption: '등록자', width: '10%', alignment: 'center' },
  169. { dataField: 'CmUser/Name', caption: '승인자', width: '10%', alignment: 'center' },
  170. ],
  171. pager: {
  172. },
  173. paging: {
  174. pageSize: 18,
  175. enabled: true
  176. },
  177. // 2019.04.17 엑셀 출력 기능 추가 ~~~
  178. "export": {
  179. enabled: true,
  180. fileName: '자재 정산 등록 목록'
  181. },
  182. onExporting: function (e) {
  183. e.component.columnOption("MaterialReleaseId", "visible", false);
  184. },
  185. onExported: function (e) {
  186. e.component.columnOption("MaterialReleaseId", "visible", true);
  187. },
  188. // ~~~ 2019.04.17 엑셀 출력 기능 추가
  189. selection: { mode: 'multiple', allowSelectAll: true },
  190. popupWidth: 1060,
  191. searchViewItems: [
  192. { id: 'ReleaseTypeId', ignoreValue: 0, defaultValue: 0, dataSource: releaseTypesForSearch },
  193. { id: 'FmsMaterialCodeAdjustmentType/Name' },
  194. { id: 'FmsMaterial/MaterialCode' },
  195. { id: 'FmsMaterial/Name' },
  196. { id: 'FmsMaterial/Unit' },
  197. { id: 'FmsMaterial/Standard' },
  198. { id: 'ReleaseDate', type: 'dateRange', isOnlyDate: true },
  199. { id: 'CmUser/Name' },
  200. { id: 'CmUser1/Name' },
  201. { id: 'FmsMaterial/FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
  202. { id: 'FmsMaterial/SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FmsMaterial/FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
  203. { id: 'FmsMaterial/ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FmsMaterial/FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },
  204. ],
  205. isValidateWithFunction: function (errorMessage) {
  206. return popup.isValidateWithFunction(errorMessage);
  207. },
  208. mandatoryFields: [
  209. { dataField: 'ReleaseDate', name: '출고일' },
  210. { dataField: 'BusinessFieldId', name: $G('businessField') },
  211. { dataField: 'FmsMaterialCodeReleaseType/Name', name: '출고구분' },
  212. { dataField: 'FmsMaterialCodeAdjustmentType/Name', name: '정산사유' }
  213. ],
  214. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  215. dataGrid.clearSelection();
  216. var data = clickRow.data;
  217. var dataModel = viewModel.dataModel;
  218. if (popup && popup.handleBeforeShowingPopupForEdit) {
  219. popup.handleBeforeShowingPopupForEdit(data, dataModel);
  220. }
  221. popupVisible(true);
  222. },
  223. handleAfterLoadingModelByKey: function (data, dataViewModel) {
  224. if (popup && popup.handleAfterLoadingModelByKey) {
  225. popup.handleAfterLoadingModelByKey(data, dataViewModel);
  226. }
  227. },
  228. handlePopupShowing: function (isNewInPopup, dataViewModel) {
  229. //if (isNewInPopup()) {
  230. // viewModel.toolbarItems[1].options.visible(true);
  231. // viewModel.toolbarItems[2].options.visible(true);
  232. //}
  233. //else {
  234. // viewModel.toolbarItems[1].options.visible(false);
  235. // viewModel.toolbarItems[2].options.visible(false);
  236. //}
  237. if (popup && popup.handlePopupShowing) {
  238. popup.handlePopupShowing(isNewInPopup, dataViewModel);
  239. }
  240. },
  241. handlePopupShown: function (editMode, isNew, dataViewModel) {
  242. if (popup && popup.handlePopupShown) {
  243. popup.handlePopupShown(editMode, isNew, dataViewModel);
  244. }
  245. },
  246. handleViewShowing: function () {
  247. MaterialCodeClassDataSource.filter([
  248. ['SiteId', '=', BWA.UserInfo.SiteId()]
  249. ]);
  250. $.when(
  251. MaterialCodeClassDataSource.load()
  252. ).done(function (Result) {
  253. materialClass = ko.observableArray();
  254. var cnt = 0;
  255. for (var i = 0; i < Result.length; i++) {
  256. materialClass.push(Result[i]);
  257. if (Result[i].Depth() == 0) {
  258. if (cnt == 0) {
  259. searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(Result[i]));
  260. cnt++;
  261. }
  262. else {
  263. searchFacilityClasses[0].push(Result[i]);
  264. }
  265. }
  266. }
  267. facilityClasses[0](Result[0]);
  268. materialClassForSearch($SearchView.createArrayOfSelectBox('MaterialClassId', materialClass()));
  269. });
  270. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName)
  271. if (useBusinessFiltering) {
  272. this.dataSourceOptions.filter.push('and');
  273. this.dataSourceOptions.filter.push([eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]);
  274. businessFieldDataSource.filter([
  275. eq('SiteId', BWA.UserInfo.SiteId()),
  276. and,
  277. [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]
  278. ]);
  279. }
  280. materialClassDataSource.filter([
  281. ['SiteId', '=', BWA.UserInfo.SiteId()],
  282. 'and',
  283. ['ParentMaterialClassId', '=', null]
  284. ]);
  285. adjustmentTypeDataSource.filter([
  286. ['AdjustmentTypeId', '<>', 0]
  287. ]);
  288. $.when(
  289. businessFieldDataSource.load(),
  290. materialClassDataSource.load(),
  291. warehouseDataSource.load(),
  292. releaseTypeDataSource.load(),
  293. adjustmentTypeDataSource.load()
  294. ).done(function (dbBusinessFields, dbMaterialClasses, dbWarehouses, dbreleaseTypes, dbadjustmentTypes) {
  295. dbBusinessFields = dbBusinessFields[0];
  296. dbMaterialClasses = dbMaterialClasses[0];
  297. dbWarehouses = dbWarehouses[0];
  298. // TODO : 아래 두코드의 차이점이 무엇인지 확인 필요.
  299. //releaseTypes(dbreleaseTypes);
  300. // 의도한 대로 동작하려면 아래 코드로 써야 함
  301. releaseTypes(dbreleaseTypes[0]);
  302. adjustmentTypes(dbadjustmentTypes[0]);
  303. materialClasses[0](dbMaterialClasses);
  304. materialClassesForSearch[0]($SearchView.createArrayOfSelectBox('MaterialClassId', dbMaterialClasses));
  305. initializeSearchClasses();
  306. businessFields(dbBusinessFields);
  307. warehouses(dbWarehouses);
  308. releaseTypesForSearch($SearchView.createArrayOfSelectBox('ReleaseTypeId', releaseTypes()));
  309. //adjustmentTypesForSearch($SearchView.createArrayOfSelectBox('AdjustmentTypeId', adjustmentTypes));
  310. //adjustmentTypesForSearch(adjustmentTypes);
  311. businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', dbBusinessFields));
  312. warehousesForSearch($SearchView.createArrayOfSelectBox('WarehouseId', dbWarehouses));
  313. deferredForSearch.resolve();
  314. });
  315. },
  316. handleViewShown: function () {
  317. },
  318. };
  319. if (_.isObject(forApprovalViewOptions)) {
  320. _.extend(viewOptions, forApprovalViewOptions);
  321. }
  322. else {
  323. // 승인 화면이 아니면 수정에 관련 기능이 필요없다.
  324. _.extend(viewOptions, {
  325. isValidateWithFunction: function (errorMessage) {
  326. if (popup && popup.isValidateWithFunction) {
  327. return popup.isValidateWithFunction(errorMessage);
  328. }
  329. return true;
  330. },
  331. mandatoryFields: [
  332. { dataField: 'BusinessFieldId', name: $G('businessField') }
  333. ],
  334. handleSaveButtonInPopup: function (isInsert) {
  335. if (isInsert === false) {
  336. if (popup && popup.handleAfterSave) {
  337. popup.handleAfterSave(undefined);
  338. }
  339. }
  340. },
  341. handleAfterSaveInPopup: function (responseKey, response) {
  342. if (popup && popup.handleAfterSave) {
  343. popup.handleAfterSave(responseKey, response);
  344. }
  345. },
  346. getAddedToolbarItemsInPopup: function (e) {
  347. var hasnotModificationPermission = e.hasnotModificationPermission,
  348. dataViewModel = e.dataViewModel,
  349. popupVisible = e.popupVisible,
  350. isEditModeInPopup = e.isEditModeInPopu,
  351. isNewInPopup = e.isNewInPopup
  352. return [
  353. {
  354. location: 'after', widget: 'button', options: {
  355. text: $G('materialInsertion'), icon: 'search', visible: isNewInPopup,
  356. clickAction: function () {
  357. viewModel.materialSearchPopup.show();
  358. }
  359. }
  360. },
  361. {
  362. location: 'after', widget: 'button', options: {
  363. text: $G('materialDeletion'), icon: 'remove', type: 'danger', visible: isNewInPopup,
  364. clickAction: function () {
  365. if (popup && popup.handleDeleteSelectedMaterials) { popup.handleDeleteSelectedMaterials(); }
  366. }
  367. }
  368. },
  369. {
  370. location: 'after',
  371. widget: 'button',
  372. options: {
  373. text: $G('approval'), icon: 'save', type: 'success',
  374. //visible: visibleApprovalButton,
  375. visible: false, // 2016 01 13 hcLee
  376. disabled: hasnotModificationPermission,
  377. clickAction: function () {
  378. dataViewModel.ConfirmedDate(new Date());
  379. dataViewModel.IsConfirmed(true);
  380. dataViewModel.ConfirmedUserId(BWA.UserInfo.UserId());
  381. var keys = BWA.db.extractKeysObject('FmsMaterialRelease', dataViewModel);
  382. BWA.db.FmsMaterialRelease.update(keys, dataViewModel.toJS()).done(function (res) {
  383. // TODO : 트랜잭션이 필요할 것으로 예상됨
  384. var postData = dataViewModel.toJS();
  385. var parameters = {
  386. SiteId: dataViewModel.SiteId(),
  387. BusinessFieldId: dataViewModel.BusinessFieldId(),
  388. MaterialId: dataViewModel.MaterialId()
  389. };
  390. // 자재 테이블 업데이트 필요, 자재정산 승인
  391. BWA.api.post('FmsMaterialRelease/Approval', postData, parameters).done(function () {
  392. utils.toast.show($G('successDatabaseInsertionMsg'));
  393. popupVisible(false);
  394. viewModel.gridView().refresh();
  395. });
  396. });
  397. }
  398. }
  399. }
  400. ];
  401. },
  402. });
  403. }
  404. viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsMaterialRelease', viewOptions);
  405. // 툴바 버튼 관련 수정
  406. viewModel.toolbarItems[7].options.clickAction = handlePopupButtonSave;
  407. //viewModel.toolbarItems[6].options.clickAction = handlePopupButtonSave;
  408. function handlePopupButtonSave() {
  409. if (viewModel.isNewInPopup()) {
  410. if (viewModel.popup.modifiableMaterialDataGridOptions.dataSource().length != 0) {
  411. var parameters = {
  412. SiteId: BWA.UserInfo.SiteId(),
  413. BusinessFieldId: viewModel.dataModel.BusinessFieldId(),
  414. //WorkRequestId: viewModel.dataModel.WorkRequestId()
  415. };
  416. var postData = [];
  417. var Totalcnt = viewModel.popup.modifiableMaterialDataGridOptions.dataSource().length, cnt = 0;
  418. for (var i = 0; i < Totalcnt; i++) {
  419. // AdjustmentTypeName
  420. // AdjustmentTypeId == 1 인 경우 재고수량보다 클 수 없음
  421. if (viewModel.dataModel.AdjustmentTypeId() == 1) {
  422. if (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount() > (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint)) {
  423. //viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount(viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCount());
  424. //viewModel.popup.materialGridView.refresh();
  425. utils.toast.show('자재손실은 재고수량 보다 클 수 없습니다.', 'error');
  426. return;
  427. }
  428. }
  429. var okcnt = 0;
  430. if (viewModel.dataModel.AdjustmentTypeId() == 2) {
  431. var dataSource = new DevExpress.data.DataSource({
  432. store: new DevExpress.data.ODataStore({
  433. url: endpointSelector + "/FmsMaterialStored"
  434. }),
  435. requireTotalCount: true,
  436. pageSize: 3000
  437. });
  438. dataSource.filter([
  439. ["SiteId", "=", BWA.UserInfo.SiteId()],
  440. "and",
  441. ["MaterialId", "=", (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId)]
  442. ]);
  443. dataSource.load()
  444. .done(function (result) {
  445. if (result != 0) {
  446. var varMaterialId = result[0].MaterialId;
  447. var MaterialId, StockCountByPoint, MaterialCount;
  448. for (var i = 0; i < result.length; i++) {
  449. okcnt += (result[i].StoredCount - result[i].RemainStoredCount);
  450. }
  451. for (var j = 0; j < Totalcnt; j++) {
  452. if (varMaterialId == (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId)) {
  453. StockCountByPoint = (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].StockCountByPoint) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].StockCountByPoint() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].StockCountByPoint);
  454. MaterialId = (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId);
  455. MaterialCount = (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialCount) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialCount() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialCount);
  456. }
  457. }
  458. if (MaterialCount <= okcnt) {
  459. viewModel.dataModel.StockCountByPoint(StockCountByPoint);
  460. viewModel.dataModel.MaterialId(MaterialId);
  461. viewModel.dataModel.MaterialCount(MaterialCount);
  462. viewModel.dataModel.ReleaseTotalCost(0);
  463. postData.push(viewModel.dataModel.toJS());
  464. }
  465. else {
  466. utils.toast.show('반납할 재고가 없습니다.', 'error');
  467. cnt++;
  468. return;
  469. }
  470. cnt++;
  471. if (Totalcnt == cnt) {
  472. BWA.api.post('FmsMaterialRelease/Add', postData, parameters).done(function () {
  473. utils.toast.show($G('successDatabaseInsertionMsg'));
  474. viewModel.popupVisible(false);
  475. viewModel.gridView().refresh();
  476. });
  477. }
  478. }
  479. else {
  480. cnt++;
  481. utils.toast.show('반납할 재고가 없습니다.', 'error');
  482. }
  483. });
  484. }
  485. else {
  486. viewModel.dataModel.StockCountByPoint((typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint));
  487. viewModel.dataModel.MaterialId((typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId));
  488. viewModel.dataModel.MaterialCount((typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount));
  489. viewModel.dataModel.ReleaseTotalCost(0);
  490. postData.push(viewModel.dataModel.toJS());
  491. cnt++;
  492. if (Totalcnt == cnt) {
  493. BWA.api.post('FmsMaterialRelease/Add', postData, parameters).done(function () {
  494. utils.toast.show($G('successDatabaseInsertionMsg'));
  495. viewModel.popupVisible(false);
  496. viewModel.gridView().refresh();
  497. });
  498. }
  499. }
  500. }
  501. }
  502. else {
  503. utils.toast.show('선택된 자재가 없습니다.', 'error');
  504. }
  505. }
  506. else if (viewModel.isEditModeInPopup()) {
  507. viewModel.dataModel.MaterialCount(viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[0].MaterialCount());
  508. var keys = BWA.db.extractKeysObject('FmsMaterialRelease', viewModel.dataModel);
  509. BWA.db.FmsMaterialRelease.update(keys, viewModel.dataModel.toJS()).done(function (res) {
  510. utils.toast.show($G('successDatabaseUpdateMsg'));
  511. viewModel.popupVisible(false);
  512. viewModel.gridView().refresh();
  513. });
  514. }
  515. };
  516. var commandInsertButtonOptions = [
  517. {
  518. id: 'create1',
  519. title: '등록',
  520. disabled: viewModel.hasnotModificationPermission,
  521. action: function () {
  522. viewModel.isNewInPopup(true);
  523. viewModel.viewModeInPopup(false);
  524. viewModel.isEditModeInPopup(true);
  525. viewModel.visibleDeleteButton(false);
  526. viewModel.visibleEditButton(false);
  527. viewModel.popupVisible(true);
  528. }
  529. }, // 2016 01 13 승인화면 따로 추가 hcLee
  530. {
  531. id: 'create2',
  532. title: '승인',
  533. disabled: viewModel.hasnotModificationPermission,
  534. action: handleApproveSelectedItem
  535. }];
  536. viewModel.businessFields = businessFields;
  537. viewModel.releaseTypes = releaseTypes;
  538. viewModel.adjustmentTypes = adjustmentTypes;
  539. viewModel.visibleApprovalButton = visibleApprovalButton;
  540. viewModel.commandInsertButtonOptions = commandInsertButtonOptions;
  541. var isUsePopup = forApprovalPopupOptions && forApprovalPopupOptions.isUsePopup !== false;
  542. if ((forApprovalPopupOptions && _.isFunction(forApprovalPopupOptions.popupCreatorFunc))) {
  543. popup = viewModel.popup = forApprovalPopupOptions.popupCreatorFunc(viewInfo, viewModel, forApprovalPopupOptions);
  544. }
  545. else {
  546. popup = viewModel.popup = BWA.Popup.MaterialStockAdjustment.create(viewInfo, viewModel, forApprovalPopupOptions);
  547. }
  548. function handleApproveSelectedItem() {
  549. var materialStoredList = viewModel.gridView().getSelectedRowsData();
  550. var list = _.reject(materialStoredList, function (x) {
  551. try {
  552. return x.IsConfirmed();
  553. } catch (e) {
  554. return x.IsConfirmed;
  555. }
  556. });
  557. if (_.isEmpty(list)) {
  558. utils.toast.show('승인 할 정산 항목이 없습니다. 이미 승인되었거나 선택된 항목이 없습니다.', 'error');
  559. return;
  560. }
  561. var postData = list; // undefined;
  562. list.forEach(function (item) {
  563. item.IsConfirmed = true;
  564. item.ConfirmedUserId = BWA.UserInfo.UserId();
  565. try {
  566. item.MaterialReleaseId = item.MaterialReleaseId();
  567. } catch (e) {
  568. item.MaterialReleaseId = item.MaterialReleaseId;
  569. }
  570. });
  571. return BWA.api.post('FmsMaterialRelease/ApprovalMany', postData).then(function () {
  572. viewModel.refreshList();
  573. utils.toast.show('성공적으로 승인 처리되었습니다.');
  574. });
  575. }
  576. viewModel.handleSecondClassChangedValueInSearchView1 = handleSecondClassChangedValueInSearchView;
  577. viewModel.handleFirstClassChangedValueInSearchView1 = handleFirstClassChangedValueInSearchView;
  578. return viewModel;
  579. };