BemsWebApplication.Facility = function(params, viewInfo) { "use strict"; var facilityClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'); var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true), floorDataSource = BemsWebApplication.db.createDataSource('CmFloor'), zoneDataSource = BemsWebApplication.db.createDataSource('CmZone') ; var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()]; var buildings = ko.observableArray(), floors = ko.observableArray(), zones = ko.observableArray(); var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()], searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()], searchBuildings = ko.observableArray(), searchFloors = ko.observableArray(), searchBuildingId = ko.observable(), searchFloorId = ko.observable(); var imagefileUrl = ko.observable(), uploadedFileInfo = {}, dropZone = null; var isMainContactor = true, selectedUserData = ko.observable(), selectedFacility = ko.observable(), selectedFacilityDataInSearchParentPopup = ko.observable(); var searchDeferred = new $.Deferred(); var defaultSearchClassArray = $SearchView.createDefaultArray('FacilityClassId'), defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'), defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId'); var tabsVisible = ko.observable(false), currentTabIndex = ko.observable(0); selectedFacilityDataInSearchParentPopup.subscribe(function(value) { viewModel.dataModel.ParentFacilityCode(value.FacilityCode); viewModel.dataModel.ParentFacilityName(value.Name); }); selectedUserData.subscribe(function(value) { if (isMainContactor) { viewModel.dataModel.MainContactorUserId(value.UserId); viewModel.dataModel.MainContactorUserName(value.Name); } else { viewModel.dataModel.SubContactorUserId(value.UserId); viewModel.dataModel.SubContactorUserName(value.Name); } }); 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); }; 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); } function initializeSearchClasses(onlyThird) { if (onlyThird === undefined || onlyThird === false) { searchFacilityClasses[1](defaultSearchClassArray.slice(0)); searchFacilityClassValues[1](0); } searchFacilityClasses[2](defaultSearchClassArray.slice(0)); searchFacilityClassValues[2](0); } function setupDropZone(isEditModeInPopup, dataViewModel) { var timer = null; isEditModeInPopup.subscribe(function(value) { if (value) { if (timer) { clearInterval(timer); } timer = setInterval(function() { if ($('#facilityDropZone').length) { if (_.isNull(dropZone)) { dropZone = BWA.DropZone.create({ id: '#facilityDropZone', categoryId: $Code.FileCategory.FACILITY, uploadedFileInfo: uploadedFileInfo, handleRemoveBeforePromise: function() { var keys = BWA.db.extractKeysObject('CmFacility', dataViewModel); return BWA.db.CmFacility.update(keys, { FileId: null }); }, handleSuccess: function(fileInfo) { dataViewModel.FileId(fileInfo.FileId); }, handleRemovedFile: function() { dataViewModel.FileId(null); }, }); uploadedFileInfo.SiteId = dataViewModel.SiteId(); uploadedFileInfo.FileId = dataViewModel.FileId(); if (uploadedFileInfo.FileId) { BWA.db.CmFile.byKey(uploadedFileInfo).done(function(data) { dropZone.removeAllFiles(); dropZone.emit('addedfile', { name: data.Name, size: data.FileSize }); //dropZone.options.maxFiles = 0; // 이게 있으면 삭제후 다시 업로드가 안 된다. }); } } } }, 100); } else { if (timer) { clearInterval(timer); timer = null; } dropZone = null; } }); } var facilityOptions = BemsWebApplication.Factory.Facility; var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmFacility', { dataSourceOptions: facilityOptions.getDataSourceForDataGrid(), //dataSourceOptions: { // store: BemsWebApplication.odata.Facility, // select: [ 'SiteId' , 'FacilityCode' , 'ParentFacilityName', 'FirstClassName', 'SecondClassName', 'ThirdClassName', 'Name', 'Nickname', // 'BuildingName', 'FloorName', 'ZoneName', 'ManufactureModel', 'MainContactorUserName', 'SubContactorUserName' ] //}, columns: facilityOptions.getColumns([ { dataField: 'FacilityCode' }, { dataField: 'ClassName' }, { dataField: 'Name' }, { dataField: 'ManufactureModel' }, { dataField: 'MainContactorUserName' }, { dataField: 'SubContactorUserName' }, { dataField: 'Location' } ]), popupWidth: '740px', wordWrapEnabled: true, cellPrepared: BemsWebApplication.Factory.Facility.cellPrepared, searchViewItems: [ { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView }, { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView }, { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] }, { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: searchBuildingId, dataSource: searchBuildings, handleChangedValue: handleBuildingInSearchView }, { id: 'FloorId', ignoreValue: 0, defaultValue: 0, withCheckId: 'BuildingId', value: searchFloorId, dataSource: searchFloors }, { id: 'Name' } ], promiseDataInSearchView: searchDeferred.promise(), handleViewShowing: function() { facilityClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], 'and', ['ParentFacilityClassId', '=', null] ]); $.when(facilityClassDataSource.load(), buildingDataSource.load()).done(function(result1, result2) { facilityClasses[0](result1[0]); searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(result1[0])); initializeSearchClasses(); buildings(result2[0]); searchBuildings(defaultSearchBuildingArray.slice(0).concat(result2[0])); searchFloors(defaultSearchFloorArray.slice(0)); searchDeferred.resolve(); }); }, handleViewShown: function(dataViewModel, isEditModeInPopup) { setupDropZone(isEditModeInPopup, dataViewModel); }, handlePopupShowing: function(isNewInPopup) { tabsVisible(isNewInPopup() == false); }, handlePopupShown: function(isEditModeInPopup, isNewInPopup, dataViewModel) { if (isNewInPopup === false) { //viewModel.childFacilitiesMultiView.load(); } viewModel.searchViewPopup.show(); }, //handlePopupHiding: function() { // if (_.isNull(dropZone) === false) { // dropZone.dispose(); // } //}, //handleCancelInPopup: function() { // if (_.isNull(dropZone) === false) { // dropZone.dispose(); // } //}, handleSaveSuccess: function() { if (_.isNull(dropZone) === false) { dropZone.resetUploadedFileInfo(); } }, 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); }); if (_.isNull(dataViewModel.FileId()) === false) { imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId())); } else { imagefileUrl(undefined); } selectedFacility(dataViewModel); } }, handleDataGridRowClick: function(id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; dataModel.ParentFacilityName = $KoSet(dataModel.ParentFacilityName, data.ParentFacilityName); dataModel.ClassName = $KoSet(dataModel.ClassName, BWA.Factory.Facility.formatClassName(data.FirstClassName(), data.SecondClassName(), data.ThirdClassName())); dataModel.BuildingName = $KoSet(dataModel.BuildingName, data.BuildingName); dataModel.FloorName = $KoSet(dataModel.FloorName, data.FloorName); dataModel.ZoneName = $KoSet(dataModel.ZoneName, data.ZoneName); dataModel.MainContactorUserName = $KoSet(dataModel.MainContactorUserName, data.MainContactorUserName); dataModel.SubContactorUserName = $KoSet(dataModel.SubContactorUserName, data.SubContactorUserName); popupVisible(true); } }); //var handleSelectBoxCompany = function( e ) { // viewModel.dataModel.CompanyId(e.value); //}; floorDataSource.filter('BuildingId', -1); zoneDataSource.filter('FloorId', -1); 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); } viewModel.handleSelectBoxChangeBuilding = function(e) { BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, floors); viewModel.dataModel.FloorId(null); viewModel.dataModel.ZoneId(null); } viewModel.handleSelectBoxChangeFloor = function(e) { BWA.DataUtil.setArrayDataSourceFilter(zoneDataSource, 'FloorId', e.value, zones); viewModel.dataModel.ZoneId(null); } viewModel.buttonSearchFacility = function() { viewModel.facilitySearchPopup.show(); }; viewModel.buttonSearchMainContactorUser = function(e) { isMainContactor = true; viewModel.userSearchPopup.show(); } viewModel.buttonSearchSubContactorUser = function(e) { isMainContactor = false; viewModel.userSearchPopup.show(); } viewModel.tabsOptions = { visible: tabsVisible, selectedIndex: currentTabIndex, dataSource: [ { text: '시설정보' }, { text: '작업이력' }, { text: '하위시설' }, { text: '점검항목' }, { text: '법정항목' }, { text: '운전일자항목' } ] }; //viewModel.companyDataSource = companies; //viewModel.handleSelectBoxCompany = handleSelectBoxCompany; viewModel.dataModel.ClassName = ko.observable(); viewModel.facilityClasses = facilityClasses; viewModel.searchFacilityClasses = searchFacilityClasses; viewModel.buildings = buildings; viewModel.floors = floors; viewModel.zones = zones; viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData); viewModel.facilitySearchPopup = BWA.Popup.Facility.create(viewModel, selectedFacilityDataInSearchParentPopup); var multiViewDataSource = [{ viewModel: viewModel, imagefileUrl: imagefileUrl, template: 'facility' }]; //viewModel.childFacilitiesMultiView = BWA.Facility.createChildFacilitiesMultiViewInPopup(viewModel,selectedFacility); BWA.Popup.WorkResult.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource); BWA.Facility.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource); BWA.FacilityCheckItem.setupMultiViewInPopup($Code.WorkType.REGULAR_CHECK, 'checkItems', 'checkItemDataGrid', viewModel, selectedFacility, multiViewDataSource); BWA.FacilityCheckItem.setupMultiViewInPopup($Code.WorkType.LEGAL_CHECK, 'legalCheckItems', 'legalCheckItemDataGrid', viewModel, selectedFacility, multiViewDataSource); //BWA.CheckGroupManagement.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource); //BWA.LegalCheckGroupManagement.setupMultiViewInPopup(viewModel, selectedFacility, multiViewDataSource); viewModel.searchViewPopup = BWA.Popup.SearchView.create({ parentPopupId: 'popupDetail', parentPopupVisible: viewModel.popupVisible, handleSearch: function(filter, searchItems) { } }); // viewModel.searchViewPopup viewModel.multiViewOptions = { height: '560px', selectedIndex: currentTabIndex, dataSource: multiViewDataSource }; return viewModel; };