diff --git a/Elwig/Documents/Document.cs b/Elwig/Documents/Document.cs index 40aad77..b6b65b3 100644 --- a/Elwig/Documents/Document.cs +++ b/Elwig/Documents/Document.cs @@ -109,7 +109,7 @@ namespace Elwig.Documents { var tmpHtml = new TempFile("html"); await File.WriteAllTextAsync(tmpHtml.FilePath, await doc.Render(), Utils.UTF8); tmpHtmls.Add(tmpHtml); - tmpFiles.Add(tmpHtml.FileName); + tmpFiles.Add((doc is Letterhead ? "#" : "") + tmpHtml.FileName); i++; progress?.Report(GenerationProportion * 100 * i / n); } diff --git a/Elwig/Helpers/Printing/Pdf.cs b/Elwig/Helpers/Printing/Pdf.cs index d52bfe1..f56a967 100644 --- a/Elwig/Helpers/Printing/Pdf.cs +++ b/Elwig/Helpers/Printing/Pdf.cs @@ -54,14 +54,13 @@ namespace Elwig.Helpers.Printing { while (true) { var line = await WinziPrintProc.StandardOutput.ReadLineAsync() ?? throw new IOException("Invalid response from WinziPrint"); if (line.StartsWith("error:")) { - MessageBox.Show(line[6..].Trim(), "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - return Array.Empty<int>(); + throw new IOException($"WinziPrint: {line[6..].Trim()}"); } else if (line.StartsWith("progress:")) { var parts = line[9..].Trim().Split('/').Select(int.Parse).ToArray(); progress?.Report(100.0 * parts[0] / parts[1]); } else if (line.StartsWith("success:")) { var m = Regex.Match(line, @"\(([0-9, ]+)\)"); - return m.Groups[1].Value.Split(", ").Select(int.Parse); + return m.Groups[1].Value.Split(", ").Select(int.Parse).ToList(); } } } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 1eae738..f34a4c3 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -126,19 +126,27 @@ namespace Elwig.Windows { private async void Menu_Print_ShowDeliveryNote_Click(object sender, RoutedEventArgs evt) { if (DeliveryList.SelectedItem is not Delivery d) return; Mouse.OverrideCursor = Cursors.AppStarting; - using var doc = new DeliveryNote(d, Context); - await doc.Generate(); + try { + using var doc = new DeliveryNote(d, Context); + await doc.Generate(); + doc.Show(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } Mouse.OverrideCursor = null; - doc.Show(); } private async void Menu_Print_PrintDeliveryNote_Click(object sender, RoutedEventArgs evt) { if (DeliveryList.SelectedItem is not Delivery d) return; Mouse.OverrideCursor = Cursors.AppStarting; - using var doc = new DeliveryNote(d, Context); - await doc.Generate(); + try { + using var doc = new DeliveryNote(d, Context); + await doc.Generate(); + await doc.Print(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } Mouse.OverrideCursor = null; - await doc.Print(); } private async void Menu_Export_Bki_Click(object sender, RoutedEventArgs evt) { @@ -160,36 +168,52 @@ namespace Elwig.Windows { private async void Menu_Print_DeliveryJournal_ShowToday_Click(object sender, RoutedEventArgs evt) { Mouse.OverrideCursor = Cursors.AppStarting; - var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); - await doc.Generate(); + try { + var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); + await doc.Generate(); + doc.Show(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } Mouse.OverrideCursor = null; - doc.Show(); } private async void Menu_Print_DeliveryJournal_PrintToday_Click(object sender, RoutedEventArgs evt) { Mouse.OverrideCursor = Cursors.AppStarting; - var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); - await doc.Generate(); + try { + var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); + await doc.Generate(); + await doc.Print(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } Mouse.OverrideCursor = null; - await doc.Print(); } private async void Menu_Print_DeliveryJournal_ShowFilter_Click(object sender, RoutedEventArgs evt) { Mouse.OverrideCursor = Cursors.AppStarting; - var (f, _, d, _, _) = await GetFilters(); - var doc = new DeliveryJournal(string.Join(" / ", f), d); - await doc.Generate(); + try { + var (f, _, d, _, _) = await GetFilters(); + var doc = new DeliveryJournal(string.Join(" / ", f), d); + await doc.Generate(); + doc.Show(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } Mouse.OverrideCursor = null; - doc.Show(); } private async void Menu_Print_DeliveryJournal_PrintFilter_Click(object sender, RoutedEventArgs evt) { Mouse.OverrideCursor = Cursors.AppStarting; - var (f, _, d, _, _) = await GetFilters(); - var doc = new DeliveryJournal(string.Join(" / ", f), d); - await doc.Generate(); + try { + var (f, _, d, _, _) = await GetFilters(); + var doc = new DeliveryJournal(string.Join(" / ", f), d); + await doc.Generate(); + doc.Show(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } Mouse.OverrideCursor = null; - doc.Show(); } private void Menu_Settings_EnableFreeEditing_Checked(object sender, RoutedEventArgs evt) { @@ -1153,14 +1177,18 @@ namespace Elwig.Windows { await RefreshDeliveryParts(); if (p?.Delivery != null) { Mouse.OverrideCursor = Cursors.AppStarting; - using var doc = new DeliveryNote(p.Delivery, Context); - await doc.Generate(); - Mouse.OverrideCursor = null; - if (App.Config.Debug) { - doc.Show(); - } else { - await doc.Print(2); + try { + using var doc = new DeliveryNote(p.Delivery, Context); + await doc.Generate(); + if (App.Config.Debug) { + doc.Show(); + } else { + await doc.Print(2); + } + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } + Mouse.OverrideCursor = null; } FinishButton.Cursor = null; DeliveryList.SelectedItem = null; diff --git a/Elwig/Windows/MailWindow.xaml.cs b/Elwig/Windows/MailWindow.xaml.cs index 8dc18e7..3107db8 100644 --- a/Elwig/Windows/MailWindow.xaml.cs +++ b/Elwig/Windows/MailWindow.xaml.cs @@ -487,12 +487,17 @@ namespace Elwig.Windows { return docs; }); var emailRecipients = email.Select(d => d.Key.MgNr).ToHashSet(); - foreach (var item1 in email.Select((e, i) => new { Index = i, e.Key, e.Value })) { - foreach (var item2 in item1.Value.Select((d, i) => new { Index = i, Doc = d})) { - await item2.Doc.Generate(new Progress<double>(v => { - ProgressBar.Value = v * (item2.Index + 1) / item1.Value.Count / totalNum + 100.0 * item1.Index / totalNum; - })); + try { + foreach (var item1 in email.Select((e, i) => new { Index = i, e.Key, e.Value })) { + foreach (var item2 in item1.Value.Select((d, i) => new { Index = i, Doc = d })) { + await item2.Doc.Generate(new Progress<double>(v => { + ProgressBar.Value = v * (item2.Index + 1) / item1.Value.Count / totalNum + 100.0 * item1.Index / totalNum; + })); + } } + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + return; } if (email.Count > 0) { EmailDocuments = email; @@ -516,12 +521,17 @@ namespace Elwig.Windows { .ToList(); if (printDocs.Count > 0) { - var print = Document.Merge(printDocs); - print.DoubleSided = doublePaged; - await print.Generate(new Progress<double>(v => { - ProgressBar.Value = 100.0 * emailNum / totalNum + v * printNum / totalNum; - })); - PrintDocument = print; + try { + var print = Document.Merge(printDocs); + print.DoubleSided = doublePaged; + await print.Generate(new Progress<double>(v => { + ProgressBar.Value = 100.0 * emailNum / totalNum + v * printNum / totalNum; + })); + PrintDocument = print; + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } } ProgressBar.Value = 100.0; diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index 3ecf1ea..3ba9e3d 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -432,14 +432,18 @@ namespace Elwig.Windows { if (MemberList.SelectedItem is not Member m) return; Mouse.OverrideCursor = Cursors.AppStarting; - using var doc = new Letterhead(m); - await doc.Generate(); - Mouse.OverrideCursor = null; - if (App.Config.Debug) { - doc.Show(); - } else { - await doc.Print(); + try { + using var doc = new Letterhead(m); + await doc.Generate(); + if (App.Config.Debug) { + doc.Show(); + } else { + await doc.Print(); + } + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } + Mouse.OverrideCursor = null; } private async Task PrintLetterheads(int ordering) { @@ -468,14 +472,18 @@ namespace Elwig.Windows { .ThenBy(m => m.MgNr); break; } - using var doc = Document.Merge((await members.ToListAsync()).Select(m => new Letterhead(m))); - await doc.Generate(); - Mouse.OverrideCursor = null; - if (App.Config.Debug) { - doc.Show(); - } else { - await doc.Print(); + try { + using var doc = Document.Merge((await members.ToListAsync()).Select(m => new Letterhead(m))); + await doc.Generate(); + if (App.Config.Debug) { + doc.Show(); + } else { + await doc.Print(); + } + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } + Mouse.OverrideCursor = null; } private async void Menu_Print_Letterheads_MgNr_Click(object sender, RoutedEventArgs evt) { @@ -494,24 +502,32 @@ namespace Elwig.Windows { if (MemberList.SelectedItem is not Member m) return; Mouse.OverrideCursor = Cursors.AppStarting; - using var doc = new MemberDataSheet(m, Context); - await doc.Generate(); - Mouse.OverrideCursor = null; - if (App.Config.Debug) { - doc.Show(); - } else { - await doc.Print(); + try { + using var doc = new MemberDataSheet(m, Context); + await doc.Generate(); + if (App.Config.Debug) { + doc.Show(); + } else { + await doc.Print(); + } + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } + Mouse.OverrideCursor = null; } private async void Menu_Show_MemberDataSheet_Click(object sender, RoutedEventArgs evt) { if (MemberList.SelectedItem is not Member m) return; Mouse.OverrideCursor = Cursors.AppStarting; - using var doc = new MemberDataSheet(m, Context); - await doc.Generate(); + try { + using var doc = new MemberDataSheet(m, Context); + await doc.Generate(); + doc.Show(); + } catch (Exception exc) { + MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } Mouse.OverrideCursor = null; - doc.Show(); } private void FocusSearchInput(object sender, RoutedEventArgs evt) { diff --git a/Installer/Files/WinziPrint.exe b/Installer/Files/WinziPrint.exe index 1747602..09009af 100644 Binary files a/Installer/Files/WinziPrint.exe and b/Installer/Files/WinziPrint.exe differ