Elwig: Add InteractionService to centrally manage MessageBox and SaveFileDialogs
Test / Run tests (push) Successful in 2m50s
Test / Run tests (push) Successful in 2m50s
This commit is contained in:
@@ -9,6 +9,7 @@ using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using Elwig.Services;
|
||||
|
||||
namespace Elwig.Windows {
|
||||
public abstract class AdministrationWindow : ContextWindow {
|
||||
@@ -109,9 +110,7 @@ namespace Elwig.Windows {
|
||||
|
||||
private void OnClosing(object? sender, CancelEventArgs evt) {
|
||||
if ((IsCreating || IsEditing) && HasChanged) {
|
||||
var r = MessageBox.Show("Soll das Fenster wirklich geschlossen werden?", "Schließen bestätigen",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r != MessageBoxResult.Yes) {
|
||||
if (!InteractionService.AskConfirmation("Schließen bestätigen", "Soll das Fenster wirklich geschlossen werden?")) {
|
||||
evt.Cancel = true;
|
||||
return;
|
||||
}
|
||||
@@ -390,7 +389,7 @@ namespace Elwig.Windows {
|
||||
|
||||
protected bool InputLostFocus(TextBox input, ValidationResult res, string? msg = null) {
|
||||
if (DoShowWarningWindows && !res.IsValid && !IsClosing && (IsEditing || IsCreating))
|
||||
MessageBox.Show(res.ErrorContent?.ToString(), msg ?? res.ErrorContent?.ToString(), MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
InteractionService.ShowWarning(msg ?? res.ErrorContent?.ToString() ?? "", res.ErrorContent?.ToString() ?? "");
|
||||
return res.IsValid;
|
||||
}
|
||||
|
||||
|
||||
@@ -246,9 +246,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Flächenbindung löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Flächenbindung löschen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -298,9 +296,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Flächenbindung aktualisieren", exc);
|
||||
SaveButton.IsEnabled = true;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Elwig.Dialogs;
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -184,9 +185,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
await ctx.SaveChangesAsync();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Saison anlegen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Saison anlegen", exc);
|
||||
}
|
||||
App.HintContextChange();
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -197,19 +196,14 @@ namespace Elwig.Windows {
|
||||
private async void SeasonRemoveButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (SeasonList.SelectedItem is not Season s)
|
||||
return;
|
||||
var r = MessageBox.Show(
|
||||
$"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?",
|
||||
"Saison löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (r == MessageBoxResult.OK) {
|
||||
if (InteractionService.AskContinue("Saison löschen", $"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?")) {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
ctx.Remove(s);
|
||||
await ctx.SaveChangesAsync();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Saison löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Saison löschen", exc);
|
||||
}
|
||||
App.HintContextChange();
|
||||
Mouse.OverrideCursor = null;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Linq;
|
||||
@@ -300,9 +301,7 @@ namespace Elwig.Windows {
|
||||
try {
|
||||
await Save();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Stammdaten aktualisieren", exc);
|
||||
SaveButton.IsEnabled = true;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
|
||||
@@ -10,6 +10,7 @@ using Elwig.Helpers.Billing;
|
||||
using Elwig.Models.Entities;
|
||||
using ScottPlot.Plottables;
|
||||
using ScottPlot;
|
||||
using Elwig.Services;
|
||||
|
||||
namespace Elwig.Windows {
|
||||
public partial class ChartWindow : ContextWindow {
|
||||
@@ -82,9 +83,7 @@ namespace Elwig.Windows {
|
||||
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
|
||||
if (HasChanged) {
|
||||
var r = MessageBox.Show("Soll das Fenster wirklich geschlossen werden? Nicht gespeicherte Änderungen werden NICHT übernommen!", "Schließen bestätigen",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r != MessageBoxResult.Yes) {
|
||||
if (!InteractionService.AskConfirmation("Schließen bestätigen", "Soll das Fenster wirklich geschlossen werden? Nicht gespeicherte Änderungen werden NICHT übernommen!")) {
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
@@ -110,18 +109,17 @@ namespace Elwig.Windows {
|
||||
..paymentEntries,
|
||||
..await data.GetQualityGraphEntries(ctx, Season, paymentEntries.Any() ? paymentEntries.Max(e => e.Id) : 0)
|
||||
];
|
||||
} catch (KeyNotFoundException ex) {
|
||||
var key = ex.Message.Split('\'')[1].Split('\'')[0];
|
||||
MessageBox.Show($"Fehler beim Laden der Auszahlungsvariante:\n\n" +
|
||||
$"Mit unbekanntem Attribut '{key}' kann nicht umgegangen werden.", "Fehler",
|
||||
MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
} catch (KeyNotFoundException exc) {
|
||||
var key = exc.Message.Split('\'')[1].Split('\'')[0];
|
||||
InteractionService.ShowError("Fehler",
|
||||
$"Fehler beim Laden der Auszahlungsvariante:\n\n" +
|
||||
$"Mit unbekanntem Attribut '{key}' kann nicht umgegangen werden.");
|
||||
} catch (ArgumentException) {
|
||||
MessageBox.Show($"Fehler beim Laden der Auszahlungsvariante:\n\n" +
|
||||
$"Die Daten der Auszahlungsvariante entsprechen nicht dem benötigtem Format.", "Fehler",
|
||||
MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
} catch (Exception ex) {
|
||||
MessageBox.Show("Fehler beim Laden der Auszahlungsvariante:\n\n" + ex.Message, "Fehler",
|
||||
MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowError("Fehler",
|
||||
$"Fehler beim Laden der Auszahlungsvariante:\n\n" +
|
||||
$"Die Daten der Auszahlungsvariante entsprechen nicht dem benötigtem Format.");
|
||||
} catch (Exception exc) {
|
||||
InteractionService.ShowException("Fehler", "Fehler beim Laden der Auszahlungsvariante", exc);
|
||||
}
|
||||
Vaributes = await Utils.GetVaributeList(ctx, Year);
|
||||
GraphEntries.ForEach(e => {
|
||||
@@ -622,11 +620,7 @@ namespace Elwig.Windows {
|
||||
private void DeleteButton_Click(object sender, RoutedEventArgs e) {
|
||||
if (SelectedGraphEntry == null) return;
|
||||
|
||||
var r = MessageBox.Show(
|
||||
$"Soll die Kurve {SelectedGraphEntry.Id} (verwendet in folgenden Verträgen: {SelectedGraphEntry.VaributeStringSimple}) wirklich gelöscht werden?",
|
||||
"Kurve löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
|
||||
if (r == MessageBoxResult.Yes) {
|
||||
if (InteractionService.AskConfirmation("Kurve löschen", $"Soll die Kurve {SelectedGraphEntry.Id} (verwendet in folgenden Verträgen: {SelectedGraphEntry.VaributeStringSimple}) wirklich gelöscht werden?")) {
|
||||
GraphEntries.Remove(SelectedGraphEntry);
|
||||
SetHasChanged();
|
||||
GraphList.Items.Refresh();
|
||||
@@ -651,9 +645,7 @@ namespace Elwig.Windows {
|
||||
});
|
||||
} catch (Exception exc) {
|
||||
Mouse.OverrideCursor = null;
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank gespeichert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Auszahlungsvariante speichern", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Auszahlungsvariante speichern", exc);
|
||||
SaveButton.IsEnabled = true;
|
||||
return;
|
||||
}
|
||||
@@ -664,9 +656,9 @@ namespace Elwig.Windows {
|
||||
await b.Calculate(false);
|
||||
});
|
||||
} catch (KeyNotFoundException exc) {
|
||||
MessageBox.Show(exc.Message, "Noch nicht alle Preise festgelegt", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
InteractionService.ShowInformation("Noch nicht alle Preise festgelegt", exc.Message);
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Berechnungsfehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Berechnungsfehler", exc);
|
||||
}
|
||||
|
||||
LockContext = false;
|
||||
@@ -773,9 +765,7 @@ namespace Elwig.Windows {
|
||||
if (ge != SelectedGraphEntry && ge.Abgewertet == SelectedGraphEntry?.Abgewertet) {
|
||||
var toRemove = ge.Vaributes.Where(c => c.Listing.Equals(varibute)).ToList();
|
||||
if (toRemove.Count == 0) continue;
|
||||
var r = MessageBox.Show($"Achtung: {string.Join(", ", toRemove)} ist bereits in Kurve {ge.Id} in Verwendung!\nSoll die Zuweisung dort entfernt werden?", "Entfernen bestätigen",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r != MessageBoxResult.Yes) {
|
||||
if (!InteractionService.AskConfirmation("Entfernen bestätigen", $"Achtung: {string.Join(", ", toRemove)} ist bereits in Kurve {ge.Id} in Verwendung!\nSoll die Zuweisung dort entfernt werden?")) {
|
||||
return false;
|
||||
}
|
||||
ge.Vaributes.RemoveAll(c => c.Listing.Equals(varibute));
|
||||
|
||||
@@ -6,7 +6,6 @@ using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using Elwig.ViewModels;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -137,8 +136,9 @@ namespace Elwig.Windows {
|
||||
if (ViewModel.IsReceipt) {
|
||||
NewDeliveryButton_Click(null, null);
|
||||
if (await ctx.FetchSeasons(Utils.CurrentYear).SingleOrDefaultAsync() == null) {
|
||||
MessageBox.Show("Die Saison für das aktuelle Jahr wurde noch nicht erstellt. Neue Lieferungen können nicht abgespeichert werden.\n\n(Stammdaten -> Saisons -> Neu anlegen...)",
|
||||
"Saison noch nicht erstellt", MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
InteractionService.ShowWarning("Saison noch nicht erstellt",
|
||||
"Die Saison für das aktuelle Jahr wurde noch nicht erstellt. Neue Lieferungen können nicht abgespeichert werden.\n\n" +
|
||||
"(Stammdaten -> Saisons -> Neu anlegen...)");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -164,9 +164,7 @@ namespace Elwig.Windows {
|
||||
private async void Menu_DeliveryNote_Email_Click(object sender, RoutedEventArgs evt) {
|
||||
if (DeliveryList.SelectedItem is not Delivery d)
|
||||
return;
|
||||
var res = MessageBox.Show("Soll eine E-Mail verschickt werden?", "Lieferschein verschicken",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
|
||||
if (res != MessageBoxResult.Yes)
|
||||
if (!InteractionService.AskQuestion("Lieferschein verschicken", "Soll eine E-Mail verschickt werden?", true))
|
||||
return;
|
||||
await DeliveryService.GenerateDeliveryNote(d.Year, d.DId, ExportMode.Email);
|
||||
}
|
||||
@@ -174,16 +172,11 @@ namespace Elwig.Windows {
|
||||
private async void Menu_Bki_SaveList_Click(object sender, RoutedEventArgs evt) {
|
||||
if (sender is not MenuItem m) return;
|
||||
var year = int.Parse(m.Header.ToString()?.Split(" ")[^1] ?? Utils.CurrentLastSeason.ToString());
|
||||
var d = new SaveFileDialog() {
|
||||
FileName = $"{App.Client.NameToken}-Traubentransportscheinliste-{year}.{Bki.FileExtension}",
|
||||
DefaultExt = Bki.FileExtension,
|
||||
Filter = "CSV-Datei (*.csv)|*.csv",
|
||||
Title = $"Traubentransportscheinliste (BKI) speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
var filename = InteractionService.SaveFile("Traubentransportscheinliste (BKI)", $"{App.Client.NameToken}-Traubentransportscheinliste-{year}", Bki.FileExtension);
|
||||
if (filename != null) {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
using var file = new Bki(d.FileName);
|
||||
using var file = new Bki(filename);
|
||||
await file.ExportAsync(year);
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -641,11 +634,10 @@ namespace Elwig.Windows {
|
||||
try {
|
||||
var res = await s.Weigh();
|
||||
OnWeighingResult(s, res);
|
||||
} catch (Exception ex) {
|
||||
ViewModel.LastScaleError = ex.Message.Split(": ")[^1];
|
||||
} catch (Exception exc) {
|
||||
ViewModel.LastScaleError = exc.Message.Split(": ")[^1];
|
||||
OnWeighingResult(s, new());
|
||||
MessageBox.Show($"Beim Wiegen ist ein Fehler aufgetreten:\n\n{ex.Message}", "Waagenfehler",
|
||||
MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Waagenfehler", "Beim Wiegen ist ein Fehler aufgetreten", exc);
|
||||
}
|
||||
ViewModel.ManualWeighingReason = null;
|
||||
ManualWeighingInput.IsChecked = false;
|
||||
@@ -801,9 +793,7 @@ namespace Elwig.Windows {
|
||||
);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Lieferung aktualisieren", exc);
|
||||
FinishButton.IsEnabled = true;
|
||||
SaveButton.IsEnabled = true;
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -839,9 +829,7 @@ namespace Elwig.Windows {
|
||||
);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Lieferung aktualisieren", exc);
|
||||
FinishButton.IsEnabled = true;
|
||||
SaveButton.IsEnabled = true;
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -871,9 +859,8 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void CancelCreatingButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (IsCreating && HasChanged) {
|
||||
var r = MessageBox.Show("Soll der Vorgang wirklich abgebrochen werden?", "Abbrechen bestätigen",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r != MessageBoxResult.Yes) return;
|
||||
if (!InteractionService.AskConfirmation("Abbrechen bestätigen", "Soll der Vorgang wirklich abgebrochen werden?"))
|
||||
return;
|
||||
}
|
||||
|
||||
using var ctx = new AppDbContext();
|
||||
@@ -954,9 +941,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Lieferung aktualisieren", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -1003,18 +988,13 @@ namespace Elwig.Windows {
|
||||
if (DeliveryList.SelectedItem is not Delivery d)
|
||||
return;
|
||||
|
||||
var r = MessageBox.Show(
|
||||
$"Soll die Lieferung {d.LsNr} ({d.Member.AdministrativeName}, MgNr. {d.Member.MgNr}) wirklich unwiderruflich gelöscht werden?",
|
||||
"Lieferung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (r == MessageBoxResult.OK) {
|
||||
if (InteractionService.AskContinue("Lieferung löschen", $"Soll die Lieferung {d.LsNr} ({d.Member.AdministrativeName}, MgNr. {d.Member.MgNr}) wirklich unwiderruflich gelöscht werden?")) {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await DeliveryService.DeleteDelivery(d.LsNr);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Lieferung löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Lieferung löschen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -1042,9 +1022,7 @@ namespace Elwig.Windows {
|
||||
);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Lieferung aktualisieren", exc);
|
||||
SaveButton.IsEnabled = true;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
@@ -1281,8 +1259,7 @@ namespace Elwig.Windows {
|
||||
UpdateWineQualityLevels();
|
||||
if (!ViewModel.WineVar?.IsQuw ?? false) {
|
||||
App.MainDispatcher.BeginInvoke(() => {
|
||||
MessageBox.Show("Die eingegebene Sorte darf nicht als Qualitätswein\nübernommen werden!", "Kein Qualitätswein",
|
||||
MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
InteractionService.ShowWarning("Kein Qualitätswein", "Die eingegebene Sorte darf nicht als Qualitätswein\nübernommen werden!");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -309,10 +309,7 @@ namespace Elwig.Windows {
|
||||
private async void DeleteDeliveryAncmtButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
if (ViewModel.SelectedDeliveryAncmt is not DeliveryAncmt a)
|
||||
return;
|
||||
var r = MessageBox.Show(
|
||||
$"Soll die Anmeldung wirklich unwiderruflich gelöscht werden?",
|
||||
"Anmeldung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (r == MessageBoxResult.OK) {
|
||||
if (InteractionService.AskContinue("Anmeldung löschen", "Soll die Anmeldung wirklich unwiderruflich gelöscht werden?")) {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await Task.Run(async () => {
|
||||
@@ -322,9 +319,7 @@ namespace Elwig.Windows {
|
||||
});
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Anmeldung löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Anmeldung löschen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -347,9 +342,7 @@ namespace Elwig.Windows {
|
||||
(year, dsnr, mgnr, sortid) = await ViewModel.UpdateDeliveryAncmt(s?.Year, s?.DsNr, s?.MgNr, s?.SortId, s?.Type);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Anmeldung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Anmeldung aktualisieren", exc);
|
||||
SaveButton.IsEnabled = true;
|
||||
return;
|
||||
} finally {
|
||||
|
||||
@@ -177,10 +177,7 @@ namespace Elwig.Windows {
|
||||
private async void DeleteDeliveryScheduleButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
if (ViewModel.SelectedDeliverySchedule is not DeliverySchedule s)
|
||||
return;
|
||||
var r = MessageBox.Show(
|
||||
$"Soll der Leseplan \"{s.Description}\" vom {s.Date:dd.MM.yyyy} wirklich unwiderruflich gelöscht werden?",
|
||||
"Leseplan löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (r == MessageBoxResult.OK) {
|
||||
if (InteractionService.AskContinue("Leseplan löschen", $"Soll der Leseplan \"{s.Description}\" vom {s.Date:dd.MM.yyyy} wirklich unwiderruflich gelöscht werden?")) {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await Task.Run(async () => {
|
||||
@@ -190,9 +187,7 @@ namespace Elwig.Windows {
|
||||
});
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Leseplan löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Leseplan löschen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -212,9 +207,7 @@ namespace Elwig.Windows {
|
||||
await ViewModel.UpdateDeliverySchedule(ViewModel.SelectedDeliverySchedule?.Year, ViewModel.SelectedDeliverySchedule?.DsNr);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Leseplan aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Leseplan aktualisieren", exc);
|
||||
SaveButton.IsEnabled = true;
|
||||
return;
|
||||
} finally {
|
||||
|
||||
@@ -3,6 +3,7 @@ using Elwig.Helpers;
|
||||
using Elwig.Helpers.Billing;
|
||||
using Elwig.Models.Dtos;
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using MailKit.Net.Smtp;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Win32;
|
||||
@@ -690,7 +691,7 @@ namespace Elwig.Windows {
|
||||
PrintButton.IsEnabled = PrintDocument != null && !hasPreviewDocs;
|
||||
EmailButton.IsEnabled = EmailDocuments != null && !hasPreviewDocs && App.Config.Smtp != null;
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
} finally {
|
||||
UnlockInputs();
|
||||
GenerateButton.IsEnabled = true;
|
||||
@@ -774,7 +775,7 @@ namespace Elwig.Windows {
|
||||
throw new NotImplementedException("Invalid DocType");
|
||||
}
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
return [];
|
||||
} finally {
|
||||
App.MainDispatcher.Invoke(() => {
|
||||
@@ -787,9 +788,9 @@ namespace Elwig.Windows {
|
||||
|
||||
var hasPreviewDocs = memberDocs.Any(m => m.Docs.Any(d => d.Doc.IsPreview));
|
||||
if (hasPreviewDocs) {
|
||||
var res = MessageBox.Show("Einige der ausgewählten Dokumente sind nur als vorläufig zu betrachten und können daher nicht verschickt/ausgedruckt werden!\n\nDies könnte an einer noch nicht festgesetzen Auszahlungsvariante liegen oder daran, dass nicht alle Adressaten/Empfänger eine Traubengutschrift erhalten\n(\"Empfänger von Gutschriften\").\n\nSoll mit dem Generieren fortgefahren werden?",
|
||||
"Vorläufige Dokumente", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK) {
|
||||
if (!InteractionService.AskContinue("Vorläufige Dokumente",
|
||||
"Einige der ausgewählten Dokumente sind nur als vorläufig zu betrachten und können daher nicht verschickt/ausgedruckt werden!\n\n" +
|
||||
"Dies könnte an einer noch nicht festgesetzen Auszahlungsvariante liegen oder daran, dass nicht alle Adressaten/Empfänger eine Traubengutschrift erhalten\n(\"Empfänger von Gutschriften\").\n\nSoll mit dem Generieren fortgefahren werden?")) {
|
||||
throw new OperationCanceledException("Dokumentenerzeugung abgebrochen!");
|
||||
}
|
||||
}
|
||||
@@ -892,9 +893,7 @@ namespace Elwig.Windows {
|
||||
GenerateButton.IsEnabled = false;
|
||||
LockInputs();
|
||||
|
||||
var res = MessageBox.Show($"Sollen {PrintDocument.Pages} Blätter ({PrintDocument.TotalPages} Seiten) gedruckt werden?",
|
||||
"Rundschreiben drucken", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
|
||||
if (res == MessageBoxResult.Yes) {
|
||||
if (InteractionService.AskQuestion("Rundschreiben drucken", $"Sollen {PrintDocument.Pages} Blätter ({PrintDocument.TotalPages} Seiten) gedruckt werden?", false)) {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
if (App.Config.Debug) {
|
||||
@@ -932,11 +931,8 @@ namespace Elwig.Windows {
|
||||
client = await Task.Run(Utils.GetSmtpClient);
|
||||
Mouse.OverrideCursor = null;
|
||||
|
||||
var res = MessageBox.Show($"Sollen {EmailDocuments.Count:N0} E-Mails verschickt werden?",
|
||||
"Rundschreiben verschicken", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
|
||||
if (res != MessageBoxResult.Yes) {
|
||||
if (!InteractionService.AskQuestion("Rundschreiben verschicken", $"Sollen {EmailDocuments.Count:N0} E-Mails verschickt werden?", false))
|
||||
return;
|
||||
}
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
var subject = EmailSubjectInput.Text;
|
||||
@@ -965,10 +961,9 @@ namespace Elwig.Windows {
|
||||
}
|
||||
});
|
||||
|
||||
MessageBox.Show("Erfolgreich alle E-Mails verschickt!\n\nEs kann einige Minuten dauern, bis die E-Mails in den Posteingängen der Empfänger aufscheinen.", "Rundschreiben verschicken",
|
||||
MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
InteractionService.ShowInformation("Rundschreiben verschicken", "Erfolgreich alle E-Mails verschickt!\n\nEs kann einige Minuten dauern, bis die E-Mails in den Posteingängen der Empfänger aufscheinen.");
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
} finally {
|
||||
if (client != null)
|
||||
await client.DisconnectAsync(true);
|
||||
|
||||
@@ -59,9 +59,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
Thread.Sleep(100);
|
||||
if (App.NumWindows > 1 && !App.Current.Windows.Cast<Window>().Any(w => ((w as AdministrationWindow)?.IsEditing ?? false) || ((w as AdministrationWindow)?.IsCreating ?? false))) {
|
||||
var res = MessageBox.Show("Es sind noch weitere Fenster geöffnet.\nSollen alle Fenster geschlossen werden?",
|
||||
"Elwig beenden", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (res != MessageBoxResult.Yes) {
|
||||
if (!InteractionService.AskConfirmation("Elwig beenden", "Es sind noch weitere Fenster geöffnet.\nSollen alle Fenster geschlossen werden?")) {
|
||||
evt.Cancel = true;
|
||||
} else {
|
||||
Application.Current.Shutdown();
|
||||
@@ -84,9 +82,9 @@ namespace Elwig.Windows {
|
||||
try {
|
||||
using var client = await Utils.GetSmtpClient();
|
||||
await client!.DisconnectAsync(true);
|
||||
MessageBox.Show("E-Mail-Einstellungen erfolgreich überprüft!", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
InteractionService.ShowInformation("Erfolg", "E -Mail-Einstellungen erfolgreich überprüft!");
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -115,17 +113,17 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void Menu_Scale_SetDateTime_Click(object sender, RoutedEventArgs evt) {
|
||||
if (App.CommandScales.Count == 0) {
|
||||
MessageBox.Show("Es sind keine geeigneten Waagen verfügbar!", "Datum und Uhrzeit setzen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowError("Datum und Uhrzeit setzen", "Es sind keine geeigneten Waagen verfügbar!");
|
||||
return;
|
||||
}
|
||||
foreach (var s in App.CommandScales) {
|
||||
try {
|
||||
await s.SetDateAndTime(DateTime.Now);
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
}
|
||||
MessageBox.Show("Datum und Uhrzeit auf entsprechenden Waagen gesetzt!", "Datum und Uhrzeit setzen", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
InteractionService.ShowInformation("Datum und Uhrzeit setzen", "Datum und Uhrzeit auf entsprechenden Waagen gesetzt!");
|
||||
}
|
||||
|
||||
private void Menu_Database_Query_Click(object sender, RoutedEventArgs evt) {
|
||||
@@ -157,29 +155,23 @@ namespace Elwig.Windows {
|
||||
});
|
||||
}
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
private async void Menu_Database_Backup_Click(object sender, RoutedEventArgs evt) {
|
||||
try {
|
||||
var d = new SaveFileDialog() {
|
||||
Title = "Datenbank sichern - Elwig",
|
||||
FileName = $"database_{Utils.Today:yyyy-MM-dd}.sql.zip",
|
||||
DefaultExt = "sql.zip",
|
||||
Filter = "Komprimierte SQL-Datei (*.sql.zip)|*.sql.zip",
|
||||
AddExtension = false,
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
if (!d.FileName.EndsWith(".sql.zip")) d.FileName += ".sql.zip";
|
||||
var filename = InteractionService.SaveFile("Datenbank-Sicherung", $"database_{Utils.Today:yyyy-MM-dd}", "sql.zip");
|
||||
if (filename != null) {
|
||||
if (!filename.EndsWith(".sql.zip")) filename += ".sql.zip";
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
await Database.ExportSql(d.FileName, true);
|
||||
await Database.ExportSql(filename, true);
|
||||
});
|
||||
}
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -192,16 +184,13 @@ namespace Elwig.Windows {
|
||||
Filter = "SQLite-Datenbank (*.sqlite3, *.sqlite3.zip, *.sql, *.sql.zip)|*.sqlite3;*.sqlite3.zip;*.sql;*.sql.zip",
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
var res = MessageBox.Show("Soll die Datenbank wirklich unwiederruflich durch die wiederhergestellte Version ersetzt werden?", "Datenbank wiederherstellen",
|
||||
MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK)
|
||||
if (!InteractionService.AskContinue("Datenbank wiederherstellen", "Soll die Datenbank wirklich unwiederruflich durch die wiederhergestellte Version ersetzt werden?"))
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await App.ReplaceDatabase(d.FileName);
|
||||
}
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -266,15 +255,15 @@ namespace Elwig.Windows {
|
||||
.ToList();
|
||||
|
||||
if (files.Count == 0) {
|
||||
MessageBox.Show("Die Datenbank wurde noch nicht vom Hauptgerät hochgeladen!", "Datenbank herunterladen",
|
||||
MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowError("Datenbank herunterladen", "Die Datenbank wurde noch nicht vom Hauptgerät hochgeladen!");
|
||||
return;
|
||||
}
|
||||
var file = files[0];
|
||||
|
||||
var res = MessageBox.Show($"Es wurde eine komprimierte Datenbank (ca. {file.Size / 1024 / 1024} MB) vom {file.Timestamp:dd.MM.yyyy, HH:mm} gefunden.\n\nWollen Sie wirklich die aktuelle Datenbank unwiederruflich\nlöschen und durch die gefundene ersetzen?\n\nDas kann zu Datenverlust führen!", "Datenbank herunterladen",
|
||||
MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK)
|
||||
if (!InteractionService.AskContinue("Datenbank herunterladen",
|
||||
$"Es wurde eine komprimierte Datenbank (ca. {file.Size / 1024 / 1024} MB) vom {file.Timestamp:dd.MM.yyyy, HH:mm} gefunden.\n\n" +
|
||||
$"Wollen Sie wirklich die aktuelle Datenbank unwiederruflich\nlöschen und durch die gefundene ersetzen?\n\n" +
|
||||
$"Das kann zu Datenverlust führen!"))
|
||||
return;
|
||||
|
||||
var filename = Path.Combine(App.TempPath, file.Name);
|
||||
@@ -283,20 +272,21 @@ namespace Elwig.Windows {
|
||||
await client.DownloadAsync(file.Url, stream);
|
||||
}
|
||||
|
||||
res = MessageBox.Show("Die Datenbank wurde erfolgreich heruntergeladen!\n\nSoll die Datenbank wirklich unwiederruflich ersetzt werden?\n\nWenn Sie unsicher sind sprechen Sie sich mit dem Benutzer des Hauptgerätes ab!", "Datenbank herunterladen",
|
||||
MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK)
|
||||
if (!InteractionService.AskContinue("Datenbank herunterladen",
|
||||
"Die Datenbank wurde erfolgreich heruntergeladen!\n\n" +
|
||||
"Soll die Datenbank wirklich unwiederruflich ersetzt werden?\n\n" +
|
||||
"Wenn Sie unsicher sind sprechen Sie sich mit dem Benutzer des Hauptgerätes ab!"))
|
||||
return;
|
||||
|
||||
await App.MainDispatcher.BeginInvoke(async () => {
|
||||
await App.ReplaceDatabase(filename);
|
||||
});
|
||||
} catch (HttpRequestException exc) {
|
||||
MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Datenbank herunterladen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Datenbank herunterladen", "Eventuell Internetverbindung prüfen!", exc);
|
||||
} catch (TaskCanceledException exc) {
|
||||
MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Datenbank herunterladen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Datenbank herunterladen", "Eventuell Internetverbindung prüfen!", exc);
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Datenbank herunterladen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Datenbank herunterladen", exc);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -306,9 +296,7 @@ namespace Elwig.Windows {
|
||||
if (App.Config.SyncUrl == null)
|
||||
return;
|
||||
|
||||
var res = MessageBox.Show("Sind Sie wirklich sicher, dass Sie die Datenbank dieses\nGerätes hochladen möchten? Das sollte nur vom Hauptgerät aus passieren!", "Datenbank hochladen",
|
||||
MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK)
|
||||
if (!InteractionService.AskContinue("Datenbank hochladen", "Sind Sie wirklich sicher, dass Sie die Datenbank dieses\nGerätes hochladen möchten? Das sollte nur vom Hauptgerät aus passieren!"))
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
@@ -317,14 +305,13 @@ namespace Elwig.Windows {
|
||||
var path = Path.Combine(App.TempPath, "database.sql.zip");
|
||||
await Database.ExportSql(path, true);
|
||||
await Utils.UploadExportData(path, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword);
|
||||
MessageBox.Show($"Hochladen der gesamten Datenbank erfolgreich!", "Datenbank hochladen",
|
||||
MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
InteractionService.ShowInformation("Datenbank hochladen", $"Hochladen der gesamten Datenbank erfolgreich!");
|
||||
} catch (HttpRequestException exc) {
|
||||
MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Datenbank hochladen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Datenbank hochladen", "Eventuell Internetverbindung prüfen!", exc);
|
||||
} catch (TaskCanceledException exc) {
|
||||
MessageBox.Show("Eventuell Internetverbindung prüfen!\n\n" + exc.Message, "Datenbank hochladen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Datenbank hochladen", "Eventuell Internetverbindung prüfen!", exc);
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Datenbank hochladen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Datenbank hochladen", exc);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -457,13 +444,8 @@ namespace Elwig.Windows {
|
||||
private async void OverUnderDeliveryButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (SeasonInput.Value is not int year)
|
||||
return;
|
||||
var d = new SaveFileDialog() {
|
||||
FileName = $"Über-Unterlieferungen-{year}.ods",
|
||||
DefaultExt = "ods",
|
||||
Filter = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
|
||||
Title = $"Über-/Unterlieferungen {year} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == false)
|
||||
var filename = InteractionService.SaveFile($"Über-/Unterlieferungen {year}", $"Über-Unterlieferungen-{year}", "ods");
|
||||
if (filename == null)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
@@ -477,11 +459,11 @@ namespace Elwig.Windows {
|
||||
using var ctx = new AppDbContext();
|
||||
var tbl1 = await OverUnderDeliveryData.ForSeason(ctx.OverUnderDeliveryRows, year);
|
||||
var tbl2 = await AreaComUnderDeliveryData.ForSeason(ctx.AreaComUnderDeliveryRows, year);
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
using var ods = new OdsFile(filename);
|
||||
await ods.AddTable(tbl1);
|
||||
await ods.AddTable(tbl2);
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -490,13 +472,8 @@ namespace Elwig.Windows {
|
||||
private async void BreakdownButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (SeasonInput.Value is not int year)
|
||||
return;
|
||||
var d = new SaveFileDialog() {
|
||||
FileName = $"Aufschlüsselung-{year}.ods",
|
||||
DefaultExt = "ods",
|
||||
Filter = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
|
||||
Title = $"Sorten-/Qualitätsaufschlüsselung {year} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == false)
|
||||
var filename = InteractionService.SaveFile($"Sorten-/Qualitätsaufschlüsselung {year}", $"Aufschlüsselung-{year}", "ods");
|
||||
if (filename == null)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
@@ -508,7 +485,7 @@ namespace Elwig.Windows {
|
||||
App.HintContextChange();
|
||||
|
||||
using var ctx = new AppDbContext();
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
using var ods = new OdsFile(filename);
|
||||
var tblTotal = await WeightBreakdownData.ForSeason(ctx.WeightBreakDownRows, year);
|
||||
await ods.AddTable(tblTotal);
|
||||
foreach (var branch in await ctx.FetchBranches().ToListAsync()) {
|
||||
@@ -516,7 +493,7 @@ namespace Elwig.Windows {
|
||||
await ods.AddTable(tbl);
|
||||
}
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -525,13 +502,8 @@ namespace Elwig.Windows {
|
||||
private async void AreaCommitmentsButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (SeasonInput.Value is not int year)
|
||||
return;
|
||||
var d = new SaveFileDialog() {
|
||||
FileName = $"Flächenbindungen-{year}.ods",
|
||||
DefaultExt = "ods",
|
||||
Filter = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
|
||||
Title = $"Flächenbindungen {year} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == false)
|
||||
var filename = InteractionService.SaveFile($"Flächenbindungen {year}", $"Flächenbindungen-{year}", "ods");
|
||||
if (filename == null)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
@@ -544,10 +516,10 @@ namespace Elwig.Windows {
|
||||
|
||||
using var ctx = new AppDbContext();
|
||||
var tbl = await MemberAreaComsData.ForSeason(ctx.MemberAreaComsRows, year);
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
using var ods = new OdsFile(filename);
|
||||
await ods.AddTable(tbl);
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
@@ -556,13 +528,8 @@ namespace Elwig.Windows {
|
||||
private async void BreakdownMemberVarietyButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (SeasonInput.Value is not int year)
|
||||
return;
|
||||
var d = new SaveFileDialog() {
|
||||
FileName = $"Liefermengen-Ertrag-{year}.ods",
|
||||
DefaultExt = "ods",
|
||||
Filter = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
|
||||
Title = $"Liefermengen/Ertrag {year} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == false)
|
||||
var filename = InteractionService.SaveFile($"Liefermengen/Ertrag {year}", $"Liefermengen-Ertrag-{year}", "ods");
|
||||
if (filename == null)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
@@ -575,10 +542,10 @@ namespace Elwig.Windows {
|
||||
|
||||
using var ctx = new AppDbContext();
|
||||
var tbl = await MemberDeliveryYieldsPerVarietyData.ForSeason(ctx.MemberDeliveryPerVariantRows, year);
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
using var ods = new OdsFile(filename);
|
||||
await ods.AddTable(tbl);
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
|
||||
@@ -399,9 +399,7 @@ namespace Elwig.Windows {
|
||||
await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Mitglied löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Mitglied löschen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -422,9 +420,7 @@ namespace Elwig.Windows {
|
||||
mgnr = await ViewModel.UpdateMember(ViewModel.SelectedMember?.MgNr);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Mitglied aktualisieren", exc);
|
||||
SaveButton.IsEnabled = true;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
@@ -512,7 +508,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
});
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -534,9 +530,7 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void Menu_MemberDataSheet_Email_Click(object sender, RoutedEventArgs evt) {
|
||||
if (ViewModel.SelectedMember is not Member m) return;
|
||||
var res = MessageBox.Show("Soll eine E-Mail verschickt werden?", "Stammdatenblatt verschicken",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
|
||||
if (res != MessageBoxResult.Yes)
|
||||
if (!InteractionService.AskQuestion("Stammdatenblatt verschicken", "Soll eine E-Mail verschickt werden?", true))
|
||||
return;
|
||||
await MemberService.GenerateMemberDataSheet(m, ExportMode.Email);
|
||||
}
|
||||
@@ -566,9 +560,7 @@ namespace Elwig.Windows {
|
||||
var year = (int?)((sender as MenuItem)?.Parent as MenuItem)?.Tag;
|
||||
if (ViewModel.SelectedMember is not Member m || year == null)
|
||||
return;
|
||||
var res = MessageBox.Show("Soll eine E-Mail verschickt werden?", "Anlieferungsbestätigung verschicken",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
|
||||
if (res != MessageBoxResult.Yes)
|
||||
if (!InteractionService.AskQuestion("Anlieferungsbestätigung verschicken", "Soll eine E-Mail verschickt werden?", true))
|
||||
return;
|
||||
await MemberService.GenerateDeliveryConfirmation(m, (int)year, ExportMode.Email);
|
||||
}
|
||||
@@ -602,9 +594,7 @@ namespace Elwig.Windows {
|
||||
var avnr = (int?)((sender as MenuItem)?.Parent as MenuItem)?.Tag;
|
||||
if (ViewModel.SelectedMember is not Member m || year == null || avnr == null)
|
||||
return;
|
||||
var res = MessageBox.Show("Soll eine E-Mail verschickt werden?", "Traubengutschrift verschicken",
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
|
||||
if (res != MessageBoxResult.Yes)
|
||||
if (!InteractionService.AskQuestion("Traubengutschrift verschicken", "Soll eine E-Mail verschickt werden?", true))
|
||||
return;
|
||||
await MemberService.GenerateCreditNote(m, (int)year, (int)avnr, ExportMode.Email);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -192,18 +193,14 @@ namespace Elwig.Windows {
|
||||
App.HintContextChange();
|
||||
ControlUtils.SelectItemWithPk(WbGlKgs, k.KgNr);
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Katastralgemeinde aktivieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Katastralgemeinde aktivieren", exc);
|
||||
}
|
||||
}
|
||||
|
||||
private async void DeactivateKgButton_Click(object sender, RoutedEventArgs e) {
|
||||
if (WbGlKgs.SelectedItem is not AT_Kg k || k.WbKg == null) return;
|
||||
var r = MessageBox.Show(
|
||||
$"Sollen alle Riede und Stammgemeinden-Einträge von der KG {k.Name} wirklich unwiderruflich gelöscht werden?",
|
||||
"Katastralgemeinde deaktivieren", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r != MessageBoxResult.Yes) return;
|
||||
if (!InteractionService.AskConfirmation("Katastralgemeinde deaktivieren", $"Sollen alle Riede und Stammgemeinden-Einträge von der KG {k.Name} wirklich unwiderruflich gelöscht werden?"))
|
||||
return;
|
||||
try {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
ctx.Remove(k.WbKg);
|
||||
@@ -213,9 +210,7 @@ namespace Elwig.Windows {
|
||||
ControlUtils.SelectItemWithPk(WbKgs, k.KgNr);
|
||||
} catch (Exception exc) {
|
||||
await ForceContextReload();
|
||||
var str = "Der Eintrag konnte nicht aus der Datenbank gelöscht werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Katastralgemeinde deaktivieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Katastralgemeinde deaktivieren", exc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using Elwig.Helpers;
|
||||
using Elwig.Helpers.Billing;
|
||||
using Elwig.Models.Dtos;
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -168,9 +169,7 @@ namespace Elwig.Windows {
|
||||
});
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "GA Nachzeichnen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("GA Nachzeichnen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -184,9 +183,7 @@ namespace Elwig.Windows {
|
||||
});
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "GA Nachzeichnen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("GA Nachzeichnen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -303,9 +300,7 @@ namespace Elwig.Windows {
|
||||
});
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Benutzerdefinierten Zu-/Abschlag speichern", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Benutzerdefinierten Zu-/Abschlag speichern", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@@ -90,9 +90,7 @@ namespace Elwig.Windows {
|
||||
App.HintContextChange();
|
||||
ControlUtils.SelectItem(PaymentVariantList, v);
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Auszahlungsvariante erstellen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Auszahlungsvariante erstellen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -106,9 +104,7 @@ namespace Elwig.Windows {
|
||||
App.HintContextChange();
|
||||
ControlUtils.SelectItem(PaymentVariantList, n);
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Auszahlungsvariante kopieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Auszahlungsvariante kopieren", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -116,19 +112,14 @@ namespace Elwig.Windows {
|
||||
private async void DeleteButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (PaymentVariantList.SelectedItem is not PaymentVar v || !v.TestVariant)
|
||||
return;
|
||||
var res = MessageBox.Show(
|
||||
$"Soll die Auszahlungsvariante \"{v.Name}\" wirklich unwiderruflich gelöscht werden?",
|
||||
"Auszahlungsvariante löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK)
|
||||
if (!InteractionService.AskContinue("Auszahlungsvariante löschen", $"Soll die Auszahlungsvariante \"{v.Name}\" wirklich unwiderruflich gelöscht werden?"))
|
||||
return;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await PaymentVariantService.DeletePaymentVariant(v.Year, v.AvNr);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Auszahlungsvariante löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Auszahlungsvariante löschen", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@@ -142,7 +133,7 @@ namespace Elwig.Windows {
|
||||
await PaymentVariantService.Calculate(v.Year, v.AvNr);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Berechnungsfehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Berechnungsfehler", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
ViewModel.CalculateIsEnabled = true;
|
||||
@@ -204,7 +195,7 @@ namespace Elwig.Windows {
|
||||
await PaymentVariantService.Commit(v.Year, v.AvNr);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
ViewModel.RevertIsEnabled = true;
|
||||
@@ -213,11 +204,9 @@ namespace Elwig.Windows {
|
||||
private async void RevertButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (PaymentVariantList.SelectedItem is not PaymentVar v)
|
||||
return;
|
||||
var res = MessageBox.Show(
|
||||
if (!InteractionService.AskConfirmation("Traubengutschriften löschen",
|
||||
"Sollen wirklich alle festgesetzten Traubengutschriften der ausgewählten Auszahlungsvariante unwiderruflich gelöscht werden?\n\n" +
|
||||
"Dies ist im Allgemeinen nie empfohlen. Handelt es sich um die aktuellste Auszahlungsvariante könnte das eine Ausnahme sein.",
|
||||
"Traubengutschriften löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (res != MessageBoxResult.Yes)
|
||||
"Dies ist im Allgemeinen nie empfohlen. Handelt es sich um die aktuellste Auszahlungsvariante könnte das eine Ausnahme sein."))
|
||||
return;
|
||||
ViewModel.RevertIsEnabled = false;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
@@ -225,7 +214,7 @@ namespace Elwig.Windows {
|
||||
await PaymentVariantService.Revert(v.Year, v.AvNr);
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException(exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
ViewModel.CommitIsEnabled = true;
|
||||
@@ -235,7 +224,7 @@ namespace Elwig.Windows {
|
||||
if (PaymentVariantList.SelectedItem is not PaymentVar v) {
|
||||
return;
|
||||
} else if (v.TransferDate == null) {
|
||||
MessageBox.Show("Überweisungsdatum muss gesetzt sein!", "Exportieren nicht möglich", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowError("Exportieren nicht möglich", "Überweisungsdatum muss gesetzt sein!");
|
||||
return;
|
||||
}
|
||||
await PaymentVariantService.GenerateEbics(v.Year, v.AvNr);
|
||||
@@ -256,9 +245,7 @@ namespace Elwig.Windows {
|
||||
App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
await ForceContextReload();
|
||||
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;
|
||||
MessageBox.Show(str, "Auszahlungsvariante aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowDbException("Auszahlungsvariante aktualisieren", exc);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
await EnsureContextRenewed();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Helpers.Export;
|
||||
using Microsoft.Win32;
|
||||
using Elwig.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
@@ -42,9 +42,9 @@ namespace Elwig.Windows {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await DisplayQuery(QueryInput.Text);
|
||||
Mouse.OverrideCursor = null;
|
||||
} catch (Exception e) {
|
||||
} catch (Exception exc) {
|
||||
Mouse.OverrideCursor = null;
|
||||
MessageBox.Show(e.Message, "Fehler beim Ausführen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Fehler beim Ausführen", exc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,21 +85,16 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private static async Task SaveQuery(string sqlQuery) {
|
||||
var d = new SaveFileDialog() {
|
||||
FileName = $"Abfrage.csv",
|
||||
DefaultExt = "csv",
|
||||
Filter = "CSV-Datei (*.csv)|*.csv",
|
||||
Title = $"Datenbank Abfrage speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
var filename = InteractionService.SaveFile("Datenbank Abfrage", "Abfrage", "csv");
|
||||
if (filename != null) {
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var (header, rows) = await ExecuteQuery(sqlQuery);
|
||||
using var csv = new CsvSimple(d.FileName, ';', Utils.UTF8BOM);
|
||||
using var csv = new CsvSimple(filename, ';', Utils.UTF8BOM);
|
||||
await csv.ExportAsync(rows.Prepend([.. header.Select(h => h.ColumnName)]));
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler beim Ausführen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
InteractionService.ShowException("Fehler beim Ausführen", exc);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
|
||||
Reference in New Issue
Block a user