diff --git a/Elwig/Windows/MailWindow.xaml b/Elwig/Windows/MailWindow.xaml
index 882dd42..e7b8405 100644
--- a/Elwig/Windows/MailWindow.xaml
+++ b/Elwig/Windows/MailWindow.xaml
@@ -86,14 +86,16 @@
+ AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap"
+ TextChanged="DocumentInput_TextChanged"/>
+ AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap"
+ TextChanged="DocumentInput_TextChanged"/>
-
-
+
- ... alle ()
+ ...alle ()
-
+
...Mitglieder, die Zusendung
per Post wünschen ()
-
+
...Mitglieder, die keine
E-Mail erhalten würden ()
-
+
-
-
-
+
+
+
+ VerticalAlignment="Top" HorizontalAlignment="Left"
+ Checked="DoublePagedInput_Changed" Unchecked="DoublePagedInput_Changed"/>
-
-
diff --git a/Elwig/Windows/MailWindow.xaml.cs b/Elwig/Windows/MailWindow.xaml.cs
index dc8fbce..473f0dd 100644
--- a/Elwig/Windows/MailWindow.xaml.cs
+++ b/Elwig/Windows/MailWindow.xaml.cs
@@ -200,6 +200,48 @@ namespace Elwig.Windows {
await UpdateRecipients(ctx);
}
+ private void ResetDocuments() {
+ DisposeDocs();
+ if (IsLoaded) {
+ PreviewButton.IsEnabled = false;
+ PrintButton.IsEnabled = false;
+ EmailButton.IsEnabled = false;
+ ProgressBar.Value = 0;
+ }
+ }
+
+ private void LockInputs() {
+ DocumentAddButton.IsEnabled = false;
+ DocumentRemoveButton.IsEnabled = false;
+ SelectDocumentButton.IsEnabled = false;
+ foreach (var tb in ControlUtils.FindAllChildren(this, []))
+ tb.IsReadOnly = true;
+ foreach (var cb in ControlUtils.FindAllChildren(this, []))
+ cb.IsEnabled = false;
+ foreach (var cb in ControlUtils.FindAllChildren(this, []))
+ cb.IsEnabled = false;
+ foreach (var lb in ControlUtils.FindAllChildren(this, []))
+ lb.IsEnabled = false;
+ foreach (var rb in ControlUtils.FindAllChildren(this, []))
+ rb.IsEnabled = false;
+ }
+
+ private void UnlockInputs() {
+ DocumentAddButton.IsEnabled = true;
+ DocumentRemoveButton.IsEnabled = true;
+ SelectDocumentButton.IsEnabled = true;
+ foreach (var tb in ControlUtils.FindAllChildren(this, []))
+ tb.IsReadOnly = false;
+ foreach (var cb in ControlUtils.FindAllChildren(this, []))
+ cb.IsEnabled = true;
+ foreach (var cb in ControlUtils.FindAllChildren(this, []))
+ cb.IsEnabled = true;
+ foreach (var lb in ControlUtils.FindAllChildren(this, []))
+ lb.IsEnabled = true;
+ foreach (var rb in ControlUtils.FindAllChildren(this, []))
+ rb.IsEnabled = true;
+ }
+
private void ContinueButton_Click(object sender, RoutedEventArgs evt) {
TabControl.SelectedIndex = 1;
TabControl.AllowDrop = false;
@@ -210,7 +252,7 @@ namespace Elwig.Windows {
TabControl.AllowDrop = true;
}
- private void Document_Drop(object sender, DragEventArgs evt) {
+ private async void Document_Drop(object sender, DragEventArgs evt) {
if (evt.Data.GetDataPresent(DataFormats.FileDrop)) {
var files = (string[])evt.Data.GetData(DataFormats.FileDrop);
foreach (var file in files) {
@@ -218,6 +260,8 @@ namespace Elwig.Windows {
SelectedDocs.Add(new(DocType.Custom, Path.GetFileName(file), file));
}
}
+ using var ctx = new AppDbContext();
+ await UpdateRecipients(ctx);
}
}
@@ -260,8 +304,9 @@ namespace Elwig.Windows {
}
}
- private void DocumentAddButton_Click(object sender, RoutedEventArgs evt) {
+ private async void DocumentAddButton_Click(object sender, RoutedEventArgs evt) {
var idx = AvaiableDocumentsList.SelectedIndex;
+ using var ctx = new AppDbContext();
if (AvaiableDocumentsList.SelectedItem is not string s)
return;
if (idx == 0) {
@@ -270,20 +315,22 @@ namespace Elwig.Windows {
SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, (Year, DocumentNonDeliverersInput.IsChecked == true)));
RecipientsDeliveryMembersInput.IsChecked = true;
} else if (idx >= 2) {
- using var ctx = new AppDbContext();
var name = s.Split(" – ")[^1];
- var pv = ctx.PaymentVariants.Single(v => v.Year == Year && v.Name == name)!;
+ var pv = await ctx.PaymentVariants.SingleAsync(v => v.Year == Year && v.Name == name)!;
SelectedDocs.Add(new(DocType.CreditNote, s, (pv.Year, pv.AvNr)));
RecipientsDeliveryMembersInput.IsChecked = true;
}
SelectedDocumentsList.SelectedIndex = SelectedDocs.Count - 1;
+ await UpdateRecipients(ctx);
}
- private void DocumentRemoveButton_Click(object sender, RoutedEventArgs evt) {
+ private async void DocumentRemoveButton_Click(object sender, RoutedEventArgs evt) {
DeleteCommand.Execute(null);
+ using var ctx = new AppDbContext();
+ await UpdateRecipients(ctx);
}
- private void SelectDocumentButton_Click(object sender, RoutedEventArgs evt) {
+ private async void SelectDocumentButton_Click(object sender, RoutedEventArgs evt) {
var d = new OpenFileDialog() {
Title = "Dokument auswählen - Elwig",
DefaultExt = "pdf",
@@ -296,6 +343,8 @@ namespace Elwig.Windows {
SelectedDocs.Add(new(DocType.Custom, Path.GetFileName(file), file));
}
}
+ using var ctx = new AppDbContext();
+ await UpdateRecipients(ctx);
}
}
@@ -334,6 +383,7 @@ namespace Elwig.Windows {
private void Date_TextChanged(object sender, RoutedEventArgs evt) {
Validator.CheckDate((TextBox)sender, true);
+ ResetDocuments();
}
private void Date_LostFocus(object sender, RoutedEventArgs evt) {
@@ -375,6 +425,8 @@ namespace Elwig.Windows {
query = query.Where(m => m.Deliveries.Any(d => d.Year == Year));
} else if (RecipientsNonDeliveryMembersInput.IsChecked == true) {
query = query.Where(m => m.IsActive && !m.Deliveries.Any(d => d.Year == Year));
+ } else if (RecipientsActiveMembersInput.IsChecked == true && SelectedDocs.Any(d => d.Type == DocType.DeliveryConfirmation || d.Type == DocType.CreditNote)) {
+ query = query.Where(m => m.IsActive || m.Deliveries.Any(d => d.Year == Year));
} else {
query = query.Where(m => m.IsActive);
}
@@ -403,6 +455,7 @@ namespace Elwig.Windows {
PostalWishCount = Recipients.Count(m => m.ContactViaPost);
var m = EmailAllInput.IsChecked == true ? 3 : EmailWishInput.IsChecked == true ? 2 : 1;
PostalNoEmailCount = PostalAllCount - (m == 3 ? EmailAllCount : m == 2 ? EmailWishCount : 0);
+ ResetDocuments();
}
private async Task UpdateTextParameters() {
@@ -458,6 +511,7 @@ namespace Elwig.Windows {
}
private async void GenerateButton_Click(object sender, RoutedEventArgs evt) {
+ LockInputs();
PreviewButton.IsEnabled = false;
PrintButton.IsEnabled = false;
EmailButton.IsEnabled = false;
@@ -520,6 +574,7 @@ namespace Elwig.Windows {
dcData[year] = await DeliveryConfirmationDeliveryData.ForSeason(ctx.DeliveryParts, year);
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
+ UnlockInputs();
GenerateButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return;
@@ -536,6 +591,7 @@ namespace Elwig.Windows {
);
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
+ UnlockInputs();
GenerateButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return;
@@ -626,6 +682,7 @@ namespace Elwig.Windows {
}
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
+ UnlockInputs();
GenerateButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return;
@@ -665,6 +722,7 @@ namespace Elwig.Windows {
PrintDocument = print;
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
+ UnlockInputs();
GenerateButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return;
@@ -672,6 +730,7 @@ namespace Elwig.Windows {
}
ProgressBar.Value = 100.0;
+ UnlockInputs();
GenerateButton.IsEnabled = true;
Mouse.OverrideCursor = null;
PreviewButton.IsEnabled = true;
@@ -705,7 +764,11 @@ namespace Elwig.Windows {
private async void PrintButton_Click(object sender, RoutedEventArgs evt) {
if (PrintDocument == null) return;
+
PrintButton.IsEnabled = false;
+ 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) {
@@ -717,13 +780,19 @@ namespace Elwig.Windows {
}
Mouse.OverrideCursor = null;
}
+
PrintButton.IsEnabled = true;
+ GenerateButton.IsEnabled = true;
+ UnlockInputs();
}
private async void EmailButton_Click(object sender, RoutedEventArgs evt) {
if (App.Config.Smtp == null || EmailDocuments == null) return;
EmailButton.IsEnabled = false;
+ GenerateButton.IsEnabled = false;
+ LockInputs();
+
SmtpClient? client = null;
try {
Mouse.OverrideCursor = Cursors.AppStarting;
@@ -754,6 +823,8 @@ namespace Elwig.Windows {
msg.Body = body;
await client!.SendAsync(msg);
}
+
+ MessageBox.Show("Erfolgreich alle E-Mails verschickt!", "Rundschreiben verschicken", MessageBoxButton.OK, MessageBoxImage.Information);
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} finally {
@@ -761,11 +832,14 @@ namespace Elwig.Windows {
await client.DisconnectAsync(true);
client?.Dispose();
EmailButton.IsEnabled = true;
+ GenerateButton.IsEnabled = true;
+ UnlockInputs();
Mouse.OverrideCursor = null;
}
}
public void AddDeliveryConfirmation() {
+ if (!GenerateButton.IsEnabled) return;
AvaiableDocumentsList.SelectedIndex = 1;
if (AvaiableDocumentsList.SelectedItem is not string s || SelectedDocs.Any(d => d.Type == DocType.DeliveryConfirmation))
return;
@@ -775,6 +849,7 @@ namespace Elwig.Windows {
}
public void AddCreditNote(int index) {
+ if (!GenerateButton.IsEnabled) return;
AvaiableDocumentsList.SelectedIndex = 2 + index;
if (AvaiableDocumentsList.SelectedItem is not string s || SelectedDocs.Any(d => d.Type == DocType.CreditNote))
return;
@@ -785,5 +860,29 @@ namespace Elwig.Windows {
SelectedDocumentsList.SelectedIndex = SelectedDocs.Count - 1;
RecipientsDeliveryMembersInput.IsChecked = true;
}
+
+ private void DocumentInput_TextChanged(object sender, TextChangedEventArgs evt) {
+ ResetDocuments();
+ }
+
+ private void PostalLocation_TextChanged(object sender, TextChangedEventArgs evt) {
+ ResetDocuments();
+ }
+
+ private void PostalInput_Changed(object sender, RoutedEventArgs evt) {
+ ResetDocuments();
+ }
+
+ private void OrderInput_Changed(object sender, RoutedEventArgs evt) {
+ ResetDocuments();
+ }
+
+ private void DoublePagedInput_Changed(object sender, RoutedEventArgs evt) {
+ ResetDocuments();
+ }
+
+ private void PostalSender_TextChanged(object sender, TextChangedEventArgs evt) {
+ ResetDocuments();
+ }
}
}