diff --git a/Elwig/Services/PaymentVariantService.cs b/Elwig/Services/PaymentVariantService.cs index d57829d..626870b 100644 --- a/Elwig/Services/PaymentVariantService.cs +++ b/Elwig/Services/PaymentVariantService.cs @@ -189,16 +189,41 @@ namespace Elwig.Services { } public static async Task GenerateSummary(PaymentVar v, ExportMode mode) { - Mouse.OverrideCursor = Cursors.AppStarting; - 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); + if (mode == ExportMode.SaveList) { + var d = new SaveFileDialog() { + 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.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) { @@ -225,13 +250,15 @@ namespace Elwig.Services { Title = $"Überweisungsdaten speichern unter - Elwig", }; if (d.ShowDialog() == true) { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - using var e = new Ebics(v, d.FileName, App.Client.ExportEbicsVersion, (Ebics.AddressMode)App.Client.ExportEbicsAddress); - await e.ExportAsync(Transaction.FromPaymentVariant(v)); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + using var e = new Ebics(v, d.FileName, App.Client.ExportEbicsVersion, (Ebics.AddressMode)App.Client.ExportEbicsAddress); + await e.ExportAsync(Transaction.FromPaymentVariant(v)); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); Mouse.OverrideCursor = null; } } @@ -244,23 +271,26 @@ namespace Elwig.Services { Title = $"Buchungsliste speichern unter - Elwig" }; if (d.ShowDialog() == true) { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - using var ctx = new AppDbContext(); - var tbl = await CreditNoteData.ForPaymentVariant(ctx, year, avnr); - using var ods = new OdsFile(d.FileName); - await ods.AddTable(tbl); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + using var ctx = new AppDbContext(); + var tbl = await CreditNoteData.ForPaymentVariant(ctx, year, avnr); + using var ods = new OdsFile(d.FileName); + await ods.AddTable(tbl); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); Mouse.OverrideCursor = null; } } public static async Task CreatePaymentVariant(int year) { - PaymentVar? v; - using (var ctx = new AppDbContext()) { - v = new PaymentVar { + Mouse.OverrideCursor = Cursors.Wait; + var v = await Task.Run(async () => { + using var ctx = new AppDbContext(); + var v = new PaymentVar { Year = year, AvNr = await ctx.NextAvNr(year), Name = "Neue Auszahlungsvariante", @@ -270,15 +300,18 @@ namespace Elwig.Services { }; ctx.Add(v); await ctx.SaveChangesAsync(); - } + return v; + }); App.HintContextChange(); + Mouse.OverrideCursor = null; return v; } public static async Task Duplicate(this PaymentVar orig) { - PaymentVar? n; - using (var ctx = new AppDbContext()) { - n = new PaymentVar { + Mouse.OverrideCursor = Cursors.Wait; + var n = await Task.Run(async () => { + using var ctx = new AppDbContext(); + var n = new PaymentVar { Year = orig.Year, AvNr = await ctx.NextAvNr(orig.Year), Name = $"{orig.Name} (Kopie)", @@ -286,29 +319,31 @@ namespace Elwig.Services { DateString = $"{DateTime.Today:yyyy-MM-dd}", Data = orig.Data, }; - ctx.Add(n); await ctx.SaveChangesAsync(); - } + return n; + }); App.HintContextChange(); + Mouse.OverrideCursor = null; return n; } public static async Task<(int, int)> UpdatePaymentVariant(this PaymentVariantsViewModel vm, int? oldYear, int? oldAvNr) { var year = oldYear ?? Utils.CurrentYear; int avnr = 0; + Mouse.OverrideCursor = Cursors.Wait; + 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!; - 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()) { + using var ctx = new AppDbContext(); var v = new PaymentVar { Year = year, AvNr = oldAvNr ?? await ctx.NextAvNr(year), @@ -323,24 +358,65 @@ namespace Elwig.Services { avnr = v.AvNr; ctx.Update(v); await ctx.SaveChangesAsync(); - } + }); vm.WeightModifierChanged = false; App.HintContextChange(); + Mouse.OverrideCursor = null; return (year, avnr); } public static async Task DeletePaymentVariant(int year, int avnr) { - using (var ctx = new AppDbContext()) { + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + using var ctx = new AppDbContext(); var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!; ctx.Remove(v); await ctx.SaveChangesAsync(); - } + }); App.HintContextChange(); + Mouse.OverrideCursor = null; } public static async Task Calculate(int year, int avnr) { - var b = new BillingVariant(year, avnr); - await b.Calculate(); + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + var b = new BillingVariant(year, avnr); + await b.Calculate(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Berechnungsfehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); + App.HintContextChange(); + Mouse.OverrideCursor = null; + } + + public static async Task Commit(int year, int avnr) { + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + var b = new BillingVariant(year, avnr); + await b.Commit(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); + App.HintContextChange(); + Mouse.OverrideCursor = null; + } + + public static async Task Revert(int year, int avnr) { + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + var b = new BillingVariant(year, avnr); + await b.Revert(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); + App.HintContextChange(); + Mouse.OverrideCursor = null; } } } diff --git a/Elwig/Windows/PaymentVariantsWindow.xaml.cs b/Elwig/Windows/PaymentVariantsWindow.xaml.cs index 0f73eea..d41ebbc 100644 --- a/Elwig/Windows/PaymentVariantsWindow.xaml.cs +++ b/Elwig/Windows/PaymentVariantsWindow.xaml.cs @@ -124,14 +124,7 @@ namespace Elwig.Windows { if (PaymentVariantList.SelectedItem is not PaymentVar v) return; ViewModel.CalculateIsEnabled = false; - Mouse.OverrideCursor = Cursors.AppStarting; - try { - await PaymentVariantService.Calculate(v.Year, v.AvNr); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Berechnungsfehler", MessageBoxButton.OK, MessageBoxImage.Error); - } - App.HintContextChange(); - Mouse.OverrideCursor = null; + await PaymentVariantService.Calculate(v.Year, v.AvNr); ViewModel.CalculateIsEnabled = true; } @@ -161,24 +154,7 @@ namespace Elwig.Windows { private async void Menu_SummaryExport_Click(object sender, RoutedEventArgs evt) { if (PaymentVariantList.SelectedItem is not PaymentVar v) return; - var d = new SaveFileDialog() { - 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; + await PaymentVariantService.GenerateSummary(v, ExportMode.SaveList); } private async void Menu_SummaryShow_Click(object sender, RoutedEventArgs evt) { @@ -203,16 +179,8 @@ namespace Elwig.Windows { if (PaymentVariantList.SelectedItem is not PaymentVar v) return; ViewModel.CommitIsEnabled = false; - Mouse.OverrideCursor = Cursors.AppStarting; - try { - var b = new BillingVariant(v.Year, v.AvNr); - await b.Commit(); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } - Mouse.OverrideCursor = null; + await PaymentVariantService.Commit(v.Year, v.AvNr); ViewModel.RevertIsEnabled = true; - App.HintContextChange(); } private async void RevertButton_Click(object sender, RoutedEventArgs evt) { @@ -225,11 +193,7 @@ namespace Elwig.Windows { if (res != MessageBoxResult.Yes) return; ViewModel.RevertIsEnabled = false; - Mouse.OverrideCursor = Cursors.AppStarting; - var b = new BillingVariant(v.Year, v.AvNr); - await b.Revert(); - App.HintContextChange(); - Mouse.OverrideCursor = null; + await PaymentVariantService.Revert(v.Year, v.AvNr); ViewModel.CommitIsEnabled = true; }