BemsWebApplication.ConstructionEstimate = function (params, viewInfo) { "use strict"; var imagefileUrl = ko.observable(), uploadedFileInfo = {}, dropZone = null; var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter; //권한설정 var hasnotModificationPermission = ko.observable(true); // 공사업체 데이터 소스... var partnerDataSource = BemsWebApplication.db.createDataSource('CmPartner', true, false, true), constructionTypeDataSource = BemsWebApplication.db.createDataSource('FmsConstructionCodeType', true, false, true); var constructionTypesForSearch = ko.observableArray(), partnerTypesForSearch = ko.observableArray(); var partners = ko.observableArray(), constructionTypes = ko.observableArray(); var constructionEstimateDataModel = new BemsWebApplication.FmsConstructionEstimationViewModel(); var deferredForSearch = new $.Deferred(); var constructionEstimatePopupToolbarItems = [ { location: 'before', text: '상세보기' }, { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', clickAction: handlePopupButtonSave, disabled: hasnotModificationPermission } }, { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: constructionEstimatePopupButtonClose } } ]; var dataSourceOptions = { select: [ 'SiteId', 'ConstructionId', 'Name', 'StartDate', 'EndDate', 'PartnerId', 'ConstructLocation', 'OwnerShipName', 'CommitmentMan', 'OwnerShipPhoneNo', 'WeldWorkStartTime', 'WeldWorkEndTime', 'GasWorkStartTime', 'GasWorkEndTime', 'PaintWorkStartTime', 'PaintWorkEndTime', 'Comment', 'ProgressId', 'AddDate', 'UpdateDate', 'FmsConstructionCodeProgress/Name', 'CmPartner/Name', 'CmPartner/PhoneNo', 'FmsConstructionCodeType/Name', 'ConstructionDetail', 'InOutStockName' ], expand: [ 'FmsConstructionCodeProgress', 'CmPartner', 'FmsConstructionEstimation', 'FmsConstructionCodeType' ], extendOptions: { forceOriginalField: true }, filter: [ eq('SiteId', BWA.UserInfo.SiteId()), 'and', eq('ProgressId', 3), // 공사완료 항목만 가져옴 ] }; var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsConstruction', { dataSourceOptions: dataSourceOptions, columns: [ { dataField: 'Number', caption: $G('number'), width: '10%', alignment: 'center' }, { dataField: 'FmsConstructionCodeType/Name', caption: '공사구분', width: '20%', alignment: 'center' }, { dataField: 'Name', caption: '공사명', width: '80%', alignment: 'center' }, { dataField: 'ConstructLocation', caption: '공사위치', width: '30%', alignment: 'center' }, { dataField: 'CmPartner/Name', caption: '공사업체', width: '20%', alignment: 'center' }, { dataField: 'OwnerShipName', caption: '공사책임자', width: '20%', alignment: 'center' }, { dataField: 'StartDate', caption: '시작일', width: '20%', alignment: 'center', sortOrder: 'desc', format: "yyyy-MM-dd" }, { dataField: 'EndDate', caption: '종료일', width: '20%', alignment: 'center', format: "yyyy-MM-dd" }, ], popupWidth: '740px', searchViewItems: [ { id: 'Name' }, { id: 'ConstructionTypeId', ignoreValue: 0, defaultValue: 0, dataSource: constructionTypesForSearch }, { id: 'PartnerId', ignoreValue: 0, defaultValue: 0, dataSource: partnerTypesForSearch }, { id: 'StartDate', type: 'dateRange', isOnlyDate: true }, { id: 'EndDate', type: 'dateRange', isOnlyDate: true } ], handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; dataModel.PartnerName = $KoSet(dataModel.PartnerName, data['CmPartner/Name']()); dataModel.PartnerPhoneNo = $KoSet(dataModel.PartnerPhoneNo, data['CmPartner/PhoneNo']()); dataModel.ConstructionTypeName = $KoSet(dataModel.ConstructionTypeName, data['FmsConstructionCodeType/Name']()); // 데이터 초기화 constructionEstimateDataModel.SiteId(data['SiteId']()); constructionEstimateDataModel.ConstructionId(data['ConstructionId']()); constructionEstimateDataModel.EstimateDate(new Date()); constructionEstimateDataModel.EstimateUserId(BWA.UserInfo.UserId()); constructionEstimateDataModel.Safety01_CleanUp(0); constructionEstimateDataModel.Safety02_PersonalProtection(0); constructionEstimateDataModel.Safety03_FireExtinguisher(0); constructionEstimateDataModel.Safety04_HighPlaceWork(0); constructionEstimateDataModel.Safety05_Weld(0); constructionEstimateDataModel.Safety06_SurroundingCleanUp(0); constructionEstimateDataModel.Safety07_SurroundingHealthy(0); constructionEstimateDataModel.Safety08_Noise(0); constructionEstimateDataModel.Safety09_FacilityProtection(0); constructionEstimateDataModel.Safety10_Waste(0); constructionEstimateDataModel.Safety11_Execution(0); constructionEstimateDataModel.Safety12_Announcement(0); constructionEstimateDataModel.Ability01_Compliance(0); constructionEstimateDataModel.Ability02_Fault(0); constructionEstimateDataModel.Ability03_SkillLevel(0); constructionEstimateDataModel.Ability04_ProcessManagement(0); constructionEstimateDataModel.Ability05_Collaboration(0); constructionEstimateDataModel.Service01_Compliance(0); constructionEstimateDataModel.Service02_SkillLevel(0); constructionEstimateDataModel.Comment(''); constructionEstimateDataModel.SafetyScore(0); constructionEstimateDataModel.AbilityScore(0); constructionEstimateDataModel.ServiceScore(0); popupVisible(true); }, handleViewShowing: function (dataModel) { //권한설정 hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName)); partnerDataSource.filter([ eq('PartnerTypeId', 1), // 공사업체 유형 필터링 and, eq('SiteId', BWA.UserInfo.SiteId()) ]) $.when( partnerDataSource.load(), constructionTypeDataSource.load() ) .done(function (dbPartners, dbConstructions) { partners(dbPartners[0]); constructionTypes(dbConstructions[0]); constructionTypesForSearch($SearchView.createArrayOfSelectBox('ConstructionTypeId', constructionTypes())); partnerTypesForSearch($SearchView.createArrayOfSelectBox('PartnerId', partners())); deferredForSearch.resolve(); }); }, handlePopupShown: function (isEditMode, isNew, dataViewModel) { // 공사완료 상태인 경우 EditMode 로 팝업을 띄워야 함 if (dataViewModel.ProgressId() == 3) { setEditMode(); } } }); function setEditMode() { viewModel.visibleEditButton(false); viewModel.visibleDeleteButton(false); viewModel.viewModeInPopup(false); viewModel.isEditModeInPopup(true); } // Subscribe 이벤트의 실제 구현 function estimateValueChanged() { constructionEstimateDataModel.SafetyScore(caculateSafetyScore()); constructionEstimateDataModel.AbilityScore(caculateAbilityScore()); constructionEstimateDataModel.ServiceScore(caculateServiceScore()); } // 안전수칙준수 총점 계산 function caculateSafetyScore() { var saftyScore = 0; var trueCount = 0; trueCount += checkTrue(constructionEstimateDataModel.Safety01_CleanUp()); trueCount += checkTrue(constructionEstimateDataModel.Safety02_PersonalProtection()); trueCount += checkTrue(constructionEstimateDataModel.Safety03_FireExtinguisher()); trueCount += checkTrue(constructionEstimateDataModel.Safety04_HighPlaceWork()); trueCount += checkTrue(constructionEstimateDataModel.Safety05_Weld()); trueCount += checkTrue(constructionEstimateDataModel.Safety06_SurroundingCleanUp()); trueCount += checkTrue(constructionEstimateDataModel.Safety07_SurroundingHealthy()); trueCount += checkTrue(constructionEstimateDataModel.Safety08_Noise()); trueCount += checkTrue(constructionEstimateDataModel.Safety09_FacilityProtection()); trueCount += checkTrue(constructionEstimateDataModel.Safety10_Waste()); trueCount += checkTrue(constructionEstimateDataModel.Safety11_Execution()); trueCount += checkTrue(constructionEstimateDataModel.Safety12_Announcement()); saftyScore = ((trueCount / 12) * 50).toFixed(1); return saftyScore; } // 공사수행능력 총점 계산 function caculateAbilityScore() { var abilityScore = 0; var trueCount = 0; trueCount += checkTrue(constructionEstimateDataModel.Ability01_Compliance()); trueCount += checkTrue(constructionEstimateDataModel.Ability02_Fault()); trueCount += checkTrue(constructionEstimateDataModel.Ability03_SkillLevel()); trueCount += checkTrue(constructionEstimateDataModel.Ability04_ProcessManagement()); trueCount += checkTrue(constructionEstimateDataModel.Ability05_Collaboration()); abilityScore = (trueCount / 5) * 40; return abilityScore; } // 용역수행능력 총점 계산 function caculateServiceScore() { var serviceScore = 0; var trueCount = 0; trueCount += checkTrue(constructionEstimateDataModel.Service01_Compliance()); trueCount += checkTrue(constructionEstimateDataModel.Service02_SkillLevel()); serviceScore = (trueCount / 2) * 10; return serviceScore; } function checkTrue(value) { if (value == true) { return 1; } else { return 0; } } function constructionEstimatePopupButtonClose() { viewModel.popupVisible(false); } function handlePopupButtonSave() { var postData = constructionEstimateDataModel.toJS(); var parameters = { SiteId: constructionEstimateDataModel.SiteId(), ConstructionId: constructionEstimateDataModel.ConstructionId() }; BWA.api.post('FmsConstructionEstimation', postData, parameters).done(function () { utils.toast.show($G('successDatabaseInsertionMsg')); viewModel.popupOptions.visible(false); viewModel.gridView().refresh(); }); } constructionEstimateDataModel.Safety01_CleanUp.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety02_PersonalProtection.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety03_FireExtinguisher.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety04_HighPlaceWork.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety05_Weld.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety06_SurroundingCleanUp.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety07_SurroundingHealthy.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety08_Noise.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety09_FacilityProtection.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety10_Waste.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety11_Execution.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Safety12_Announcement.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Ability01_Compliance.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Ability02_Fault.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Ability03_SkillLevel.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Ability04_ProcessManagement.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Ability05_Collaboration.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Service01_Compliance.subscribe(function () { estimateValueChanged(); }); constructionEstimateDataModel.Service02_SkillLevel.subscribe(function () { estimateValueChanged(); }); viewModel.constructionTypes = constructionTypes; viewModel.partners = partners; viewModel.constructionEstimateDataModel = constructionEstimateDataModel; viewModel.dataModel.ConstructionTypeName = ko.observable(); viewModel.dataModel.PartnerName = ko.observable(); viewModel.dataModel.PartnerPhoneNo = ko.observable(); viewModel.constructionEstimatePopupToolbarItems = constructionEstimatePopupToolbarItems; return viewModel; };