[#57] MemberAdminWinodw: Use Task.Run()
This commit is contained in:
@ -197,10 +197,12 @@ namespace Elwig {
|
||||
var ch = CurrentLastWrite;
|
||||
if (ch > CurrentApp.LastChanged)
|
||||
CurrentApp.LastChanged = ch;
|
||||
MainDispatcher.Invoke(() => {
|
||||
foreach (Window w in CurrentApp.Windows) {
|
||||
if (w is not ContextWindow c) continue;
|
||||
MainDispatcher.BeginInvoke(c.HintContextChange);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void OnAutoUpdateTimer(object? sender, EventArgs? evt) {
|
||||
|
@ -499,9 +499,11 @@ namespace Elwig.Helpers {
|
||||
if (App.Config.Smtp == null)
|
||||
return false;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
|
||||
var success = await Task.Run(async () => {
|
||||
SmtpClient? client = null;
|
||||
try {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
client = await GetSmtpClient();
|
||||
|
||||
using var msg = new MimeMessage();
|
||||
@ -524,9 +526,12 @@ namespace Elwig.Helpers {
|
||||
if (client != null)
|
||||
await client.DisconnectAsync(true);
|
||||
client?.Dispose();
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
Mouse.OverrideCursor = null;
|
||||
return success;
|
||||
}
|
||||
|
||||
public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member, string, string)? emailData = null) {
|
||||
|
@ -367,7 +367,8 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task GenerateMemberDataSheet(Member m, ExportMode mode) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
using var doc = new MemberDataSheet(m, ctx);
|
||||
@ -375,11 +376,13 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
public static async Task GenerateDeliveryConfirmation(Member m, int year, ExportMode mode) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var b = new Billing(year);
|
||||
await b.FinishSeason();
|
||||
@ -393,11 +396,13 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
public static async Task GenerateCreditNote(Member m, int year, int avnr, ExportMode mode) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!;
|
||||
@ -412,6 +417,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -464,7 +470,8 @@ namespace Elwig.Services {
|
||||
Title = $"{MemberList.Name} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
@ -472,6 +479,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
} else if (mode == ExportMode.Export) {
|
||||
@ -482,7 +490,8 @@ namespace Elwig.Services {
|
||||
Title = $"{MemberList.Name} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var members = await query
|
||||
.OrderBy(m => m.MgNr)
|
||||
@ -499,10 +508,12 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
} else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip";
|
||||
var path = Path.Combine(App.TempPath, filename);
|
||||
@ -533,9 +544,11 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
} else {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
|
||||
using var doc = new MemberList(string.Join(" / ", filterNames), data);
|
||||
@ -543,14 +556,13 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<int> UpdateMember(this MemberAdminViewModel vm, int? oldMgNr) {
|
||||
var newMgNr = (int)vm.MgNr!;
|
||||
|
||||
using (var ctx = new AppDbContext()) {
|
||||
var m = new Member {
|
||||
MgNr = oldMgNr ?? newMgNr,
|
||||
PredecessorMgNr = vm.PredecessorMgNr,
|
||||
@ -588,6 +600,8 @@ namespace Elwig.Services {
|
||||
ContactViaEmail = vm.ContactViaEmail,
|
||||
};
|
||||
|
||||
await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
if (oldMgNr != null) {
|
||||
ctx.Update(m);
|
||||
} else {
|
||||
@ -670,7 +684,7 @@ namespace Elwig.Services {
|
||||
if (newMgNr != m.MgNr) {
|
||||
await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
|
||||
@ -678,7 +692,8 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task DeleteMember(int mgnr, bool deletePaymentData, bool deleteDeliveries, bool deleteAreaComs) {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
var l = (await ctx.Members.FindAsync(mgnr))!;
|
||||
if (deletePaymentData) {
|
||||
ctx.RemoveRange(l.Credits);
|
||||
@ -691,7 +706,8 @@ namespace Elwig.Services {
|
||||
}
|
||||
ctx.Remove(l);
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
}
|
||||
}
|
||||
|
@ -389,7 +389,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
var d = new DeleteMemberDialog(m.MgNr, m.AdministrativeName, areaComs, deliveries, credits);
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs);
|
||||
} catch (Exception exc) {
|
||||
@ -408,7 +408,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
SaveButton.IsEnabled = false;
|
||||
|
||||
int mgnr;
|
||||
@ -419,9 +419,8 @@ namespace Elwig.Windows {
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
SaveButton.IsEnabled = true;
|
||||
return;
|
||||
} finally {
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
}
|
||||
|
||||
IsEditing = false;
|
||||
@ -436,6 +435,7 @@ namespace Elwig.Windows {
|
||||
await RefreshList();
|
||||
RefreshInputs();
|
||||
ViewModel.SearchQuery = "";
|
||||
Mouse.OverrideCursor = null;
|
||||
if (mgnr is int m)
|
||||
FocusMember(m);
|
||||
}
|
||||
@ -491,8 +491,9 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) {
|
||||
if (ViewModel.SelectedMember is not Member m) return;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await Task.Run(async () => {
|
||||
using var doc = new Letterhead(m);
|
||||
await doc.Generate();
|
||||
if (!App.Config.Debug) {
|
||||
@ -500,6 +501,7 @@ namespace Elwig.Windows {
|
||||
} else {
|
||||
doc.Show();
|
||||
}
|
||||
});
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
Reference in New Issue
Block a user