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