[#57] PaymentVariantsWindow: Use Task.Run()
All checks were successful
Test / Run tests (push) Successful in 1m49s

This commit is contained in:
2025-07-07 23:14:03 +02:00
parent 7c9844e277
commit 64832e9a53
2 changed files with 124 additions and 81 deletions

View File

@ -189,16 +189,41 @@ namespace Elwig.Services {
} }
public static async Task GenerateSummary(PaymentVar v, ExportMode mode) { public static async Task GenerateSummary(PaymentVar v, ExportMode mode) {
Mouse.OverrideCursor = Cursors.AppStarting; if (mode == ExportMode.SaveList) {
try { var d = new SaveFileDialog() {
using var ctx = new AppDbContext(); FileName = $"Variantendaten-{v.Name.Trim().Replace(' ', '-')}.ods",
var data = await PaymentVariantSummaryData.ForPaymentVariant(v, ctx.PaymentVariantSummaryRows); DefaultExt = "ods",
using var doc = new PaymentVariantSummary((await ctx.PaymentVariants.FindAsync(v.Year, v.AvNr))!, data); Filter = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
await Utils.ExportDocument(doc, mode); Title = $"Variantendaten {v.Name} speichern unter - Elwig"
} catch (Exception exc) { };
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); if (d.ShowDialog() == false)
return;
Mouse.OverrideCursor = Cursors.Wait;
await Task.Run(async () => {
try {
using var ctx = new AppDbContext();
var data = await PaymentVariantSummaryData.ForPaymentVariant(v, ctx.PaymentVariantSummaryRows);
using var ods = new OdsFile(d.FileName);
await ods.AddTable(data);
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
});
Mouse.OverrideCursor = null;
} else {
Mouse.OverrideCursor = Cursors.Wait;
await Task.Run(async () => {
try {
using var ctx = new AppDbContext();
var data = await PaymentVariantSummaryData.ForPaymentVariant(v, ctx.PaymentVariantSummaryRows);
using var doc = new PaymentVariantSummary((await ctx.PaymentVariants.FindAsync(v.Year, v.AvNr))!, data);
await Utils.ExportDocument(doc, mode);
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
});
Mouse.OverrideCursor = null;
} }
Mouse.OverrideCursor = null;
} }
public static async Task GenerateEbics(int year, int avnr) { public static async Task GenerateEbics(int year, int avnr) {
@ -225,13 +250,15 @@ namespace Elwig.Services {
Title = $"Überweisungsdaten speichern unter - Elwig", Title = $"Überweisungsdaten speichern unter - Elwig",
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
try { await Task.Run(async () => {
using var e = new Ebics(v, d.FileName, App.Client.ExportEbicsVersion, (Ebics.AddressMode)App.Client.ExportEbicsAddress); try {
await e.ExportAsync(Transaction.FromPaymentVariant(v)); using var e = new Ebics(v, d.FileName, App.Client.ExportEbicsVersion, (Ebics.AddressMode)App.Client.ExportEbicsAddress);
} catch (Exception exc) { await e.ExportAsync(Transaction.FromPaymentVariant(v));
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } catch (Exception exc) {
} MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} }
@ -244,23 +271,26 @@ namespace Elwig.Services {
Title = $"Buchungsliste speichern unter - Elwig" Title = $"Buchungsliste speichern unter - Elwig"
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
try { await Task.Run(async () => {
using var ctx = new AppDbContext(); try {
var tbl = await CreditNoteData.ForPaymentVariant(ctx, year, avnr); using var ctx = new AppDbContext();
using var ods = new OdsFile(d.FileName); var tbl = await CreditNoteData.ForPaymentVariant(ctx, year, avnr);
await ods.AddTable(tbl); using var ods = new OdsFile(d.FileName);
} catch (Exception exc) { await ods.AddTable(tbl);
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } catch (Exception exc) {
} MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} }
public static async Task<PaymentVar> CreatePaymentVariant(int year) { public static async Task<PaymentVar> CreatePaymentVariant(int year) {
PaymentVar? v; Mouse.OverrideCursor = Cursors.Wait;
using (var ctx = new AppDbContext()) { var v = await Task.Run(async () => {
v = new PaymentVar { using var ctx = new AppDbContext();
var v = new PaymentVar {
Year = year, Year = year,
AvNr = await ctx.NextAvNr(year), AvNr = await ctx.NextAvNr(year),
Name = "Neue Auszahlungsvariante", Name = "Neue Auszahlungsvariante",
@ -270,15 +300,17 @@ namespace Elwig.Services {
}; };
ctx.Add(v); ctx.Add(v);
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
} return v;
});
App.HintContextChange(); App.HintContextChange();
Mouse.OverrideCursor = null;
return v; return v;
} }
public static async Task<PaymentVar> Duplicate(this PaymentVar orig) { public static async Task<PaymentVar> Duplicate(this PaymentVar orig) {
PaymentVar? n; var n = await Task.Run(async () => {
using (var ctx = new AppDbContext()) { using var ctx = new AppDbContext();
n = new PaymentVar { var n = new PaymentVar {
Year = orig.Year, Year = orig.Year,
AvNr = await ctx.NextAvNr(orig.Year), AvNr = await ctx.NextAvNr(orig.Year),
Name = $"{orig.Name} (Kopie)", Name = $"{orig.Name} (Kopie)",
@ -286,10 +318,10 @@ namespace Elwig.Services {
DateString = $"{DateTime.Today:yyyy-MM-dd}", DateString = $"{DateTime.Today:yyyy-MM-dd}",
Data = orig.Data, Data = orig.Data,
}; };
ctx.Add(n); ctx.Add(n);
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
} return n;
});
App.HintContextChange(); App.HintContextChange();
return n; return n;
} }
@ -297,18 +329,18 @@ namespace Elwig.Services {
public static async Task<(int, int)> UpdatePaymentVariant(this PaymentVariantsViewModel vm, int? oldYear, int? oldAvNr) { public static async Task<(int, int)> UpdatePaymentVariant(this PaymentVariantsViewModel vm, int? oldYear, int? oldAvNr) {
var year = oldYear ?? Utils.CurrentYear; var year = oldYear ?? Utils.CurrentYear;
int avnr = 0; int avnr = 0;
await Task.Run(async () => {
var d = App.Config.Debug ? BillingData.FromJson(vm.Data ?? "{}") : vm.BillingData!;
d.ConsiderDelieryModifiers = vm.ConsiderModifiers;
d.ConsiderContractPenalties = vm.ConsiderPenalties;
d.ConsiderTotalPenalty = vm.ConsiderPenalty;
d.ConsiderAutoBusinessShares = vm.ConsiderAuto;
d.ConsiderCustomModifiers = vm.ConsiderCustom;
var modVal = vm.WeightModifier ?? 0;
d.NetWeightModifier = modVal > 0 ? modVal / 100.0 : 0;
d.GrossWeightModifier = modVal < 0 ? modVal / 100.0 : 0;
var d = App.Config.Debug ? BillingData.FromJson(vm.Data ?? "{}") : vm.BillingData!; using var ctx = new AppDbContext();
d.ConsiderDelieryModifiers = vm.ConsiderModifiers;
d.ConsiderContractPenalties = vm.ConsiderPenalties;
d.ConsiderTotalPenalty = vm.ConsiderPenalty;
d.ConsiderAutoBusinessShares = vm.ConsiderAuto;
d.ConsiderCustomModifiers = vm.ConsiderCustom;
var modVal = vm.WeightModifier ?? 0;
d.NetWeightModifier = modVal > 0 ? modVal / 100.0 : 0;
d.GrossWeightModifier = modVal < 0 ? modVal / 100.0 : 0;
using (var ctx = new AppDbContext()) {
var v = new PaymentVar { var v = new PaymentVar {
Year = year, Year = year,
AvNr = oldAvNr ?? await ctx.NextAvNr(year), AvNr = oldAvNr ?? await ctx.NextAvNr(year),
@ -323,24 +355,44 @@ namespace Elwig.Services {
avnr = v.AvNr; avnr = v.AvNr;
ctx.Update(v); ctx.Update(v);
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
} });
vm.WeightModifierChanged = false; vm.WeightModifierChanged = false;
App.HintContextChange(); App.HintContextChange();
return (year, avnr); return (year, avnr);
} }
public static async Task DeletePaymentVariant(int year, int avnr) { public static async Task DeletePaymentVariant(int year, int avnr) {
using (var ctx = new AppDbContext()) { await Task.Run(async () => {
using var ctx = new AppDbContext();
var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!; var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!;
ctx.Remove(v); ctx.Remove(v);
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
} });
App.HintContextChange(); App.HintContextChange();
} }
public static async Task Calculate(int year, int avnr) { public static async Task Calculate(int year, int avnr) {
var b = new BillingVariant(year, avnr); await Task.Run(async () => {
await b.Calculate(); var b = new BillingVariant(year, avnr);
await b.Calculate();
});
App.HintContextChange();
}
public static async Task Commit(int year, int avnr) {
await Task.Run(async () => {
var b = new BillingVariant(year, avnr);
await b.Commit();
});
App.HintContextChange();
}
public static async Task Revert(int year, int avnr) {
await Task.Run(async () => {
var b = new BillingVariant(year, avnr);
await b.Revert();
});
App.HintContextChange();
} }
} }
} }

View File

@ -98,7 +98,9 @@ namespace Elwig.Windows {
} }
private async void CopyButton_Click(object sender, RoutedEventArgs evt) { private async void CopyButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedItem is not PaymentVar orig) return; if (PaymentVariantList.SelectedItem is not PaymentVar orig)
return;
Mouse.OverrideCursor = Cursors.Wait;
try { try {
PaymentVar n = await orig.Duplicate(); PaymentVar n = await orig.Duplicate();
ControlUtils.SelectItem(PaymentVariantList, n); ControlUtils.SelectItem(PaymentVariantList, n);
@ -107,10 +109,13 @@ namespace Elwig.Windows {
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Auszahlungsvariante kopieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Auszahlungsvariante kopieren", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null;
} }
private async void DeleteButton_Click(object sender, RoutedEventArgs evt) { private async void DeleteButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedItem is not PaymentVar v || !v.TestVariant) return; if (PaymentVariantList.SelectedItem is not PaymentVar v || !v.TestVariant)
return;
Mouse.OverrideCursor = Cursors.Wait;
try { try {
await PaymentVariantService.DeletePaymentVariant(v.Year, v.AvNr); await PaymentVariantService.DeletePaymentVariant(v.Year, v.AvNr);
} catch (Exception exc) { } catch (Exception exc) {
@ -118,19 +123,19 @@ namespace Elwig.Windows {
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Auszahlungsvariante löschen", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Auszahlungsvariante löschen", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null;
} }
private async void CalculateButton_Click(object sender, RoutedEventArgs evt) { private async void CalculateButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedItem is not PaymentVar v) if (PaymentVariantList.SelectedItem is not PaymentVar v)
return; return;
ViewModel.CalculateIsEnabled = false; ViewModel.CalculateIsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
try { try {
await PaymentVariantService.Calculate(v.Year, v.AvNr); await PaymentVariantService.Calculate(v.Year, v.AvNr);
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Berechnungsfehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Berechnungsfehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
App.HintContextChange();
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
ViewModel.CalculateIsEnabled = true; ViewModel.CalculateIsEnabled = true;
} }
@ -161,24 +166,7 @@ namespace Elwig.Windows {
private async void Menu_SummaryExport_Click(object sender, RoutedEventArgs evt) { private async void Menu_SummaryExport_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedItem is not PaymentVar v) if (PaymentVariantList.SelectedItem is not PaymentVar v)
return; return;
var d = new SaveFileDialog() { await PaymentVariantService.GenerateSummary(v, ExportMode.SaveList);
FileName = $"Variantendaten-{v.Name.Trim().Replace(' ', '-')}.ods",
DefaultExt = "ods",
Filter = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
Title = $"Variantendaten {v.Name} speichern unter - Elwig"
};
if (d.ShowDialog() == false)
return;
Mouse.OverrideCursor = Cursors.AppStarting;
try {
using var ctx = new AppDbContext();
var data = await PaymentVariantSummaryData.ForPaymentVariant(v, ctx.PaymentVariantSummaryRows);
using var ods = new OdsFile(d.FileName);
await ods.AddTable(data);
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null;
} }
private async void Menu_SummaryShow_Click(object sender, RoutedEventArgs evt) { private async void Menu_SummaryShow_Click(object sender, RoutedEventArgs evt) {
@ -203,16 +191,14 @@ namespace Elwig.Windows {
if (PaymentVariantList.SelectedItem is not PaymentVar v) if (PaymentVariantList.SelectedItem is not PaymentVar v)
return; return;
ViewModel.CommitIsEnabled = false; ViewModel.CommitIsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
try { try {
var b = new BillingVariant(v.Year, v.AvNr); await PaymentVariantService.Commit(v.Year, v.AvNr);
await b.Commit();
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
ViewModel.RevertIsEnabled = true; ViewModel.RevertIsEnabled = true;
App.HintContextChange();
} }
private async void RevertButton_Click(object sender, RoutedEventArgs evt) { private async void RevertButton_Click(object sender, RoutedEventArgs evt) {
@ -225,10 +211,12 @@ namespace Elwig.Windows {
if (res != MessageBoxResult.Yes) if (res != MessageBoxResult.Yes)
return; return;
ViewModel.RevertIsEnabled = false; ViewModel.RevertIsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
var b = new BillingVariant(v.Year, v.AvNr); try {
await b.Revert(); await PaymentVariantService.Revert(v.Year, v.AvNr);
App.HintContextChange(); } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
ViewModel.CommitIsEnabled = true; ViewModel.CommitIsEnabled = true;
} }
@ -250,7 +238,9 @@ namespace Elwig.Windows {
} }
private async void SaveButton_Click(object sender, RoutedEventArgs evt) { private async void SaveButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedItem is not PaymentVar v || ViewModel.BillingData == null) return; if (PaymentVariantList.SelectedItem is not PaymentVar v || ViewModel.BillingData == null)
return;
Mouse.OverrideCursor = Cursors.Wait;
try { try {
await ViewModel.UpdatePaymentVariant(v.Year, v.AvNr); await ViewModel.UpdatePaymentVariant(v.Year, v.AvNr);
} catch (Exception exc) { } catch (Exception exc) {
@ -259,6 +249,7 @@ namespace Elwig.Windows {
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Auszahlungsvariante aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Auszahlungsvariante aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null;
await HintContextChange(); await HintContextChange();
CommentInput_TextChanged(null, null); CommentInput_TextChanged(null, null);
DateInput_TextChanged(null, null); DateInput_TextChanged(null, null);