[#26] AreaComAdminWindow: Overhaul status bar and search filters

This commit is contained in:
2024-07-05 22:03:46 +02:00
parent 46ea0f29ff
commit bb77a4e79a
4 changed files with 84 additions and 30 deletions

View File

@ -40,8 +40,8 @@ namespace Elwig.Services {
List<string> filterNames = [];
IQueryable<AreaCom> areaComQuery = ctx.AreaCommitments.Where(a => a.MgNr == vm.FilterMember.MgNr).OrderBy(a => a.FbNr);
if (vm.ShowOnlyActiveAreaComs) {
areaComQuery = Utils.ActiveAreaCommitments(areaComQuery);
filterNames.Add("laufend");
areaComQuery = Utils.ActiveAreaCommitments(areaComQuery, Utils.CurrentLastSeason);
filterNames.Add($"laufend {Utils.CurrentLastSeason}");
}
var filterVar = new List<string>();
@ -53,6 +53,7 @@ namespace Elwig.Services {
if (filter.Count > 0) {
var var = await ctx.WineVarieties.ToDictionaryAsync(v => v.SortId, v => v);
var attr = await ctx.WineAttributes.ToDictionaryAsync(a => a.Name.ToLower().Split(" ")[0], a => a);
var attrId = await ctx.WineAttributes.ToDictionaryAsync(a => a.AttrId, a => a);
for (int i = 0; i < filter.Count; i++) {
var e = filter[i];
@ -63,6 +64,7 @@ namespace Elwig.Services {
} else if (e.Length == 3 && e[0] == '!' && var.ContainsKey(e[1..].ToUpper())) {
filterNotVar.Add(e[1..].ToUpper());
filter.RemoveAt(i--);
filterNames.Add($"ohne {var[e.ToUpper()].Name}");
} else if (attr.ContainsKey(e.ToLower())) {
var a = attr[e.ToLower()];
filterAttr.Add(a.AttrId);
@ -73,13 +75,25 @@ namespace Elwig.Services {
filterNotAttr.Add(a.AttrId);
filter.RemoveAt(i--);
filterNames.Add($"ohne Attribut {a.Name}");
} else if (e.Length > 2 && var.ContainsKey(e.ToUpper()[..2]) && attrId.ContainsKey(e[2..].ToUpper())) {
filterVar.Add(e[..2].ToUpper());
filterAttr.Add(e[2..].ToUpper());
filter.RemoveAt(i--);
filterNames.Add(var[e[..2].ToUpper()].Name);
filterNames.Add($"Attribut {attrId[e[2..].ToUpper()].Name}");
} else if (e[0] == '!' && e.Length > 3 && var.ContainsKey(e.ToUpper()[1..3]) && attrId.ContainsKey(e[3..].ToUpper())) {
filterNotVar.Add(e[1..3].ToUpper());
filterNotAttr.Add(e[3..].ToUpper());
filter.RemoveAt(i--);
filterNames.Add($"ohne {var[e[1..3].ToUpper()].Name}");
filterNames.Add($"ohne Attribut {attrId[e[3..].ToUpper()].Name}");
}
}
if (filterVar.Count > 0) areaComQuery = areaComQuery.Where(a => filterVar.Contains(a.AreaComType.WineVar.SortId));
if (filterNotVar.Count > 0) areaComQuery = areaComQuery.Where(a => !filterNotVar.Contains(a.AreaComType.WineVar.SortId));
if (filterAttr.Count > 0) areaComQuery = areaComQuery.Where(a => a.AreaComType.WineAttr != null && a.AreaComType.WineAttr.AttrId != null && filterAttr.Contains(a.AreaComType.WineAttr.AttrId));
if (filterNotAttr.Count > 0) areaComQuery = areaComQuery.Where(a => a.AreaComType.WineAttr == null || a.AreaComType.WineAttr.AttrId == null || !filterAttr.Contains(a.AreaComType.WineAttr.AttrId));
if (filterAttr.Count > 0) areaComQuery = areaComQuery.Where(a => a.AreaComType.WineAttr!.AttrId != null && filterAttr.Contains(a.AreaComType.WineAttr.AttrId));
if (filterNotAttr.Count > 0) areaComQuery = areaComQuery.Where(a => a.AreaComType.WineAttr!.AttrId == null || !filterNotAttr.Contains(a.AreaComType.WineAttr.AttrId));
}
return (filterNames, areaComQuery, filter);