Move CountMachesInMember to Member
This commit is contained in:
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
Reference in New Issue
Block a user