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;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
namespace Elwig.Models { namespace Elwig.Models {
[Table("member"), PrimaryKey("MgNr")] [Table("member"), PrimaryKey("MgNr")]
@ -125,5 +126,32 @@ namespace Elwig.Models {
[InverseProperty("Member")] [InverseProperty("Member")]
public virtual BillingAddress BillingAddress { get; private set; } 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); 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() { private async Task RefreshMemberList() {
await Context.Members.LoadAsync(); await Context.Members.LoadAsync();
await RefreshMemberListQuery(); await RefreshMemberListQuery();
@ -87,7 +69,7 @@ namespace Elwig.Windows {
if (TextFilter.Count > 0) { if (TextFilter.Count > 0) {
members = members members = members
.ToDictionary(m => m, m => CountMatchesInMember(m)) .ToDictionary(m => m, m => m.SearchScore(TextFilter))
.OrderByDescending(a => a.Value) .OrderByDescending(a => a.Value)
.ThenBy(a => a.Key.FamilyName) .ThenBy(a => a.Key.FamilyName)
.ThenBy(a => a.Key.GivenName) .ThenBy(a => a.Key.GivenName)
@ -194,7 +176,8 @@ namespace Elwig.Windows {
} }
private async void SaveButton_Click(object sender, RoutedEventArgs evt) { 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; IsEditing = false;
IsCreating = false; IsCreating = false;
MemberList.IsEnabled = true; MemberList.IsEnabled = true;
@ -234,7 +217,7 @@ namespace Elwig.Windows {
} }
private async void SearchInput_TextChanged(object sender, RoutedEventArgs evt) { 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(); await RefreshMemberListQuery();
} }
@ -317,7 +300,7 @@ namespace Elwig.Windows {
ActiveMemberInput.IsEnabled = true; ActiveMemberInput.IsEnabled = true;
} }
private async Task<Member> UpdateMember(Member m) { private async Task UpdateMember(Member m) {
int newMgNr = int.Parse(MgNrInput.Text); int newMgNr = int.Parse(MgNrInput.Text);
m.PredecessorMgNr = (PredecessorMgNrInput.Text == "") ? null : int.Parse(PredecessorMgNrInput.Text); m.PredecessorMgNr = (PredecessorMgNrInput.Text == "") ? null : int.Parse(PredecessorMgNrInput.Text);
m.Prefix = (PrefixInput.Text == "") ? null : PrefixInput.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; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
} }
return m;
} }
private void FillInputs(Member m) { private void FillInputs(Member m) {