[#43] MailWindow: Do not use Context from ContextWindow any more

This commit is contained in:
2024-03-11 11:09:53 +01:00
parent 4e2c087260
commit a8e3eb6c1c
2 changed files with 71 additions and 35 deletions

View File

@ -102,16 +102,18 @@ namespace Elwig.Helpers {
selector.SelectedItem = selItem;
}
public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId) {
public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null) {
if (selector.ItemsSource == source)
return;
var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList();
if (handler != null && selectedIds != null) selector.ItemSelectionChanged -= handler;
selector.ItemsSource = source;
if (source != null) {
selector.SelectedItems.Clear();
foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i))))
selector.SelectedItems.Add(i);
}
if (handler != null && selectedIds != null) selector.ItemSelectionChanged += handler;
}
public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) {

View File

@ -102,8 +102,10 @@ namespace Elwig.Windows {
// powershell -Command "$(Get-WmiObject -Class Win32_Printer | Where-Object {$_.Default -eq $True}).Name"
public MailWindow(int? year = null) {
InitializeComponent();
Year = year ?? Context.Seasons.OrderBy(s => s.Year).LastOrDefault()?.Year;
Title = $"Rundschreiben - Lese {Year} - Elwig";
using (var ctx = new AppDbContext()) {
Year = year ?? ctx.Seasons.OrderBy(s => s.Year).LastOrDefault()?.Year;
Title = $"Rundschreiben - Lese {Year} - Elwig";
}
AvaiableDocumentsList.ItemsSource = AvaiableDocuments;
SelectedDocumentsList.ItemsSource = SelectedDocs;
@ -126,7 +128,8 @@ namespace Elwig.Windows {
}
protected override async Task OnRenewContext() {
var season = await Context.Seasons.FindAsync(Year);
using var ctx = new AppDbContext();
var season = await ctx.Seasons.FindAsync(Year);
var l = new List<string> {
MemberDataSheet.Name
};
@ -136,28 +139,44 @@ namespace Elwig.Windows {
}
AvaiableDocumentsList.ItemsSource = l;
ControlUtils.RenewItemsSource(MemberBranchInput, await Context.Branches
ControlUtils.RenewItemsSource(MemberBranchInput, await ctx.Branches
.Where(b => b.Members.Any())
.OrderBy(b => b.Name)
.ToListAsync(), b => (b as Branch)?.ZwstId);
if (MemberBranchInput.SelectedItems.Count == 0) MemberBranchInput.SelectAll();
ControlUtils.RenewItemsSource(MemberKgInput, await Context.Katastralgemeinden
.Where(k => k.WbKg.Members.Any())
.ToListAsync(), b => (b as Branch)?.ZwstId, MemberInput_SelectionChanged);
if (MemberBranchInput.SelectedItems.Count == 0) {
MemberBranchInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
MemberBranchInput.SelectAll();
MemberBranchInput.ItemSelectionChanged += MemberInput_SelectionChanged;
}
ControlUtils.RenewItemsSource(MemberKgInput, await ctx.Katastralgemeinden
.Where(k => k.WbKg!.Members.Any())
.OrderBy(k => k.Name)
.ToListAsync(), k => (k as AT_Kg)?.KgNr);
if (MemberKgInput.SelectedItems.Count == 0) MemberKgInput.SelectAll();
ControlUtils.RenewItemsSource(MemberAreaComInput, await Context.AreaCommitmentTypes
.ToListAsync(), k => (k as AT_Kg)?.KgNr, MemberInput_SelectionChanged);
if (MemberKgInput.SelectedItems.Count == 0) {
MemberKgInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
MemberKgInput.SelectAll();
MemberKgInput.ItemSelectionChanged += MemberInput_SelectionChanged;
}
ControlUtils.RenewItemsSource(MemberAreaComInput, await ctx.AreaCommitmentTypes
.OrderBy(a => a.VtrgId)
.ToListAsync(), a => (a as AreaComType)?.VtrgId);
if (MemberAreaComInput.SelectedItems.Count == 0) MemberAreaComInput.SelectAll();
ControlUtils.RenewItemsSource(MemberCustomInput, await Context.Members
.ToListAsync(), a => (a as AreaComType)?.VtrgId, MemberInput_SelectionChanged);
if (MemberAreaComInput.SelectedItems.Count == 0) {
MemberAreaComInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
MemberAreaComInput.SelectAll();
MemberAreaComInput.ItemSelectionChanged += MemberInput_SelectionChanged;
}
ControlUtils.RenewItemsSource(MemberCustomInput, await ctx.Members
.Where(m => m.IsActive)
.OrderBy(m => m.FamilyName)
.ThenBy(m => m.GivenName)
.ToListAsync(), m => (m as Member)?.MgNr);
if (MemberCustomInput.SelectedItems.Count == 0) MemberCustomInput.SelectAll();
.ToListAsync(), m => (m as Member)?.MgNr, MemberInput_SelectionChanged);
if (MemberCustomInput.SelectedItems.Count == 0) {
MemberCustomInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
MemberCustomInput.SelectAll();
MemberCustomInput.ItemSelectionChanged += MemberInput_SelectionChanged;
}
await UpdateRecipients();
await UpdateRecipients(ctx);
}
private void ContinueButton_Click(object sender, RoutedEventArgs evt) {
@ -229,8 +248,9 @@ namespace Elwig.Windows {
} else if (idx == 1) {
SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, ((int)Year!, DocumentNonDeliverersInput.IsChecked == true)));
} else if (idx >= 2) {
using var ctx = new AppDbContext();
var name = s.Split(" ")[^1];
var pv = Context.PaymentVariants.Single(v => v.Year == Year && v.Name == name)!;
var pv = ctx.PaymentVariants.Single(v => v.Year == Year && v.Name == name)!;
SelectedDocs.Add(new(DocType.CreditNote, s, (pv.Year, pv.AvNr)));
}
SelectedDocumentsList.SelectedIndex = SelectedDocs.Count - 1;
@ -265,20 +285,22 @@ namespace Elwig.Windows {
MemberAreaComInput.Visibility = RecipientsAreaComMembersInput.IsChecked == true ? Visibility.Visible : Visibility.Hidden;
MemberAreaComLabel.Visibility = RecipientsAreaComMembersInput.IsChecked == true ? Visibility.Visible : Visibility.Hidden;
MemberCustomInput.Visibility = RecipientsCustomInput.IsChecked == true ? Visibility.Visible : Visibility.Hidden;
await UpdateRecipients();
using var ctx = new AppDbContext();
await UpdateRecipients(ctx);
}
private async void MemberInput_SelectionChanged(object sender, RoutedEventArgs evt) {
await UpdateRecipients();
using var ctx = new AppDbContext();
await UpdateRecipients(ctx);
}
private async Task UpdateRecipients() {
private async Task UpdateRecipients(AppDbContext ctx) {
if (RecipientsCustomInput.IsChecked == true) {
Recipients = MemberCustomInput.SelectedItems.Cast<Member>().ToList();
} else {
var year = (!await Context.Deliveries.AnyAsync()) ? 0 : await Context.Deliveries.Select(d => d.Year).MaxAsync();
var year = (!await ctx.Deliveries.AnyAsync()) ? 0 : await ctx.Deliveries.MaxAsync(d => d.Year);
IQueryable<Member> query = Context.Members.Where(m => m.IsActive);
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));
@ -296,7 +318,16 @@ namespace Elwig.Windows {
} else if (year > 0 && RecipientsNonDeliveryMembersInput.IsChecked == true) {
query = query.Where(m => !m.Deliveries.Any(d => d.Year == year));
}
Recipients = await query.ToListAsync();
Recipients = await query
.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();
}
UpdatePostalEmailRecipients();
}
@ -376,6 +407,8 @@ namespace Elwig.Windows {
DisposeDocs();
await UpdateTextParameters();
using var ctx = new AppDbContext();
var doublePaged = DoublePagedInput.IsChecked == true;
var location = PostalLocation.Text.Trim();
var docs = SelectedDocs.OrderByDescending(d => d.Type).ToList();
@ -417,16 +450,16 @@ namespace Elwig.Windows {
if (doc.Type == DocType.DeliveryConfirmation) {
var details = ((int, bool))doc.Details!;
var year = details.Item1;
dcData[year] = await DeliveryConfirmationDeliveryData.ForSeason(Context.DeliveryParts, year);
dcData[year] = await DeliveryConfirmationDeliveryData.ForSeason(ctx.DeliveryParts, year);
} else if (doc.Type == DocType.CreditNote) {
var details = ((int, int))doc.Details!;
var year = details.Item1;
var avnr = details.Item2;
try {
cnData[(year, avnr)] = (
await CreditNoteDeliveryData.ForPaymentVariant(Context.CreditNoteDeliveryRows, Context.Seasons, year, avnr),
await Context.MemberPayments.Where(p => p.Year == year && p.AvNr == avnr).ToDictionaryAsync(c => c.MgNr),
BillingData.FromJson((await Context.PaymentVariants.FindAsync(year, avnr))!.Data)
await CreditNoteDeliveryData.ForPaymentVariant(ctx.CreditNoteDeliveryRows, ctx.Seasons, year, avnr),
await ctx.MemberPayments.Where(p => p.Year == year && p.AvNr == avnr).ToDictionaryAsync(c => c.MgNr),
BillingData.FromJson((await ctx.PaymentVariants.FindAsync(year, avnr))!.Data)
);
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
@ -434,7 +467,7 @@ namespace Elwig.Windows {
Mouse.OverrideCursor = null;
return;
}
await Context.GetMemberAreaCommitmentBuckets(year, 0);
await ctx.GetMemberAreaCommitmentBuckets(year, 0);
}
}
@ -445,7 +478,7 @@ namespace Elwig.Windows {
if (doc.Type == DocType.Custom) {
return [new GeneratedDoc((string)doc.Details!)];
} else if (doc.Type == DocType.MemberDataSheet) {
return [new GeneratedDoc(new MemberDataSheet(m, Context))];
return [new GeneratedDoc(new MemberDataSheet(m, ctx))];
} else if (doc.Type == DocType.DeliveryConfirmation) {
var details = ((int, bool))doc.Details!;
var year = details.Item1;
@ -458,7 +491,7 @@ namespace Elwig.Windows {
} else {
return [];
}
return [new GeneratedDoc(new DeliveryConfirmation(Context, year, m, data))];
return [new GeneratedDoc(new DeliveryConfirmation(ctx, year, m, data))];
} else if (doc.Type == DocType.CreditNote) {
var details = ((int, int))doc.Details!;
var year = details.Item1;
@ -466,11 +499,11 @@ namespace Elwig.Windows {
var data = cnData[(year, avnr)];
try {
return [new GeneratedDoc(new CreditNote(
Context, data.Item2[m.MgNr], data.Item1[m.MgNr],
ctx, data.Item2[m.MgNr], data.Item1[m.MgNr],
data.Item3.ConsiderContractPenalties,
data.Item3.ConsiderTotalPenalty,
data.Item3.ConsiderAutoBusinessShares,
Context.GetMemberUnderDelivery(year, m.MgNr).GetAwaiter().GetResult()
ctx.GetMemberUnderDelivery(year, m.MgNr).GetAwaiter().GetResult()
))];
} catch (Exception) {
return [];
@ -671,7 +704,8 @@ namespace Elwig.Windows {
if (AvaiableDocumentsList.SelectedItem is not string s || SelectedDocs.Any(d => d.Type == DocType.CreditNote))
return;
var name = s.Split(" ")[^1];
var pv = Context.PaymentVariants.Single(v => v.Year == Year && v.Name == name)!;
using var ctx = new AppDbContext();
var pv = ctx.PaymentVariants.Single(v => v.Year == Year && v.Name == name)!;
SelectedDocs.Add(new(DocType.CreditNote, s, (pv.Year, pv.AvNr)));
SelectedDocumentsList.SelectedIndex = SelectedDocs.Count - 1;
}