Update DeliveryAdminWindow searching

This commit is contained in:
2023-08-19 19:40:18 +02:00
parent 5093706a4a
commit f735da0059
3 changed files with 93 additions and 20 deletions

View File

@ -41,7 +41,7 @@ namespace Elwig.Windows {
WeightInput
};
ExemptInputs = new Control[] {
SearchInput, TodayOnlyInput, SeasonOnlyInput,
SearchInput, SeasonInput, TodayOnlyInput, AllSeasonsInput,
DeliveryList, DeliveryPartList,
MemberAddressField,
};
@ -56,6 +56,7 @@ namespace Elwig.Windows {
InitializeDelayTimer(SearchInput, SearchInput_TextChanged);
SearchInput.TextChanged -= SearchInput_TextChanged;
SeasonInput.Value = Utils.CurrentLastSeason;
if (IsReceipt) {
Title = "Übernahme - Elwig";
@ -78,6 +79,8 @@ namespace Elwig.Windows {
public DeliveryAdminWindow(int mgnr) : this() {
Member = Context.Members.Find(mgnr) ?? throw new ArgumentException("MgNr argument has invalid value");
Title = $"Lieferungen - {Member.AdministrativeName} - Elwig";
AllSeasonsInput.IsEnabled = true;
AllSeasonsInput.IsChecked = true;
}
private async void Window_Loaded(object sender, RoutedEventArgs evt) {
@ -158,12 +161,61 @@ namespace Elwig.Windows {
deliveryQuery = deliveryQuery
.Where(d => (d.DateString == Utils.Today.ToString("yyyy-MM-dd") && d.TimeString.CompareTo("03:00:00") > 0) ||
(d.DateString == Utils.Today.AddDays(1).ToString("yyyy-MM-dd") && d.TimeString.CompareTo("03:00:00") <= 0));
} else if (SeasonOnlyInput.IsChecked == true) {
deliveryQuery = deliveryQuery.Where(d => d.Year == Utils.CurrentLastSeason);
} else if (AllSeasonsInput.IsChecked == false) {
deliveryQuery = deliveryQuery.Where(d => d.Year == SeasonInput.Value);
}
var filter = TextFilter.ToList();
if (filter.Count > 0) {
var var = await Context.WineVarieties.Select(v => v.SortId).ToListAsync();
var qual = await Context.WineQualityLevels.Select(q => q.QualId).ToListAsync();
var mgnr = await Context.Members.Select(m => m.MgNr.ToString()).ToListAsync();
var filterVar = new List<string>();
var filterQual = new List<string>();
var filterMgNr = new List<int>();
double filterKmwGt = 0;
double filterKmwLt = 0;
double filterOeGt = 0;
double filterOeLt = 0;
for (int i = 0; i < filter.Count; i++) {
var e = filter[i];
if (e.Length == 2 && var.Contains(e.ToUpper())) {
filterVar.Add(e.ToUpper());
filter.RemoveAt(i--);
} else if (e.Length == 3 && qual.Contains(e.ToUpper())) {
filterQual.Add(e.ToUpper());
filter.RemoveAt(i--);
} else if (e.All(char.IsAsciiDigit) && mgnr.Contains(e)) {
filterMgNr.Add(int.Parse(e));
filter.RemoveAt(i--);
} else if (e.StartsWith(">") || e.StartsWith("<")) {
if (double.TryParse(e[1..], out var res)) {
switch ((e[0], res)) {
case ('>', <= 30): filterKmwGt = res; break;
case ('<', <= 30): filterKmwLt = res; break;
case ('>', _): filterOeGt = res; break;
case ('<', _): filterOeLt = res; break;
}
filter.RemoveAt(i--);
}
if (e.Length == 1) filter.RemoveAt(i--);
} else if (e.Length > 2 && e.StartsWith("\"") && e.EndsWith("\"")) {
filter[i] = e[1..^1];
}
}
if (filterMgNr.Count > 0) deliveryQuery = deliveryQuery.Where(d => filterMgNr.Contains(d.MgNr));
if (filterVar.Count > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => filterVar.Contains(p.SortId)));
if (filterQual.Count > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => filterQual.Contains(p.QualId)));
if (filterKmwGt > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => p.Kmw >= filterKmwGt));
if (filterKmwLt > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => p.Kmw < filterKmwLt));
if (filterOeGt > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => p.Kmw * (4.54 + 0.022 * p.Kmw) >= filterOeGt));
if (filterOeLt > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => p.Kmw * (4.54 + 0.022 * p.Kmw) < filterOeLt));
}
List<Delivery> deliveries = await deliveryQuery.OrderByDescending(d => d.DateString).ThenByDescending(d => d.TimeString).ToListAsync();
if (TextFilter.Count > 0) {
if (filter.Count > 0 && deliveries.Count > 0) {
var dict = deliveries
.ToDictionary(d => d, d => d.SearchScore(TextFilter))
.OrderByDescending(a => a.Value)
@ -451,14 +503,31 @@ namespace Elwig.Windows {
await RefreshDeliveryListQuery(true);
}
private async void TodayOnlyInput_Changed(object sender, RoutedEventArgs evt) {
if (TodayOnlyInput.IsChecked == true && SeasonOnlyInput.IsChecked == true) SeasonOnlyInput.IsChecked = false;
private async void SeasonInput_ValueChanged(object sender, RoutedEventArgs evt) {
if (SeasonInput.Value == null) return;
TodayOnlyInput.IsChecked = false;
AllSeasonsInput.IsChecked = false;
await RefreshDeliveryListQuery();
}
private async void SeasonOnlyInput_Changed(object sender, RoutedEventArgs evt) {
if (!IsInitialized) return;
if (SeasonOnlyInput.IsChecked == true && TodayOnlyInput.IsChecked == true) TodayOnlyInput.IsChecked = false;
private async void TodayOnlyInput_Changed(object sender, RoutedEventArgs evt) {
if (TodayOnlyInput.IsChecked == true && AllSeasonsInput.IsChecked == false) {
SeasonInput.Value = Utils.Today.Year;
TodayOnlyInput.IsChecked = true;
}
await RefreshDeliveryListQuery();
}
private async void AllSeasonsInput_Changed(object sender, RoutedEventArgs evt) {
if (AllSeasonsInput.IsChecked == true) {
SeasonInput.IsEnabled = false;
SeasonInput.Text = "";
} else {
SeasonInput.IsEnabled = true;
var today = TodayOnlyInput.IsChecked;
SeasonInput.Value = Utils.CurrentLastSeason;
TodayOnlyInput.IsChecked = today;
}
await RefreshDeliveryListQuery();
}
@ -518,7 +587,7 @@ namespace Elwig.Windows {
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
await RefreshDeliveryList();
RefreshDeliveryParts();
DeliveryList.SelectedItem = p.Delivery;
DeliveryList.SelectedItem = p?.Delivery;
DeliveryPartList.SelectedItem = null;
InitialInputs();
}
@ -528,7 +597,7 @@ namespace Elwig.Windows {
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
await RefreshDeliveryList();
RefreshDeliveryParts();
if (p != null) {
if (p?.Delivery != null) {
using var doc = new DeliveryNote(p.Delivery);
await doc.Generate();
doc.Show();
@ -747,14 +816,16 @@ namespace Elwig.Windows {
private void LockSearchInputs() {
SearchInput.IsEnabled = false;
SeasonInput.IsEnabled = false;
TodayOnlyInput.IsEnabled = false;
SeasonOnlyInput.IsEnabled = false;
AllSeasonsInput.IsEnabled = false;
}
private void UnlockSearchInputs() {
SearchInput.IsEnabled = true;
SeasonInput.IsEnabled = true;
TodayOnlyInput.IsEnabled = true;
SeasonOnlyInput.IsEnabled = true;
AllSeasonsInput.IsEnabled = (Member != null);
}
new protected void UnlockInputs() {