47e7de315c9e6085e4e68babe3d4c1a6d667f43d.svn-base 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. BemsWebApplication.CurrentWork = function (params, viewInfo) {
  2. "use strict";
  3. var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true),
  4. workTypeDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeType'),
  5. progressDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeProgress'),
  6. businessFields = ko.observableArray(), workTypes = ko.observableArray(), progresses = ko.observableArray();
  7. var FmsMaterialExdataSource = new DevExpress.data.DataSource({
  8. store: BemsWebApplication.odata.FmsMaterialEx,
  9. requireTotalCount: true,
  10. pageSize: 1000
  11. });
  12. var Today = new Date();
  13. // hcLee 2018 01 29 -->
  14. var imagefileUrl1 = ko.observable(), imagefileUrl2 = ko.observable(), dropZone1 = null, dropZone2 = null, uploadedFileInfo = {}, uploadedFileInfo2 = {};
  15. // <-- hcLee 2018 01 29
  16. //var currentDataModel = null;
  17. //권한설정
  18. var hasnotModificationPermission = ko.observable(true);
  19. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName);
  20. var isVisibleExecutionButton = ko.observable(true);
  21. var isAddHistoryButton = ko.observable(true);
  22. var isEditHistoryButton = ko.observable(false);
  23. var isWorkDone = ko.observable(false);
  24. var isWorkHold = ko.observable(false);
  25. var popup, addWorkResultCheckItemPopup = null;
  26. var workResultCheckItemMaterialPopup = null;
  27. var WorkResultCheckItemFacilityPopup = null;
  28. //workExecutionRegisterPopup
  29. var deferredForSearch = new $.Deferred();
  30. var workTypesForSearch = ko.observableArray(), businessFieldsForSearch = ko.observableArray(), progressesForSearch = ko.observableArray();
  31. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter;
  32. var selectedFacilityData = ko.observable(), selectedUserData = params.selectedUserData || ko.observable();
  33. var dataSourceOptions = {
  34. select: [
  35. 'SiteId', 'WorkRequestId',
  36. 'StartDate', 'EndDate',
  37. 'ConfirmedDate', 'ConfirmedUserId', 'IsConfirmed',
  38. 'CauseClassId', 'Content',
  39. 'FmsWorkRequest/WorkTypeId',
  40. 'FmsWorkOrder/Title',
  41. 'FmsWorkOrder/OrderDate',
  42. 'FmsWorkRequest/WorkProgressId',
  43. 'CmUser/Name', // 작업자
  44. 'CmUser1/Name', // 승인자
  45. 'FmsWorkRequest/FmsWorkCodeType/Name',
  46. 'FmsWorkRequest/CmBusinessField/Name',
  47. 'FmsWorkRequest/FmsWorkCodeProgress/Name',
  48. 'FmsWorkRequest/BusinessFieldId',
  49. 'FmsWorkOrder/Content',
  50. 'FmsWorkRequest/Content',
  51. 'FmsWorkRequest/StartWorkDate',
  52. ],
  53. expand: [
  54. 'FmsWorkRequest',
  55. 'FmsWorkOrder',
  56. 'FmsWorkRequest/FmsWorkCodeType',
  57. 'FmsWorkRequest/CmBusinessField',
  58. 'FmsWorkRequest/FmsWorkCodeProgress',
  59. 'FmsWorkOrder/CmBusinessField', 'CmUser', 'CmUser1'],
  60. //expand: ['FmsWorkCodeType', 'CmBusinessField', 'FmsWorkCodeProgress', 'CmUser', 'CmUser1'],
  61. extendOptions: {
  62. forceOriginalField: true
  63. }
  64. };
  65. if (!useBusinessFiltering) {
  66. dataSourceOptions.filter = [
  67. eq('SiteId', BWA.UserInfo.SiteId()),
  68. and,
  69. [
  70. eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORKING),
  71. 'or',
  72. eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORK_HOLD)
  73. ],
  74. ];
  75. }
  76. else {
  77. dataSourceOptions.filter = [
  78. eq('SiteId', BWA.UserInfo.SiteId()),
  79. and,
  80. [
  81. eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORKING),
  82. 'or',
  83. eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORK_HOLD)
  84. ],
  85. and,
  86. [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]];
  87. }
  88. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsWorkResult', {
  89. popupWidth: 890,
  90. dataSourceOptions: dataSourceOptions,
  91. columns: [
  92. { dataField: 'WorkRequestId', caption: $G('number'), width: '8%', alignment: 'center' },
  93. { dataField: 'FmsWorkRequest/CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center' },
  94. { dataField: 'FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '10%', alignment: 'center' },
  95. {
  96. dataField: 'FmsWorkOrder/OrderDate', caption: $G('orderedDate'), width: '12%', alignment: 'center', sortOrder: 'desc', visible: false,
  97. customizeText: function (cellInfo) {
  98. return $G.date(cellInfo.value);
  99. }
  100. },
  101. {
  102. dataField: 'StartDate', caption: $G('startDate'), width: '12%', alignment: 'center',
  103. customizeText: function (cellInfo) {
  104. return $G.date(cellInfo.value);
  105. }
  106. },
  107. {
  108. //dataField: 'EndDate', caption: $G('endDate'), width: '12%', alignment: 'center', 2016 03 08 수정
  109. dataField: 'EndDate', caption: '종료예정일', width: '12%', alignment: 'center',
  110. customizeText: function (cellInfo) {
  111. return $G.date(cellInfo.value);
  112. }
  113. },
  114. { dataField: 'FmsWorkOrder/Title', caption: '작업명', width: '35%', alignment: 'center' },
  115. { dataField: 'FmsWorkRequest/FmsWorkCodeProgress/Name', caption: $G('workProgressName'), width: '10%', alignment: 'center' },
  116. { dataField: 'CmUser/Name', caption: '작업자', width: '15%', alignment: 'center' },
  117. //{ dataField: 'CmUser1/Name', caption: '승인자', width: '15%', alignment: 'center' }
  118. { dataField: 'FmsWorkRequest/Content', caption: '신청내용', width: '0%', alignment: 'center' },
  119. ],
  120. promiseDataInSearchView: deferredForSearch.promise(),
  121. searchViewItems: _.compact([
  122. { id: 'FmsWorkRequest/BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: businessFieldsForSearch },
  123. //{ id: 'WorkTypeId', ignoreValue: 0, defaultValue: 0, dataSource: workTypesForSearch },
  124. { id: 'CmUser/Name' },
  125. { id: 'FmsWorkOrder/Title' },
  126. { id: 'FmsWorkRequest/WorkProgressId', ignoreValue: 0, defaultValue: 0, dataSource: progressesForSearch },
  127. { id: 'StartDate', type: 'dateRange', isOnlyDate: true },
  128. { id: 'EndDate', type: 'dateRange', isOnlyDate: true }
  129. ]),
  130. getAddedToolbarItemsInPopup: function (e) {
  131. var isEditModeInPopup = e.isEditModeInPopup;
  132. return [
  133. {
  134. location: 'after', widget: 'button', options: {
  135. text: '작업이력추가', icon: 'add', type: 'success', visible: isAddHistoryButton, clickAction: showNewWorkItem, disabled: hasnotModificationPermission
  136. }
  137. },
  138. {
  139. location: 'after', widget: 'button', options: {
  140. text: '작업진행', icon: 'add', type: 'success', visible: isWorkHold, clickAction: workReStart, disabled: hasnotModificationPermission
  141. }
  142. }
  143. //{
  144. // location: 'after', widget: 'button', options: {
  145. // text: '작업이력수정', icon: 'save',
  146. // clickAction: function () {
  147. // if (popup && popup.modifyWorkItem) {
  148. // popup.modifyWorkItem();
  149. // }
  150. // }
  151. // }
  152. //}
  153. ];
  154. },
  155. beforeInsertingDataViewModel: function (dataModel) {
  156. return true; // hcLee
  157. },
  158. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  159. dataGrid.clearSelection();
  160. var data = clickRow.data;
  161. var dataModel = viewModel.dataModel;
  162. if (data['FmsWorkRequest/WorkProgressId']() >= $Code.WorkProgress.WORK_COMPLETE) {
  163. isAddHistoryButton(false);
  164. }
  165. else {
  166. isAddHistoryButton(true);
  167. }
  168. if (data['FmsWorkRequest/WorkProgressId']() == $Code.WorkProgress.WORK_COMPLETE) {
  169. isWorkDone(true);
  170. //addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkDone(true);
  171. }
  172. else {
  173. isWorkDone(false);
  174. }
  175. if (data['FmsWorkRequest/WorkProgressId']() == $Code.WorkProgress.WORK_HOLD) {
  176. isWorkHold(true);
  177. //addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkDone(false);
  178. //addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkHold(true);
  179. }
  180. else {
  181. //addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkHold(false);
  182. isWorkHold(false);
  183. }
  184. viewModel.dataModel.BusinessFieldId = ko.observable();
  185. viewModel.dataModel.BusinessFieldId(data['FmsWorkRequest/BusinessFieldId']());
  186. if (popup && popup.handleBeforeShowingPopupForEdit) {
  187. popup.handleBeforeShowingPopupForEdit(data, dataModel);
  188. }
  189. //popup.show();
  190. popupVisible(true);
  191. workResultCheckItemMaterialPopup.visible(true);
  192. },
  193. handleBeforePopupShowingPromise: function () {
  194. if (popup && popup.handleBeforePopupShowingPromise) {
  195. popup.handleBeforePopupShowingPromise.apply(popup, arguments);
  196. }
  197. },
  198. handleAfterLoadingModelByKey: function () {
  199. if (popup && popup.handleAfterLoadingModelByKey) {
  200. popup.handleAfterLoadingModelByKey.apply(popup, arguments);
  201. }
  202. },
  203. handlePopupShowing: function () {
  204. if (popup && popup.handlePopupShowing) {
  205. popup.handlePopupShowing.apply(this, arguments);
  206. }
  207. },
  208. handlePopupShown: function (editMode, isNewInPopup, dataModel) {
  209. if (popup && popup.handlePopupShown) {
  210. popup.handlePopupShown.apply(this, arguments);
  211. }
  212. },
  213. handleSaveButtonInPopup: function (isInsert) {
  214. if (isInsert === false) {
  215. if (popup && popup.handleAfterSave) {
  216. popup.handleAfterSave(undefined);
  217. }
  218. }
  219. },
  220. handleAfterSaveInPopup: function (responseKey, response) {
  221. if (popup && popup.handleAfterSave) {
  222. popup.handleAfterSave(responseKey, response);
  223. }
  224. },
  225. handleViewShowing: function (dataModel) {
  226. //권한설정
  227. hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));
  228. FmsMaterialExdataSource.filter([
  229. ["SiteId", "=", BWA.UserInfo.SiteId()]
  230. ]);
  231. FmsMaterialExdataSource.load().done(function (result) {
  232. if (result != null) {
  233. viewModel.dataModel.MaterialExdataSource(result);
  234. }
  235. }).fail(function (error) {
  236. utils.toast.show(error);
  237. });
  238. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName)
  239. if (useBusinessFiltering) {
  240. dataSourceOptions.filter.push('and');
  241. dataSourceOptions.filter.push([eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]);
  242. businessFieldDataSource.filter([
  243. eq('SiteId', BWA.UserInfo.SiteId()),
  244. and,
  245. [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]
  246. ]);
  247. }
  248. $.when(
  249. businessFieldDataSource.load(),
  250. workTypeDataSource.load(),
  251. progressDataSource.load()
  252. ).done(function (businessFieldResult, workTypeResult, progressResult) {
  253. businessFields(businessFieldResult[0]);
  254. workTypes(workTypeResult[0]);
  255. progresses(progressResult[0]);
  256. businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', businessFields()));
  257. workTypesForSearch($SearchView.createArrayOfSelectBox('WorkTypeId', workTypes()));
  258. progressesForSearch($SearchView.createArrayOfSelectBox('ProgressId', progresses()));
  259. deferredForSearch.resolve();
  260. });
  261. },
  262. handleViewShown: function () {
  263. setupDropZone(addWorkResultCheckItemPopup.isEditMode, addWorkResultCheckItemPopup.workCheckItemViewModel);
  264. },
  265. hasnotModificationPermission: hasnotModificationPermission //권한설정
  266. });
  267. viewModel.isEditHistoryButton = isEditHistoryButton;
  268. viewModel.isAddHistoryButton = isAddHistoryButton;
  269. viewModel.isWorkDone = isWorkDone;
  270. viewModel.isWorkHold = isWorkHold;
  271. viewModel.businessFields = businessFields;
  272. viewModel.workTypes = workTypes;
  273. viewModel.isAddPopup = ko.observable(true);
  274. viewModel.isApprovalMode = ko.observable(false);
  275. viewModel.isWorkHistory = ko.observable(false);
  276. // hcLee 2018 01 29 -->
  277. viewModel.imagefileUrl1 = imagefileUrl1;
  278. viewModel.imagefileUrl2 = imagefileUrl2;
  279. // <-- hcLee 2018 01 29
  280. viewModel.dataModel.MaterialExdataSource = ko.observable();
  281. //위치이동 2016 04 05 hcLee
  282. //addWorkResultCheckItemPopup = viewModel.addWorkResultCheckItemPopup = BWA.Popup.AddWorkResultCheckItem.create(viewInfo, viewModel);
  283. popup = viewModel.popup = BWA.Popup.CurrentWork.create(viewInfo, viewModel);
  284. //workExecutionRegisterPopup = viewModel.workExecutionRegisterPopup = BWA.Popup.WorkExecutionRegister.create(viewInfo, viewModel);
  285. //위치이동 2016 04 05 hcLee
  286. addWorkResultCheckItemPopup = viewModel.addWorkResultCheckItemPopup = BWA.Popup.AddWorkResultCheckItem.create(viewInfo, viewModel, popup.refreshListData);
  287. //addWorkResultCheckItemPopup = viewModel.addWorkResultCheckItemPopup = BWA.Popup.AddWorkResultCheckItem.create(viewInfo, viewModel);
  288. workResultCheckItemMaterialPopup = viewModel.workResultCheckItemMaterialPopup = BWA.Popup.WorkResultCheckItemMaterial.create(viewInfo, viewModel);
  289. WorkResultCheckItemFacilityPopup = viewModel.WorkResultCheckItemFacilityPopup = BWA.Popup.WorkResultCheckItemFacility.create(viewInfo, viewModel);
  290. // 2016 04 05
  291. //viewModel.addWorkResultCheckItemPopup.refreshListData = popup.refreshListData();
  292. viewModel.popupOptions.visible.subscribe(function (visible) {
  293. if (!visible) {
  294. viewModel.gridView().refresh();
  295. }
  296. });
  297. viewModel.popupOptions.position = { offset: '-200 0' };
  298. viewModel.popupOptions.height = '830px';
  299. function saveWorkResultAproval() {
  300. utils.toast.show('Approval Clicked!');
  301. }
  302. viewModel.addWorkResultCheckItemPopup.popupVisible.subscribe(function (visible) {
  303. if (visible) {
  304. popup.refreshListData();
  305. workResultCheckItemMaterialPopup.refreshMaterialGrid();
  306. }
  307. //addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkDone(false); disable필요
  308. /* if (data['FmsWorkRequest/WorkProgressId']() == $Code.WorkProgress.WORK_HOLD) {
  309. addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkHold(true);
  310. }
  311. else
  312. {
  313. addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkHold(false);
  314. }*/
  315. });
  316. function showNewWorkItem() {
  317. if (addWorkResultCheckItemPopup.workCheckItemViewModel !== undefined) {
  318. var dataModel = viewModel.dataModel;
  319. addWorkResultCheckItemPopup.workCheckItemViewModel.CheckDate(dataModel.EndDate());
  320. addWorkResultCheckItemPopup.workCheckItemViewModel.TextResult('');
  321. addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkDone(false);
  322. addWorkResultCheckItemPopup.workCheckItemViewModel.IsWorkHold(false);
  323. // hcLee 2018 02 01 -->
  324. isEditHistoryButton(false);
  325. addWorkResultCheckItemPopup.workCheckItemViewModel.FileId1(null);
  326. addWorkResultCheckItemPopup.workCheckItemViewModel.AttachmentFileName1(null);
  327. addWorkResultCheckItemPopup.workCheckItemViewModel.FileId2(null);
  328. addWorkResultCheckItemPopup.workCheckItemViewModel.AttachmentFileName2(null);
  329. // <-- hcLee 2018 02 01
  330. ///////////////////////2019-11-19 변경
  331. viewModel.dropZone1 = dropZone1 = null;
  332. viewModel.dropZone2 = dropZone2 = null;
  333. ///////////////////////2019-11-19 변경
  334. viewModel.addWorkResultCheckItemPopup.isNew(true);
  335. }
  336. addWorkResultCheckItemPopup.show();
  337. }
  338. function workReStart() {
  339. utils.dialog.confirm("작업보류를 작업진행으로 변경하시겠습니까?", "작업 재진행", function (result) {
  340. if (result) {
  341. var parameters = {
  342. SiteId: BWA.UserInfo.SiteId(),
  343. WorkRequestId: viewModel.dataModel.WorkRequestId(),
  344. WorkProgressId: $Code.WorkProgress.WORKING,
  345. UserId: BWA.UserInfo.UserId()
  346. };
  347. // FmsWorkRequest 업데이트: WorkProgressId(5)
  348. BWA.api.post('FmsWorkRequest', null, parameters).done(function () {
  349. viewModel.popupVisible(false);
  350. });
  351. }
  352. });
  353. }
  354. ///////////////////////2019-11-19 변경
  355. function setupDropZone(isEditModeInPopup, dataViewModel) {
  356. var timer = null;
  357. isEditModeInPopup.subscribe(function (value) {
  358. if (value) {
  359. if (timer) { clearInterval(timer); }
  360. timer = setInterval(function () {
  361. if ($('#workcheckitemDropZone1').length) {
  362. if (_.isNull(dropZone1)) {
  363. dropZone1 = BWA.DropZone.create({
  364. id: '#workcheckitemDropZone1',
  365. categoryId: $Code.FileCategory.WORK,
  366. uploadedFileInfo: uploadedFileInfo,
  367. handleRemoveBeforePromise: function () {
  368. var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel);
  369. return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId1: null });
  370. },
  371. handleSuccess: function (fileInfo) {
  372. if (uploadedFileInfo.FileId) {
  373. dataViewModel.FileId1(fileInfo.FileId);
  374. var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel);
  375. if (keys.CheckItemId != null) {
  376. return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId1: fileInfo.FileId })
  377. .done(function (res) {
  378. popup.refreshListData();
  379. });
  380. }
  381. }
  382. },
  383. handleRemovedFile: function () {
  384. dataViewModel.FileId1(null);
  385. }
  386. });
  387. viewModel.dropZone1 = dropZone1;
  388. }
  389. }
  390. if ($('#workcheckitemDropZone2').length) {
  391. if (_.isNull(dropZone2)) {
  392. dropZone2 = BWA.DropZone.create({
  393. id: '#workcheckitemDropZone2',
  394. categoryId: $Code.FileCategory.WORK,
  395. uploadedFileInfo: uploadedFileInfo2,
  396. handleRemoveBeforePromise: function () {
  397. var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel);
  398. return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId2: null });
  399. },
  400. handleSuccess: function (fileInfo) {
  401. if (uploadedFileInfo.FileId) {
  402. dataViewModel.FileId2(fileInfo.FileId);
  403. var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel);
  404. if (keys.CheckItemId != null) {
  405. return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId2: fileInfo.FileId })
  406. .done(function (res) {
  407. popup.refreshListData();
  408. });
  409. }
  410. }
  411. },
  412. handleRemovedFile: function () {
  413. dataViewModel.FileId2(null);
  414. },
  415. });
  416. viewModel.dropZone2 = dropZone2;
  417. }
  418. }
  419. }, 800);
  420. }
  421. else {
  422. if (timer) {
  423. clearInterval(timer);
  424. timer = null;
  425. }
  426. dropZone1 = null;
  427. dropZone2 = null;
  428. }
  429. });
  430. }
  431. ///////////////////////2019-11-19 변경
  432. return viewModel;
  433. };