/// <summary> /// Updates the RecordList based on the search. /// </summary> private void UpdateRecordList() { if (EnableSearch) { var results = new List <RecordModel>(); if (string.IsNullOrWhiteSpace(SearchText)) { results.AddRange(Records.Where(i => i.RecordDate >= FromDate).Where(i => i.RecordDate <= ToDate)); } else { var searchText = SearchText.Split(' '); bool isFirstQuery = true; foreach (string item in searchText) { if (!string.IsNullOrEmpty(item)) { if (isFirstQuery) { results.AddRange(Records.Where(i => i.RecordDate >= FromDate).Where(i => i.RecordDate <= ToDate).Where(i => i.SearchString(i.TaxonId).ToLower().Contains(item.ToLower()))); } else { results = results.Intersect(Records.Where(i => i.RecordDate >= FromDate).Where(i => i.RecordDate <= ToDate).Where(i => i.SearchString(i.TaxonId).ToLower().Contains(item.ToLower()))).ToList(); } isFirstQuery = false; } } } SelectedRecordList.Clear(); SelectedRecordList = new ObservableCollection <RecordModel>(results); } }
private async Task SaveTaxa() { try { // "Neue Fundmeldung anlegen" if (NewRecord) { await App.Current.MainPage.Navigation.PushAsync(new TaxonList(NewRecord)); throw new Exception(""); } if (Connectivity.NetworkAccess != NetworkAccess.Internet) { throw new Exception("Zur Synchronisation Internetverbindung herstellen."); } //go to login > open login if (Unauthorized) { Unauthorized = false; await App.Current.MainPage.Navigation.PushAsync(new RegisterDevice()); SyncButtonText = "Funde synchronisieren"; throw new Exception(""); } //unauthorized > hint: go to login else if (Database.GetRegister() == null) { Unauthorized = true; SyncButtonText = "Anmeldung öffnen"; throw new UnauthorizedAccessException("Zur Synchronisation von Fundmeldungen anmelden."); } //synchronize if no problems RecordEditViewModel revm = new RecordEditViewModel(); var count = 0; string result; IsBusy = true; foreach (RecordModel taxaItem in SelectedRecordList.Where(i => i.IsEditable)) { try { revm.SelectedRecordId = taxaItem.LocalRecordId; AdviceJsonItem[] advItem = { revm.SaveTaxa() }; result = await _mobileApi.SaveAdvicesByDevice(advItem); ResultObj result_obj = JsonConvert.DeserializeObject <ResultObj>(result); if (result_obj.succeeded == true) { Database.SetSynced(advItem[0].AdviceId); count++; } } catch (Exception ex) { Debug.WriteLine(ex.Message); } } var backSynchronizedCount = await SynchronizeBack(); count += backSynchronizedCount; if (count == 0) { result = "Fundmeldungen sind aktuell"; } else { result = "Fundmeldungen synchronisiert"; } IsBusy = false; SelectedRecordList.Clear(); Records = await Database.GetRecordsAsync(); SelectedRecordList = new ObservableCollection <RecordModel>(Records); Result = result; ShowSyncButton = false; OnPropertyChanged(nameof(ShowSyncButton)); } catch (Exception e) { IsBusy = false; Result = e.Message; } }