Compare commits
	
		
			5 Commits
		
	
	
		
			v1.0.0.3
			...
			7e8630a039
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7e8630a039 | |||
| 4786886a78 | |||
| 102ac89c51 | |||
| a8ae188622 | |||
| 335dc52315 | 
| @@ -197,10 +197,12 @@ namespace Elwig { | |||||||
|             var ch = CurrentLastWrite; |             var ch = CurrentLastWrite; | ||||||
|             if (ch > CurrentApp.LastChanged) |             if (ch > CurrentApp.LastChanged) | ||||||
|                 CurrentApp.LastChanged = ch; |                 CurrentApp.LastChanged = ch; | ||||||
|             foreach (Window w in CurrentApp.Windows) { |             MainDispatcher.Invoke(() => { | ||||||
|                 if (w is not ContextWindow c) continue; |                 foreach (Window w in CurrentApp.Windows) { | ||||||
|                 MainDispatcher.BeginInvoke(c.HintContextChange); |                     if (w is not ContextWindow c) continue; | ||||||
|             } |                     MainDispatcher.BeginInvoke(c.HintContextChange); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void OnAutoUpdateTimer(object? sender, EventArgs? evt) { |         private void OnAutoUpdateTimer(object? sender, EventArgs? evt) { | ||||||
|   | |||||||
| @@ -496,34 +496,39 @@ namespace Elwig.Helpers { | |||||||
|             if (App.Config.Smtp == null) |             if (App.Config.Smtp == null) | ||||||
|                 return false; |                 return false; | ||||||
|  |  | ||||||
|             SmtpClient? client = null; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |  | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |  | ||||||
|                 client = await GetSmtpClient(); |  | ||||||
|  |  | ||||||
|                 using var msg = new MimeMessage(); |             var success = await Task.Run(async () => { | ||||||
|                 msg.From.Add(new MailboxAddress(App.Client.NameFull, App.Config.Smtp.Value.From)); |                 SmtpClient? client = null; | ||||||
|                 msg.To.AddRange(member.EmailAddresses.OrderBy(a => a.Nr).Select(a => new MailboxAddress(member.AdministrativeName, a.Address))); |                 try { | ||||||
|                 msg.Subject = subject; |                     client = await GetSmtpClient(); | ||||||
|                 var body = new Multipart("mixed") { |  | ||||||
|                     new TextPart("plain") { Text = text } |                     using var msg = new MimeMessage(); | ||||||
|                 }; |                     msg.From.Add(new MailboxAddress(App.Client.NameFull, App.Config.Smtp.Value.From)); | ||||||
|                 foreach (var doc in docs) { |                     msg.To.AddRange(member.EmailAddresses.OrderBy(a => a.Nr).Select(a => new MailboxAddress(member.AdministrativeName, a.Address))); | ||||||
|                     var name = NormalizeFileName(doc.Title); |                     msg.Subject = subject; | ||||||
|                     body.Add(doc.AsEmailAttachment($"{name}.pdf")); |                     var body = new Multipart("mixed") { | ||||||
|  |                         new TextPart("plain") { Text = text } | ||||||
|  |                     }; | ||||||
|  |                     foreach (var doc in docs) { | ||||||
|  |                         var name = NormalizeFileName(doc.Title); | ||||||
|  |                         body.Add(doc.AsEmailAttachment($"{name}.pdf")); | ||||||
|  |                     } | ||||||
|  |                     msg.Body = body; | ||||||
|  |                     await client!.SendAsync(msg); | ||||||
|  |                 } catch (Exception exc) { | ||||||
|  |                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|  |                     return false; | ||||||
|  |                 } finally { | ||||||
|  |                     if (client != null) | ||||||
|  |                         await client.DisconnectAsync(true); | ||||||
|  |                     client?.Dispose(); | ||||||
|                 } |                 } | ||||||
|                 msg.Body = body; |                 return true; | ||||||
|                 await client!.SendAsync(msg); |             }); | ||||||
|             } catch (Exception exc) { |  | ||||||
|                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); |             Mouse.OverrideCursor = null; | ||||||
|                 return false; |             return success; | ||||||
|             } finally { |  | ||||||
|                 if (client != null) |  | ||||||
|                     await client.DisconnectAsync(true); |  | ||||||
|                 client?.Dispose(); |  | ||||||
|                 Mouse.OverrideCursor = null; |  | ||||||
|             } |  | ||||||
|             return true; |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member, string, string)? emailData = null) { |         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) { |         public static async Task<int> UpdateAreaCommitment(this AreaComAdminViewModel vm, int? oldFbNr) { | ||||||
|             int newFbNr = (int)vm.FbNr!; |             int newFbNr = (int)vm.FbNr!; | ||||||
|  |  | ||||||
|             using (var ctx = new AppDbContext()) { |             await Task.Run(async () => { | ||||||
|  |                 using var ctx = new AppDbContext(); | ||||||
|                 var a = new AreaCom { |                 var a = new AreaCom { | ||||||
|                     FbNr = oldFbNr ?? newFbNr, |                     FbNr = oldFbNr ?? newFbNr, | ||||||
|                     MgNr = (int)vm.MgNr!, |                     MgNr = (int)vm.MgNr!, | ||||||
| @@ -140,7 +141,7 @@ namespace Elwig.Services { | |||||||
|                 if (newFbNr != a.FbNr) { |                 if (newFbNr != a.FbNr) { | ||||||
|                     await ctx.Database.ExecuteSqlAsync($"UPDATE area_commitment SET fbnr = {newFbNr} WHERE fbnr = {oldFbNr}"); |                     await ctx.Database.ExecuteSqlAsync($"UPDATE area_commitment SET fbnr = {newFbNr} WHERE fbnr = {oldFbNr}"); | ||||||
|                 } |                 } | ||||||
|             } |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|  |  | ||||||
| @@ -253,5 +254,16 @@ namespace Elwig.Services { | |||||||
|             } |             } | ||||||
|             return grid; |             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) { |         public static async Task<DeliveryPart> 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 year = oldYear ?? Utils.CurrentYear; | ||||||
|                 int did = oldDid ?? await ctx.NextDId(year); |                 int did = oldDid ?? await ctx.NextDId(year); | ||||||
|                 int dpnr = oldDpnr ?? await ctx.NextDPNr(year, did); |                 int dpnr = oldDpnr ?? await ctx.NextDPNr(year, did); | ||||||
| @@ -524,7 +525,9 @@ namespace Elwig.Services { | |||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 await ctx.SaveChangesAsync(); |                 await ctx.SaveChangesAsync(); | ||||||
|             } |  | ||||||
|  |                 return p; | ||||||
|  |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|  |  | ||||||
| @@ -532,9 +535,10 @@ namespace Elwig.Services { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task<Delivery> SplitDeliveryToMember(int year, int did, int[] weights, int mgnr) { |         public static async Task<Delivery> 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; |                 bool anyLeft = false; | ||||||
|                 var d = (await ctx.Deliveries.FindAsync(year, did))!; |                 var d = (await ctx.Deliveries.FindAsync(year, did))!; | ||||||
|                 var lnr = await ctx.NextLNr(d.Date, d.ZwstId); |                 var lnr = await ctx.NextLNr(d.Date, d.ZwstId); | ||||||
| @@ -577,7 +581,9 @@ namespace Elwig.Services { | |||||||
|                 await ctx.SaveChangesAsync(); |                 await ctx.SaveChangesAsync(); | ||||||
|                 if (!anyLeft) |                 if (!anyLeft) | ||||||
|                     await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); |                     await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); | ||||||
|             } |  | ||||||
|  |                 return n; | ||||||
|  |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|  |  | ||||||
| @@ -585,9 +591,9 @@ namespace Elwig.Services { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task<Delivery> SplitDeliveryToLsNr(int year, int did, int[] weights, string lsnr) { |         public static async Task<Delivery> SplitDeliveryToLsNr(int year, int did, int[] weights, string lsnr) { | ||||||
|             Delivery n; |             var n = await Task.Run(async () => { | ||||||
|  |                 Delivery n; | ||||||
|             using (var ctx = new AppDbContext()) { |                 using var ctx = new AppDbContext(); | ||||||
|                 var anyLeft = false; |                 var anyLeft = false; | ||||||
|                 n = (await ctx.Deliveries.FirstAsync(d => d.LsNr == lsnr))!; |                 n = (await ctx.Deliveries.FirstAsync(d => d.LsNr == lsnr))!; | ||||||
|                 var d = (await ctx.Deliveries.FindAsync(year, did))!; |                 var d = (await ctx.Deliveries.FindAsync(year, did))!; | ||||||
| @@ -616,7 +622,9 @@ namespace Elwig.Services { | |||||||
|                 await ctx.SaveChangesAsync(); |                 await ctx.SaveChangesAsync(); | ||||||
|                 if (!anyLeft && n.LsNr != d.LsNr) |                 if (!anyLeft && n.LsNr != d.LsNr) | ||||||
|                     await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); |                     await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); | ||||||
|             } |  | ||||||
|  |                 return n; | ||||||
|  |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|  |  | ||||||
| @@ -624,7 +632,8 @@ namespace Elwig.Services { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task DepreciateDelivery(int year, int did, int[] weights) { |         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 d = (await ctx.Deliveries.FindAsync(year, did))!; | ||||||
|                 var dpnr = await ctx.NextDPNr(year, did); |                 var dpnr = await ctx.NextDPNr(year, did); | ||||||
|                 foreach (var (p, w) in d.Parts.ToList().Zip(weights)) { |                 foreach (var (p, w) in d.Parts.ToList().Zip(weights)) { | ||||||
| @@ -648,21 +657,23 @@ namespace Elwig.Services { | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 await ctx.SaveChangesAsync(); |                 await ctx.SaveChangesAsync(); | ||||||
|             } |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task GenerateDeliveryNote(int year, int did, ExportMode mode) { |         public static async Task GenerateDeliveryNote(int year, int did, ExportMode mode) { | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 using var ctx = new AppDbContext(); |                 try { | ||||||
|                 var d = (await ctx.Deliveries.FindAsync(year, did))!; |                     using var ctx = new AppDbContext(); | ||||||
|                 using var doc = new DeliveryNote(d, ctx); |                     var d = (await ctx.Deliveries.FindAsync(year, did))!; | ||||||
|                 await Utils.ExportDocument(doc, mode, d.LsNr, (d.Member, $"{DeliveryNote.Name} Nr. {d.LsNr}", $"Im Anhang finden Sie den {DeliveryNote.Name} Nr. {d.LsNr}")); |                     using var doc = new DeliveryNote(d, ctx); | ||||||
|             } catch (Exception exc) { |                     await Utils.ExportDocument(doc, mode, d.LsNr, (d.Member, $"{DeliveryNote.Name} Nr. {d.LsNr}", $"Im Anhang finden Sie den {DeliveryNote.Name} Nr. {d.LsNr}")); | ||||||
|                 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; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -707,14 +718,16 @@ namespace Elwig.Services { | |||||||
|                     Title = $"{DeliveryJournal.Name} speichern unter - Elwig" |                     Title = $"{DeliveryJournal.Name} speichern unter - Elwig" | ||||||
|                 }; |                 }; | ||||||
|                 if (d.ShowDialog() == true) { |                 if (d.ShowDialog() == true) { | ||||||
|                     Mouse.OverrideCursor = Cursors.AppStarting; |                     Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                     try { |                     await Task.Run(async () => { | ||||||
|                         var data = await DeliveryJournalData.FromQuery(query, filterNames); |                         try { | ||||||
|                         using var ods = new OdsFile(d.FileName); |                             var data = await DeliveryJournalData.FromQuery(query, filterNames); | ||||||
|                         await ods.AddTable(data); |                             using var ods = new OdsFile(d.FileName); | ||||||
|                     } catch (Exception exc) { |                             await ods.AddTable(data); | ||||||
|                         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; | ||||||
|                 } |                 } | ||||||
|             } else if (mode == ExportMode.Export) { |             } else if (mode == ExportMode.Export) { | ||||||
| @@ -725,58 +738,64 @@ namespace Elwig.Services { | |||||||
|                     Title = $"{DeliveryJournal.Name} speichern unter - Elwig" |                     Title = $"{DeliveryJournal.Name} speichern unter - Elwig" | ||||||
|                 }; |                 }; | ||||||
|                 if (d.ShowDialog() == true) { |                 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 { |                     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) |                             .Select(p => p.Delivery) | ||||||
|                             .Distinct() |                             .Distinct() | ||||||
|                             .Include(d => d.Parts) |                             .Include(d => d.Parts) | ||||||
|                             .ThenInclude(p => p.PartModifiers) |                             .ThenInclude(p => p.PartModifiers) | ||||||
|                             .AsSplitQuery() |                             .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) { |                     } catch (Exception exc) { | ||||||
|                         MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); |                         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; |                 Mouse.OverrideCursor = null; | ||||||
|             } else { |             } else { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 await Task.Run(async () => { | ||||||
|                     var data = await DeliveryJournalData.FromQuery(query, filterNames); |                     try { | ||||||
|                     using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data); |                         var data = await DeliveryJournalData.FromQuery(query, filterNames); | ||||||
|                     await Utils.ExportDocument(doc, mode); |                         using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data); | ||||||
|                 } catch (Exception exc) { |                         await Utils.ExportDocument(doc, mode); | ||||||
|                     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; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -798,14 +817,16 @@ namespace Elwig.Services { | |||||||
|                 throw new ArgumentException("Invalid value for ExportSubject"); |                 throw new ArgumentException("Invalid value for ExportSubject"); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList); |                 try { | ||||||
|                 using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data); |                     var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList); | ||||||
|                 await Utils.ExportDocument(doc, mode); |                     using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data); | ||||||
|             } catch (Exception exc) { |                     await Utils.ExportDocument(doc, mode); | ||||||
|                 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; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -829,14 +850,16 @@ namespace Elwig.Services { | |||||||
|                 Title = $"Lieferstatistik pro Ort speichern unter - Elwig" |                 Title = $"Lieferstatistik pro Ort 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 ods = new OdsFile(d.FileName); |                     try { | ||||||
|                     var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames); |                         using var ods = new OdsFile(d.FileName); | ||||||
|                     await ods.AddTable(tbl); |                         var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames); | ||||||
|                 } 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; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -875,33 +898,37 @@ namespace Elwig.Services { | |||||||
|                     Title = $"{DeliveryDepreciationList.Name} speichern unter - Elwig" |                     Title = $"{DeliveryDepreciationList.Name} 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 ods = new OdsFile(d.FileName); |                         try { | ||||||
|                         var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames); |                             using var ods = new OdsFile(d.FileName); | ||||||
|                         tblTotal.FullName = DeliveryDepreciationList.Name; |                             var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames); | ||||||
|                         tblTotal.Name = "Gesamt"; |                             tblTotal.FullName = DeliveryDepreciationList.Name; | ||||||
|                         await ods.AddTable(tblTotal); |                             tblTotal.Name = "Gesamt"; | ||||||
|                         foreach (var branch in await ctx.Branches.OrderBy(b => b.Name).ToListAsync()) { |                             await ods.AddTable(tblTotal); | ||||||
|                             var tbl = await DeliveryJournalData.FromQuery(query.Where(p => p.Delivery.ZwstId == branch.ZwstId), filterNames); |                             foreach (var branch in await ctx.Branches.OrderBy(b => b.Name).ToListAsync()) { | ||||||
|                             tbl.FullName = DeliveryDepreciationList.Name; |                                 var tbl = await DeliveryJournalData.FromQuery(query.Where(p => p.Delivery.ZwstId == branch.ZwstId), filterNames); | ||||||
|                             tbl.Name = branch.Name; |                                 tbl.FullName = DeliveryDepreciationList.Name; | ||||||
|                             await ods.AddTable(tbl); |                                 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; |                     Mouse.OverrideCursor = null; | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 await Task.Run(async () => { | ||||||
|                     var data = await DeliveryJournalData.FromQuery(query, filterNames); |                     try { | ||||||
|                     using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data); |                         var data = await DeliveryJournalData.FromQuery(query, filterNames); | ||||||
|                     await Utils.ExportDocument(doc, mode); |                         using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data); | ||||||
|                 } catch (Exception exc) { |                         await Utils.ExportDocument(doc, mode); | ||||||
|                     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; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -1070,10 +1097,12 @@ namespace Elwig.Services { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task DeleteDelivery(string lsnr) { |         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.Deliveries.Where(d => d.LsNr == lsnr).ExecuteDeleteAsync(); | ||||||
|                 await ctx.SaveChangesAsync(); |                 await ctx.SaveChangesAsync(); | ||||||
|             } |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -367,51 +367,57 @@ namespace Elwig.Services { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task GenerateMemberDataSheet(Member m, ExportMode mode) { |         public static async Task GenerateMemberDataSheet(Member m, ExportMode mode) { | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 using var ctx = new AppDbContext(); |                 try { | ||||||
|                 using var doc = new MemberDataSheet(m, ctx); |                     using var ctx = new AppDbContext(); | ||||||
|                 await Utils.ExportDocument(doc, mode, emailData: (m, MemberDataSheet.Name, "Im Anhang finden Sie das aktuelle Stammdatenblatt")); |                     using var doc = new MemberDataSheet(m, ctx); | ||||||
|             } catch (Exception exc) { |                     await Utils.ExportDocument(doc, mode, emailData: (m, MemberDataSheet.Name, "Im Anhang finden Sie das aktuelle Stammdatenblatt")); | ||||||
|                 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 GenerateDeliveryConfirmation(Member m, int year, ExportMode mode) { |         public static async Task GenerateDeliveryConfirmation(Member m, int year, ExportMode mode) { | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var b = new Billing(year); |                 try { | ||||||
|                 await b.FinishSeason(); |                     var b = new Billing(year); | ||||||
|                 await b.CalculateBuckets(); |                     await b.FinishSeason(); | ||||||
|                 App.HintContextChange(); |                     await b.CalculateBuckets(); | ||||||
|  |                     App.HintContextChange(); | ||||||
|  |  | ||||||
|                 using var ctx = new AppDbContext(); |                     using var ctx = new AppDbContext(); | ||||||
|                 var data = await DeliveryConfirmationDeliveryData.ForMember(ctx.DeliveryParts, year, m); |                     var data = await DeliveryConfirmationDeliveryData.ForMember(ctx.DeliveryParts, year, m); | ||||||
|                 using var doc = new DeliveryConfirmation(ctx, year, m, data); |                     using var doc = new DeliveryConfirmation(ctx, year, m, data); | ||||||
|                 await Utils.ExportDocument(doc, mode, emailData: (m, $"{DeliveryConfirmation.Name} {year}", $"Im Anhang finden Sie die Anlieferungsbestätigung {year}")); |                     await Utils.ExportDocument(doc, mode, emailData: (m, $"{DeliveryConfirmation.Name} {year}", $"Im Anhang finden Sie die Anlieferungsbestätigung {year}")); | ||||||
|             } 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; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task GenerateCreditNote(Member m, int year, int avnr, ExportMode mode) { |         public static async Task GenerateCreditNote(Member m, int year, int avnr, ExportMode mode) { | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 using var ctx = new AppDbContext(); |                 try { | ||||||
|                 var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!; |                     using var ctx = new AppDbContext(); | ||||||
|                 var data = await CreditNoteDeliveryData.ForPaymentVariant(ctx.CreditNoteDeliveryRows, ctx.Seasons, year, avnr); |                     var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!; | ||||||
|                 var p = (await ctx.MemberPayments.FindAsync(year, avnr, m.MgNr))!; |                     var data = await CreditNoteDeliveryData.ForPaymentVariant(ctx.CreditNoteDeliveryRows, ctx.Seasons, year, avnr); | ||||||
|                 var b = BillingData.FromJson((await ctx.PaymentVariants.FindAsync(year, avnr))!.Data); |                     var p = (await ctx.MemberPayments.FindAsync(year, avnr, m.MgNr))!; | ||||||
|  |                     var b = BillingData.FromJson((await ctx.PaymentVariants.FindAsync(year, avnr))!.Data); | ||||||
|  |  | ||||||
|                 using var doc = new CreditNote(ctx, p, data[m.MgNr], |                     using var doc = new CreditNote(ctx, p, data[m.MgNr], | ||||||
|                     b.ConsiderContractPenalties, b.ConsiderTotalPenalty, b.ConsiderAutoBusinessShares, b.ConsiderCustomModifiers, |                         b.ConsiderContractPenalties, b.ConsiderTotalPenalty, b.ConsiderAutoBusinessShares, b.ConsiderCustomModifiers, | ||||||
|                     await ctx.GetMemberUnderDelivery(year, m.MgNr)); |                         await ctx.GetMemberUnderDelivery(year, m.MgNr)); | ||||||
|                 await Utils.ExportDocument(doc, mode, emailData: (m, $"{CreditNote.Name} {v.Name}", $"Im Anhang finden Sie die Traubengutschrift {v.Name}")); |                     await Utils.ExportDocument(doc, mode, emailData: (m, $"{CreditNote.Name} {v.Name}", $"Im Anhang finden Sie die Traubengutschrift {v.Name}")); | ||||||
|             } 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; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -464,14 +470,16 @@ namespace Elwig.Services { | |||||||
|                     Title = $"{MemberList.Name} speichern unter - Elwig" |                     Title = $"{MemberList.Name} speichern unter - Elwig" | ||||||
|                 }; |                 }; | ||||||
|                 if (d.ShowDialog() == true) { |                 if (d.ShowDialog() == true) { | ||||||
|                     Mouse.OverrideCursor = Cursors.AppStarting; |                     Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                     try { |                     await Task.Run(async () => { | ||||||
|                         var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); |                         try { | ||||||
|                         using var ods = new OdsFile(d.FileName); |                             var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); | ||||||
|                         await ods.AddTable(data); |                             using var ods = new OdsFile(d.FileName); | ||||||
|                     } catch (Exception exc) { |                             await ods.AddTable(data); | ||||||
|                         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; | ||||||
|                 } |                 } | ||||||
|             } else if (mode == ExportMode.Export) { |             } else if (mode == ExportMode.Export) { | ||||||
| @@ -482,8 +490,33 @@ namespace Elwig.Services { | |||||||
|                     Title = $"{MemberList.Name} speichern unter - Elwig" |                     Title = $"{MemberList.Name} speichern unter - Elwig" | ||||||
|                 }; |                 }; | ||||||
|                 if (d.ShowDialog() == true) { |                 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) | ||||||
|  |                                 .Include(m => m.BillingAddress) | ||||||
|  |                                 .Include(m => m.TelephoneNumbers) | ||||||
|  |                                 .Include(m => m.EmailAddresses) | ||||||
|  |                                 .AsSplitQuery() | ||||||
|  |                                 .ToListAsync(); | ||||||
|  |                             var areaComs = await query | ||||||
|  |                                 .SelectMany(m => m.AreaCommitments) | ||||||
|  |                                 .Include(c => c.Rd) | ||||||
|  |                                 .ToListAsync(); | ||||||
|  |                             await ElwigData.Export(d.FileName, members, areaComs, 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 { |                     try { | ||||||
|  |                         var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"; | ||||||
|  |                         var path = Path.Combine(App.TempPath, filename); | ||||||
|                         var members = await query |                         var members = await query | ||||||
|                             .OrderBy(m => m.MgNr) |                             .OrderBy(m => m.MgNr) | ||||||
|                             .Include(m => m.BillingAddress) |                             .Include(m => m.BillingAddress) | ||||||
| @@ -495,99 +528,80 @@ namespace Elwig.Services { | |||||||
|                             .SelectMany(m => m.AreaCommitments) |                             .SelectMany(m => m.AreaCommitments) | ||||||
|                             .Include(c => c.Rd) |                             .Include(c => c.Rd) | ||||||
|                             .ToListAsync(); |                             .ToListAsync(); | ||||||
|                         await ElwigData.Export(d.FileName, members, areaComs, filterNames); |                         if (members.Count == 0) { | ||||||
|  |                             MessageBox.Show("Es wurden keine Mitglieder zum Hochladen ausgewählt!", "Mitglieder hochladen", | ||||||
|  |                                 MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|  |                         } else { | ||||||
|  |                             await ElwigData.Export(path, members, areaComs, filterNames); | ||||||
|  |                             await Utils.UploadExportData(path, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); | ||||||
|  |                             MessageBox.Show($"Hochladen von {members.Count:N0} Mitgliedern erfolgreich!", "Mitglieder hochgeladen", | ||||||
|  |                                 MessageBoxButton.OK, MessageBoxImage.Information); | ||||||
|  |                         } | ||||||
|  |                     } catch (HttpRequestException exc) { | ||||||
|  |                         MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Mitglieder hochladen", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|  |                     } catch (TaskCanceledException exc) { | ||||||
|  |                         MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Mitglieder hochladen", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|                     } 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; |                 }); | ||||||
|                 } |  | ||||||
|             } 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 members = await query |  | ||||||
|                         .OrderBy(m => m.MgNr) |  | ||||||
|                         .Include(m => m.BillingAddress) |  | ||||||
|                         .Include(m => m.TelephoneNumbers) |  | ||||||
|                         .Include(m => m.EmailAddresses) |  | ||||||
|                         .AsSplitQuery() |  | ||||||
|                         .ToListAsync(); |  | ||||||
|                     var areaComs = await query |  | ||||||
|                         .SelectMany(m => m.AreaCommitments) |  | ||||||
|                         .Include(c => c.Rd) |  | ||||||
|                         .ToListAsync(); |  | ||||||
|                     if (members.Count == 0) { |  | ||||||
|                         MessageBox.Show("Es wurden keine Mitglieder zum Hochladen ausgewählt!", "Mitglieder hochladen", |  | ||||||
|                             MessageBoxButton.OK, MessageBoxImage.Error); |  | ||||||
|                     } else { |  | ||||||
|                         await ElwigData.Export(path, members, areaComs, filterNames); |  | ||||||
|                         await Utils.UploadExportData(path, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); |  | ||||||
|                         MessageBox.Show($"Hochladen von {members.Count:N0} Mitgliedern erfolgreich!", "Mitglieder hochgeladen", |  | ||||||
|                             MessageBoxButton.OK, MessageBoxImage.Information); |  | ||||||
|                     } |  | ||||||
|                 } catch (HttpRequestException exc) { |  | ||||||
|                     MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Mitglieder hochladen", MessageBoxButton.OK, MessageBoxImage.Error); |  | ||||||
|                 } catch (TaskCanceledException exc) { |  | ||||||
|                     MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Mitglieder hochladen", MessageBoxButton.OK, MessageBoxImage.Error); |  | ||||||
|                 } catch (Exception exc) { |  | ||||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); |  | ||||||
|                 } |  | ||||||
|                 Mouse.OverrideCursor = null; |                 Mouse.OverrideCursor = null; | ||||||
|             } else { |             } else { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 await Task.Run(async () => { | ||||||
|                     var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); |                     try { | ||||||
|                     using var doc = new MemberList(string.Join(" / ", filterNames), data); |                         var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); | ||||||
|                     await Utils.ExportDocument(doc, mode); |                         using var doc = new MemberList(string.Join(" / ", filterNames), data); | ||||||
|                 } catch (Exception exc) { |                         await Utils.ExportDocument(doc, mode); | ||||||
|                     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<int> UpdateMember(this MemberAdminViewModel vm, int? oldMgNr) { |         public static async Task<int> UpdateMember(this MemberAdminViewModel vm, int? oldMgNr) { | ||||||
|             var newMgNr = (int)vm.MgNr!; |             var newMgNr = (int)vm.MgNr!; | ||||||
|  |             var m = new Member { | ||||||
|  |                 MgNr = oldMgNr ?? newMgNr, | ||||||
|  |                 PredecessorMgNr = vm.PredecessorMgNr, | ||||||
|  |                 IsJuridicalPerson = vm.IsJuridicalPerson, | ||||||
|  |                 Prefix = vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.Prefix) ? null : vm.Prefix, | ||||||
|  |                 GivenName = vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.GivenName) ? null : vm.GivenName, | ||||||
|  |                 Name = vm.Name!, | ||||||
|  |                 Suffix = vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.Suffix) ? null : vm.Suffix, | ||||||
|  |                 ForTheAttentionOf = !vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.ForTheAttentionOf) ? null : vm.ForTheAttentionOf, | ||||||
|  |                 Birthday = string.IsNullOrEmpty(vm.Birthday) ? null : string.Join("-", vm.Birthday!.Split(".").Reverse()), | ||||||
|  |                 IsDeceased = vm.IsDeceased, | ||||||
|  |                 CountryNum = 40,  // Austria AT AUT | ||||||
|  |                 PostalDestId = vm.Ort!.Id, | ||||||
|  |                 Address = vm.Address!, | ||||||
|  |  | ||||||
|             using (var ctx = new AppDbContext()) { |                 Iban = string.IsNullOrEmpty(vm.Iban) ? null : vm.Iban?.Replace(" ", ""), | ||||||
|                 var m = new Member { |                 Bic = string.IsNullOrEmpty(vm.Bic) ? null : vm.Bic, | ||||||
|                     MgNr = oldMgNr ?? newMgNr, |  | ||||||
|                     PredecessorMgNr = vm.PredecessorMgNr, |  | ||||||
|                     IsJuridicalPerson = vm.IsJuridicalPerson, |  | ||||||
|                     Prefix = vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.Prefix) ? null : vm.Prefix, |  | ||||||
|                     GivenName = vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.GivenName) ? null : vm.GivenName, |  | ||||||
|                     Name = vm.Name!, |  | ||||||
|                     Suffix = vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.Suffix) ? null : vm.Suffix, |  | ||||||
|                     ForTheAttentionOf = !vm.IsJuridicalPerson || string.IsNullOrWhiteSpace(vm.ForTheAttentionOf) ? null : vm.ForTheAttentionOf, |  | ||||||
|                     Birthday = string.IsNullOrEmpty(vm.Birthday) ? null : string.Join("-", vm.Birthday!.Split(".").Reverse()), |  | ||||||
|                     IsDeceased = vm.IsDeceased, |  | ||||||
|                     CountryNum = 40,  // Austria AT AUT |  | ||||||
|                     PostalDestId = vm.Ort!.Id, |  | ||||||
|                     Address = vm.Address!, |  | ||||||
|  |  | ||||||
|                     Iban = string.IsNullOrEmpty(vm.Iban) ? null : vm.Iban?.Replace(" ", ""), |                 UstIdNr = string.IsNullOrEmpty(vm.UstIdNr) ? null : vm.UstIdNr, | ||||||
|                     Bic = string.IsNullOrEmpty(vm.Bic) ? null : vm.Bic, |                 LfbisNr = string.IsNullOrEmpty(vm.LfbisNr) ? null : vm.LfbisNr, | ||||||
|  |                 IsBuchführend = vm.IsBuchführend, | ||||||
|  |                 IsOrganic = vm.IsOrganic, | ||||||
|  |  | ||||||
|                     UstIdNr = string.IsNullOrEmpty(vm.UstIdNr) ? null : vm.UstIdNr, |                 EntryDateString = string.IsNullOrEmpty(vm.EntryDate) ? null : string.Join("-", vm.EntryDate.Split(".").Reverse()), | ||||||
|                     LfbisNr = string.IsNullOrEmpty(vm.LfbisNr) ? null : vm.LfbisNr, |                 ExitDateString = string.IsNullOrEmpty(vm.ExitDate) ? null : string.Join("-", vm.ExitDate.Split(".").Reverse()), | ||||||
|                     IsBuchführend = vm.IsBuchführend, |                 BusinessShares = (int)vm.BusinessShares!, | ||||||
|                     IsOrganic = vm.IsOrganic, |                 AccountingNr = string.IsNullOrEmpty(vm.AccountingNr) ? null : vm.AccountingNr, | ||||||
|  |                 IsActive = vm.IsActive, | ||||||
|                     EntryDateString = string.IsNullOrEmpty(vm.EntryDate) ? null : string.Join("-", vm.EntryDate.Split(".").Reverse()), |                 IsVollLieferant = vm.IsVollLieferant, | ||||||
|                     ExitDateString = string.IsNullOrEmpty(vm.ExitDate) ? null : string.Join("-", vm.ExitDate.Split(".").Reverse()), |                 IsFunktionär = vm.IsFunktionär, | ||||||
|                     BusinessShares = (int)vm.BusinessShares!, |                 ZwstId = vm.Branch?.ZwstId, | ||||||
|                     AccountingNr = string.IsNullOrEmpty(vm.AccountingNr) ? null : vm.AccountingNr, |                 DefaultKgNr = vm.DefaultKg?.KgNr, | ||||||
|                     IsActive = vm.IsActive, |                 Comment = string.IsNullOrEmpty(vm.Comment) ? null : vm.Comment, | ||||||
|                     IsVollLieferant = vm.IsVollLieferant, |                 ContactViaPost = vm.ContactViaPost, | ||||||
|                     IsFunktionär = vm.IsFunktionär, |                 ContactViaEmail = vm.ContactViaEmail, | ||||||
|                     ZwstId = vm.Branch?.ZwstId, |             }; | ||||||
|                     DefaultKgNr = vm.DefaultKg?.KgNr, |  | ||||||
|                     Comment = string.IsNullOrEmpty(vm.Comment) ? null : vm.Comment, |  | ||||||
|                     ContactViaPost = vm.ContactViaPost, |  | ||||||
|                     ContactViaEmail = vm.ContactViaEmail, |  | ||||||
|                 }; |  | ||||||
|  |  | ||||||
|  |             await Task.Run(async () => { | ||||||
|  |                 using var ctx = new AppDbContext(); | ||||||
|                 if (oldMgNr != null) { |                 if (oldMgNr != null) { | ||||||
|                     ctx.Update(m); |                     ctx.Update(m); | ||||||
|                 } else { |                 } else { | ||||||
| @@ -670,7 +684,7 @@ namespace Elwig.Services { | |||||||
|                 if (newMgNr != m.MgNr) { |                 if (newMgNr != m.MgNr) { | ||||||
|                     await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}"); |                     await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}"); | ||||||
|                 } |                 } | ||||||
|             } |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|  |  | ||||||
| @@ -678,7 +692,8 @@ namespace Elwig.Services { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static async Task DeleteMember(int mgnr, bool deletePaymentData, bool deleteDeliveries, bool deleteAreaComs) { |         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))!; |                 var l = (await ctx.Members.FindAsync(mgnr))!; | ||||||
|                 if (deletePaymentData) { |                 if (deletePaymentData) { | ||||||
|                     ctx.RemoveRange(l.Credits); |                     ctx.RemoveRange(l.Credits); | ||||||
| @@ -691,7 +706,8 @@ namespace Elwig.Services { | |||||||
|                 } |                 } | ||||||
|                 ctx.Remove(l); |                 ctx.Remove(l); | ||||||
|                 await ctx.SaveChangesAsync(); |                 await ctx.SaveChangesAsync(); | ||||||
|             } |             }); | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -203,13 +203,9 @@ namespace Elwig.Windows { | |||||||
|                 $"Soll die Flächenbindung {a.GstNr} ({a.Area} m²) wirklich unwiderruflich gelöscht werden?", |                 $"Soll die Flächenbindung {a.GstNr} ({a.Area} m²) wirklich unwiderruflich gelöscht werden?", | ||||||
|                 "Flächenbindung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); |                 "Flächenbindung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); | ||||||
|             if (r == MessageBoxResult.OK) { |             if (r == MessageBoxResult.OK) { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 try { | ||||||
|                     using (var ctx = new AppDbContext()) { |                     await AreaComService.DeleteAreaCom(a.FbNr); | ||||||
|                         ctx.Remove(a); |  | ||||||
|                         await ctx.SaveChangesAsync(); |  | ||||||
|                     } |  | ||||||
|                     App.HintContextChange(); |  | ||||||
|                 } catch (Exception exc) { |                 } catch (Exception exc) { | ||||||
|                     var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message; |                     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; |                     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) { |         private async void AreaCommitmentSaveButton_Click(object? sender, RoutedEventArgs? evt) { | ||||||
|             AreaCommitmentSaveButton.IsEnabled = false; |             AreaCommitmentSaveButton.IsEnabled = false; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|  |  | ||||||
|             int fbnr; |             int fbnr; | ||||||
|             try { |             try { | ||||||
| @@ -237,9 +233,8 @@ 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, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); |                 MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|                 AreaCommitmentSaveButton.IsEnabled = true; |                 AreaCommitmentSaveButton.IsEnabled = true; | ||||||
|                 return; |  | ||||||
|             } finally { |  | ||||||
|                 Mouse.OverrideCursor = null; |                 Mouse.OverrideCursor = null; | ||||||
|  |                 return; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             IsEditing = false; |             IsEditing = false; | ||||||
| @@ -252,6 +247,7 @@ namespace Elwig.Windows { | |||||||
|             FinishInputFilling(); |             FinishInputFilling(); | ||||||
|             await RefreshList(); |             await RefreshList(); | ||||||
|             RefreshInputs(); |             RefreshInputs(); | ||||||
|  |             Mouse.OverrideCursor = null; | ||||||
|             ViewModel.SearchQuery = ""; |             ViewModel.SearchQuery = ""; | ||||||
|             ControlUtils.SelectItem(AreaCommitmentList, AreaCommitmentList.ItemsSource.Cast<AreaCom>().Where(a => a.FbNr == fbnr).FirstOrDefault()); |             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); |             var d = new NewSeasonDialog(s, currencies); | ||||||
|             if (d.ShowDialog() == true) { |             if (d.ShowDialog() == true) { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 try { | ||||||
|                     using var ctx = new AppDbContext(); |                     using var ctx = new AppDbContext(); | ||||||
|                     ctx.Add(new Season { |                     ctx.Add(new Season { | ||||||
| @@ -209,7 +209,7 @@ namespace Elwig.Windows { | |||||||
|                 $"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?", |                 $"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?", | ||||||
|                 "Saison löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); |                 "Saison löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); | ||||||
|             if (r == MessageBoxResult.OK) { |             if (r == MessageBoxResult.OK) { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 try { | ||||||
|                     using var ctx = new AppDbContext(); |                     using var ctx = new AppDbContext(); | ||||||
|                     ctx.Remove(s); |                     ctx.Remove(s); | ||||||
|   | |||||||
| @@ -318,8 +318,7 @@ namespace Elwig.Windows { | |||||||
|  |  | ||||||
|         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { |         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { | ||||||
|             SaveButton.IsEnabled = false; |             SaveButton.IsEnabled = false; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|  |  | ||||||
|             try { |             try { | ||||||
|                 await Save(); |                 await Save(); | ||||||
|             } catch (Exception exc) { |             } catch (Exception exc) { | ||||||
| @@ -327,9 +326,8 @@ 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, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); |                 MessageBox.Show(str, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|                 SaveButton.IsEnabled = true; |                 SaveButton.IsEnabled = true; | ||||||
|                 return; |  | ||||||
|             } finally { |  | ||||||
|                 Mouse.OverrideCursor = null; |                 Mouse.OverrideCursor = null; | ||||||
|  |                 return; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             IsEditing = false; |             IsEditing = false; | ||||||
| @@ -349,6 +347,7 @@ namespace Elwig.Windows { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             App.HintContextChange(); |             App.HintContextChange(); | ||||||
|  |             Mouse.OverrideCursor = null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void FillInputs(ClientParameters p, Season? s) { |         private void FillInputs(ClientParameters p, Season? s) { | ||||||
|   | |||||||
| @@ -719,7 +719,7 @@ namespace Elwig.Windows { | |||||||
|         private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { |         private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { | ||||||
|             FinishButton.IsEnabled = false; |             FinishButton.IsEnabled = false; | ||||||
|             NewDeliveryPartButton.IsEnabled = false; |             NewDeliveryPartButton.IsEnabled = false; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             DeliveryPartList.IsEnabled = false; |             DeliveryPartList.IsEnabled = false; | ||||||
|  |  | ||||||
|             DeliveryPart? p; |             DeliveryPart? p; | ||||||
| @@ -757,7 +757,7 @@ namespace Elwig.Windows { | |||||||
|         private async void FinishButton_Click(object sender, RoutedEventArgs evt) { |         private async void FinishButton_Click(object sender, RoutedEventArgs evt) { | ||||||
|             FinishButton.IsEnabled = false; |             FinishButton.IsEnabled = false; | ||||||
|             NewDeliveryPartButton.IsEnabled = false; |             NewDeliveryPartButton.IsEnabled = false; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             DeliveryPartList.IsEnabled = false; |             DeliveryPartList.IsEnabled = false; | ||||||
|  |  | ||||||
|             DeliveryPart? p; |             DeliveryPart? p; | ||||||
| @@ -888,7 +888,7 @@ namespace Elwig.Windows { | |||||||
|             if (res == null) |             if (res == null) | ||||||
|                 return; |                 return; | ||||||
|  |  | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             try { | ||||||
|                 var id = res.Value.Item1; |                 var id = res.Value.Item1; | ||||||
|                 var weights = res.Value.Item2; |                 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?", |                 $"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); |                 "Lieferung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); | ||||||
|             if (r == MessageBoxResult.OK) { |             if (r == MessageBoxResult.OK) { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 try { | ||||||
|                     await DeliveryService.DeleteDelivery(d.LsNr); |                     await DeliveryService.DeleteDelivery(d.LsNr); | ||||||
|                 } catch (Exception exc) { |                 } catch (Exception exc) { | ||||||
| @@ -979,7 +979,7 @@ namespace Elwig.Windows { | |||||||
|  |  | ||||||
|         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { |         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { | ||||||
|             SaveButton.IsEnabled = false; |             SaveButton.IsEnabled = false; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|  |  | ||||||
|             DeliveryPart? p; |             DeliveryPart? p; | ||||||
|             try { |             try { | ||||||
| @@ -996,9 +996,8 @@ 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, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); |                 MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|                 SaveButton.IsEnabled = true; |                 SaveButton.IsEnabled = true; | ||||||
|                 return; |  | ||||||
|             } finally { |  | ||||||
|                 Mouse.OverrideCursor = null; |                 Mouse.OverrideCursor = null; | ||||||
|  |                 return; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             IsEditing = false; |             IsEditing = false; | ||||||
| @@ -1015,6 +1014,7 @@ namespace Elwig.Windows { | |||||||
|             await RefreshDeliveryParts(); |             await RefreshDeliveryParts(); | ||||||
|             RefreshInputs(); |             RefreshInputs(); | ||||||
|  |  | ||||||
|  |             Mouse.OverrideCursor = null; | ||||||
|             DepreciateButton.IsEnabled = true; |             DepreciateButton.IsEnabled = true; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -62,7 +62,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void Menu_Help_Smtp_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Help_Smtp_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             try { | ||||||
|                 using var client = await Utils.GetSmtpClient(); |                 using var client = await Utils.GetSmtpClient(); | ||||||
|                 await client!.DisconnectAsync(true); |                 await client!.DisconnectAsync(true); | ||||||
| @@ -133,8 +133,10 @@ namespace Elwig.Windows { | |||||||
|                     Multiselect = true, |                     Multiselect = true, | ||||||
|                 }; |                 }; | ||||||
|                 if (d.ShowDialog() == true) { |                 if (d.ShowDialog() == true) { | ||||||
|                     Mouse.OverrideCursor = Cursors.AppStarting; |                     Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                     await ElwigData.Import(d.FileNames, ElwigData.ImportMode.Interactively); |                     await Task.Run(async () => { | ||||||
|  |                         await ElwigData.Import(d.FileNames, ElwigData.ImportMode.Interactively); | ||||||
|  |                     }); | ||||||
|                 } |                 } | ||||||
|             } catch (Exception exc) { |             } catch (Exception exc) { | ||||||
|                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); |                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
| @@ -145,77 +147,81 @@ namespace Elwig.Windows { | |||||||
|         private async void DownloadButton_Click(object sender, RoutedEventArgs evt) { |         private async void DownloadButton_Click(object sender, RoutedEventArgs evt) { | ||||||
|             if (App.Config.SyncUrl == null) |             if (App.Config.SyncUrl == null) | ||||||
|                 return; |                 return; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); |                 try { | ||||||
|                 var files = data |                     var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); | ||||||
|                     .Select(f => new { |                     var files = data | ||||||
|                         Name = f!["name"]!.AsValue().GetValue<string>(), |                         .Select(f => new { | ||||||
|                         Timestamp = f!["timestamp"] != null && DateTime.TryParseExact(f!["timestamp"]!.AsValue().GetValue<string>(), "yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt) ? dt : (DateTime?)null, |                             Name = f!["name"]!.AsValue().GetValue<string>(), | ||||||
|                         ZwstId = f!["meta"]?["zwstid"]?.AsValue().GetValue<string>() ?? f!["zwstid"]?.AsValue().GetValue<string>(), |                             Timestamp = f!["timestamp"] != null && DateTime.TryParseExact(f!["timestamp"]!.AsValue().GetValue<string>(), "yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt) ? dt : (DateTime?)null, | ||||||
|                         Device = f!["meta"]?["device"]!.AsValue().GetValue<string>(), |                             ZwstId = f!["meta"]?["zwstid"]?.AsValue().GetValue<string>() ?? f!["zwstid"]?.AsValue().GetValue<string>(), | ||||||
|                         Url = f!["url"]!.AsValue().GetValue<string>(), |                             Device = f!["meta"]?["device"]!.AsValue().GetValue<string>(), | ||||||
|                         Size = f!["size"]!.AsValue().GetValue<long>(), |                             Url = f!["url"]!.AsValue().GetValue<string>(), | ||||||
|                     }) |                             Size = f!["size"]!.AsValue().GetValue<long>(), | ||||||
|                     .Where(f => f.Timestamp >= new DateTime(Utils.CurrentLastSeason, 7, 1)) |                         }) | ||||||
|                     .ToList(); |                         .Where(f => f.Timestamp >= new DateTime(Utils.CurrentLastSeason, 7, 1)) | ||||||
|  |                         .ToList(); | ||||||
|  |  | ||||||
|                 var imported = await ElwigData.GetImportedFiles(); |                     var imported = await ElwigData.GetImportedFiles(); | ||||||
|                 var import = files |                     var import = files | ||||||
|                     .Where(f => f.Device != Environment.MachineName && !imported.Contains(f.Name)) |                         .Where(f => f.Device != Environment.MachineName && !imported.Contains(f.Name)) | ||||||
|                     .ToList(); |                         .ToList(); | ||||||
|                 var paths = new List<string>(); |                     var paths = new List<string>(); | ||||||
|                 using (var client = Utils.GetHttpClient(App.Config.SyncUsername, App.Config.SyncPassword)) { |                     using (var client = Utils.GetHttpClient(App.Config.SyncUsername, App.Config.SyncPassword)) { | ||||||
|                     foreach (var f in import) { |                         foreach (var f in import) { | ||||||
|                         var filename = Path.Combine(App.TempPath, f.Name); |                             var filename = Path.Combine(App.TempPath, f.Name); | ||||||
|                         using var stream = new FileStream(filename, FileMode.Create); |                             using var stream = new FileStream(filename, FileMode.Create); | ||||||
|                         await client.DownloadAsync(f.Url, stream); |                             await client.DownloadAsync(f.Url, stream); | ||||||
|                         paths.Add(filename); |                             paths.Add(filename); | ||||||
|  |                         } | ||||||
|                     } |                     } | ||||||
|  |                     await ElwigData.Import(paths, ElwigData.ImportMode.FromBranches); | ||||||
|  |                 } catch (HttpRequestException exc) { | ||||||
|  |                     MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Fehler", 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); | ||||||
|                 } |                 } | ||||||
|                 await ElwigData.Import(paths, ElwigData.ImportMode.FromBranches); |             }); | ||||||
|             } catch (HttpRequestException exc) { |  | ||||||
|                 MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Fehler", 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; |             Mouse.OverrideCursor = null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void UploadButton_Click(object sender, RoutedEventArgs evt) { |         private async void UploadButton_Click(object sender, RoutedEventArgs evt) { | ||||||
|             if (App.Config.SyncUrl == null) |             if (App.Config.SyncUrl == null) | ||||||
|                 return; |                 return; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"); |                 try { | ||||||
|                 using var ctx = new AppDbContext(); |                     var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"); | ||||||
|                 var deliveries = await ctx.Deliveries |                     using var ctx = new AppDbContext(); | ||||||
|                     .Where(d => d.Year == Utils.CurrentLastSeason && d.ZwstId == App.ZwstId) |                     var deliveries = await ctx.Deliveries | ||||||
|                     .Include(d => d.Parts) |                         .Where(d => d.Year == Utils.CurrentLastSeason && d.ZwstId == App.ZwstId) | ||||||
|                     .ThenInclude(p => p.PartModifiers) |                         .Include(d => d.Parts) | ||||||
|                     .OrderBy(d => d.DateString) |                         .ThenInclude(p => p.PartModifiers) | ||||||
|                     .ThenBy(d => d.TimeString) |                         .OrderBy(d => d.DateString) | ||||||
|                     .ThenBy(d => d.LsNr) |                         .ThenBy(d => d.TimeString) | ||||||
|                     .AsSplitQuery() |                         .ThenBy(d => d.LsNr) | ||||||
|                     .ToListAsync(); |                         .AsSplitQuery() | ||||||
|                 if (deliveries.Count == 0) { |                         .ToListAsync(); | ||||||
|                     MessageBox.Show("Es gibt keine Lieferungen, die hochgeladen werden können!", "Lieferungen hochladen", |                     if (deliveries.Count == 0) { | ||||||
|                         MessageBoxButton.OK, MessageBoxImage.Error); |                         MessageBox.Show("Es gibt keine Lieferungen, die hochgeladen werden können!", "Lieferungen hochladen", | ||||||
|                 } else { |                             MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|                     await ElwigData.Export(path, deliveries, [$"{Utils.CurrentLastSeason}", $"Zweigstelle {App.BranchName}"]); |                     } else { | ||||||
|                     await Utils.UploadExportData(path, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); |                         await ElwigData.Export(path, deliveries, [$"{Utils.CurrentLastSeason}", $"Zweigstelle {App.BranchName}"]); | ||||||
|                     MessageBox.Show($"Hochladen von {deliveries.Count:N0} Lieferungen erfolgreich!", "Lieferungen hochladen", |                         await Utils.UploadExportData(path, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); | ||||||
|                         MessageBoxButton.OK, MessageBoxImage.Information); |                         MessageBox.Show($"Hochladen von {deliveries.Count:N0} Lieferungen erfolgreich!", "Lieferungen hochladen", | ||||||
|  |                             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, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|                 } |                 } | ||||||
|             } 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, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error); |  | ||||||
|             } |  | ||||||
|             Mouse.OverrideCursor = null; |             Mouse.OverrideCursor = null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -270,24 +276,31 @@ namespace Elwig.Windows { | |||||||
|             AreaCommitmentsButton.IsEnabled = valid; |             AreaCommitmentsButton.IsEnabled = valid; | ||||||
|             BreakdownMemberVarietyButton.IsEnabled = valid; |             BreakdownMemberVarietyButton.IsEnabled = valid; | ||||||
|  |  | ||||||
|  |             SeasonStatMembersTotal.Text = "-"; | ||||||
|  |             SeasonStatMembersGeb.Text = "-"; | ||||||
|  |             SeasonStatWeightTotal.Text = "-"; | ||||||
|  |             SeasonStatWeightGeb.Text = "-"; | ||||||
|  |             SeasonStatWeightUngeb.Text = "-"; | ||||||
|  |             SeasonStatArea.Text = "-"; | ||||||
|             if (valid) { |             if (valid) { | ||||||
|                 var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value); |                 await Task.Run(async () => { | ||||||
|                 var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight); |                     var membersTotal = await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync(); | ||||||
|                 var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value); |                     var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value); | ||||||
|                 SeasonStatMembersTotal.Text = $"{await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync():N0}"; |                     var membersGeb = await areaComs.Select(c => c.Member).Distinct().CountAsync(); | ||||||
|                 SeasonStatMembersGeb.Text = $"{await areaComs.Select(c => c.Member).Distinct().CountAsync():N0}"; |                     var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight); | ||||||
|                 SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg"; |                     var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value); | ||||||
|                 SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg"; |                     var area = await areaComs.SumAsync(c => c.Area); | ||||||
|                 SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg"; |                     await App.MainDispatcher.BeginInvoke(() => { | ||||||
|                 SeasonStatArea.Text = $"{await areaComs.SumAsync(c => c.Area):N0} m²"; |                         if (year != SeasonInput.Value) return; | ||||||
|             } else { |                         SeasonStatMembersTotal.Text = $"{membersTotal:N0}"; | ||||||
|                 SeasonStatMembersTotal.Text = "-"; |                         SeasonStatMembersGeb.Text = $"{membersGeb:N0}"; | ||||||
|                 SeasonStatMembersGeb.Text = "-"; |                         SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg"; | ||||||
|                 SeasonStatWeightTotal.Text = "-"; |                         SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg"; | ||||||
|                 SeasonStatWeightGeb.Text = "-"; |                         SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg"; | ||||||
|                 SeasonStatWeightUngeb.Text = "-"; |                         SeasonStatArea.Text = $"{area:N0} m²"; | ||||||
|                 SeasonStatArea.Text = "-"; |                     }); | ||||||
|             } |                 }); | ||||||
|  |             }; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) { |         private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) { | ||||||
| @@ -315,22 +328,24 @@ namespace Elwig.Windows { | |||||||
|             if (d.ShowDialog() == false) |             if (d.ShowDialog() == false) | ||||||
|                 return; |                 return; | ||||||
|  |  | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var b = new Billing(year); |                 try { | ||||||
|                 await b.FinishSeason(); |                     var b = new Billing(year); | ||||||
|                 await b.CalculateBuckets(); |                     await b.FinishSeason(); | ||||||
|                 App.HintContextChange(); |                     await b.CalculateBuckets(); | ||||||
|  |                     App.HintContextChange(); | ||||||
|  |  | ||||||
|                 using var ctx = new AppDbContext(); |                     using var ctx = new AppDbContext(); | ||||||
|                 var tbl1 = await OverUnderDeliveryData.ForSeason(ctx.OverUnderDeliveryRows, year); |                     var tbl1 = await OverUnderDeliveryData.ForSeason(ctx.OverUnderDeliveryRows, year); | ||||||
|                 var tbl2 = await AreaComUnderDeliveryData.ForSeason(ctx.AreaComUnderDeliveryRows, year); |                     var tbl2 = await AreaComUnderDeliveryData.ForSeason(ctx.AreaComUnderDeliveryRows, year); | ||||||
|                 using var ods = new OdsFile(d.FileName); |                     using var ods = new OdsFile(d.FileName); | ||||||
|                 await ods.AddTable(tbl1); |                     await ods.AddTable(tbl1); | ||||||
|                 await ods.AddTable(tbl2); |                     await ods.AddTable(tbl2); | ||||||
|             } 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; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -346,24 +361,26 @@ namespace Elwig.Windows { | |||||||
|             if (d.ShowDialog() == false) |             if (d.ShowDialog() == false) | ||||||
|                 return; |                 return; | ||||||
|  |  | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var b = new Billing(year); |                 try { | ||||||
|                 await b.FinishSeason(); |                     var b = new Billing(year); | ||||||
|                 await b.CalculateBuckets(); |                     await b.FinishSeason(); | ||||||
|                 App.HintContextChange(); |                     await b.CalculateBuckets(); | ||||||
|  |                     App.HintContextChange(); | ||||||
|  |  | ||||||
|                 using var ctx = new AppDbContext(); |                     using var ctx = new AppDbContext(); | ||||||
|                 using var ods = new OdsFile(d.FileName); |                     using var ods = new OdsFile(d.FileName); | ||||||
|                 var tblTotal = await WeightBreakdownData.ForSeason(ctx.WeightBreakDownRows, year); |                     var tblTotal = await WeightBreakdownData.ForSeason(ctx.WeightBreakDownRows, year); | ||||||
|                 await ods.AddTable(tblTotal); |                     await ods.AddTable(tblTotal); | ||||||
|                 foreach (var branch in await ctx.Branches.OrderBy(b => b.Name).ToListAsync()) { |                     foreach (var branch in await ctx.Branches.OrderBy(b => b.Name).ToListAsync()) { | ||||||
|                     var tbl = await WeightBreakdownData.ForSeason(ctx.WeightBreakDownRows, year, branch); |                         var tbl = await WeightBreakdownData.ForSeason(ctx.WeightBreakDownRows, year, branch); | ||||||
|                     await ods.AddTable(tbl); |                         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; |             Mouse.OverrideCursor = null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -379,20 +396,22 @@ namespace Elwig.Windows { | |||||||
|             if (d.ShowDialog() == false) |             if (d.ShowDialog() == false) | ||||||
|                 return; |                 return; | ||||||
|  |  | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var b = new Billing(year); |                 try { | ||||||
|                 await b.FinishSeason(); |                     var b = new Billing(year); | ||||||
|                 await b.CalculateBuckets(); |                     await b.FinishSeason(); | ||||||
|                 App.HintContextChange(); |                     await b.CalculateBuckets(); | ||||||
|  |                     App.HintContextChange(); | ||||||
|  |  | ||||||
|                 using var ctx = new AppDbContext(); |                     using var ctx = new AppDbContext(); | ||||||
|                 var tbl = await MemberAreaComsData.ForSeason(ctx.MemberAreaComsRows, year); |                     var tbl = await MemberAreaComsData.ForSeason(ctx.MemberAreaComsRows, year); | ||||||
|                 using var ods = new OdsFile(d.FileName); |                     using var ods = new OdsFile(d.FileName); | ||||||
|                 await ods.AddTable(tbl); |                     await ods.AddTable(tbl); | ||||||
|             } 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; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -408,20 +427,22 @@ namespace Elwig.Windows { | |||||||
|             if (d.ShowDialog() == false) |             if (d.ShowDialog() == false) | ||||||
|                 return; |                 return; | ||||||
|  |  | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             await Task.Run(async () => { | ||||||
|                 var b = new Billing(year); |                 try { | ||||||
|                 await b.FinishSeason(); |                     var b = new Billing(year); | ||||||
|                 await b.CalculateBuckets(); |                     await b.FinishSeason(); | ||||||
|                 App.HintContextChange(); |                     await b.CalculateBuckets(); | ||||||
|  |                     App.HintContextChange(); | ||||||
|  |  | ||||||
|                 using var ctx = new AppDbContext(); |                     using var ctx = new AppDbContext(); | ||||||
|                 var tbl = await MemberDeliveryPerVarietyData.ForSeason(ctx.MemberDeliveryPerVariantRows, year); |                     var tbl = await MemberDeliveryPerVarietyData.ForSeason(ctx.MemberDeliveryPerVariantRows, year); | ||||||
|                 using var ods = new OdsFile(d.FileName); |                     using var ods = new OdsFile(d.FileName); | ||||||
|                 await ods.AddTable(tbl); |                     await ods.AddTable(tbl); | ||||||
|             } 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; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -389,7 +389,7 @@ namespace Elwig.Windows { | |||||||
|             } |             } | ||||||
|             var d = new DeleteMemberDialog(m.MgNr, m.AdministrativeName, areaComs, deliveries, credits); |             var d = new DeleteMemberDialog(m.MgNr, m.AdministrativeName, areaComs, deliveries, credits); | ||||||
|             if (d.ShowDialog() == true) { |             if (d.ShowDialog() == true) { | ||||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; |                 Mouse.OverrideCursor = Cursors.Wait; | ||||||
|                 try { |                 try { | ||||||
|                     await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs); |                     await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs); | ||||||
|                 } catch (Exception exc) { |                 } catch (Exception exc) { | ||||||
| @@ -408,7 +408,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { |         private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             SaveButton.IsEnabled = false; |             SaveButton.IsEnabled = false; | ||||||
|  |  | ||||||
|             int mgnr; |             int mgnr; | ||||||
| @@ -419,9 +419,8 @@ 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, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); |                 MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|                 SaveButton.IsEnabled = true; |                 SaveButton.IsEnabled = true; | ||||||
|                 return; |  | ||||||
|             } finally { |  | ||||||
|                 Mouse.OverrideCursor = null; |                 Mouse.OverrideCursor = null; | ||||||
|  |                 return; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             IsEditing = false; |             IsEditing = false; | ||||||
| @@ -436,6 +435,7 @@ namespace Elwig.Windows { | |||||||
|             await RefreshList(); |             await RefreshList(); | ||||||
|             RefreshInputs(); |             RefreshInputs(); | ||||||
|             ViewModel.SearchQuery = ""; |             ViewModel.SearchQuery = ""; | ||||||
|  |             Mouse.OverrideCursor = null; | ||||||
|             if (mgnr is int m) |             if (mgnr is int m) | ||||||
|                 FocusMember(m); |                 FocusMember(m); | ||||||
|         } |         } | ||||||
| @@ -491,15 +491,17 @@ namespace Elwig.Windows { | |||||||
|  |  | ||||||
|         private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) { | ||||||
|             if (ViewModel.SelectedMember is not Member m) return; |             if (ViewModel.SelectedMember is not Member m) return; | ||||||
|             Mouse.OverrideCursor = Cursors.AppStarting; |             Mouse.OverrideCursor = Cursors.Wait; | ||||||
|             try { |             try { | ||||||
|                 using var doc = new Letterhead(m); |                 await Task.Run(async () => { | ||||||
|                 await doc.Generate(); |                     using var doc = new Letterhead(m); | ||||||
|                 if (!App.Config.Debug) { |                     await doc.Generate(); | ||||||
|                     await doc.Print(); |                     if (!App.Config.Debug) { | ||||||
|                 } else { |                         await doc.Print(); | ||||||
|                     doc.Show(); |                     } else { | ||||||
|                 } |                         doc.Show(); | ||||||
|  |                     } | ||||||
|  |                 }); | ||||||
|             } catch (Exception exc) { |             } catch (Exception exc) { | ||||||
|                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); |                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||||
|             } |             } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user