1e4033b05ba566e3ef054a3b87780c1f1574c0a7.svn-base 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. BemsWebApplication.ConstructionEstimate = function (params, viewInfo) {
  2. "use strict";
  3. var imagefileUrl = ko.observable(), uploadedFileInfo = {}, dropZone = null;
  4. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter;
  5. //권한설정
  6. var hasnotModificationPermission = ko.observable(true);
  7. // 공사업체 데이터 소스...
  8. var partnerDataSource = BemsWebApplication.db.createDataSource('CmPartner', true, false, true),
  9. constructionTypeDataSource = BemsWebApplication.db.createDataSource('FmsConstructionCodeType', true, false, true);
  10. var constructionTypesForSearch = ko.observableArray(), partnerTypesForSearch = ko.observableArray();
  11. var partners = ko.observableArray(), constructionTypes = ko.observableArray();
  12. var constructionEstimateDataModel = new BemsWebApplication.FmsConstructionEstimationViewModel();
  13. var deferredForSearch = new $.Deferred();
  14. var constructionEstimatePopupToolbarItems = [
  15. { location: 'before', text: '상세보기' },
  16. { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', clickAction: handlePopupButtonSave, disabled: hasnotModificationPermission } },
  17. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: constructionEstimatePopupButtonClose } }
  18. ];
  19. var dataSourceOptions = {
  20. select: [
  21. 'SiteId',
  22. 'ConstructionId',
  23. 'Name',
  24. 'StartDate',
  25. 'EndDate',
  26. 'PartnerId',
  27. 'ConstructLocation',
  28. 'OwnerShipName',
  29. 'CommitmentMan',
  30. 'OwnerShipPhoneNo',
  31. 'WeldWorkStartTime',
  32. 'WeldWorkEndTime',
  33. 'GasWorkStartTime',
  34. 'GasWorkEndTime',
  35. 'PaintWorkStartTime',
  36. 'PaintWorkEndTime',
  37. 'Comment',
  38. 'ProgressId',
  39. 'AddDate',
  40. 'UpdateDate',
  41. 'FmsConstructionCodeProgress/Name',
  42. 'CmPartner/Name',
  43. 'CmPartner/PhoneNo',
  44. 'FmsConstructionCodeType/Name',
  45. 'ConstructionDetail',
  46. 'InOutStockName'
  47. ],
  48. expand: [
  49. 'FmsConstructionCodeProgress',
  50. 'CmPartner',
  51. 'FmsConstructionEstimation',
  52. 'FmsConstructionCodeType'
  53. ],
  54. extendOptions: {
  55. forceOriginalField: true
  56. },
  57. filter: [
  58. eq('SiteId', BWA.UserInfo.SiteId()),
  59. 'and',
  60. eq('ProgressId', 3), // 공사완료 항목만 가져옴
  61. ]
  62. };
  63. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsConstruction', {
  64. dataSourceOptions: dataSourceOptions,
  65. columns: [
  66. { dataField: 'Number', caption: $G('number'), width: '10%', alignment: 'center' },
  67. { dataField: 'FmsConstructionCodeType/Name', caption: '공사구분', width: '20%', alignment: 'center' },
  68. { dataField: 'Name', caption: '공사명', width: '80%', alignment: 'center' },
  69. { dataField: 'ConstructLocation', caption: '공사위치', width: '30%', alignment: 'center' },
  70. { dataField: 'CmPartner/Name', caption: '공사업체', width: '20%', alignment: 'center' },
  71. { dataField: 'OwnerShipName', caption: '공사책임자', width: '20%', alignment: 'center' },
  72. { dataField: 'StartDate', caption: '시작일', width: '20%', alignment: 'center', sortOrder: 'desc', format: "yyyy-MM-dd" },
  73. { dataField: 'EndDate', caption: '종료일', width: '20%', alignment: 'center', format: "yyyy-MM-dd" },
  74. ],
  75. popupWidth: '740px',
  76. searchViewItems: [
  77. { id: 'Name' },
  78. { id: 'ConstructionTypeId', ignoreValue: 0, defaultValue: 0, dataSource: constructionTypesForSearch },
  79. { id: 'PartnerId', ignoreValue: 0, defaultValue: 0, dataSource: partnerTypesForSearch },
  80. { id: 'StartDate', type: 'dateRange', isOnlyDate: true },
  81. { id: 'EndDate', type: 'dateRange', isOnlyDate: true }
  82. ],
  83. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  84. dataGrid.clearSelection();
  85. var data = clickRow.data;
  86. var dataModel = viewModel.dataModel;
  87. dataModel.PartnerName = $KoSet(dataModel.PartnerName, data['CmPartner/Name']());
  88. dataModel.PartnerPhoneNo = $KoSet(dataModel.PartnerPhoneNo, data['CmPartner/PhoneNo']());
  89. dataModel.ConstructionTypeName = $KoSet(dataModel.ConstructionTypeName, data['FmsConstructionCodeType/Name']());
  90. // 데이터 초기화
  91. constructionEstimateDataModel.SiteId(data['SiteId']());
  92. constructionEstimateDataModel.ConstructionId(data['ConstructionId']());
  93. constructionEstimateDataModel.EstimateDate(new Date());
  94. constructionEstimateDataModel.EstimateUserId(BWA.UserInfo.UserId());
  95. constructionEstimateDataModel.Safety01_CleanUp(0);
  96. constructionEstimateDataModel.Safety02_PersonalProtection(0);
  97. constructionEstimateDataModel.Safety03_FireExtinguisher(0);
  98. constructionEstimateDataModel.Safety04_HighPlaceWork(0);
  99. constructionEstimateDataModel.Safety05_Weld(0);
  100. constructionEstimateDataModel.Safety06_SurroundingCleanUp(0);
  101. constructionEstimateDataModel.Safety07_SurroundingHealthy(0);
  102. constructionEstimateDataModel.Safety08_Noise(0);
  103. constructionEstimateDataModel.Safety09_FacilityProtection(0);
  104. constructionEstimateDataModel.Safety10_Waste(0);
  105. constructionEstimateDataModel.Safety11_Execution(0);
  106. constructionEstimateDataModel.Safety12_Announcement(0);
  107. constructionEstimateDataModel.Ability01_Compliance(0);
  108. constructionEstimateDataModel.Ability02_Fault(0);
  109. constructionEstimateDataModel.Ability03_SkillLevel(0);
  110. constructionEstimateDataModel.Ability04_ProcessManagement(0);
  111. constructionEstimateDataModel.Ability05_Collaboration(0);
  112. constructionEstimateDataModel.Service01_Compliance(0);
  113. constructionEstimateDataModel.Service02_SkillLevel(0);
  114. constructionEstimateDataModel.Comment('');
  115. constructionEstimateDataModel.SafetyScore(0);
  116. constructionEstimateDataModel.AbilityScore(0);
  117. constructionEstimateDataModel.ServiceScore(0);
  118. popupVisible(true);
  119. },
  120. handleViewShowing: function (dataModel) {
  121. //권한설정
  122. hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));
  123. partnerDataSource.filter([
  124. eq('PartnerTypeId', 1), // 공사업체 유형 필터링
  125. and,
  126. eq('SiteId', BWA.UserInfo.SiteId())
  127. ])
  128. $.when(
  129. partnerDataSource.load(),
  130. constructionTypeDataSource.load()
  131. )
  132. .done(function (dbPartners, dbConstructions) {
  133. partners(dbPartners[0]);
  134. constructionTypes(dbConstructions[0]);
  135. constructionTypesForSearch($SearchView.createArrayOfSelectBox('ConstructionTypeId', constructionTypes()));
  136. partnerTypesForSearch($SearchView.createArrayOfSelectBox('PartnerId', partners()));
  137. deferredForSearch.resolve();
  138. });
  139. },
  140. handlePopupShown: function (isEditMode, isNew, dataViewModel) {
  141. // 공사완료 상태인 경우 EditMode 로 팝업을 띄워야 함
  142. if (dataViewModel.ProgressId() == 3) {
  143. setEditMode();
  144. }
  145. }
  146. });
  147. function setEditMode() {
  148. viewModel.visibleEditButton(false);
  149. viewModel.visibleDeleteButton(false);
  150. viewModel.viewModeInPopup(false);
  151. viewModel.isEditModeInPopup(true);
  152. }
  153. // Subscribe 이벤트의 실제 구현
  154. function estimateValueChanged() {
  155. constructionEstimateDataModel.SafetyScore(caculateSafetyScore());
  156. constructionEstimateDataModel.AbilityScore(caculateAbilityScore());
  157. constructionEstimateDataModel.ServiceScore(caculateServiceScore());
  158. }
  159. // 안전수칙준수 총점 계산
  160. function caculateSafetyScore() {
  161. var saftyScore = 0;
  162. var trueCount = 0;
  163. trueCount += checkTrue(constructionEstimateDataModel.Safety01_CleanUp());
  164. trueCount += checkTrue(constructionEstimateDataModel.Safety02_PersonalProtection());
  165. trueCount += checkTrue(constructionEstimateDataModel.Safety03_FireExtinguisher());
  166. trueCount += checkTrue(constructionEstimateDataModel.Safety04_HighPlaceWork());
  167. trueCount += checkTrue(constructionEstimateDataModel.Safety05_Weld());
  168. trueCount += checkTrue(constructionEstimateDataModel.Safety06_SurroundingCleanUp());
  169. trueCount += checkTrue(constructionEstimateDataModel.Safety07_SurroundingHealthy());
  170. trueCount += checkTrue(constructionEstimateDataModel.Safety08_Noise());
  171. trueCount += checkTrue(constructionEstimateDataModel.Safety09_FacilityProtection());
  172. trueCount += checkTrue(constructionEstimateDataModel.Safety10_Waste());
  173. trueCount += checkTrue(constructionEstimateDataModel.Safety11_Execution());
  174. trueCount += checkTrue(constructionEstimateDataModel.Safety12_Announcement());
  175. saftyScore = ((trueCount / 12) * 50).toFixed(1);
  176. return saftyScore;
  177. }
  178. // 공사수행능력 총점 계산
  179. function caculateAbilityScore() {
  180. var abilityScore = 0;
  181. var trueCount = 0;
  182. trueCount += checkTrue(constructionEstimateDataModel.Ability01_Compliance());
  183. trueCount += checkTrue(constructionEstimateDataModel.Ability02_Fault());
  184. trueCount += checkTrue(constructionEstimateDataModel.Ability03_SkillLevel());
  185. trueCount += checkTrue(constructionEstimateDataModel.Ability04_ProcessManagement());
  186. trueCount += checkTrue(constructionEstimateDataModel.Ability05_Collaboration());
  187. abilityScore = (trueCount / 5) * 40;
  188. return abilityScore;
  189. }
  190. // 용역수행능력 총점 계산
  191. function caculateServiceScore() {
  192. var serviceScore = 0;
  193. var trueCount = 0;
  194. trueCount += checkTrue(constructionEstimateDataModel.Service01_Compliance());
  195. trueCount += checkTrue(constructionEstimateDataModel.Service02_SkillLevel());
  196. serviceScore = (trueCount / 2) * 10;
  197. return serviceScore;
  198. }
  199. function checkTrue(value) {
  200. if (value == true) { return 1; }
  201. else { return 0; }
  202. }
  203. function constructionEstimatePopupButtonClose() {
  204. viewModel.popupVisible(false);
  205. }
  206. function handlePopupButtonSave() {
  207. var postData = constructionEstimateDataModel.toJS();
  208. var parameters = {
  209. SiteId: constructionEstimateDataModel.SiteId(),
  210. ConstructionId: constructionEstimateDataModel.ConstructionId()
  211. };
  212. BWA.api.post('FmsConstructionEstimation', postData, parameters).done(function () {
  213. utils.toast.show($G('successDatabaseInsertionMsg'));
  214. viewModel.popupOptions.visible(false);
  215. viewModel.gridView().refresh();
  216. });
  217. }
  218. constructionEstimateDataModel.Safety01_CleanUp.subscribe(function () { estimateValueChanged(); });
  219. constructionEstimateDataModel.Safety02_PersonalProtection.subscribe(function () { estimateValueChanged(); });
  220. constructionEstimateDataModel.Safety03_FireExtinguisher.subscribe(function () { estimateValueChanged(); });
  221. constructionEstimateDataModel.Safety04_HighPlaceWork.subscribe(function () { estimateValueChanged(); });
  222. constructionEstimateDataModel.Safety05_Weld.subscribe(function () { estimateValueChanged(); });
  223. constructionEstimateDataModel.Safety06_SurroundingCleanUp.subscribe(function () { estimateValueChanged(); });
  224. constructionEstimateDataModel.Safety07_SurroundingHealthy.subscribe(function () { estimateValueChanged(); });
  225. constructionEstimateDataModel.Safety08_Noise.subscribe(function () { estimateValueChanged(); });
  226. constructionEstimateDataModel.Safety09_FacilityProtection.subscribe(function () { estimateValueChanged(); });
  227. constructionEstimateDataModel.Safety10_Waste.subscribe(function () { estimateValueChanged(); });
  228. constructionEstimateDataModel.Safety11_Execution.subscribe(function () { estimateValueChanged(); });
  229. constructionEstimateDataModel.Safety12_Announcement.subscribe(function () { estimateValueChanged(); });
  230. constructionEstimateDataModel.Ability01_Compliance.subscribe(function () { estimateValueChanged(); });
  231. constructionEstimateDataModel.Ability02_Fault.subscribe(function () { estimateValueChanged(); });
  232. constructionEstimateDataModel.Ability03_SkillLevel.subscribe(function () { estimateValueChanged(); });
  233. constructionEstimateDataModel.Ability04_ProcessManagement.subscribe(function () { estimateValueChanged(); });
  234. constructionEstimateDataModel.Ability05_Collaboration.subscribe(function () { estimateValueChanged(); });
  235. constructionEstimateDataModel.Service01_Compliance.subscribe(function () { estimateValueChanged(); });
  236. constructionEstimateDataModel.Service02_SkillLevel.subscribe(function () { estimateValueChanged(); });
  237. viewModel.constructionTypes = constructionTypes;
  238. viewModel.partners = partners;
  239. viewModel.constructionEstimateDataModel = constructionEstimateDataModel;
  240. viewModel.dataModel.ConstructionTypeName = ko.observable();
  241. viewModel.dataModel.PartnerName = ko.observable();
  242. viewModel.dataModel.PartnerPhoneNo = ko.observable();
  243. viewModel.constructionEstimatePopupToolbarItems = constructionEstimatePopupToolbarItems;
  244. return viewModel;
  245. };