ff2f05b358e91d604f85599e33e03fb6e3aaea38.svn-base 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. 
  2. $(function () {
  3. 'use strict';
  4. BemsWebApplication.Popup.WorkResultCheckItemMaterial = {
  5. create: function (viewInfo, viewModel) {
  6. var ex = 0;
  7. var eq = BWA.DataUtil.constructEqualFilter;
  8. var and = BWA.DataUtil.andFilter;
  9. var deletestate = false;
  10. var overlayVisible = ko.observable(false),
  11. position = ko.observable(),
  12. timer = null;
  13. var materialGridView2 = ko.observable();
  14. var materials2 = ko.observableArray();
  15. var materialFactory2 = BWA.Factory.Material;
  16. var materialColumns2 = materialFactory2.getColumns([
  17. { dataField: 'MaterialCode', width: '30%' },
  18. { dataField: 'Name', width: '40%' },
  19. { dataField: 'Standard', width: '40%' }
  20. ]);
  21. var materials2DataSource = BemsWebApplication.db.createDataSource('FmsWorkResultCheckItemMaterial', true, true, true);
  22. var fmsmaterialsDataSource = BemsWebApplication.db.createDataSource('FmsMaterial', true, true, true);
  23. //var modifiableMaterialDataGridOptions2 = null;
  24. overlayVisible.subscribe(function (value) {
  25. if (value) {
  26. if (timer !== null) {
  27. clearInterval(timer);
  28. }
  29. var top, left;
  30. //var element = $('#popupWorkContentsDetail').offsetParent();
  31. var element = $('#currentWorkpopupDetail').offsetParent();
  32. position({ my: 'left top', at: 'right top', of: element });
  33. timer = setInterval(function () {
  34. var offset = element.offset();
  35. if (top !== offset.top || left !== offset.left) {
  36. top = offset.top;
  37. left = offset.left;
  38. position({ my: 'left top', at: 'right top', of: element });
  39. }
  40. }, 100);
  41. }
  42. else {
  43. if (timer !== null) {
  44. clearInterval(timer);
  45. timer = null;
  46. }
  47. }
  48. });
  49. position.subscribe(function (value) {
  50. });
  51. viewModel.popupVisible.subscribe(function (value) {
  52. if (value === false) {
  53. overlayVisible(false);
  54. materials2([]);
  55. }
  56. //workProgressDataSource.load().done(function (result) {
  57. // progresses(result);
  58. //});
  59. });
  60. viewModel.workResultContentsViewOptions = {
  61. width: '530px',
  62. height: '682px',
  63. dragEnabled: false,
  64. position: position,
  65. visible: overlayVisible,
  66. showingAction: function () {
  67. $("#gridContainer2").dxDataGrid({
  68. paging: {
  69. pageSize: 14,
  70. enabled: true
  71. }
  72. });
  73. },
  74. closeOnOutsideClick: false,
  75. shading: false,
  76. animation: {
  77. show: { type: "slide", duration: 150, from: { left: '-=10', opacity: 0 }, to: { opacity: 1 } },
  78. hide: { type: "slide", duration: 150, from: { left: '-=10', opacity: 1 }, to: { opacity: 0 } }
  79. }
  80. };
  81. //var popup = e.component;
  82. viewModel.toolbarItemsInWorkResult = [
  83. { location: 'before', text: '자재사용내역' },
  84. //{
  85. // location: 'after', widget: 'button', options: {
  86. // text: $G('materialInsertion'), icon: 'search', visible: viewModel.isApprovalMode(), // !viewModel.isWorkHistory(),
  87. // clickAction: function () {
  88. // viewModel.isAddPopup(false);
  89. // viewModel.materialSearchPopup.show();
  90. // }
  91. // }
  92. //},
  93. //{
  94. // location: 'after', widget: 'button', options: {
  95. // text: $G('materialDeletion'), icon: 'remove', type: 'danger', visible: viewModel.isApprovalMode(),//!viewModel.isWorkHistory(),
  96. // clickAction: function () { handleDeleteSelectedMaterials(); }
  97. // }
  98. //},
  99. //{
  100. // location: 'after', widget: 'button', options: {
  101. // text: $G('save'), icon: 'save', visible: viewModel.isApprovalMode(),
  102. // clickAction: function () {
  103. // saveApprovalMaterials();
  104. // }
  105. // }
  106. //}
  107. ];
  108. viewModel.modifiableMaterialDataGridOptions2 = utils.datagrid.defaultOptions({
  109. width: 500,
  110. pager: {
  111. showPageSizeSelector: false,
  112. allowedPageSizes: []
  113. },
  114. // visible: viewModel.isEditModeInPopup,
  115. dataSource: materials2,
  116. selection: { mode: 'none', allowSelectAll: true },
  117. columns: materialColumns2.concat([{
  118. dataField: 'MaterialCount', width: '20%', type: 'number',
  119. caption: $G('materialCount'), alignment: 'center',
  120. //19.08.21 자재사용내역 수량 변경 금지
  121. //cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({
  122. // min: 1,
  123. // max: 1000000,
  124. // dataField: 'MaterialCount',
  125. // convertValueWhenValueChanged: function (value) {
  126. // return Math.max(1, value);
  127. // }
  128. //})
  129. }]),
  130. cellClick: function (e) {
  131. utils.datagrid.cellClickEventForDataGridTemplate(e, 'MaterialCount');
  132. },
  133. contentReadyAction: function (e) {
  134. materialGridView2(e.component);
  135. },
  136. });
  137. function handleDeleteSelectedMaterials() {
  138. var rows = materialGridView2().getSelectedRowsData();
  139. if (_.isEmpty(rows)) {
  140. utils.toast.show('선택된 자재가 없습니다.', 'error');
  141. return;
  142. }
  143. _.each(rows, function (row) {
  144. var array = materials2();
  145. var length = array.length;
  146. var id = row.MaterialId();
  147. for (var i = 0 ; i < length ; i++) {
  148. if (id === array[i].MaterialId()) {
  149. materials2().splice(i, 1);
  150. break;
  151. }
  152. }
  153. });
  154. materialGridView2().refresh();
  155. }
  156. function saveApprovalMaterials() {
  157. var workCheckItem = new BemsWebApplication.FmsWorkResultCheckItemViewModel();
  158. workCheckItem.SiteId(viewModel.dataModel.SiteId());
  159. workCheckItem.WorkRequestId(viewModel.dataModel.WorkRequestId());
  160. // Warning: 다른 로직이 필요할 수 있음
  161. if (viewModel.dataModel.selectedItemCheckItemId() == 0) {
  162. var itemId = viewModel.workResultCheckItems()[viewModel.workResultCheckItems().length - 1].CheckItemId();
  163. workCheckItem.CheckItemId(itemId);
  164. }
  165. else {
  166. workCheckItem.CheckItemId(viewModel.dataModel.selectedItemCheckItemId());
  167. }
  168. workCheckItem.TextResult(viewModel.dataModel.selectedItemTextResult())
  169. var array = materials2();
  170. if (array.length != 0) {
  171. var postData;
  172. var parameters2 = {
  173. SiteId: workCheckItem.SiteId(),
  174. BusinessFieldId: viewModel.dataModel.BusinessFieldId(),
  175. WorkRequestId: workCheckItem.WorkRequestId(),
  176. CheckItemId: workCheckItem.CheckItemId()
  177. };
  178. postData = _.map(array, function (m) {
  179. return {
  180. SiteId: workCheckItem.SiteId(),
  181. WorkRequestId: workCheckItem.WorkRequestId(),
  182. MaterialId: m.MaterialId(),
  183. MaterialCount: m.MaterialCount(),
  184. CheckItemId: workCheckItem.CheckItemId(),
  185. MaterialCode: m.MaterialCode(),
  186. Name: m.Name()
  187. };
  188. });
  189. BWA.api.post('FmsWorkResultCheckItemMaterial/Approval', postData, parameters2).done(function () {
  190. refreshMaterialGrid();
  191. utils.toast.show($G('successDatabaseInsertionMsg'));
  192. });
  193. }
  194. else {
  195. var postData;
  196. var parameters2 = {
  197. SiteId: workCheckItem.SiteId(),
  198. BusinessFieldId: viewModel.dataModel.BusinessFieldId(),
  199. WorkRequestId: workCheckItem.WorkRequestId(),
  200. CheckItemId: workCheckItem.CheckItemId()
  201. };
  202. postData = _.map(array, function (m) {
  203. return null;
  204. });
  205. BWA.api.post('FmsWorkResultCheckItemMaterial/Approval', postData, parameters2).done(function () {
  206. refreshMaterialGrid();
  207. utils.toast.show($G('successDatabaseInsertionMsg'));
  208. });
  209. }
  210. }
  211. var fmsMaterialsdata;
  212. function refreshMaterialGrid() {
  213. //viewModel.workResultCheckItemMaterialPopup.materials2([]);
  214. materials2([]);
  215. //viewModel.workResultCheckItemMaterialPopup.materials2DataSource.filter([
  216. materials2DataSource.filter([
  217. eq('SiteId', viewModel.dataModel.SiteId()),
  218. and,
  219. eq('WorkRequestId', viewModel.dataModel.WorkRequestId())
  220. ]);
  221. fmsmaterialsDataSource.filter([
  222. eq('SiteId', viewModel.dataModel.SiteId())
  223. ]);
  224. fmsmaterialsDataSource.load().done(function (fmsMaterials) {
  225. fmsMaterialsdata = fmsMaterials;
  226. materials2DataSource.load().done(function (dbMaterials) {
  227. _.each(dbMaterials, function (sm) {
  228. var standard = "";
  229. for (var i = 0; i < fmsMaterialsdata.length ; i++) {
  230. if (sm.MaterialId() == fmsMaterialsdata[i].MaterialId()) {
  231. standard = fmsMaterialsdata[i].Standard();
  232. if (standard == null)
  233. standard = ""
  234. break;
  235. }
  236. }
  237. materials2.push({
  238. SiteId: sm.SiteId,
  239. MaterialId: sm.MaterialId,
  240. Name: sm.Name,
  241. Standard: standard,
  242. MaterialCode: sm.MaterialCode,
  243. MaterialCount: sm.MaterialCount
  244. //FinalPrice: sm.FinalPrice,
  245. });
  246. });
  247. //viewModel.workResultCheckItemMaterialPopup.materialGridView2().refresh();
  248. if (materialGridView2() != null)
  249. materialGridView2().refresh();
  250. });
  251. });
  252. }
  253. return {
  254. refreshMaterialGrid: refreshMaterialGrid,
  255. visible: overlayVisible,
  256. materials2: materials2,
  257. materialGridView2: materialGridView2,
  258. //materials2DataSource : materials2DataSource,
  259. //modifiableMaterialDataGridOptions2: modifiableMaterialDataGridOptions2
  260. };
  261. }
  262. }
  263. });