[#43] MailWindow: Do not use Context from ContextWindow any more
This commit is contained in:
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user