Move CountMachesInMember to Member
This commit is contained in:
@ -2,6 +2,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
|
||||
namespace Elwig.Models {
|
||||
[Table("member"), PrimaryKey("MgNr")]
|
||||
@ -125,5 +126,32 @@ namespace Elwig.Models {
|
||||
|
||||
[InverseProperty("Member")]
|
||||
public virtual BillingAddress BillingAddress { get; private set; }
|
||||
|
||||
public int SearchScore(IEnumerable<string> keywords) {
|
||||
keywords = keywords.Where(s => s.Length >= 2 || (s.Length > 0 && s.All(c => char.IsDigit(c))));
|
||||
if (!keywords.Any())
|
||||
return 0;
|
||||
|
||||
string?[] check = new string?[] {
|
||||
MgNr.ToString(),
|
||||
FamilyName.ToLower(), MiddleName?.ToLower(), GivenName.ToLower(),
|
||||
BillingAddress?.Name.ToLower(),
|
||||
Comment?.ToLower(),
|
||||
};
|
||||
|
||||
int i = 0;
|
||||
foreach (string? c in check) {
|
||||
if (c == null) {
|
||||
continue;
|
||||
} else if (keywords.Any(f => c == f)) {
|
||||
i += 100;
|
||||
} else if (keywords.Any(f => c.Split(" ").Any(a => a == f))) {
|
||||
i += 99;
|
||||
} else if (keywords.Any(f => f != null && c.Contains(f))) {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -55,24 +55,6 @@ namespace Elwig.Windows {
|
||||
base.OnClosing(evt);
|
||||
}
|
||||
|
||||
private int CountMatchesInMember(Member m) {
|
||||
if (TextFilter.Count == 0) return 0;
|
||||
string?[] check = new string?[] {
|
||||
m.MgNr.ToString(),
|
||||
m.FamilyName.ToLower(), m.MiddleName?.ToLower(), m.GivenName.ToLower(),
|
||||
m.BillingAddress?.Name.ToLower()
|
||||
};
|
||||
int i = 0;
|
||||
foreach (string? c in check) {
|
||||
if (c == null) continue;
|
||||
if (TextFilter.Any(f => c == f))
|
||||
i += 10;
|
||||
else if (TextFilter.Any(f => c.Contains(f)))
|
||||
i += 1;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
private async Task RefreshMemberList() {
|
||||
await Context.Members.LoadAsync();
|
||||
await RefreshMemberListQuery();
|
||||
@ -87,7 +69,7 @@ namespace Elwig.Windows {
|
||||
|
||||
if (TextFilter.Count > 0) {
|
||||
members = members
|
||||
.ToDictionary(m => m, m => CountMatchesInMember(m))
|
||||
.ToDictionary(m => m, m => m.SearchScore(TextFilter))
|
||||
.OrderByDescending(a => a.Value)
|
||||
.ThenBy(a => a.Key.FamilyName)
|
||||
.ThenBy(a => a.Key.GivenName)
|
||||
@ -194,7 +176,8 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private async void SaveButton_Click(object sender, RoutedEventArgs evt) {
|
||||
Member m = await UpdateMember(IsEditing ? (Member)MemberList.SelectedItem : Context.CreateProxy<Member>());
|
||||
Member m = IsEditing ? (Member)MemberList.SelectedItem : Context.CreateProxy<Member>();
|
||||
await UpdateMember(m);
|
||||
IsEditing = false;
|
||||
IsCreating = false;
|
||||
MemberList.IsEnabled = true;
|
||||
@ -234,7 +217,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private async void SearchInput_TextChanged(object sender, RoutedEventArgs evt) {
|
||||
TextFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(s => s.Length >= 2 || s.All(c => char.IsDigit(c)));
|
||||
TextFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(e => e.Length > 0);
|
||||
await RefreshMemberListQuery();
|
||||
}
|
||||
|
||||
@ -317,7 +300,7 @@ namespace Elwig.Windows {
|
||||
ActiveMemberInput.IsEnabled = true;
|
||||
}
|
||||
|
||||
private async Task<Member> UpdateMember(Member m) {
|
||||
private async Task UpdateMember(Member m) {
|
||||
int newMgNr = int.Parse(MgNrInput.Text);
|
||||
m.PredecessorMgNr = (PredecessorMgNrInput.Text == "") ? null : int.Parse(PredecessorMgNrInput.Text);
|
||||
m.Prefix = (PrefixInput.Text == "") ? null : PrefixInput.Text;
|
||||
@ -375,8 +358,6 @@ namespace Elwig.Windows {
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
private void FillInputs(Member m) {
|
||||
|
Reference in New Issue
Block a user