BemsWebApplication.FacilityWorkHistory2 = function (params, viewInfo) { "use strict"; var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName); var facilityClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'); var facilityClassDataSource2 = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'); var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true), floorDataSource = BemsWebApplication.db.createDataSource('CmFloor'); var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true), workTypeDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeType'), progressDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeProgress'), searchBuildingId = ko.observable(), searchBuildings = ko.observableArray(), searchFloorId = ko.observable(), businessFields = ko.observableArray(), workTypes = ko.observableArray(), progresses = ko.observableArray(), //CmFacility facilityClass = ko.observableArray(), searchFloors = ko.observableArray(), floors = ko.observableArray(), buildings = ko.observableArray(); var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()]; var defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'), defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId'); var isVisibleExecutionButton = ko.observable(true); var handleBuildingInSearchView = function (e) { if (e.value === 0) { searchFloors(defaultSearchFloorArray.slice(0)); searchFloorId(0); return 0; } BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, searchFloors, defaultSearchFloorArray); } var FmsMaterialExdataSource = new DevExpress.data.DataSource({ store: BemsWebApplication.odata.FmsMaterialEx, requireTotalCount: true, pageSize: 100 }); var isWorkDone = ko.observable(false); var isWorkHold = ko.observable(false); var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()], searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()]; var isAddHistoryButton = ko.observable(false); var defaultSearchClassArray = $SearchView.createDefaultArray('FacilityClassId'); var imagefileUrl1 = ko.observable(), imagefileUrl2 = ko.observable(); var popup, addWorkResultCheckItemPopup = null, workExecutionRegisterPopup = null; var deferredForSearch = new $.Deferred(); var workTypesForSearch = ko.observableArray(), facilityClassForSearch = ko.observableArray(), businessFieldsForSearch = ko.observableArray(), progressesForSearch = ko.observableArray(); var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter; var selectedFacilityData = ko.observable(), selectedUserData = params.selectedUserData || ko.observable(); var dataSourceOptions = { select: [ 'SiteId', 'WorkRequestId', 'FacilityCode', 'CmFacility/FirstClassId', 'CmFacility/SecondClassId', 'CmFacility/ThirdClassId', 'CmFacility/Name', 'CmFacility/BuildingId', 'CmFacility/FloorId', 'CmFacility/BemsFacilityType/Name', 'FmsWorkOrder/FmsWorkRequest/WorkTypeId', 'FmsWorkOrder/FmsWorkRequest/BusinessFieldId', 'FmsWorkOrder/Title', 'FmsWorkOrder/OrderDate', 'FmsWorkOrder/StartWorkDate', 'FmsWorkOrder/FmsWorkResult/StartDate', 'FmsWorkOrder/FmsWorkResult/EndDate', 'FmsWorkOrder/FmsWorkResult/ConfirmedUserId', 'FmsWorkOrder/FmsWorkResult/ConfirmedDate', 'FmsWorkOrder/FmsWorkRequest/WorkProgressId', 'FmsWorkOrder/FmsWorkRequest/StartWorkDate', 'FmsWorkOrder/FmsWorkRequest/CmBusinessField/Name', 'FmsWorkOrder/CmUser/Name', // 작업지시자 //'CmUser1/Name', // 반려자 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeType/Name', 'FmsWorkOrder/CmBusinessField/Name', 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeProgress/Name', 'FmsWorkOrder/FmsWorkResult/CmUser/Name', // 작업자 'FmsWorkOrder/FmsWorkResult/CmUser1/Name', // 승인자 'FmsWorkOrder/Content', // 2016 05 30 추가 ], expand: [ 'CmFacility/BuildingId', 'CmFacility/FloorId', 'FmsWorkOrder/FmsWorkRequest', 'FmsWorkOrder/FmsWorkResult', 'FmsWorkOrder/FmsWorkResult/CmUser', 'FmsWorkOrder/FmsWorkResult/CmUser1', 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeType', 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeProgress', 'FmsWorkOrder/FmsWorkRequest/CmBusinessField', 'FmsWorkOrder/CmBusinessField', 'FmsWorkOrder/CmUser', 'CmFacility', 'CmFacility/BemsFacilityType', ], extendOptions: { forceOriginalField: true } }; if (!useBusinessFiltering) { dataSourceOptions.filter = [ eq('SiteId', BWA.UserInfo.SiteId()), and, ['FmsWorkOrder/FmsWorkRequest/WorkProgressId', '=', 6] ]; } else { dataSourceOptions.filter = [ eq('SiteId', BWA.UserInfo.SiteId()), and, ['FmsWorkOrder/FmsWorkRequest/WorkProgressId', '=', 6], and, [eq('FmsWorkOrder/FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkOrder/FmsWorkRequest/BusinessFieldId', 1)]]; } var searchFirstClassId = false, searchSecondClassId = false, searchThirdClassId = false; var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsWorkOrderToFacility', { popupWidth: 1060, //번호/설비유형/설비명/작업구분/작업명/작업시작일/작업완료일/작업자/승인자"로 dataSourceOptions: dataSourceOptions, columns: [ { dataField: 'WorkRequestId', caption: $G('number'), width: '5%', alignment: 'center' }, { dataField: 'FmsWorkOrder/FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '7%', alignment: 'center' }, { dataField: 'FmsWorkOrder/FmsWorkResult/StartDate', caption: '시작일', width: '9%', alignment: 'center', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'FmsWorkOrder/FmsWorkResult/EndDate', caption: '종료일', width: '9%', alignment: 'center', sortOrder: 'desc', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'CmFacility/FirstClassId', caption: '대분류', width: '14%', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < facilityClassForSearch().length; i++) { if (facilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return facilityClassForSearch()[i].Name(); } } } }, { dataField: 'CmFacility/SecondClassId', caption: '중분류', width: '14%', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < facilityClassForSearch().length; i++) { if (facilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return facilityClassForSearch()[i].Name(); } } } }, { dataField: 'CmFacility/ThirdClassId', caption: '소분류', width: '14%', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < facilityClassForSearch().length; i++) { if (facilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return facilityClassForSearch()[i].Name(); } } } }, { dataField: 'CmFacility/BemsFacilityType/Name', caption: '설비유형', width: '14%', alignment: 'center', visible: false }, { dataField: 'CmFacility/Name', caption: '설비명칭', width: '20%', alignment: 'center' }, { dataField: 'FmsWorkOrder/Title', caption: '작업명', width: '38%', alignment: 'center' }, { dataField: 'FmsWorkOrder/FmsWorkResult/CmUser/Name', caption: '작업자', width: '10%', alignment: 'center', visible: false }, { dataField: 'FmsWorkOrder/FmsWorkResult/CmUser1/Name', caption: '승인자', width: '10%', alignment: 'center', visible: false } ], searchViewItems: [ { id: 'FmsWorkOrder/FmsWorkRequest/BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: businessFieldsForSearch }, // 2016 03 09 이처럼 id가 CmFacility/FirstClassId 같이 관계키인 경우 이벤트가 연결되지 않는다. handleFirstClassChangedValueInSearchView를 직접연결한다. { id: 'CmFacility/FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView }, { id: 'CmFacility/SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'CmFacility/FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView }, { id: 'CmFacility/ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'CmFacility/FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] }, { id: 'CmFacility/Name' }, { id: 'FmsWorkOrder/Title' }, { id: 'FmsWorkOrder/FmsWorkRequest/WorkProgressId' }, { id: 'CmFacility/BuildingId', ignoreValue: 0, defaultValue: 0, value: searchBuildingId, dataSource: searchBuildings, handleChangedValue: handleBuildingInSearchView }, { id: 'CmFacility/FloorId', ignoreValue: 0, defaultValue: 0, withCheckId: 'CmFacility/BuildingId', value: searchFloorId, dataSource: searchFloors }, { id: 'FmsWorkOrder/FmsWorkResult/StartDate', type: 'dateRange', isOnlyDate: true }, //{ id: 'FmsWorkOrder/FmsWorkResult/EndDate', type: 'dateRange' }, { id: 'FmsWorkOrder/FmsWorkResult/EndDate', type: 'dateRange', isOnlyDate: true }, { id: 'FmsWorkOrder/FmsWorkResult/CmUser/Name' }, { id: 'FmsWorkOrder/FmsWorkResult/CmUser1/Name' }, { id: 'FmsWorkOrder/FmsWorkRequest/WorkTypeId', ignoreValue: 0, defaultValue: 0, dataSource: workTypesForSearch }, ], promiseDataInSearchView: deferredForSearch.promise(), handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; if (data['FmsWorkOrder/FmsWorkRequest/WorkProgressId']() >= $Code.WorkProgress.WORK_COMPLETE) isWorkDone(true); else isWorkDone(false); if (data['FmsWorkOrder/FmsWorkRequest/WorkProgressId']() == $Code.WorkProgress.WORK_HOLD) { isWorkHold(true); isWorkDone(false); } else { isWorkHold(false); } isVisibleExecutionButton(false); if (popup && popup.handleBeforeShowingPopupForEdit) { popup.handleBeforeShowingPopupForEdit(data, dataModel); } popupVisible(true); }, handlePopupShowing: function () { viewModel.visibleEditButton(false); viewModel.visibleDeleteButton(false); if (popup && popup.handlePopupShowing) { popup.handlePopupShowing.apply(this, arguments); } }, handlePopupShown: function (editMode, isNewInPopup, dataModel) { if (popup && popup.handlePopupShown) { popup.handlePopupShown.apply(this, arguments); } }, handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) { //if (isNewInPopup() == false) { // BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.FirstClassId(), facilityClasses[1]).done(function () { // BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.SecondClassId(), facilityClasses[2]); // }); // BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors).done(function () { // BWA.DataUtil.setArrayDataSourceFilter(zoneDataSource, 'FloorId', dataViewModel.FloorId(), zones); // }); //} }, handleViewShowing: function (dataModel) { FmsMaterialExdataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()] ]); FmsMaterialExdataSource.load().done(function (result) { if (result != null) { viewModel.dataModel.MaterialExdataSource(result); } }).fail(function (error) { utils.toast.show(error); }); facilityClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], 'and', ['ParentFacilityClassId', '=', null] ]); facilityClassDataSource2.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()] ]); if (useBusinessFiltering) { businessFieldDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)] ]); } $.when( businessFieldDataSource.load(), workTypeDataSource.load(), progressDataSource.load(), facilityClassDataSource.load(), buildingDataSource.load(), facilityClassDataSource2.load() ).done(function (businessFieldResult, workTypeResult, progressResult, facilityClassResult, result2, facilityClassResult2) { businessFields(businessFieldResult[0]); workTypes(workTypeResult[0]); progresses(progressResult[0]); facilityClass(facilityClassResult2[0]); facilityClassForSearch($SearchView.createArrayOfSelectBox('FacilityClassId', facilityClass())); businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', businessFields())); workTypesForSearch($SearchView.createArrayOfSelectBox('WorkTypeId', workTypes())); progressesForSearch($SearchView.createArrayOfSelectBox('ProgressId', progresses())); facilityClasses[0](facilityClassResult[0]); searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(facilityClassResult[0])); initializeSearchClasses(); buildings(result2[0]); searchFloors(defaultSearchFloorArray.slice(0)); searchBuildings(defaultSearchBuildingArray.slice(0).concat(result2[0])); deferredForSearch.resolve(); viewModel.gridView().refresh(); }); }, handleViewShown: function () { } }); floorDataSource.filter('CmFacility/BuildingId', -1); var handleFirstClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(); return; } BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray); }; var handleSecondClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(true); return; } BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray); }; function initializeSearchClasses(onlyThird) { if (onlyThird === undefined || onlyThird === false) { searchFacilityClasses[1](defaultSearchClassArray.slice(0)); searchFacilityClassValues[1](0); } searchFacilityClasses[2](defaultSearchClassArray.slice(0)); searchFacilityClassValues[2](0); } viewModel.handleSelectBoxChangeFirstClass = function (e) { BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[1]); viewModel.dataModel.SecondClassId(null); viewModel.dataModel.ThirdClassId(null); }; viewModel.handleSelectBoxChangeSecondClass = function (e) { BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[2]); viewModel.dataModel.ThirdClassId(null); }; addWorkResultCheckItemPopup = viewModel.addWorkResultCheckItemPopup = BWA.Popup.AddWorkResultCheckItem.create(viewInfo, viewModel); viewModel.businessFields = businessFields; viewModel.workTypes = workTypes; //viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView; //viewModel.dataModel.ParentFacilityName = $KoSet(viewModel.dataModel.ParentFacilityName, ''); viewModel.searchFacilityClasses = searchFacilityClasses; // 2016 03 09 이처럼 id가 CmFacility/FirstClassId 같이 관계키인 경우 이벤트가 연결되지 않는다. handleFirstClassChangedValueInSearchView를 직접연결한다. dxview도 수정했다. viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView; viewModel.imagefileUrl1 = imagefileUrl1; viewModel.imagefileUrl2 = imagefileUrl2; viewModel.isAddHistoryButton = isAddHistoryButton; popup = viewModel.popup = BWA.Popup.FacilityWorkHistory2.create(viewInfo, viewModel); //workExecutionRegisterPopup = viewModel.workExecutionRegisterPopup = BWA.Popup.WorkExecutionRegister.create(viewInfo, viewModel); viewModel.isWorkDone = isWorkDone; viewModel.isWorkHold = isWorkHold; viewModel.buildings = buildings; viewModel.floors = floors; viewModel.facilityClasses = facilityClasses; viewModel.dataModel.MaterialExdataSource = ko.observable(); viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView; return viewModel; };