Move CountMachesInMember to Member

This commit is contained in:
2023-03-21 20:35:21 +01:00
parent 456cdaf3e0
commit c521bf5ffa
2 changed files with 33 additions and 24 deletions

View File

@ -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;
}
}
}

View File

@ -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) {