PaymentVariantWindow: Fix sum calculation and crash on export

This commit is contained in:
2024-05-07 12:53:25 +02:00
parent 30536819e7
commit f123bb44c5

View File

@ -158,7 +158,7 @@ namespace Elwig.Windows {
private async Task UpdateSums() { private async Task UpdateSums() {
if (PaymentVariantList.SelectedItem is PaymentVar v) { if (PaymentVariantList.SelectedItem is PaymentVar v) {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var sym = v.Season.Currency.Symbol; var sym = v.Season.Currency.Symbol ?? v.Season.Currency.Code;
var modSum = await ctx.PaymentDeliveryParts var modSum = await ctx.PaymentDeliveryParts
.Where(p => p.Year == v.Year && p.AvNr == v.AvNr) .Where(p => p.Year == v.Year && p.AvNr == v.AvNr)
.SumAsync(p => p.AmountValue - p.NetAmountValue); .SumAsync(p => p.AmountValue - p.NetAmountValue);
@ -173,9 +173,10 @@ namespace Elwig.Windows {
DeductionSum.Text = $"- {sym}"; DeductionSum.Text = $"- {sym}";
PaymentSum.Text = $"- {sym}"; PaymentSum.Text = $"- {sym}";
} else { } else {
VatSum.Text = $"{v.Season.DecFromDb(await credits.SumAsync(c => c.VatAmountValue)):N2} {sym}"; // all values in the credit table are stored with precision 2!
DeductionSum.Text = $"{-v.Season.DecFromDb(await credits.SumAsync(c => c.ModifiersValue ?? 0)):N2} {sym}"; VatSum.Text = $"{Utils.DecFromDb(await credits.SumAsync(c => c.VatAmountValue), 2):N2} {sym}";
PaymentSum.Text = $"{v.Season.DecFromDb(await credits.SumAsync(c => c.AmountValue)):N2} {sym}"; DeductionSum.Text = $"{-Utils.DecFromDb(await credits.SumAsync(c => c.ModifiersValue ?? 0), 2):N2} {sym}";
PaymentSum.Text = $"{Utils.DecFromDb(await credits.SumAsync(c => c.AmountValue), 2):N2} {sym}";
} }
} else { } else {
ModifierSum.Text = "-"; ModifierSum.Text = "-";
@ -254,7 +255,7 @@ namespace Elwig.Windows {
} }
private async void CalculateButton_Click(object sender, RoutedEventArgs evt) { private async void CalculateButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedValue is not PaymentVar v) if (PaymentVariantList.SelectedItem is not PaymentVar v)
return; return;
CalculateButton.IsEnabled = false; CalculateButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
@ -289,7 +290,7 @@ namespace Elwig.Windows {
} }
private async void CommitButton_Click(object sender, RoutedEventArgs evt) { private async void CommitButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedValue is not PaymentVar v) if (PaymentVariantList.SelectedItem is not PaymentVar v)
return; return;
CommitButton.IsEnabled = false; CommitButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
@ -305,7 +306,7 @@ namespace Elwig.Windows {
} }
private async void RevertButton_Click(object sender, RoutedEventArgs evt) { private async void RevertButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedValue is not PaymentVar v) if (PaymentVariantList.SelectedItem is not PaymentVar v)
return; return;
var res = MessageBox.Show( var res = MessageBox.Show(
"Sollen wirklich alle festgesetzten Traubengutschriften der ausgewählten Auszahlungsvariante unwiderruflich gelöscht werden?\n\n" + "Sollen wirklich alle festgesetzten Traubengutschriften der ausgewählten Auszahlungsvariante unwiderruflich gelöscht werden?\n\n" +
@ -323,13 +324,16 @@ namespace Elwig.Windows {
} }
private async void ExportButton_Click(object sender, RoutedEventArgs evt) { private async void ExportButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedValue is not PaymentVar v) { if (PaymentVariantList.SelectedItem is not PaymentVar v) {
return; return;
} else if (v.TransferDate == null) { } else if (v.TransferDate == null) {
MessageBox.Show("Überweisungsdatum muss gesetzt sein!", "Exportieren nicht möglich", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("Überweisungsdatum muss gesetzt sein!", "Exportieren nicht möglich", MessageBoxButton.OK, MessageBoxImage.Error);
return; return;
} }
using var ctx = new AppDbContext();
v = (await ctx.PaymentVariants.FindAsync(v.Year, v.AvNr))!;
var withoutIban = v.Credits.Count(c => c.Member.Iban == null); var withoutIban = v.Credits.Count(c => c.Member.Iban == null);
if (withoutIban > 0) { if (withoutIban > 0) {
var r = MessageBox.Show($"Achtung: Für {withoutIban} Mitglieder ist kein IBAN hinterlegt.\nDiese werden NICHT exportiert.", var r = MessageBox.Show($"Achtung: Für {withoutIban} Mitglieder ist kein IBAN hinterlegt.\nDiese werden NICHT exportiert.",
@ -358,7 +362,7 @@ namespace Elwig.Windows {
} }
private async void TransactionButton_Click(object sender, RoutedEventArgs evt) { private async void TransactionButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedValue is not PaymentVar v) { if (PaymentVariantList.SelectedItem is not PaymentVar v) {
return; return;
} }
var d = new SaveFileDialog() { var d = new SaveFileDialog() {