BemsWebApplication.PatrolPos = function (params, viewInfo) { "use strict"; var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true), floorDataSource = BemsWebApplication.db.createDataSource('CmFloor', true); var buildings = ko.observableArray(), floors = ko.observableArray(); var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter; var buildingsForSearch = ko.observableArray(), floorsForSearch = ko.observableArray(), buildingIdForSerach = ko.observable(), floorIdForSerach = ko.observable(), defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'), defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId'); var deferredForSearch = new $.Deferred(); var CmPatrolPosDataSource = BemsWebApplication.db.createDataSource('CmPatrolPos'); var PatrolPosInfo = ko.observableArray(); var RowName, RowBuildingId, RowFloorId; function handleBuildingInSearchView(e) { if (e.value === 0) { floorsForSearch(getDefaultFloorForSearch()); } else { BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, floorsForSearch, getDefaultFloorForSearch()); } floorIdForSerach(0); } var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolPos', { rowAlternationEnabled: true, /* editing: { editMode: 'batch', editEnabled: true, //removeEnabled: true, //insertEnabled: true },*/ dataSourceOptions: { select: ['SiteId', 'FloorId', 'BuildingId', 'PosId', 'Name', 'CmBuilding/Name', 'CmFloor/Name', 'PosDesc', 'TagId'], expand: ['CmBuilding', 'CmFloor'], extendOptions: { forceOriginalField: true, } }, columns: [ { dataField: 'PosId', caption: $G('number'), width: '10%', alignment: 'center', sortOrder: 'desc' }, /* { dataField: 'CmBuilding/Name', caption: $G('buildingName'), width: '22%', alignment: 'center', allowEditing: false }, { dataField: 'CmFloor/Name', caption: $G('floorName'), width: '23%', alignment: 'center', allowEditing: false }, { dataField: 'Name', caption: $G('zoneName'), width: '40%', alignment: 'center', allowEditing: false }, */ { dataField: 'CmBuilding/Name', caption: $G('buildingName'), width: '20%', alignment: 'center' }, { dataField: 'CmFloor/Name', caption: $G('floorName'), width: '20%', alignment: 'center' }, { dataField: 'Name', caption: '순찰지점명', width: '30%', alignment: 'center' }, { dataField: 'TagId', caption: '지점TAG ID', width: '30%', alignment: 'center' }, { dataField: 'PosDesc', caption: '설명', width: '30%', alignment: 'center' }, //{ dataField: 'Target_temperature', caption: '목표온도', width: '40%', alignment: 'center' }, //{ dataField: 'Target_humidity', caption: '목표습도', width: '40%', alignment: 'center' } //utils.datagrid.columnIsUse( '15%' ) ], popupWidth: 480, promiseDataInSearchView: deferredForSearch.promise(), searchViewItems: [ { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: buildingIdForSerach, dataSource: buildingsForSearch, handleChangedValue: handleBuildingInSearchView }, { id: 'FloorId', ignoreValue: 0, defaultValue: 0, value: floorIdForSerach, dataSource: floorsForSearch }, //withCheckId: 'BuildingId', { id: 'Name' } ], handleViewShowing: function () { buildingDataSource.load().done(function (buildingResults) { buildings(buildingResults); //buildingsForSearch( $SearchView.createArrayOfSelectBox( 'BuildingId', buildings() ) ); //floorsForSearch( getDefaultFloorForSearch() ); buildingsForSearch(defaultSearchBuildingArray.slice(0).concat(buildingResults)); floorsForSearch(defaultSearchFloorArray.slice(0)); buildingIdForSerach(0); floorIdForSerach(0); deferredForSearch.resolve(); }); }, handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); // hcLee 2016 02 16 키필드가 콤보로 제공될때 등록시만 보이고 수정시에는 안보기에 하기 위하여 꼭 필요 !!! viewModel.isNewInPopup(false); // var data = clickRow.data; var dataModel = viewModel.dataModel; dataModel.BuildingName = $KoSet(dataModel.BuildingName, data['CmBuilding/Name']); dataModel.FloorName = $KoSet(dataModel.FloorName, data['CmFloor/Name']); RowName = data.Name; RowFloorId = data.FloorId; RowBuildingId = data.BuildingId; popupVisible(true); }, handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) { if (isNewInPopup() == false) { BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors); } }, viewHidden: function () { $SearchView.visibleObservable(false); // hcLee 2015 03 23 visiblePopup(false); }, handlePopupShowing: function (that) { CmPatrolPosDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()] ]); CmPatrolPosDataSource.load().done(function (result) { PatrolPosInfo(result); }); }, handleBeforeDelete: function (db) { /* var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel'](); dataViewModel.SiteId = db.SiteId; dataViewModel.BuildingId = db.BuildingId; dataViewModel.FloorId = db.FloorId; dataViewModel.ZoneId = db.ZoneId; var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemoveZoneTempHumiSet', dataViewModel); promise.done(function () { ; });*/ }, beforeInsertingDataViewModel: function (dataModel, dbModelId) { var dfd = $.Deferred(); var isDuplicated = false; for (var i = 0; i < PatrolPosInfo().length; i++) { if (dataModel.Name() == PatrolPosInfo()[i].Name() && dataModel.BuildingId() == PatrolPosInfo()[i].BuildingId() && dataModel.FloorId() == PatrolPosInfo()[i].FloorId()) { isDuplicated = true; } } if (!BWA.DataUtil.isValidInputValue(dataModel.Name())) return dfd.resolve(false, '저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)'); else { if (isDuplicated) return dfd.resolve(false, '이미 동일 정보가 존재합니다.'); else return dfd.resolve(true); } }, beforeUpdateDataViewModel: function () { var isDuplicated = false; for (var i = 0; i < PatrolPosInfo().length; i++) { if (viewModel.dataModel.Name() == PatrolPosInfo()[i].Name() && (RowName() != PatrolPosInfo()[i].Name()) && viewModel.dataModel.BuildingId() == PatrolPosInfo()[i].BuildingId() && (RowBuildingId() != PatrolPosInfo()[i].BuildingId()) && viewModel.dataModel.FloorId() == PatrolPosInfo()[i].FloorId() && (RowFloorId() != PatrolPosInfo()[i].FloorId())) { isDuplicated = true; } } if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) { utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error'); return 0; } else { if (isDuplicated) { utils.toast.show('이미 동일 이름이 존재합니다.', 'error'); return 0; } else return 2; } }, handleAfterInsert: function (db) { /* var dataViewModel = new BemsWebApplication['CmZoneTempHumiSetViewModel'](); dataViewModel.SiteId = db.SiteId; dataViewModel.BuildingId = db.BuildingId; dataViewModel.FloorId = db.FloorId; dataViewModel.ZoneId = db.ZoneId; var promise = BemsWebApplication.api.post('BemsMonitoringPoint/AddZoneTempHumiSet', dataViewModel); promise.done(function () { ; });*/ }, }); function getDefaultFloorForSearch() { return $SearchView.createDefaultArray('FloorId'); } floorDataSource.filter('BuildingId', -1); // 콤보, text 등록먼저후 생기는 팝업에서 안보이는 문제해결 viewModel.dataModel.BuildingName = ko.observable(); viewModel.dataModel.FloorName = ko.observable(); viewModel.buildings = buildings; //viewModel.buildingsForSearch = buildingsForSearch; viewModel.floors = floors; //viewModel.floorsForSearch = floorsForSearch; viewModel.handleSelectBoxChangeBuilding = function (e) { floorDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, eq('BuildingId', e.value) ]); $.when(floorDataSource.load() ).done(function (Result) { floors(Result); }); //BWA.DataUtil.setArrayDataSourceFilter( floorDataSource, '', , ); viewModel.dataModel.FloorId(null); } /* viewModel.searchViewPopup = BWA.Popup.SearchView.create({ parentPopupId: 'popupDetail', parentPopupVisible: viewModel.popupVisible, handleSearch: function (filter, searchItems) { } });*/ /* viewModel.popupInsertButtonOptions.action = function () { alert('insett'); }*/ return viewModel; };