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;
 | 
				
			||||||
 | 
					            MainDispatcher.Invoke(() => {
 | 
				
			||||||
                foreach (Window w in CurrentApp.Windows) {
 | 
					                foreach (Window w in CurrentApp.Windows) {
 | 
				
			||||||
                    if (w is not ContextWindow c) continue;
 | 
					                    if (w is not ContextWindow c) continue;
 | 
				
			||||||
                    MainDispatcher.BeginInvoke(c.HintContextChange);
 | 
					                    MainDispatcher.BeginInvoke(c.HintContextChange);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void OnAutoUpdateTimer(object? sender, EventArgs? evt) {
 | 
					        private void OnAutoUpdateTimer(object? sender, EventArgs? evt) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -496,9 +496,11 @@ namespace Elwig.Helpers {
 | 
				
			|||||||
            if (App.Config.Smtp == null)
 | 
					            if (App.Config.Smtp == null)
 | 
				
			||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var success = await Task.Run(async () => {
 | 
				
			||||||
                SmtpClient? client = null;
 | 
					                SmtpClient? client = null;
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					 | 
				
			||||||
                    client = await GetSmtpClient();
 | 
					                    client = await GetSmtpClient();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    using var msg = new MimeMessage();
 | 
					                    using var msg = new MimeMessage();
 | 
				
			||||||
@@ -521,9 +523,12 @@ namespace Elwig.Helpers {
 | 
				
			|||||||
                    if (client != null)
 | 
					                    if (client != null)
 | 
				
			||||||
                        await client.DisconnectAsync(true);
 | 
					                        await client.DisconnectAsync(true);
 | 
				
			||||||
                    client?.Dispose();
 | 
					                    client?.Dispose();
 | 
				
			||||||
                Mouse.OverrideCursor = null;
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Mouse.OverrideCursor = null;
 | 
				
			||||||
 | 
					            return success;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        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) {
 | 
				
			||||||
 | 
					            var p = await Task.Run(async () => {
 | 
				
			||||||
                DeliveryPart p;
 | 
					                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) {
 | 
				
			||||||
 | 
					            var n = await Task.Run(async () => {
 | 
				
			||||||
                Delivery n;
 | 
					                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) {
 | 
				
			||||||
 | 
					            var n = await Task.Run(async () => {
 | 
				
			||||||
                Delivery n;
 | 
					                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,13 +657,14 @@ 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;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    using var ctx = new AppDbContext();
 | 
					                    using var ctx = new AppDbContext();
 | 
				
			||||||
                    var d = (await ctx.Deliveries.FindAsync(year, did))!;
 | 
					                    var d = (await ctx.Deliveries.FindAsync(year, did))!;
 | 
				
			||||||
@@ -663,6 +673,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                } 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;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -707,7 +718,8 @@ 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 {
 | 
					                        try {
 | 
				
			||||||
                            var data = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
					                            var data = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
				
			||||||
                            using var ods = new OdsFile(d.FileName);
 | 
					                            using var ods = new OdsFile(d.FileName);
 | 
				
			||||||
@@ -715,6 +727,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                        } 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;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else if (mode == ExportMode.Export) {
 | 
					            } else if (mode == ExportMode.Export) {
 | 
				
			||||||
@@ -725,7 +738,8 @@ 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 {
 | 
					                        try {
 | 
				
			||||||
                            await ElwigData.Export(d.FileName, await query
 | 
					                            await ElwigData.Export(d.FileName, await query
 | 
				
			||||||
                                .Select(p => p.Delivery)
 | 
					                                .Select(p => p.Delivery)
 | 
				
			||||||
@@ -737,10 +751,12 @@ namespace Elwig.Services {
 | 
				
			|||||||
                        } 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;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
 | 
					            } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
 | 
				
			||||||
                Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					                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 filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip";
 | 
				
			||||||
                        var path = Path.Combine(App.TempPath, filename);
 | 
					                        var path = Path.Combine(App.TempPath, filename);
 | 
				
			||||||
@@ -767,9 +783,11 @@ namespace Elwig.Services {
 | 
				
			|||||||
                    } 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;
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					                Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					                await Task.Run(async () => {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        var data = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
					                        var data = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
				
			||||||
                        using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data);
 | 
					                        using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data);
 | 
				
			||||||
@@ -777,6 +795,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                    } 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;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -798,7 +817,8 @@ 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;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList);
 | 
					                    var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList);
 | 
				
			||||||
                    using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data);
 | 
					                    using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data);
 | 
				
			||||||
@@ -806,6 +826,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                } 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;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -829,7 +850,8 @@ 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;
 | 
				
			||||||
 | 
					                await Task.Run(async () => {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        using var ods = new OdsFile(d.FileName);
 | 
					                        using var ods = new OdsFile(d.FileName);
 | 
				
			||||||
                        var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames);
 | 
					                        var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames);
 | 
				
			||||||
@@ -837,6 +859,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                    } 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;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -875,7 +898,8 @@ 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;
 | 
				
			||||||
 | 
					                    await Task.Run(async () => {
 | 
				
			||||||
                        try {
 | 
					                        try {
 | 
				
			||||||
                            using var ods = new OdsFile(d.FileName);
 | 
					                            using var ods = new OdsFile(d.FileName);
 | 
				
			||||||
                            var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
					                            var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
				
			||||||
@@ -891,10 +915,12 @@ namespace Elwig.Services {
 | 
				
			|||||||
                        } 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;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					                Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					                await Task.Run(async () => {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        var data = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
					                        var data = await DeliveryJournalData.FromQuery(query, filterNames);
 | 
				
			||||||
                        using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data);
 | 
					                        using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data);
 | 
				
			||||||
@@ -902,6 +928,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                    } 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;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -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,7 +367,8 @@ 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;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    using var ctx = new AppDbContext();
 | 
					                    using var ctx = new AppDbContext();
 | 
				
			||||||
                    using var doc = new MemberDataSheet(m, ctx);
 | 
					                    using var doc = new MemberDataSheet(m, ctx);
 | 
				
			||||||
@@ -375,11 +376,13 @@ namespace Elwig.Services {
 | 
				
			|||||||
                } 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 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;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var b = new Billing(year);
 | 
					                    var b = new Billing(year);
 | 
				
			||||||
                    await b.FinishSeason();
 | 
					                    await b.FinishSeason();
 | 
				
			||||||
@@ -393,11 +396,13 @@ namespace Elwig.Services {
 | 
				
			|||||||
                } 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;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    using var ctx = new AppDbContext();
 | 
					                    using var ctx = new AppDbContext();
 | 
				
			||||||
                    var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!;
 | 
					                    var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!;
 | 
				
			||||||
@@ -412,6 +417,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                } 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,7 +470,8 @@ 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 {
 | 
					                        try {
 | 
				
			||||||
                            var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
 | 
					                            var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
 | 
				
			||||||
                            using var ods = new OdsFile(d.FileName);
 | 
					                            using var ods = new OdsFile(d.FileName);
 | 
				
			||||||
@@ -472,6 +479,7 @@ namespace Elwig.Services {
 | 
				
			|||||||
                        } 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;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else if (mode == ExportMode.Export) {
 | 
					            } else if (mode == ExportMode.Export) {
 | 
				
			||||||
@@ -482,7 +490,8 @@ 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 {
 | 
					                        try {
 | 
				
			||||||
                            var members = await query
 | 
					                            var members = await query
 | 
				
			||||||
                                .OrderBy(m => m.MgNr)
 | 
					                                .OrderBy(m => m.MgNr)
 | 
				
			||||||
@@ -499,10 +508,12 @@ namespace Elwig.Services {
 | 
				
			|||||||
                        } 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;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
 | 
					            } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
 | 
				
			||||||
                Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					                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 filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip";
 | 
				
			||||||
                        var path = Path.Combine(App.TempPath, filename);
 | 
					                        var path = Path.Combine(App.TempPath, filename);
 | 
				
			||||||
@@ -533,9 +544,11 @@ namespace Elwig.Services {
 | 
				
			|||||||
                    } 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;
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					                Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					                await Task.Run(async () => {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
 | 
					                        var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
 | 
				
			||||||
                        using var doc = new MemberList(string.Join(" / ", filterNames), data);
 | 
					                        using var doc = new MemberList(string.Join(" / ", filterNames), data);
 | 
				
			||||||
@@ -543,14 +556,13 @@ namespace Elwig.Services {
 | 
				
			|||||||
                    } 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<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!;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            using (var ctx = new AppDbContext()) {
 | 
					 | 
				
			||||||
            var m = new Member {
 | 
					            var m = new Member {
 | 
				
			||||||
                MgNr = oldMgNr ?? newMgNr,
 | 
					                MgNr = oldMgNr ?? newMgNr,
 | 
				
			||||||
                PredecessorMgNr = vm.PredecessorMgNr,
 | 
					                PredecessorMgNr = vm.PredecessorMgNr,
 | 
				
			||||||
@@ -588,6 +600,8 @@ namespace Elwig.Services {
 | 
				
			|||||||
                ContactViaEmail = vm.ContactViaEmail,
 | 
					                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 Task.Run(async () => {
 | 
				
			||||||
                        await ElwigData.Import(d.FileNames, ElwigData.ImportMode.Interactively);
 | 
					                        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,7 +147,8 @@ 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;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword);
 | 
					                    var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword);
 | 
				
			||||||
                    var files = data
 | 
					                    var files = data
 | 
				
			||||||
@@ -181,13 +184,15 @@ namespace Elwig.Windows {
 | 
				
			|||||||
                } 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;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        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;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip");
 | 
					                    var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip");
 | 
				
			||||||
                    using var ctx = new AppDbContext();
 | 
					                    using var ctx = new AppDbContext();
 | 
				
			||||||
@@ -216,6 +221,7 @@ namespace Elwig.Windows {
 | 
				
			|||||||
                } catch (Exception exc) {
 | 
					                } catch (Exception exc) {
 | 
				
			||||||
                    MessageBox.Show(exc.Message, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error);
 | 
					                    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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (valid) {
 | 
					 | 
				
			||||||
                var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value);
 | 
					 | 
				
			||||||
                var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight);
 | 
					 | 
				
			||||||
                var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value);
 | 
					 | 
				
			||||||
                SeasonStatMembersTotal.Text = $"{await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync():N0}";
 | 
					 | 
				
			||||||
                SeasonStatMembersGeb.Text = $"{await areaComs.Select(c => c.Member).Distinct().CountAsync():N0}";
 | 
					 | 
				
			||||||
                SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg";
 | 
					 | 
				
			||||||
                SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg";
 | 
					 | 
				
			||||||
                SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg";
 | 
					 | 
				
			||||||
                SeasonStatArea.Text = $"{await areaComs.SumAsync(c => c.Area):N0} m²";
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
            SeasonStatMembersTotal.Text = "-";
 | 
					            SeasonStatMembersTotal.Text = "-";
 | 
				
			||||||
            SeasonStatMembersGeb.Text = "-";
 | 
					            SeasonStatMembersGeb.Text = "-";
 | 
				
			||||||
            SeasonStatWeightTotal.Text = "-";
 | 
					            SeasonStatWeightTotal.Text = "-";
 | 
				
			||||||
            SeasonStatWeightGeb.Text = "-";
 | 
					            SeasonStatWeightGeb.Text = "-";
 | 
				
			||||||
            SeasonStatWeightUngeb.Text = "-";
 | 
					            SeasonStatWeightUngeb.Text = "-";
 | 
				
			||||||
            SeasonStatArea.Text = "-";
 | 
					            SeasonStatArea.Text = "-";
 | 
				
			||||||
            }
 | 
					            if (valid) {
 | 
				
			||||||
 | 
					                await Task.Run(async () => {
 | 
				
			||||||
 | 
					                    var membersTotal = await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync();
 | 
				
			||||||
 | 
					                    var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value);
 | 
				
			||||||
 | 
					                    var membersGeb = await areaComs.Select(c => c.Member).Distinct().CountAsync();
 | 
				
			||||||
 | 
					                    var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight);
 | 
				
			||||||
 | 
					                    var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value);
 | 
				
			||||||
 | 
					                    var area = await areaComs.SumAsync(c => c.Area);
 | 
				
			||||||
 | 
					                    await App.MainDispatcher.BeginInvoke(() => {
 | 
				
			||||||
 | 
					                        if (year != SeasonInput.Value) return;
 | 
				
			||||||
 | 
					                        SeasonStatMembersTotal.Text = $"{membersTotal:N0}";
 | 
				
			||||||
 | 
					                        SeasonStatMembersGeb.Text = $"{membersGeb:N0}";
 | 
				
			||||||
 | 
					                        SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg";
 | 
				
			||||||
 | 
					                        SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg";
 | 
				
			||||||
 | 
					                        SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg";
 | 
				
			||||||
 | 
					                        SeasonStatArea.Text = $"{area:N0} m²";
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) {
 | 
					        private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) {
 | 
				
			||||||
@@ -315,7 +328,8 @@ namespace Elwig.Windows {
 | 
				
			|||||||
            if (d.ShowDialog() == false)
 | 
					            if (d.ShowDialog() == false)
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					            Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var b = new Billing(year);
 | 
					                    var b = new Billing(year);
 | 
				
			||||||
                    await b.FinishSeason();
 | 
					                    await b.FinishSeason();
 | 
				
			||||||
@@ -331,6 +345,7 @@ namespace Elwig.Windows {
 | 
				
			|||||||
                } 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,7 +361,8 @@ namespace Elwig.Windows {
 | 
				
			|||||||
            if (d.ShowDialog() == false)
 | 
					            if (d.ShowDialog() == false)
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					            Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var b = new Billing(year);
 | 
					                    var b = new Billing(year);
 | 
				
			||||||
                    await b.FinishSeason();
 | 
					                    await b.FinishSeason();
 | 
				
			||||||
@@ -364,6 +380,7 @@ namespace Elwig.Windows {
 | 
				
			|||||||
                } 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;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -379,7 +396,8 @@ namespace Elwig.Windows {
 | 
				
			|||||||
            if (d.ShowDialog() == false)
 | 
					            if (d.ShowDialog() == false)
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					            Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var b = new Billing(year);
 | 
					                    var b = new Billing(year);
 | 
				
			||||||
                    await b.FinishSeason();
 | 
					                    await b.FinishSeason();
 | 
				
			||||||
@@ -393,6 +411,7 @@ namespace Elwig.Windows {
 | 
				
			|||||||
                } 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,7 +427,8 @@ namespace Elwig.Windows {
 | 
				
			|||||||
            if (d.ShowDialog() == false)
 | 
					            if (d.ShowDialog() == false)
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Mouse.OverrideCursor = Cursors.AppStarting;
 | 
					            Mouse.OverrideCursor = Cursors.Wait;
 | 
				
			||||||
 | 
					            await Task.Run(async () => {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    var b = new Billing(year);
 | 
					                    var b = new Billing(year);
 | 
				
			||||||
                    await b.FinishSeason();
 | 
					                    await b.FinishSeason();
 | 
				
			||||||
@@ -422,6 +442,7 @@ namespace Elwig.Windows {
 | 
				
			|||||||
                } 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,8 +491,9 @@ 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 {
 | 
				
			||||||
 | 
					                await Task.Run(async () => {
 | 
				
			||||||
                    using var doc = new Letterhead(m);
 | 
					                    using var doc = new Letterhead(m);
 | 
				
			||||||
                    await doc.Generate();
 | 
					                    await doc.Generate();
 | 
				
			||||||
                    if (!App.Config.Debug) {
 | 
					                    if (!App.Config.Debug) {
 | 
				
			||||||
@@ -500,6 +501,7 @@ namespace Elwig.Windows {
 | 
				
			|||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
                        doc.Show();
 | 
					                        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