73705c63c7f8bb76857ce93f14b596245f66cc04.svn-base 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. BemsWebApplication.ConstructionHistory = function (params, viewInfo) {
  2. "use strict";
  3. var imagefileUrl1 = ko.observable(), imagefileUrl2 = ko.observable(), uploadedFileInfo = {};
  4. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter;
  5. var SiteId = BWA.UserInfo.SiteId();
  6. // 공사업체 데이터 소스...
  7. var partnerDataSource = BemsWebApplication.db.createDataSource('CmPartner', true, false, true),
  8. constructionTypeDataSource = BemsWebApplication.db.createDataSource('FmsConstructionCodeType', true, false, true);
  9. var partners = ko.observableArray(), constructionTypes = ko.observableArray();
  10. var constructionTypesForSearch = ko.observableArray(), partnerTypesForSearch = ko.observableArray();
  11. var visibleDeleteButton = ko.observable(true);
  12. //권한설정
  13. var hasnotModificationPermission = ko.observable(true);
  14. var deferredForSearch = new $.Deferred();
  15. var dataSourceOptions = {
  16. select: [
  17. 'SiteId',
  18. 'ConstructionId',
  19. 'ConstructionTypeId',
  20. 'Name',
  21. 'StartDate',
  22. 'EndDate',
  23. 'PartnerId',
  24. 'ConstructLocation',
  25. 'OwnerShipName',
  26. 'CommitmentMan',
  27. 'OwnerShipPhoneNo',
  28. 'WeldWorkStartTime',
  29. 'WeldWorkEndTime',
  30. 'GasWorkStartTime',
  31. 'GasWorkEndTime',
  32. 'PaintWorkStartTime',
  33. 'PaintWorkEndTime',
  34. 'Comment',
  35. 'ProgressId',
  36. 'AddDate',
  37. 'UpdateDate',
  38. 'FmsConstructionCodeProgress/Name',
  39. 'CmPartner/Name',
  40. 'CmPartner/PhoneNo',
  41. 'FmsConstructionCodeType/Name',
  42. 'ConstructionDetail',
  43. 'InOutStockName',
  44. 'FileId1',
  45. 'FileId2',
  46. 'FileId3',
  47. 'CmFile/Name',
  48. 'CmFile1/Name',
  49. 'CmFile2/Name',
  50. 'FmsConstructionEstimation/Comment',
  51. 'FmsConstructionEstimation/SafetyScore',
  52. 'FmsConstructionEstimation/AbilityScore',
  53. 'FmsConstructionEstimation/ServiceScore',
  54. 'FmsConstructionEstimation/TotalEstimateScore',
  55. ],
  56. expand: [
  57. 'FmsConstructionCodeProgress',
  58. 'CmPartner',
  59. 'FmsConstructionEstimation',
  60. 'FmsConstructionCodeType',
  61. 'CmFile',
  62. 'CmFile1',
  63. 'CmFile2'
  64. ],
  65. extendOptions: {
  66. forceOriginalField: true
  67. },
  68. filter: [
  69. eq('SiteId', SiteId),
  70. 'and',
  71. eq('ProgressId', 4)// 공사완료단계 항목 까지만 가져옴
  72. ]
  73. };
  74. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsConstruction', {
  75. dataSourceOptions: dataSourceOptions,
  76. columns: [
  77. { dataField: 'Number', caption: $G('number'), width: '10%', alignment: 'center' },
  78. { dataField: 'FmsConstructionCodeType/Name', caption: '공사구분', width: '20%', alignment: 'center' },
  79. { dataField: 'Name', caption: '공사명', width: '80%', alignment: 'center' },
  80. { dataField: 'ConstructLocation', caption: '공사위치', width: '30%', alignment: 'center' },
  81. { dataField: 'CmPartner/Name', caption: '공사업체', width: '20%', alignment: 'center' },
  82. { dataField: 'OwnerShipName', caption: '공사책임자', width: '20%', alignment: 'center' },
  83. {
  84. dataField: 'StartDate', caption: '시작일', width: '20%', alignment: 'center', sortOrder: 'desc', dataType: "shortDate", format: "yyyy-MM-dd",
  85. customizeText: function (cellInfo) {
  86. return cellInfo.valueText;
  87. }
  88. },
  89. {
  90. dataField: 'EndDate', caption: '종료일', width: '20%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd",
  91. customizeText: function (cellInfo) {
  92. return cellInfo.valueText;
  93. }
  94. },
  95. { dataField: 'FmsConstructionEstimation/SafetyScore', caption: '안전수칙준수점수', width: '25%', alignment: 'center', visible: false },
  96. { dataField: 'FmsConstructionEstimation/AbilityScore', caption: '공사수행능력점수', width: '25%', alignment: 'center', visible: false },
  97. { dataField: 'FmsConstructionEstimation/ServiceScore', caption: '용역수행능력점수', width: '25%', alignment: 'center', visible: false },
  98. { dataField: 'FmsConstructionEstimation/TotalEstimateScore', caption: '종합점수', width: '25%', alignment: 'center', visible: false },
  99. ],
  100. "export": {
  101. enabled: true,
  102. fileName: '공사 이력',
  103. },
  104. paging: {
  105. enabled: true,
  106. pageSize: 18
  107. },
  108. pager: {
  109. },
  110. onExporting: function (e) {
  111. e.component.columnOption("Number", "visible", false);
  112. e.component.columnOption("FmsConstructionEstimation/SafetyScore", "visible", true);
  113. e.component.columnOption("FmsConstructionEstimation/AbilityScore", "visible", true);
  114. e.component.columnOption("FmsConstructionEstimation/ServiceScore", "visible", true);
  115. e.component.columnOption("FmsConstructionEstimation/TotalEstimateScore", "visible", true);
  116. },
  117. onExported: function (e) {
  118. e.component.columnOption("Number", "visible", true);
  119. e.component.columnOption("FmsConstructionEstimation/SafetyScore", "visible", false);
  120. e.component.columnOption("FmsConstructionEstimation/AbilityScore", "visible", false);
  121. e.component.columnOption("FmsConstructionEstimation/ServiceScore", "visible", false);
  122. e.component.columnOption("FmsConstructionEstimation/TotalEstimateScore", "visible", false);
  123. },
  124. popupWidth: '740px',
  125. promiseDataInSearchView: deferredForSearch.promise(),
  126. searchViewItems: [
  127. { id: 'Name' },
  128. { id: 'ConstructionTypeId', ignoreValue: 0, defaultValue: 0, dataSource: constructionTypesForSearch },
  129. { id: 'PartnerId', ignoreValue: 0, defaultValue: 0, dataSource: partnerTypesForSearch },
  130. { id: 'StartDate', type: 'dateRange', isOnlyDate: true },
  131. { id: 'EndDate', type: 'dateRange', isOnlyDate: true }
  132. ],
  133. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  134. visibleDeleteButton(true);
  135. if (isNewInPopup() == false) {
  136. if (_.isNull(dataViewModel.FileId1()) === false) {
  137. imagefileUrl1('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId1()));
  138. }
  139. else {
  140. imagefileUrl1(undefined);
  141. }
  142. if (_.isNull(dataViewModel.FileId2()) === false) {
  143. imagefileUrl2('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId2()));
  144. }
  145. else {
  146. imagefileUrl2(undefined);
  147. }
  148. }
  149. },
  150. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  151. dataGrid.clearSelection();
  152. var data = clickRow.data;
  153. var dataModel = viewModel.dataModel;
  154. dataModel.PartnerName = $KoSet(dataModel.PartnerName, data['CmPartner/Name']());
  155. dataModel.PartnerPhoneNo = $KoSet(dataModel.PartnerPhoneNo, data['CmPartner/PhoneNo']());
  156. dataModel.ConstructionTypeName = $KoSet(dataModel.ConstructionTypeName, data['FmsConstructionCodeType/Name']());
  157. dataModel.EstimateComment = $KoSet(dataModel.EstimateComment, data['FmsConstructionEstimation/Comment']());
  158. dataModel.EstimateSafetyScore = $KoSet(dataModel.EstimateSafetyScore, data['FmsConstructionEstimation/SafetyScore']());
  159. dataModel.EstimateAbilityScore = $KoSet(dataModel.EstimateAbilityScore, data['FmsConstructionEstimation/AbilityScore']());
  160. dataModel.EstimateServiceScore = $KoSet(dataModel.EstimateServiceScore, data['FmsConstructionEstimation/ServiceScore']());
  161. dataModel.EstimateTotalEstimateScore = $KoSet(dataModel.EstimateTotalEstimateScore, data['FmsConstructionEstimation/TotalEstimateScore']());
  162. if (data['FileId1']() != null)
  163. dataModel.AttachmentFileName1(data['CmFile/Name']());
  164. else dataModel.AttachmentFileName1('');
  165. if (data['FileId2']() != null)
  166. dataModel.AttachmentFileName2(data['CmFile1/Name']());
  167. else dataModel.AttachmentFileName2('');
  168. popupVisible(true);
  169. },
  170. handleViewShowing: function (dataModel) {
  171. //권한설정
  172. hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));
  173. partnerDataSource.filter([
  174. eq('PartnerTypeId', 1), // 공사업체 유형 필터링
  175. and,
  176. eq('SiteId', BWA.UserInfo.SiteId())
  177. ])
  178. $.when(
  179. partnerDataSource.load(),
  180. constructionTypeDataSource.load()
  181. ).done(function (dbPartners, dbConstructionTypes) {
  182. partners(dbPartners[0]);
  183. constructionTypes(dbConstructionTypes[0]);
  184. constructionTypesForSearch($SearchView.createArrayOfSelectBox('ConstructionTypeId', constructionTypes()));
  185. partnerTypesForSearch($SearchView.createArrayOfSelectBox('PartnerId', partners()));
  186. deferredForSearch.resolve();
  187. });
  188. },
  189. handlePopupShown: function (isEditMode, isNew, dataViewModel) {
  190. var partners = viewModel.partners();
  191. var constructionTypes = viewModel.constructionTypes();
  192. if (isNew) { // 신규등록인 경우
  193. dataViewModel.ProgressId(2); // 공사계획 상태를 '진행' 단계로 초기화
  194. dataViewModel.AddDate($G.date(new Date()));
  195. dataViewModel.UpdateDate($G.date(new Date()));
  196. if (!_.isEmpty(partners)) {
  197. dataViewModel.PartnerId(partners[0].PartnerId());
  198. }
  199. if (!_.isEmpty(constructionTypes)) {
  200. dataViewModel.ConstructionTypeId(constructionTypes[0].ConstructionTypeId());
  201. }
  202. }
  203. }
  204. });
  205. var ConstructionHistoryToolbarItems = [
  206. { location: 'after', widget: 'button', options: { text: $G('delete'), type: 'danger', icon: 'remove', visible: visibleDeleteButton, clickAction: handlePopupButtonDelete, disabled: hasnotModificationPermission } },
  207. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handleInsertPopupButtonClose } }
  208. ];
  209. function handleConfirmDelete() {
  210. var selectedId = {};
  211. selectedId.SiteId = viewModel.dataModel.SiteId();
  212. selectedId.ConstructionId = viewModel.dataModel.ConstructionId();
  213. BemsWebApplication.db['FmsConstructionEstimation'].remove(selectedId).done(function () {
  214. BemsWebApplication.db['FmsConstruction'].remove(selectedId).done(function () {
  215. viewModel.popupVisible(false);
  216. viewModel.refreshList();
  217. utils.toast.show('데이터베이스 항목 삭제 작업이 성공하였습니다.');
  218. }).fail(function () {
  219. utils.toast.show('데이터베이스 항목 삭제 작업이 실패하였습니다.', 'error');
  220. });
  221. }).fail(function () {
  222. utils.toast.show('데이터베이스 항목 삭제 작업이 실패하였습니다.', 'error');
  223. });
  224. }
  225. function handlePopupButtonDelete() {
  226. DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) {
  227. if (result) {
  228. handleConfirmDelete();
  229. }
  230. });
  231. }
  232. function handleInsertPopupButtonClose() {
  233. viewModel.popupVisible(false);
  234. }
  235. viewModel.imagefileUrl1 = imagefileUrl1;
  236. viewModel.imagefileUrl2 = imagefileUrl2;
  237. viewModel.constructionTypes = constructionTypes;
  238. viewModel.partners = partners;
  239. viewModel.dataModel.ConstructionTypeName = ko.observable();
  240. viewModel.dataModel.PartnerName = ko.observable();
  241. viewModel.dataModel.PartnerPhoneNo = ko.observable();
  242. viewModel.dataModel.AttachmentFileName1 = ko.observable();
  243. viewModel.dataModel.AttachmentFileName2 = ko.observable();
  244. viewModel.dataModel.AttachmentFileName3 = ko.observable();
  245. viewModel.ConstructionHistoryToolbarItems = ConstructionHistoryToolbarItems;
  246. return viewModel;
  247. };