diff --git a/Elwig/Services/DeliveryService.cs b/Elwig/Services/DeliveryService.cs index 1425314..5edcc1e 100644 --- a/Elwig/Services/DeliveryService.cs +++ b/Elwig/Services/DeliveryService.cs @@ -430,9 +430,10 @@ namespace Elwig.Services { } public static async Task UpdateDeliveryPart(this DeliveryAdminViewModel vm, int? oldYear, int? oldDid, int? oldDpnr, bool dateHasChanged, bool timeHasChanged, bool timeIsDefault) { - DeliveryPart p; + var p = await Task.Run(async () => { + DeliveryPart p; - using (var ctx = new AppDbContext()) { + using var ctx = new AppDbContext(); int year = oldYear ?? Utils.CurrentYear; int did = oldDid ?? await ctx.NextDId(year); int dpnr = oldDpnr ?? await ctx.NextDPNr(year, did); @@ -524,7 +525,9 @@ namespace Elwig.Services { } await ctx.SaveChangesAsync(); - } + + return p; + }); App.HintContextChange(); @@ -532,9 +535,10 @@ namespace Elwig.Services { } public static async Task SplitDeliveryToMember(int year, int did, int[] weights, int mgnr) { - Delivery n; + var n = await Task.Run(async () => { + Delivery n; - using (var ctx = new AppDbContext()) { + using var ctx = new AppDbContext(); bool anyLeft = false; var d = (await ctx.Deliveries.FindAsync(year, did))!; var lnr = await ctx.NextLNr(d.Date, d.ZwstId); @@ -577,7 +581,9 @@ namespace Elwig.Services { await ctx.SaveChangesAsync(); if (!anyLeft) await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); - } + + return n; + }); App.HintContextChange(); @@ -585,9 +591,9 @@ namespace Elwig.Services { } public static async Task SplitDeliveryToLsNr(int year, int did, int[] weights, string lsnr) { - Delivery n; - - using (var ctx = new AppDbContext()) { + var n = await Task.Run(async () => { + Delivery n; + using var ctx = new AppDbContext(); var anyLeft = false; n = (await ctx.Deliveries.FirstAsync(d => d.LsNr == lsnr))!; var d = (await ctx.Deliveries.FindAsync(year, did))!; @@ -616,7 +622,9 @@ namespace Elwig.Services { await ctx.SaveChangesAsync(); if (!anyLeft && n.LsNr != d.LsNr) await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); - } + + return n; + }); App.HintContextChange(); @@ -624,7 +632,8 @@ namespace Elwig.Services { } public static async Task DepreciateDelivery(int year, int did, int[] weights) { - using (var ctx = new AppDbContext()) { + await Task.Run(async () => { + using var ctx = new AppDbContext(); var d = (await ctx.Deliveries.FindAsync(year, did))!; var dpnr = await ctx.NextDPNr(year, did); foreach (var (p, w) in d.Parts.ToList().Zip(weights)) { @@ -648,21 +657,23 @@ namespace Elwig.Services { } } await ctx.SaveChangesAsync(); - } + }); App.HintContextChange(); } public static async Task GenerateDeliveryNote(int year, int did, ExportMode mode) { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - using var ctx = new AppDbContext(); - var d = (await ctx.Deliveries.FindAsync(year, did))!; - using var doc = new DeliveryNote(d, ctx); - await Utils.ExportDocument(doc, mode, d.LsNr, (d.Member, $"{DeliveryNote.Name} Nr. {d.LsNr}", $"Im Anhang finden Sie den {DeliveryNote.Name} Nr. {d.LsNr}")); - } 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 d = (await ctx.Deliveries.FindAsync(year, did))!; + using var doc = new DeliveryNote(d, ctx); + await Utils.ExportDocument(doc, mode, d.LsNr, (d.Member, $"{DeliveryNote.Name} Nr. {d.LsNr}", $"Im Anhang finden Sie den {DeliveryNote.Name} Nr. {d.LsNr}")); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); Mouse.OverrideCursor = null; } @@ -707,14 +718,16 @@ namespace Elwig.Services { Title = $"{DeliveryJournal.Name} speichern unter - Elwig" }; if (d.ShowDialog() == true) { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - var data = await DeliveryJournalData.FromQuery(query, filterNames); - 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 = Cursors.Wait; + await Task.Run(async () => { + try { + var data = await DeliveryJournalData.FromQuery(query, filterNames); + 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 if (mode == ExportMode.Export) { @@ -725,58 +738,64 @@ namespace Elwig.Services { Title = $"{DeliveryJournal.Name} speichern unter - Elwig" }; if (d.ShowDialog() == true) { - Mouse.OverrideCursor = Cursors.AppStarting; + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + await ElwigData.Export(d.FileName, await query + .Select(p => p.Delivery) + .Distinct() + .Include(d => d.Parts) + .ThenInclude(p => p.PartModifiers) + .AsSplitQuery() + .ToListAsync(), filterNames); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); + Mouse.OverrideCursor = null; + } + } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) { + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { try { - await ElwigData.Export(d.FileName, await query + var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"; + var path = Path.Combine(App.TempPath, filename); + var list = await query .Select(p => p.Delivery) .Distinct() .Include(d => d.Parts) .ThenInclude(p => p.PartModifiers) .AsSplitQuery() - .ToListAsync(), filterNames); + .ToListAsync(); + if (list.Count == 0) { + MessageBox.Show("Es wurden keine Lieferungen zum Hochladen ausgewählt!", "Lieferungen hochladen", + MessageBoxButton.OK, MessageBoxImage.Error); + } else { + await ElwigData.Export(path, list, filterNames); + await Utils.UploadExportData(path, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); + MessageBox.Show($"Hochladen von {list.Count:N0} Lieferungen erfolgreich!", "Lieferungen hochgeladen", + MessageBoxButton.OK, MessageBoxImage.Information); + } + } catch (HttpRequestException exc) { + MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error); + } catch (TaskCanceledException exc) { + MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } catch (Exception exc) { MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } - Mouse.OverrideCursor = null; - } - } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"; - var path = Path.Combine(App.TempPath, filename); - var list = await query - .Select(p => p.Delivery) - .Distinct() - .Include(d => d.Parts) - .ThenInclude(p => p.PartModifiers) - .AsSplitQuery() - .ToListAsync(); - if (list.Count == 0) { - MessageBox.Show("Es wurden keine Lieferungen zum Hochladen ausgewählt!", "Lieferungen hochladen", - MessageBoxButton.OK, MessageBoxImage.Error); - } else { - await ElwigData.Export(path, list, filterNames); - await Utils.UploadExportData(path, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); - MessageBox.Show($"Hochladen von {list.Count:N0} Lieferungen erfolgreich!", "Lieferungen hochgeladen", - MessageBoxButton.OK, MessageBoxImage.Information); - } - } catch (HttpRequestException exc) { - MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error); - } catch (TaskCanceledException exc) { - MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } + }); Mouse.OverrideCursor = null; } else { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - var data = await DeliveryJournalData.FromQuery(query, filterNames); - using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data); - await Utils.ExportDocument(doc, mode); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + var data = await DeliveryJournalData.FromQuery(query, filterNames); + using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data); + await Utils.ExportDocument(doc, mode); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); Mouse.OverrideCursor = null; } } @@ -798,14 +817,16 @@ namespace Elwig.Services { throw new ArgumentException("Invalid value for ExportSubject"); } - Mouse.OverrideCursor = Cursors.AppStarting; - try { - var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList); - using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data); - await Utils.ExportDocument(doc, mode); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList); + using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data); + await Utils.ExportDocument(doc, mode); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); Mouse.OverrideCursor = null; } @@ -829,14 +850,16 @@ namespace Elwig.Services { Title = $"Lieferstatistik pro Ort speichern unter - Elwig" }; if (d.ShowDialog() == true) { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - using var ods = new OdsFile(d.FileName); - var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames); - 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 ods = new OdsFile(d.FileName); + var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames); + await ods.AddTable(tbl); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); Mouse.OverrideCursor = null; } } @@ -875,33 +898,37 @@ namespace Elwig.Services { Title = $"{DeliveryDepreciationList.Name} speichern unter - Elwig" }; if (d.ShowDialog() == true) { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - using var ods = new OdsFile(d.FileName); - var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames); - tblTotal.FullName = DeliveryDepreciationList.Name; - tblTotal.Name = "Gesamt"; - await ods.AddTable(tblTotal); - foreach (var branch in await ctx.Branches.OrderBy(b => b.Name).ToListAsync()) { - var tbl = await DeliveryJournalData.FromQuery(query.Where(p => p.Delivery.ZwstId == branch.ZwstId), filterNames); - tbl.FullName = DeliveryDepreciationList.Name; - tbl.Name = branch.Name; - await ods.AddTable(tbl); + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + using var ods = new OdsFile(d.FileName); + var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames); + tblTotal.FullName = DeliveryDepreciationList.Name; + tblTotal.Name = "Gesamt"; + await ods.AddTable(tblTotal); + foreach (var branch in await ctx.Branches.OrderBy(b => b.Name).ToListAsync()) { + var tbl = await DeliveryJournalData.FromQuery(query.Where(p => p.Delivery.ZwstId == branch.ZwstId), filterNames); + tbl.FullName = DeliveryDepreciationList.Name; + tbl.Name = branch.Name; + await ods.AddTable(tbl); + } + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } + }); Mouse.OverrideCursor = null; } } else { - Mouse.OverrideCursor = Cursors.AppStarting; - try { - var data = await DeliveryJournalData.FromQuery(query, filterNames); - using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data); - await Utils.ExportDocument(doc, mode); - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } + Mouse.OverrideCursor = Cursors.Wait; + await Task.Run(async () => { + try { + var data = await DeliveryJournalData.FromQuery(query, filterNames); + using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data); + await Utils.ExportDocument(doc, mode); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } + }); Mouse.OverrideCursor = null; } } @@ -1070,10 +1097,12 @@ namespace Elwig.Services { } public static async Task DeleteDelivery(string lsnr) { - using (var ctx = new AppDbContext()) { + await Task.Run(async () => { + using var ctx = new AppDbContext(); await ctx.Deliveries.Where(d => d.LsNr == lsnr).ExecuteDeleteAsync(); await ctx.SaveChangesAsync(); - } + }); + App.HintContextChange(); } } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 67464d4..688b8a0 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -715,7 +715,7 @@ namespace Elwig.Windows { private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { FinishButton.IsEnabled = false; NewDeliveryPartButton.IsEnabled = false; - Mouse.OverrideCursor = Cursors.AppStarting; + Mouse.OverrideCursor = Cursors.Wait; DeliveryPartList.IsEnabled = false; DeliveryPart? p; @@ -753,7 +753,7 @@ namespace Elwig.Windows { private async void FinishButton_Click(object sender, RoutedEventArgs evt) { FinishButton.IsEnabled = false; NewDeliveryPartButton.IsEnabled = false; - Mouse.OverrideCursor = Cursors.AppStarting; + Mouse.OverrideCursor = Cursors.Wait; DeliveryPartList.IsEnabled = false; DeliveryPart? p; @@ -884,7 +884,7 @@ namespace Elwig.Windows { if (res == null) return; - Mouse.OverrideCursor = Cursors.AppStarting; + Mouse.OverrideCursor = Cursors.Wait; try { var id = res.Value.Item1; var weights = res.Value.Item2; @@ -955,7 +955,7 @@ namespace Elwig.Windows { $"Soll die Lieferung {d.LsNr} ({d.Member.AdministrativeName}, MgNr. {d.Member.MgNr}) wirklich unwiderruflich gelöscht werden?", "Lieferung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); if (r == MessageBoxResult.OK) { - Mouse.OverrideCursor = Cursors.AppStarting; + Mouse.OverrideCursor = Cursors.Wait; try { await DeliveryService.DeleteDelivery(d.LsNr); } catch (Exception exc) { @@ -975,7 +975,7 @@ namespace Elwig.Windows { private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { SaveButton.IsEnabled = false; - Mouse.OverrideCursor = Cursors.AppStarting; + Mouse.OverrideCursor = Cursors.Wait; DeliveryPart? p; try { @@ -992,9 +992,8 @@ namespace Elwig.Windows { if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); SaveButton.IsEnabled = true; - return; - } finally { Mouse.OverrideCursor = null; + return; } IsEditing = false; @@ -1011,6 +1010,7 @@ namespace Elwig.Windows { await RefreshDeliveryParts(); RefreshInputs(); + Mouse.OverrideCursor = null; DepreciateButton.IsEnabled = true; }