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