MailWindow: Fix crash on area commitment filter
All checks were successful
Test / Run tests (push) Successful in 2m0s

This commit is contained in:
2024-06-10 12:43:42 +02:00
parent 6e4f3b799d
commit 5039c1252a

View File

@ -53,7 +53,7 @@ namespace Elwig.Windows {
CreditNote.Name,
];
public readonly int? Year;
public readonly int Year;
public ObservableCollection<SelectedDoc> SelectedDocs = [];
public IEnumerable<Member> Recipients = [];
@ -103,7 +103,7 @@ namespace Elwig.Windows {
public MailWindow(int? year = null) {
InitializeComponent();
using (var ctx = new AppDbContext()) {
Year = year ?? ctx.Seasons.OrderBy(s => s.Year).LastOrDefault()?.Year;
Year = year ?? ctx.Seasons.OrderBy(s => s.Year).LastOrDefault()!.Year;
Title = $"Rundschreiben - Lese {Year} - Elwig";
}
@ -168,7 +168,14 @@ namespace Elwig.Windows {
.Where(m => m.IsActive)
.OrderBy(m => m.FamilyName)
.ThenBy(m => m.GivenName)
.Include(m => m.Branch)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Country)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Country)
.ToListAsync(), MemberInput_SelectionChanged);
if (MemberCustomInput.SelectedItems.Count == 0) {
MemberCustomInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
@ -246,7 +253,7 @@ namespace Elwig.Windows {
if (idx == 0) {
SelectedDocs.Add(new(DocType.MemberDataSheet, s, null));
} else if (idx == 1) {
SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, ((int)Year!, DocumentNonDeliverersInput.IsChecked == true)));
SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, (Year, DocumentNonDeliverersInput.IsChecked == true)));
} else if (idx >= 2) {
using var ctx = new AppDbContext();
var name = s.Split(" ")[^1];
@ -298,25 +305,23 @@ namespace Elwig.Windows {
if (RecipientsCustomInput.IsChecked == true) {
Recipients = MemberCustomInput.SelectedItems.Cast<Member>().ToList();
} else {
var year = (!await ctx.Deliveries.AnyAsync()) ? 0 : await ctx.Deliveries.MaxAsync(d => d.Year);
IQueryable<Member> query = ctx.Members.Where(m => m.IsActive);
if (MemberBranchInput.SelectedItems.Count != MemberBranchInput.Items.Count) {
var zwst = MemberBranchInput.SelectedItems.Cast<Branch>().Select(b => b.ZwstId).ToList();
query = query.Where(m => zwst.Contains(m.ZwstId));
query = query.Where(m => zwst.Contains(m.ZwstId!));
}
if (MemberKgInput.SelectedItems.Count != MemberKgInput.Items.Count) {
var kgs = MemberKgInput.SelectedItems.Cast<AT_Kg>().Select(k => k.KgNr).ToList();
query = query.Where(m => kgs.Contains((int)m.DefaultKgNr));
query = query.Where(m => kgs.Contains((int)m.DefaultKgNr!));
}
if (RecipientsAreaComMembersInput.IsChecked == true) {
var vtrg = MemberAreaComInput.SelectedItems.Cast<AreaComType>().Select(a => a.VtrgId).ToList();
query = query.Where(m => Utils.ActiveAreaCommitments(m.AreaCommitments).Any(c => vtrg.Contains(c.VtrgId)));
} else if (year > 0 && RecipientsDeliveryMembersInput.IsChecked == true) {
query = query.Where(m => m.Deliveries.Any(d => d.Year == year));
} else if (year > 0 && RecipientsNonDeliveryMembersInput.IsChecked == true) {
query = query.Where(m => !m.Deliveries.Any(d => d.Year == year));
query = query.Where(m => m.AreaCommitments.AsQueryable().Where(Utils.ActiveAreaCommitments(Year)).Any(c => vtrg.Contains(c.VtrgId)));
} else if (RecipientsDeliveryMembersInput.IsChecked == true) {
query = query.Where(m => m.Deliveries.Any(d => d.Year == Year));
} else if (RecipientsNonDeliveryMembersInput.IsChecked == true) {
query = query.Where(m => !m.Deliveries.Any(d => d.Year == Year));
}
Recipients = await query
.Include(m => m.Branch)
@ -708,7 +713,7 @@ namespace Elwig.Windows {
AvaiableDocumentsList.SelectedIndex = 1;
if (AvaiableDocumentsList.SelectedItem is not string s || SelectedDocs.Any(d => d.Type == DocType.DeliveryConfirmation))
return;
SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, ((int)Year!, DocumentNonDeliverersInput.IsChecked == true)));
SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, (Year, DocumentNonDeliverersInput.IsChecked == true)));
SelectedDocumentsList.SelectedIndex = SelectedDocs.Count - 1;
}