From 5039c1252addc926808a3c24e1bd1d09bfdabdf2 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 10 Jun 2024 12:43:42 +0200 Subject: [PATCH] MailWindow: Fix crash on area commitment filter --- Elwig/Windows/MailWindow.xaml.cs | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/Elwig/Windows/MailWindow.xaml.cs b/Elwig/Windows/MailWindow.xaml.cs index 7370a98..48edffb 100644 --- a/Elwig/Windows/MailWindow.xaml.cs +++ b/Elwig/Windows/MailWindow.xaml.cs @@ -53,7 +53,7 @@ namespace Elwig.Windows { CreditNote.Name, ]; - public readonly int? Year; + public readonly int Year; public ObservableCollection SelectedDocs = []; public IEnumerable 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().ToList(); } else { - var year = (!await ctx.Deliveries.AnyAsync()) ? 0 : await ctx.Deliveries.MaxAsync(d => d.Year); - IQueryable query = ctx.Members.Where(m => m.IsActive); if (MemberBranchInput.SelectedItems.Count != MemberBranchInput.Items.Count) { var zwst = MemberBranchInput.SelectedItems.Cast().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().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().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; }