Compare commits
	
		
			7 Commits
		
	
	
		
			v1.0.1.0
			...
			86cf3a6bbb
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 86cf3a6bbb | |||
| ed268bf322 | |||
| 93836ae243 | |||
| b9838da76b | |||
| 4c23dff64d | |||
| 50d5c4bee0 | |||
| 1203db38ba | 
| @@ -197,10 +197,12 @@ namespace Elwig { | ||||
|             var ch = CurrentLastWrite; | ||||
|             if (ch > CurrentApp.LastChanged) | ||||
|                 CurrentApp.LastChanged = ch; | ||||
|             MainDispatcher.Invoke(() => { | ||||
|                 foreach (Window w in CurrentApp.Windows) { | ||||
|                     if (w is not ContextWindow c) continue; | ||||
|                     MainDispatcher.BeginInvoke(c.HintContextChange); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         private void OnAutoUpdateTimer(object? sender, EventArgs? evt) { | ||||
|   | ||||
| @@ -27,13 +27,13 @@ | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" /> | ||||
|     <PackageReference Include="LinqKit" Version="1.3.8" /> | ||||
|     <PackageReference Include="MailKit" Version="4.11.0" /> | ||||
|     <PackageReference Include="MailKit" Version="4.12.0" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.36" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.4" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.4" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="9.0.4" /> | ||||
|     <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3179.45" /> | ||||
|     <PackageReference Include="NJsonSchema" Version="11.2.0" /> | ||||
|     <PackageReference Include="NJsonSchema" Version="11.3.2" /> | ||||
|     <PackageReference Include="PdfiumViewer" Version="2.13.0" /> | ||||
|     <PackageReference Include="PdfiumViewer.Native.x86_64.no_v8-no_xfa" Version="2018.4.8.256" /> | ||||
|     <PackageReference Include="RazorLight" Version="2.3.1" /> | ||||
|   | ||||
| @@ -434,8 +434,7 @@ namespace Elwig.Helpers { | ||||
|             if (accept != null) | ||||
|                 client.DefaultRequestHeaders.Accept.Add(new(accept)); | ||||
|             if (username != null || password != null) | ||||
|                 client.DefaultRequestHeaders.Authorization = new("Basic", Convert.ToBase64String( | ||||
|                     Utils.UTF8.GetBytes($"{username}:{password}"))); | ||||
|                 client.DefaultRequestHeaders.Authorization = new("Basic", Convert.ToBase64String(Utils.UTF8.GetBytes($"{username}:{password}"))); | ||||
|             return client; | ||||
|         } | ||||
|  | ||||
| @@ -454,6 +453,8 @@ namespace Elwig.Helpers { | ||||
|         } | ||||
|  | ||||
|         public static async Task UploadExportData(string zip, string url, string username, string password) { | ||||
|             if (url.StartsWith("https://elwig.at/clients/")) | ||||
|                 url = "https://sync.elwig.at/" + url[25..]; | ||||
|             if (!url.EndsWith('/')) url += "/"; | ||||
|             using var client = GetHttpClient(username, password, accept: "application/json"); | ||||
|             var content = new StreamContent(new FileStream(zip, FileMode.Open, FileAccess.Read)); | ||||
| @@ -463,6 +464,8 @@ namespace Elwig.Helpers { | ||||
|         } | ||||
|  | ||||
|         public static async Task<JsonArray> GetExportMetaData(string url, string username, string password) { | ||||
|             if (url.StartsWith("https://elwig.at/clients/")) | ||||
|                 url = "https://sync.elwig.at/" + url[25..]; | ||||
|             using var client = GetHttpClient(username, password, accept: "application/json"); | ||||
|             using var res = await client.GetAsync(url); | ||||
|             res.EnsureSuccessStatusCode(); | ||||
| @@ -496,9 +499,11 @@ namespace Elwig.Helpers { | ||||
|             if (App.Config.Smtp == null) | ||||
|                 return false; | ||||
|  | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|  | ||||
|             var success = await Task.Run(async () => { | ||||
|                 SmtpClient? client = null; | ||||
|                 try { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                     client = await GetSmtpClient(); | ||||
|  | ||||
|                     using var msg = new MimeMessage(); | ||||
| @@ -521,9 +526,12 @@ namespace Elwig.Helpers { | ||||
|                     if (client != null) | ||||
|                         await client.DisconnectAsync(true); | ||||
|                     client?.Dispose(); | ||||
|                 Mouse.OverrideCursor = null; | ||||
|                 } | ||||
|                 return true; | ||||
|             }); | ||||
|  | ||||
|             Mouse.OverrideCursor = null; | ||||
|             return success; | ||||
|         } | ||||
|  | ||||
|         public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member, string, string)? emailData = null) { | ||||
|   | ||||
| @@ -108,7 +108,8 @@ namespace Elwig.Services { | ||||
|         public static async Task<int> UpdateAreaCommitment(this AreaComAdminViewModel vm, int? oldFbNr) { | ||||
|             int newFbNr = (int)vm.FbNr!; | ||||
|  | ||||
|             using (var ctx = new AppDbContext()) { | ||||
|             await Task.Run(async () => { | ||||
|                 using var ctx = new AppDbContext(); | ||||
|                 var a = new AreaCom { | ||||
|                     FbNr = oldFbNr ?? newFbNr, | ||||
|                     MgNr = (int)vm.MgNr!, | ||||
| @@ -140,7 +141,7 @@ namespace Elwig.Services { | ||||
|                 if (newFbNr != a.FbNr) { | ||||
|                     await ctx.Database.ExecuteSqlAsync($"UPDATE area_commitment SET fbnr = {newFbNr} WHERE fbnr = {oldFbNr}"); | ||||
|                 } | ||||
|             } | ||||
|             }); | ||||
|  | ||||
|             App.HintContextChange(); | ||||
|  | ||||
| @@ -253,5 +254,16 @@ namespace Elwig.Services { | ||||
|             } | ||||
|             return grid; | ||||
|         } | ||||
|  | ||||
|         public static async Task DeleteAreaCom(int fbnr) { | ||||
|             await Task.Run(async () => { | ||||
|                 using var ctx = new AppDbContext(); | ||||
|                 var l = (await ctx.AreaCommitments.FindAsync(fbnr))!; | ||||
|                 ctx.Remove(l); | ||||
|                 await ctx.SaveChangesAsync(); | ||||
|             }); | ||||
|  | ||||
|             App.HintContextChange(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -430,9 +430,10 @@ namespace Elwig.Services { | ||||
|         } | ||||
|  | ||||
|         public static async Task<DeliveryPart> UpdateDeliveryPart(this DeliveryAdminViewModel vm, int? oldYear, int? oldDid, int? oldDpnr, bool dateHasChanged, bool timeHasChanged, bool timeIsDefault) { | ||||
|             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<Delivery> SplitDeliveryToMember(int year, int did, int[] weights, int mgnr) { | ||||
|             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<Delivery> SplitDeliveryToLsNr(int year, int did, int[] weights, string lsnr) { | ||||
|             var n = await Task.Run(async () => { | ||||
|                 Delivery n; | ||||
|  | ||||
|             using (var ctx = new AppDbContext()) { | ||||
|                 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,13 +657,14 @@ namespace Elwig.Services { | ||||
|                     } | ||||
|                 } | ||||
|                 await ctx.SaveChangesAsync(); | ||||
|             } | ||||
|             }); | ||||
|  | ||||
|             App.HintContextChange(); | ||||
|         } | ||||
|  | ||||
|         public static async Task GenerateDeliveryNote(int year, int did, ExportMode mode) { | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     using var ctx = new AppDbContext(); | ||||
|                     var d = (await ctx.Deliveries.FindAsync(year, did))!; | ||||
| @@ -663,6 +673,7 @@ namespace Elwig.Services { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
| @@ -707,7 +718,8 @@ 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 { | ||||
|                             var data = await DeliveryJournalData.FromQuery(query, filterNames); | ||||
|                             using var ods = new OdsFile(d.FileName); | ||||
| @@ -715,6 +727,7 @@ namespace Elwig.Services { | ||||
|                         } catch (Exception exc) { | ||||
|                             MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                         } | ||||
|                     }); | ||||
|                     Mouse.OverrideCursor = null; | ||||
|                 } | ||||
|             } else if (mode == ExportMode.Export) { | ||||
| @@ -725,7 +738,8 @@ 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) | ||||
| @@ -737,10 +751,12 @@ namespace Elwig.Services { | ||||
|                         } 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; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 await Task.Run(async () => { | ||||
|                     try { | ||||
|                         var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"; | ||||
|                         var path = Path.Combine(App.TempPath, filename); | ||||
| @@ -767,9 +783,11 @@ namespace Elwig.Services { | ||||
|                     } catch (Exception exc) { | ||||
|                         MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                     } | ||||
|                 }); | ||||
|                 Mouse.OverrideCursor = null; | ||||
|             } else { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 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); | ||||
| @@ -777,6 +795,7 @@ namespace Elwig.Services { | ||||
|                     } catch (Exception exc) { | ||||
|                         MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                     } | ||||
|                 }); | ||||
|                 Mouse.OverrideCursor = null; | ||||
|             } | ||||
|         } | ||||
| @@ -798,7 +817,8 @@ namespace Elwig.Services { | ||||
|                 throw new ArgumentException("Invalid value for ExportSubject"); | ||||
|             } | ||||
|  | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             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); | ||||
| @@ -806,6 +826,7 @@ namespace Elwig.Services { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
| @@ -829,7 +850,8 @@ namespace Elwig.Services { | ||||
|                 Title = $"Lieferstatistik pro Ort speichern unter - Elwig" | ||||
|             }; | ||||
|             if (d.ShowDialog() == true) { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 await Task.Run(async () => { | ||||
|                     try { | ||||
|                         using var ods = new OdsFile(d.FileName); | ||||
|                         var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames); | ||||
| @@ -837,6 +859,7 @@ namespace Elwig.Services { | ||||
|                     } catch (Exception exc) { | ||||
|                         MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                     } | ||||
|                 }); | ||||
|                 Mouse.OverrideCursor = null; | ||||
|             } | ||||
|         } | ||||
| @@ -875,7 +898,8 @@ namespace Elwig.Services { | ||||
|                     Title = $"{DeliveryDepreciationList.Name} speichern unter - Elwig" | ||||
|                 }; | ||||
|                 if (d.ShowDialog() == true) { | ||||
|                     Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                     Mouse.OverrideCursor = Cursors.Wait; | ||||
|                     await Task.Run(async () => { | ||||
|                         try { | ||||
|                             using var ods = new OdsFile(d.FileName); | ||||
|                             var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames); | ||||
| @@ -891,10 +915,12 @@ namespace Elwig.Services { | ||||
|                         } catch (Exception exc) { | ||||
|                             MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                         } | ||||
|                     }); | ||||
|                     Mouse.OverrideCursor = null; | ||||
|                 } | ||||
|             } else { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 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); | ||||
| @@ -902,6 +928,7 @@ namespace Elwig.Services { | ||||
|                     } 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(); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -367,7 +367,8 @@ namespace Elwig.Services { | ||||
|         } | ||||
|  | ||||
|         public static async Task GenerateMemberDataSheet(Member m, ExportMode mode) { | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     using var ctx = new AppDbContext(); | ||||
|                     using var doc = new MemberDataSheet(m, ctx); | ||||
| @@ -375,11 +376,13 @@ namespace Elwig.Services { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
|         public static async Task GenerateDeliveryConfirmation(Member m, int year, ExportMode mode) { | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     var b = new Billing(year); | ||||
|                     await b.FinishSeason(); | ||||
| @@ -393,11 +396,13 @@ namespace Elwig.Services { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
|         public static async Task GenerateCreditNote(Member m, int year, int avnr, ExportMode mode) { | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     using var ctx = new AppDbContext(); | ||||
|                     var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!; | ||||
| @@ -412,6 +417,7 @@ namespace Elwig.Services { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
| @@ -464,7 +470,8 @@ namespace Elwig.Services { | ||||
|                     Title = $"{MemberList.Name} speichern unter - Elwig" | ||||
|                 }; | ||||
|                 if (d.ShowDialog() == true) { | ||||
|                     Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                     Mouse.OverrideCursor = Cursors.Wait; | ||||
|                     await Task.Run(async () => { | ||||
|                         try { | ||||
|                             var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); | ||||
|                             using var ods = new OdsFile(d.FileName); | ||||
| @@ -472,6 +479,7 @@ namespace Elwig.Services { | ||||
|                         } catch (Exception exc) { | ||||
|                             MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                         } | ||||
|                     }); | ||||
|                     Mouse.OverrideCursor = null; | ||||
|                 } | ||||
|             } else if (mode == ExportMode.Export) { | ||||
| @@ -482,7 +490,8 @@ namespace Elwig.Services { | ||||
|                     Title = $"{MemberList.Name} speichern unter - Elwig" | ||||
|                 }; | ||||
|                 if (d.ShowDialog() == true) { | ||||
|                     Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                     Mouse.OverrideCursor = Cursors.Wait; | ||||
|                     await Task.Run(async () => { | ||||
|                         try { | ||||
|                             var members = await query | ||||
|                                 .OrderBy(m => m.MgNr) | ||||
| @@ -499,10 +508,12 @@ namespace Elwig.Services { | ||||
|                         } 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; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 await Task.Run(async () => { | ||||
|                     try { | ||||
|                         var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"; | ||||
|                         var path = Path.Combine(App.TempPath, filename); | ||||
| @@ -533,9 +544,11 @@ namespace Elwig.Services { | ||||
|                     } catch (Exception exc) { | ||||
|                         MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                     } | ||||
|                 }); | ||||
|                 Mouse.OverrideCursor = null; | ||||
|             } else { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 await Task.Run(async () => { | ||||
|                     try { | ||||
|                         var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); | ||||
|                         using var doc = new MemberList(string.Join(" / ", filterNames), data); | ||||
| @@ -543,14 +556,13 @@ namespace Elwig.Services { | ||||
|                     } catch (Exception exc) { | ||||
|                         MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                     } | ||||
|                 }); | ||||
|                 Mouse.OverrideCursor = null; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static async Task<int> UpdateMember(this MemberAdminViewModel vm, int? oldMgNr) { | ||||
|             var newMgNr = (int)vm.MgNr!; | ||||
|  | ||||
|             using (var ctx = new AppDbContext()) { | ||||
|             var m = new Member { | ||||
|                 MgNr = oldMgNr ?? newMgNr, | ||||
|                 PredecessorMgNr = vm.PredecessorMgNr, | ||||
| @@ -588,6 +600,8 @@ namespace Elwig.Services { | ||||
|                 ContactViaEmail = vm.ContactViaEmail, | ||||
|             }; | ||||
|  | ||||
|             await Task.Run(async () => { | ||||
|                 using var ctx = new AppDbContext(); | ||||
|                 if (oldMgNr != null) { | ||||
|                     ctx.Update(m); | ||||
|                 } else { | ||||
| @@ -670,7 +684,7 @@ namespace Elwig.Services { | ||||
|                 if (newMgNr != m.MgNr) { | ||||
|                     await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}"); | ||||
|                 } | ||||
|             } | ||||
|             }); | ||||
|  | ||||
|             App.HintContextChange(); | ||||
|  | ||||
| @@ -678,7 +692,8 @@ namespace Elwig.Services { | ||||
|         } | ||||
|  | ||||
|         public static async Task DeleteMember(int mgnr, bool deletePaymentData, bool deleteDeliveries, bool deleteAreaComs) { | ||||
|             using (var ctx = new AppDbContext()) { | ||||
|             await Task.Run(async () => { | ||||
|                 using var ctx = new AppDbContext(); | ||||
|                 var l = (await ctx.Members.FindAsync(mgnr))!; | ||||
|                 if (deletePaymentData) { | ||||
|                     ctx.RemoveRange(l.Credits); | ||||
| @@ -691,7 +706,8 @@ namespace Elwig.Services { | ||||
|                 } | ||||
|                 ctx.Remove(l); | ||||
|                 await ctx.SaveChangesAsync(); | ||||
|             } | ||||
|             }); | ||||
|  | ||||
|             App.HintContextChange(); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -203,13 +203,9 @@ namespace Elwig.Windows { | ||||
|                 $"Soll die Flächenbindung {a.GstNr} ({a.Area} m²) wirklich unwiderruflich gelöscht werden?", | ||||
|                 "Flächenbindung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); | ||||
|             if (r == MessageBoxResult.OK) { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 try { | ||||
|                     using (var ctx = new AppDbContext()) { | ||||
|                         ctx.Remove(a); | ||||
|                         await ctx.SaveChangesAsync(); | ||||
|                     } | ||||
|                     App.HintContextChange(); | ||||
|                     await AreaComService.DeleteAreaCom(a.FbNr); | ||||
|                 } catch (Exception exc) { | ||||
|                     var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message; | ||||
|                     if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; | ||||
| @@ -227,7 +223,7 @@ namespace Elwig.Windows { | ||||
|  | ||||
|         private async void AreaCommitmentSaveButton_Click(object? sender, RoutedEventArgs? evt) { | ||||
|             AreaCommitmentSaveButton.IsEnabled = false; | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|  | ||||
|             int fbnr; | ||||
|             try { | ||||
| @@ -237,9 +233,8 @@ namespace Elwig.Windows { | ||||
|                 if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; | ||||
|                 MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 AreaCommitmentSaveButton.IsEnabled = true; | ||||
|                 return; | ||||
|             } finally { | ||||
|                 Mouse.OverrideCursor = null; | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             IsEditing = false; | ||||
| @@ -252,6 +247,7 @@ namespace Elwig.Windows { | ||||
|             FinishInputFilling(); | ||||
|             await RefreshList(); | ||||
|             RefreshInputs(); | ||||
|             Mouse.OverrideCursor = null; | ||||
|             ViewModel.SearchQuery = ""; | ||||
|             ControlUtils.SelectItem(AreaCommitmentList, AreaCommitmentList.ItemsSource.Cast<AreaCom>().Where(a => a.FbNr == fbnr).FirstOrDefault()); | ||||
|         } | ||||
|   | ||||
| @@ -157,7 +157,7 @@ namespace Elwig.Windows { | ||||
|             } | ||||
|             var d = new NewSeasonDialog(s, currencies); | ||||
|             if (d.ShowDialog() == true) { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 try { | ||||
|                     using var ctx = new AppDbContext(); | ||||
|                     ctx.Add(new Season { | ||||
| @@ -209,7 +209,7 @@ namespace Elwig.Windows { | ||||
|                 $"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?", | ||||
|                 "Saison löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); | ||||
|             if (r == MessageBoxResult.OK) { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 try { | ||||
|                     using var ctx = new AppDbContext(); | ||||
|                     ctx.Remove(s); | ||||
|   | ||||
| @@ -318,8 +318,7 @@ namespace Elwig.Windows { | ||||
|  | ||||
|         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { | ||||
|             SaveButton.IsEnabled = false; | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|  | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             try { | ||||
|                 await Save(); | ||||
|             } catch (Exception exc) { | ||||
| @@ -327,9 +326,8 @@ namespace Elwig.Windows { | ||||
|                 if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; | ||||
|                 MessageBox.Show(str, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 SaveButton.IsEnabled = true; | ||||
|                 return; | ||||
|             } finally { | ||||
|                 Mouse.OverrideCursor = null; | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             IsEditing = false; | ||||
| @@ -349,6 +347,7 @@ namespace Elwig.Windows { | ||||
|             } | ||||
|  | ||||
|             App.HintContextChange(); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
|         private void FillInputs(ClientParameters p, Season? s) { | ||||
|   | ||||
| @@ -719,7 +719,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; | ||||
| @@ -757,7 +757,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; | ||||
| @@ -888,7 +888,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; | ||||
| @@ -959,7 +959,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) { | ||||
| @@ -979,7 +979,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 { | ||||
| @@ -996,9 +996,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; | ||||
| @@ -1015,6 +1014,7 @@ namespace Elwig.Windows { | ||||
|             await RefreshDeliveryParts(); | ||||
|             RefreshInputs(); | ||||
|  | ||||
|             Mouse.OverrideCursor = null; | ||||
|             DepreciateButton.IsEnabled = true; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -62,7 +62,7 @@ namespace Elwig.Windows { | ||||
|         } | ||||
|  | ||||
|         private async void Menu_Help_Smtp_Click(object sender, RoutedEventArgs evt) { | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             try { | ||||
|                 using var client = await Utils.GetSmtpClient(); | ||||
|                 await client!.DisconnectAsync(true); | ||||
| @@ -133,8 +133,10 @@ namespace Elwig.Windows { | ||||
|                     Multiselect = true, | ||||
|                 }; | ||||
|                 if (d.ShowDialog() == true) { | ||||
|                     Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                     Mouse.OverrideCursor = Cursors.Wait; | ||||
|                     await Task.Run(async () => { | ||||
|                         await ElwigData.Import(d.FileNames, ElwigData.ImportMode.Interactively); | ||||
|                     }); | ||||
|                 } | ||||
|             } catch (Exception exc) { | ||||
|                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
| @@ -145,7 +147,8 @@ namespace Elwig.Windows { | ||||
|         private async void DownloadButton_Click(object sender, RoutedEventArgs evt) { | ||||
|             if (App.Config.SyncUrl == null) | ||||
|                 return; | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); | ||||
|                     var files = data | ||||
| @@ -181,13 +184,15 @@ namespace Elwig.Windows { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
|         private async void UploadButton_Click(object sender, RoutedEventArgs evt) { | ||||
|             if (App.Config.SyncUrl == null) | ||||
|                 return; | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"); | ||||
|                     using var ctx = new AppDbContext(); | ||||
| @@ -216,6 +221,7 @@ namespace Elwig.Windows { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
| @@ -270,24 +276,31 @@ namespace Elwig.Windows { | ||||
|             AreaCommitmentsButton.IsEnabled = valid; | ||||
|             BreakdownMemberVarietyButton.IsEnabled = valid; | ||||
|  | ||||
|             if (valid) { | ||||
|                 var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value); | ||||
|                 var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight); | ||||
|                 var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value); | ||||
|                 SeasonStatMembersTotal.Text = $"{await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync():N0}"; | ||||
|                 SeasonStatMembersGeb.Text = $"{await areaComs.Select(c => c.Member).Distinct().CountAsync():N0}"; | ||||
|                 SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg"; | ||||
|                 SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg"; | ||||
|                 SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg"; | ||||
|                 SeasonStatArea.Text = $"{await areaComs.SumAsync(c => c.Area):N0} m²"; | ||||
|             } else { | ||||
|             SeasonStatMembersTotal.Text = "-"; | ||||
|             SeasonStatMembersGeb.Text = "-"; | ||||
|             SeasonStatWeightTotal.Text = "-"; | ||||
|             SeasonStatWeightGeb.Text = "-"; | ||||
|             SeasonStatWeightUngeb.Text = "-"; | ||||
|             SeasonStatArea.Text = "-"; | ||||
|             } | ||||
|             if (valid) { | ||||
|                 await Task.Run(async () => { | ||||
|                     var membersTotal = await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync(); | ||||
|                     var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value); | ||||
|                     var membersGeb = await areaComs.Select(c => c.Member).Distinct().CountAsync(); | ||||
|                     var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight); | ||||
|                     var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value); | ||||
|                     var area = await areaComs.SumAsync(c => c.Area); | ||||
|                     await App.MainDispatcher.BeginInvoke(() => { | ||||
|                         if (year != SeasonInput.Value) return; | ||||
|                         SeasonStatMembersTotal.Text = $"{membersTotal:N0}"; | ||||
|                         SeasonStatMembersGeb.Text = $"{membersGeb:N0}"; | ||||
|                         SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg"; | ||||
|                         SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg"; | ||||
|                         SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg"; | ||||
|                         SeasonStatArea.Text = $"{area:N0} m²"; | ||||
|                     }); | ||||
|                 }); | ||||
|             }; | ||||
|         } | ||||
|  | ||||
|         private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) { | ||||
| @@ -315,7 +328,8 @@ namespace Elwig.Windows { | ||||
|             if (d.ShowDialog() == false) | ||||
|                 return; | ||||
|  | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     var b = new Billing(year); | ||||
|                     await b.FinishSeason(); | ||||
| @@ -331,6 +345,7 @@ namespace Elwig.Windows { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
| @@ -346,7 +361,8 @@ namespace Elwig.Windows { | ||||
|             if (d.ShowDialog() == false) | ||||
|                 return; | ||||
|  | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     var b = new Billing(year); | ||||
|                     await b.FinishSeason(); | ||||
| @@ -364,6 +380,7 @@ namespace Elwig.Windows { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
| @@ -379,7 +396,8 @@ namespace Elwig.Windows { | ||||
|             if (d.ShowDialog() == false) | ||||
|                 return; | ||||
|  | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     var b = new Billing(year); | ||||
|                     await b.FinishSeason(); | ||||
| @@ -393,6 +411,7 @@ namespace Elwig.Windows { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|  | ||||
| @@ -408,7 +427,8 @@ namespace Elwig.Windows { | ||||
|             if (d.ShowDialog() == false) | ||||
|                 return; | ||||
|  | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             await Task.Run(async () => { | ||||
|                 try { | ||||
|                     var b = new Billing(year); | ||||
|                     await b.FinishSeason(); | ||||
| @@ -422,6 +442,7 @@ namespace Elwig.Windows { | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 } | ||||
|             }); | ||||
|             Mouse.OverrideCursor = null; | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -389,7 +389,7 @@ namespace Elwig.Windows { | ||||
|             } | ||||
|             var d = new DeleteMemberDialog(m.MgNr, m.AdministrativeName, areaComs, deliveries, credits); | ||||
|             if (d.ShowDialog() == true) { | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 Mouse.OverrideCursor = Cursors.Wait; | ||||
|                 try { | ||||
|                     await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs); | ||||
|                 } catch (Exception exc) { | ||||
| @@ -408,7 +408,7 @@ namespace Elwig.Windows { | ||||
|         } | ||||
|  | ||||
|         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             SaveButton.IsEnabled = false; | ||||
|  | ||||
|             int mgnr; | ||||
| @@ -419,9 +419,8 @@ namespace Elwig.Windows { | ||||
|                 if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; | ||||
|                 MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|                 SaveButton.IsEnabled = true; | ||||
|                 return; | ||||
|             } finally { | ||||
|                 Mouse.OverrideCursor = null; | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             IsEditing = false; | ||||
| @@ -436,6 +435,7 @@ namespace Elwig.Windows { | ||||
|             await RefreshList(); | ||||
|             RefreshInputs(); | ||||
|             ViewModel.SearchQuery = ""; | ||||
|             Mouse.OverrideCursor = null; | ||||
|             if (mgnr is int m) | ||||
|                 FocusMember(m); | ||||
|         } | ||||
| @@ -491,8 +491,9 @@ namespace Elwig.Windows { | ||||
|  | ||||
|         private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) { | ||||
|             if (ViewModel.SelectedMember is not Member m) return; | ||||
|             Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|             Mouse.OverrideCursor = Cursors.Wait; | ||||
|             try { | ||||
|                 await Task.Run(async () => { | ||||
|                     using var doc = new Letterhead(m); | ||||
|                     await doc.Generate(); | ||||
|                     if (!App.Config.Debug) { | ||||
| @@ -500,6 +501,7 @@ namespace Elwig.Windows { | ||||
|                     } else { | ||||
|                         doc.Show(); | ||||
|                     } | ||||
|                 }); | ||||
|             } catch (Exception exc) { | ||||
|                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|             } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user