From ca1b68aa4fc5f69f1497069a421e2e8eeb135e86 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Thu, 28 Sep 2023 19:38:29 +0200 Subject: [PATCH] Documents: Add Letterhead --- Elwig/Documents/Document.cshtml.cs | 80 ++++++++++++++++++++----- Elwig/Documents/Html.cs | 1 + Elwig/Documents/Letterhead.cshtml | 9 +++ Elwig/Documents/Letterhead.cshtml.cs | 9 +++ Elwig/Documents/style-page.css | 3 + Elwig/Windows/MemberAdminWindow.xaml.cs | 20 +++++++ 6 files changed, 107 insertions(+), 15 deletions(-) create mode 100644 Elwig/Documents/Letterhead.cshtml create mode 100644 Elwig/Documents/Letterhead.cshtml.cs diff --git a/Elwig/Documents/Document.cshtml.cs b/Elwig/Documents/Document.cshtml.cs index ced43a6..e51627f 100644 --- a/Elwig/Documents/Document.cshtml.cs +++ b/Elwig/Documents/Document.cshtml.cs @@ -2,11 +2,15 @@ using System; using System.Threading.Tasks; using System.IO; using Elwig.Helpers; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Linq; namespace Elwig.Documents { - public abstract class Document : IDisposable { + public abstract partial class Document : IDisposable { - private TempFile? PdfFile = null; + private TempFile? _pdfFile = null; + private string? _renderedHtml = null; public bool ShowFoldMarks = App.Config.Debug; @@ -35,17 +39,56 @@ namespace Elwig.Documents { Date = DateTime.Today; } + [GeneratedRegex(@".*?\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled)] + private static partial Regex GeneratedDocumentHeaderRegex(); + private static readonly Regex DocumentHeaderRegex = GeneratedDocumentHeaderRegex(); + + [GeneratedRegex(@" diff --git a/Elwig/Documents/Letterhead.cshtml.cs b/Elwig/Documents/Letterhead.cshtml.cs new file mode 100644 index 0000000..588e5f5 --- /dev/null +++ b/Elwig/Documents/Letterhead.cshtml.cs @@ -0,0 +1,9 @@ +using Elwig.Models; + +namespace Elwig.Documents { + public class Letterhead : BusinessDocument { + public Letterhead(Member m) : base($"Briefkopf {m.Name}", m, true) { + Aside = ""; + } + } +} diff --git a/Elwig/Documents/style-page.css b/Elwig/Documents/style-page.css index 0fb675d..9f8c757 100644 --- a/Elwig/Documents/style-page.css +++ b/Elwig/Documents/style-page.css @@ -20,6 +20,9 @@ hr.page-break { display: none; } +.document-break { + break-before: page; +} @page { size: A4; diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index 9f2fb84..4e22217 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -10,6 +10,7 @@ using Elwig.Models; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.ChangeTracking; using System.Collections.ObjectModel; +using Elwig.Documents; namespace Elwig.Windows { public partial class MemberAdminWindow : AdministrationWindow { @@ -269,6 +270,25 @@ namespace Elwig.Windows { Utils.MailTo(((Member)MemberList.SelectedItem).EmailAddresses.Select(a => a.Address)); } + private async void Menu_Print_Letterheads_MgNr_Click(object sender, RoutedEventArgs evt) { + using var d = await Document.Merge(Context.Members + .Where(m => m.IsActive) + .OrderBy(m => m.MgNr) + .Select(m => new Letterhead(m))); + await d.Generate(); + d.Show(); + } + + private async void Menu_Print_Letterheads_Name_Click(object sender, RoutedEventArgs evt) { + using var d = await Document.Merge(Context.Members + .Where(m => m.IsActive) + .OrderBy(m => m.FamilyName) + .ThenBy(m => m.GivenName) + .Select(m => new Letterhead(m))); + await d.Generate(); + d.Show(); + } + private void FocusSearchInput(object sender, RoutedEventArgs evt) { if (!IsEditing && !IsCreating) { SearchInput.Focus();