From 376af727002cd932c3ad4b28ef53757d299c93eb Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@necronda.net>
Date: Sat, 2 Mar 2024 18:57:03 +0100
Subject: [PATCH] MailWindow: Add try/catch block around document creation

---
 Elwig/Windows/MailWindow.xaml.cs | 61 +++++++++++++++++---------------
 1 file changed, 33 insertions(+), 28 deletions(-)

diff --git a/Elwig/Windows/MailWindow.xaml.cs b/Elwig/Windows/MailWindow.xaml.cs
index 3107db8..830d41f 100644
--- a/Elwig/Windows/MailWindow.xaml.cs
+++ b/Elwig/Windows/MailWindow.xaml.cs
@@ -427,41 +427,46 @@ namespace Elwig.Windows {
             var memberDocs = recipients.Select(m => new {
                 Member = m,
                 Docs = docs.SelectMany<SelectedDoc, GeneratedDoc>(doc => {
-                    if (doc.Type == DocType.Custom) {
-                        return [new GeneratedDoc((string)doc.Details!)];
-                    } else if (doc.Type == DocType.MemberDataSheet) {
-                        return [new GeneratedDoc(new MemberDataSheet(m, Context))];
-                    } else if (doc.Type == DocType.DeliveryConfirmation) {
-                        var details = ((int, bool))doc.Details!;
-                        var year = details.Item1;
-                        var include = details.Item2;
-                        DeliveryConfirmationDeliveryData data;
-                        if (dcData[year].TryGetValue(m.MgNr, out var d)) {
-                            data = d;
-                        } else if (include) {
-                            data = DeliveryConfirmationDeliveryData.CreateEmpty(year, m);
-                        } else {
-                            return [];
-                        }
-                        return [new GeneratedDoc(new DeliveryConfirmation(Context, year, m, data))];
-                    } else if (doc.Type == DocType.CreditNote) {
-                        var details = ((int, int))doc.Details!;
-                        var year = details.Item1;
-                        var avnr = details.Item2;
-                        var data = cnData[(year, avnr)];
-                        try {
-                            return [new GeneratedDoc(new CreditNote(
+                    try {
+                        if (doc.Type == DocType.Custom) {
+                            return [new GeneratedDoc((string)doc.Details!)];
+                        } else if (doc.Type == DocType.MemberDataSheet) {
+                            return [new GeneratedDoc(new MemberDataSheet(m, Context))];
+                        } else if (doc.Type == DocType.DeliveryConfirmation) {
+                            var details = ((int, bool))doc.Details!;
+                            var year = details.Item1;
+                            var include = details.Item2;
+                            DeliveryConfirmationDeliveryData data;
+                            if (dcData[year].TryGetValue(m.MgNr, out var d)) {
+                                data = d;
+                            } else if (include) {
+                                data = DeliveryConfirmationDeliveryData.CreateEmpty(year, m);
+                            } else {
+                                return [];
+                            }
+                            return [new GeneratedDoc(new DeliveryConfirmation(Context, year, m, data))];
+                        } else if (doc.Type == DocType.CreditNote) {
+                            var details = ((int, int))doc.Details!;
+                            var year = details.Item1;
+                            var avnr = details.Item2;
+                            var data = cnData[(year, avnr)];
+                            try {
+                                return [new GeneratedDoc(new CreditNote(
                                 Context, data.Item2[m.MgNr], data.Item1[m.MgNr],
                                 data.Item3.ConsiderContractPenalties,
                                 data.Item3.ConsiderTotalPenalty,
                                 data.Item3.ConsiderAutoBusinessShares,
                                 Context.GetMemberUnderDelivery(year, m.MgNr).GetAwaiter().GetResult()
                             ))];
-                        } catch (Exception) {
-                            return [];
+                            } catch (Exception) {
+                                return [];
+                            }
+                        } else {
+                            throw new NotImplementedException("Invalid DocType");
                         }
-                    } else {
-                        throw new NotImplementedException("Invalid DocType");
+                    } catch (Exception exc) {
+                        MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
+                        return [];
                     }
                 }).ToList()
             }).ToList();