13b0742297b9e2d4499deb896a93004f22d0897e.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. BemsWebApplication.MonthlyReport = function (params, viewInfo) {
  2. 'use strict';
  3. var imagefileUrl1 = ko.observable(),
  4. uploadedFileInfo = {},
  5. dropZone1 = null
  6. ;
  7. var eq = BWA.DataUtil.constructEqualFilter,
  8. and = BWA.DataUtil.andFilter
  9. ;
  10. var currentViewModel = new BemsWebApplication.FmsReportViewModel();
  11. var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true);
  12. var businessFieldsForSearch = ko.observableArray();
  13. var businessFields = ko.observableArray();
  14. var deferredForSearch = new $.Deferred();
  15. var level = ko.observable(0); // 0 작성, 1:팀장, 2:소장
  16. var isVisibleConfirmButton = ko.observable(false);
  17. var isVisibleConfirmCancelButton = ko.observable(false);
  18. var dataSourceOptions = {
  19. select: [
  20. 'SiteId',
  21. 'RId',
  22. 'BusinessFieldId',
  23. 'CmBusinessField/Name',
  24. 'Title',
  25. 'Contents',
  26. 'RegisterUserId ',
  27. 'CmUser/Name', // 등록자
  28. 'FileId',
  29. 'CmFile/Name',
  30. 'CmFile/FileSize',
  31. 'MakeDate',
  32. 'ConfirmUserId1',
  33. 'CmUser1/Name', // 팀장
  34. 'ConfirmUserId2',
  35. 'CmUser2/Name', // 소장
  36. ],
  37. expand: [
  38. 'CmBusinessField',
  39. 'CmFile',
  40. 'CmUser',
  41. 'CmUser1',
  42. 'CmUser2'
  43. ],
  44. extendOptions: {
  45. forceOriginalField: true
  46. },
  47. filter: [
  48. ['SiteId', '=', BWA.UserInfo.SiteId()],
  49. ]
  50. };
  51. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsReport', {
  52. dataSourceOptions: dataSourceOptions,
  53. columns: [
  54. { dataField: 'RId', caption: $G('number'), width: '10%', alignment: 'center', allowFiltering: false, sortOrder: 'desc' },
  55. { dataField: 'CmBusinessField/Name', caption: '업무분야', width: '10%', alignment: 'center' },
  56. {
  57. dataField: 'MakeDate', caption: '등록일', width: '15%', alignment: 'center',
  58. customizeText: function (cellInfo) {
  59. return $G.date(cellInfo.value);
  60. }
  61. },
  62. { dataField: 'Title', caption: '제목', width: '40%', alignment: 'center' },
  63. { dataField: 'CmFile/Name', caption: '파일명', width: '40%', alignment: 'center' },
  64. { dataField: 'CmUser/Name', caption: '등록자', width: '15%', alignment: 'center' },
  65. { dataField: 'CmUser1/Name', caption: '팀장확인', width: '15%', alignment: 'center' },
  66. { dataField: 'CmUser2/Name', caption: '소장확인', width: '15%', alignment: 'center' },
  67. //utils.datagrid.columnIsUse('20%') hcLee 2015 12 23
  68. ],
  69. /*
  70. toolbarItems: [
  71. { location: 'before', text: '공지사항 입력' },
  72. { location: 'after', widget: 'button', options: { text: $G('edit'), icon: 'edit', visible: _.isBoolean(isModifiable) ? isModifiable : visibleEditButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonEdit } },
  73. { location: 'after', widget: 'button', options: { text: $G('delete'), type: 'danger', icon: 'remove', visible: _.isBoolean(isModifiable) ? isModifiable : visibleDeleteButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonDelete } },
  74. { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'cancel', visible: visibleCancelButton, clickAction: handlePopupButtonCancel } },
  75. { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', visible: isEditModeInPopup, disabled: hasnotModificationPermission, clickAction: handlePopupButtonSave } },
  76. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }
  77. ], */
  78. //popupWidth: 580,
  79. searchViewItems: [
  80. { id: 'BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: businessFieldsForSearch },
  81. { id: 'Title' },
  82. { id: 'Contents' },
  83. { id: 'CmFile/Name' },
  84. { id: 'MakeDate', type: 'dateRange', isOnlyDate: true },
  85. ],
  86. mandatoryFields: [
  87. { dataField: 'Title', name: '제목' },
  88. { dataField: 'Contents', name: '내용' },
  89. //{ dataField: 'CmFile/Name', name: '파일명' }
  90. ],
  91. getAddedToolbarItemsInPopup: function (e) {
  92. var isEditModeInPopup = e.isEditModeInPopup,
  93. hasnotModificationPermission = e.hasnotModificationPermission
  94. ;
  95. isEditModeInPopup.subscribe(function (isEditMode) {
  96. //tabIndex(0); // 왼쪽 수정은 무조건 매뉴얼 hcLee 2016 03 24추가
  97. //isVisibleHistoryInsertButton(tabIndex() === 1 && isEditMode);
  98. if (isEditMode) {
  99. isVisibleConfirmCancelButton(false);
  100. isVisibleConfirmButton(false);
  101. }
  102. else {
  103. ButtonsView(currentViewModel);
  104. }
  105. });
  106. return [
  107. {
  108. location: 'after',
  109. widget: 'button',
  110. options: {
  111. text: '결재',
  112. icon: 'plus',
  113. visible: isVisibleConfirmButton,
  114. disabled: hasnotModificationPermission,
  115. clickAction: function () {
  116. //drawingHistoryPopup.handleInsertDrawingHistory();
  117. if (level == 1) currentViewModel.ConfirmUserId1(BWA.UserInfo.UserId());
  118. if (level == 2) {
  119. if (_.isNull(currentViewModel.ConfirmUserId1())) {
  120. utils.toast.show('팀장확인이 필요합니다.');
  121. viewModel.popupVisible(false);
  122. viewModel.handlePopupButtonClose();
  123. return;
  124. }
  125. currentViewModel.ConfirmUserId2(BWA.UserInfo.UserId());
  126. }
  127. var keys = BWA.db.extractKeysObject('FmsReport', currentViewModel);
  128. BWA.db.FmsReport.update(keys, currentViewModel.toJS()).done(function (res) {
  129. utils.toast.show('일지가 결재 되었습니다.');
  130. //dropZone1.resetUploadedFileInfo();
  131. //reloadDrawingHistory(drawingId());
  132. //dropZone.options.startLoadFileCount = 0;
  133. //historyGridView.refresh();
  134. viewModel.popupVisible(false);
  135. viewModel.handlePopupButtonClose();
  136. });
  137. }
  138. }
  139. },
  140. {
  141. location: 'after',
  142. widget: 'button',
  143. options: {
  144. text: '결재취소',
  145. icon: 'minus',
  146. visible: isVisibleConfirmCancelButton,
  147. disabled: hasnotModificationPermission,
  148. clickAction: function () {
  149. if (level == 1) currentViewModel.ConfirmUserId1(null);
  150. if (level == 2) currentViewModel.ConfirmUserId2(null);
  151. var keys = BWA.db.extractKeysObject('FmsReport', currentViewModel);
  152. BWA.db.FmsReport.update(keys, currentViewModel.toJS()).done(function (res) {
  153. utils.toast.show('일지결재가 취소 되었습니다.');
  154. //dropZone1.resetUploadedFileInfo();
  155. //reloadDrawingHistory(drawingId());
  156. //dropZone.options.startLoadFileCount = 0;
  157. //historyGridView.refresh();
  158. viewModel.popupVisible(false);
  159. viewModel.handlePopupButtonClose();
  160. });
  161. }
  162. }
  163. },
  164. ]
  165. },
  166. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  167. if (isNewInPopup() == false) {
  168. if (_.isNull(dataViewModel.FileId()) === false) {
  169. //alert('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId()));
  170. imagefileUrl1('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId()));
  171. }
  172. else {
  173. imagefileUrl1(undefined);
  174. }
  175. var keys = BWA.db.extractKeysObject('FmsReport', dataViewModel);
  176. BWA.db.FmsReport.update(keys, dataViewModel.toJS());
  177. }
  178. },
  179. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  180. dataGrid.clearSelection();
  181. var data = clickRow.data;
  182. var dataModel = viewModel.dataModel;
  183. currentViewModel = dataModel;
  184. if (data['FileId']() != null) {
  185. dataModel.AttachmentFileName(data['CmFile/Name']());
  186. }
  187. else {
  188. dataModel.AttachmentFileName('');
  189. }
  190. //alert(dataModel.AttachmentFileName());
  191. popupVisible(true);
  192. },
  193. handlePopupButtonClose: function (dataViewModel, backupDataViewModel) {
  194. isVisibleConfirmButton(false);
  195. isVisibleConfirmCancelButton(false);
  196. //isEditModeInPopup(false);
  197. viewModel.visibleEditButton(false);
  198. viewModel.visibleDeleteButton(false);
  199. },
  200. handlePopupShown: function (isEditModeInPopup, isNewInPopup, dataViewModel) {
  201. currentViewModel = dataViewModel;
  202. if (isNewInPopup) {
  203. isVisibleConfirmButton(false);
  204. isVisibleConfirmCancelButton(false);
  205. }
  206. else {
  207. ButtonsView(dataViewModel);
  208. /*
  209. if (_.isNull(dataViewModel.ConfirmUserId1()) == false || _.isNull(dataViewModel.ConfirmUserId2()) == false) {
  210. viewModel.visibleEditButton(false);
  211. viewModel.visibleDeleteButton(false);
  212. }
  213. else {
  214. viewModel.visibleEditButton(true);
  215. viewModel.visibleDeleteButton(true);
  216. }
  217. if (level > 0) {
  218. if (level == 1) {
  219. if (dataViewModel.ConfirmUserId1() == BWA.UserInfo.UserId())
  220. isVisibleConfirmCancelButton(true);
  221. else
  222. isVisibleConfirmButton(true);
  223. }
  224. if (level == 2) {
  225. if (dataViewModel.ConfirmUserId2() == BWA.UserInfo.UserId())
  226. isVisibleConfirmCancelButton(true);
  227. else
  228. isVisibleConfirmButton(true);
  229. }
  230. }
  231. else {
  232. isVisibleConfirmButton(false);
  233. isVisibleConfirmCancelButton(false);
  234. }*/
  235. }
  236. },
  237. handleViewShowing: function (dataModel) {
  238. if (BWA.UserInfo.UserGroupName().indexOf('소장') > -1)
  239. level = 2;
  240. else if (BWA.UserInfo.UserGroupName().indexOf('팀장') > -1) level = 1;
  241. else level = 0;
  242. var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName)
  243. if (useBusinessFiltering) {
  244. dataSourceOptions.filter.push('and');
  245. dataSourceOptions.filter.push([eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]);
  246. businessFieldDataSource.filter([
  247. eq('SiteId', BWA.UserInfo.SiteId()),
  248. and,
  249. [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]
  250. ]);
  251. }
  252. businessFieldDataSource.load().done(function (dbBusinessFields) {
  253. businessFields(dbBusinessFields);
  254. businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', businessFields()));
  255. });
  256. },
  257. handlePopupShowing: function (isNewInPopup, dataViewModel) {
  258. // 신규등록인 경우
  259. //imagefileUrl1(undefined);
  260. //dropZone1.removeAllFiles();
  261. //if (_.isNull(dropZone1) === false) dropZone1.resetUploadedFileInfo();
  262. if (isNewInPopup()) {
  263. // hcLee 2016 01 04 추가
  264. imagefileUrl1(undefined);
  265. dataViewModel.MakeDate(new Date());
  266. dataViewModel.RegisterUserId(BWA.UserInfo.UserId());
  267. }
  268. viewModel.visibleEditButton(false); // 2017 07 25 hcLee
  269. viewModel.visibleDeleteButton(false); // 2017 07 25 hcLee
  270. isVisibleConfirmButton(false); // 2017 07 25 hcLee
  271. isVisibleConfirmCancelButton(false); // 2017 07 25 hcLee
  272. },
  273. handleViewShown: function (dataViewModel, isEditModeInPopup) {
  274. setupDropZone(isEditModeInPopup, dataViewModel);
  275. },
  276. handleSaveSuccess: function () {
  277. if (_.isNull(dropZone1) === false) {
  278. dropZone1.resetUploadedFileInfo();
  279. }
  280. },
  281. });
  282. function ButtonsView(dataViewModel) {
  283. if (_.isNull(dataViewModel.ConfirmUserId1()) == false || _.isNull(dataViewModel.ConfirmUserId2()) == false) {
  284. viewModel.visibleEditButton(false);
  285. viewModel.visibleDeleteButton(false);
  286. }
  287. else {
  288. viewModel.visibleEditButton(true);
  289. viewModel.visibleDeleteButton(true);
  290. }
  291. if (level > 0) {
  292. if (level == 1) {
  293. if (dataViewModel.ConfirmUserId1() == BWA.UserInfo.UserId())
  294. isVisibleConfirmCancelButton(true);
  295. else if (_.isNull(dataViewModel.ConfirmUserId1()) == true) // 2017 07 25 hcLee 수정
  296. isVisibleConfirmButton(true);
  297. if (_.isNull(dataViewModel.ConfirmUserId2()) == false) isVisibleConfirmCancelButton(false);// 2016 08 11 결재조건 팀장선결 필수로 수정
  298. }
  299. if (level == 2) {
  300. if (dataViewModel.ConfirmUserId2() == BWA.UserInfo.UserId())
  301. isVisibleConfirmCancelButton(true);
  302. else
  303. isVisibleConfirmButton(!_.isNull(dataViewModel.ConfirmUserId1())); // 2016 08 11 결재조건 팀장선결 필수로 수정
  304. }
  305. }
  306. else {
  307. isVisibleConfirmButton(false);
  308. isVisibleConfirmCancelButton(false);
  309. }
  310. }
  311. function setupDropZone(isEditModeInPopup, dataViewModel) {
  312. var timer = null;
  313. isEditModeInPopup.subscribe(function (value) {
  314. if (value) {
  315. if (timer) { clearInterval(timer); }
  316. timer = setInterval(function () {
  317. if ($('#reportDropZone1').length) {
  318. if (_.isNull(dropZone1)) {
  319. dropZone1 = BWA.DropZone.create({
  320. id: '#reportDropZone1',
  321. previewTemplate: "...",
  322. categoryId: $Code.FileCategory.REPORT,
  323. uploadedFileInfo: uploadedFileInfo,
  324. /*
  325. handleRemoveBeforePromise: function () {
  326. var keys = BWA.db.extractKeysObject('CmAnnouncement', dataViewModel);
  327. return BWA.db.CmAnnouncement.update(keys, { FileId: null });
  328. },*/
  329. handleSuccess: function (fileInfo) {
  330. dataViewModel.FileId(fileInfo.FileId);
  331. dropZone1.options.startLoadFileCount = 1;
  332. },
  333. handleRemovedFile: function () {
  334. dataViewModel.FileId(null);
  335. dropZone1.options.startLoadFileCount = 0;
  336. },
  337. });
  338. uploadedFileInfo.SiteId = dataViewModel.SiteId();
  339. uploadedFileInfo.FileId = dataViewModel.FileId();
  340. if (uploadedFileInfo.FileId) {
  341. BWA.db.CmFile.byKey(uploadedFileInfo).done(function (data) {
  342. // dropZone1.removeAllFiles();
  343. dropZone1.emit('addedfile', {
  344. name: data.Name,
  345. size: data.FileSize
  346. });
  347. dropZone1.options.startLoadFileCount = 1;
  348. dataViewModel.AttachmentFileName(data.Name);
  349. //dropZone1.setTempFileFlag(true);
  350. //dropZone.options.maxFiles = 0; // 이게 있으면 삭제후 다시 업로드가 안 된다.
  351. });
  352. }
  353. }
  354. }
  355. }, 100);
  356. }
  357. else {
  358. if (timer) { clearInterval(timer); timer = null; }
  359. dropZone1 = null;
  360. }
  361. });
  362. }
  363. /*
  364. var toolbarItems = [
  365. { location: 'before', text: '공지사항 입력' },
  366. { location: 'after', widget: 'button', options: { text: $G('edit'), icon: 'edit', visible: _.isBoolean(isModifiable) ? isModifiable : visibleEditButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonEdit } },
  367. { location: 'after', widget: 'button', options: { text: $G('delete'), type: 'danger', icon: 'remove', visible: _.isBoolean(isModifiable) ? isModifiable : visibleDeleteButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonDelete } },
  368. { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'cancel', visible: visibleCancelButton, clickAction: handlePopupButtonCancel } },
  369. { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', visible: isEditModeInPopup, disabled: hasnotModificationPermission, clickAction: handlePopupButtonSave } },
  370. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }
  371. ]; */
  372. viewModel.popupVisible.subscribe(function (value) {
  373. if (!value) {
  374. viewModel.gridView().refresh();
  375. }
  376. });
  377. viewModel.dataModel.AttachmentFileName = ko.observable();
  378. viewModel.imagefileUrl1 = imagefileUrl1;
  379. viewModel.businessFields = businessFields;
  380. //viewModel.processValueChange = processValueChange;
  381. //viewModel.partnerTypes = partnerTypes;
  382. //viewModel.contractClasses = contractClasses;
  383. //viewModel.contractMethods = contractMethods;
  384. //viewModel.contractTypes = contractTypes;
  385. //viewModel.paymentTypes = paymentTypes;
  386. //viewModel.allPartner = allPartner;
  387. //viewModel.filteredPartner = filteredPartner;
  388. //viewModel.toolbarItems = toolbarItems;
  389. return viewModel;
  390. };