From 0a9c80011629ff3b907e9ddbec17589a473f7d38 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Tue, 7 Apr 2026 12:02:48 +0200 Subject: [PATCH] BusinessDocument: Add DateFrom to be used for ShowDateAndLocation --- Elwig/Documents/BusinessDocument.cs | 6 ++++-- Elwig/Documents/CreditNote.cs | 8 ++++---- Elwig/Documents/DeliveryConfirmation.cs | 4 ++-- Elwig/Documents/DeliveryNote.cs | 4 +--- Elwig/Documents/Document.cs | 2 -- Elwig/Documents/Letterhead.cs | 2 +- Elwig/Documents/MemberDataSheet.cs | 3 ++- Elwig/Services/MemberService.cs | 4 ++-- Elwig/Windows/MailWindow.xaml.cs | 4 ++-- Tests/UnitTests/DocumentTests/CreditNoteTest.cs | 2 +- Tests/UnitTests/DocumentTests/DeliveryConfirmationTest.cs | 2 +- 11 files changed, 20 insertions(+), 21 deletions(-) diff --git a/Elwig/Documents/BusinessDocument.cs b/Elwig/Documents/BusinessDocument.cs index dc4e993..402784c 100644 --- a/Elwig/Documents/BusinessDocument.cs +++ b/Elwig/Documents/BusinessDocument.cs @@ -22,6 +22,7 @@ namespace Elwig.Documents { public bool IncludeSender = false; public bool UseBillingAddress = false; public bool ShowDateAndLocation = false; + public DateOnly? DateFrom; protected Table? Aside; public string Address { @@ -47,11 +48,12 @@ namespace Elwig.Documents { return NewAsideCell(new KernedParagraph(text, 10), colspan, isName); } - public BusinessDocument(string title, Member m, bool includeSender = false) : + public BusinessDocument(string title, Member m, DateOnly? dateFrom, bool includeSender = false) : base(title) { Member = m; Location = App.BranchLocation; IncludeSender = includeSender; + DateFrom = dateFrom; } protected override void BeforeRenderBody(iText.Layout.Document doc, PdfDocument pdf) { @@ -105,7 +107,7 @@ namespace Elwig.Documents { } } - doc.Add(new KernedParagraph(ShowDateAndLocation ? $"{Location}, am {Date:dd.MM.yyyy}" : "", 12).SetTextAlignment(TextAlignment.RIGHT).SetVerticalAlignment(VerticalAlignment.MIDDLE).SetHeight(24).SetMargin(0)); + doc.Add(new KernedParagraph(ShowDateAndLocation ? $"{Location}, am {DateFrom ?? Date:dd.MM.yyyy}" : "", 12).SetTextAlignment(TextAlignment.RIGHT).SetVerticalAlignment(VerticalAlignment.MIDDLE).SetHeight(24).SetMargin(0)); doc.Add(new KernedParagraph(Title, 12).SetFont(BF).SetMargins(0, 0, 12, 0)); } diff --git a/Elwig/Documents/CreditNote.cs b/Elwig/Documents/CreditNote.cs index f4be43c..a7e85bd 100644 --- a/Elwig/Documents/CreditNote.cs +++ b/Elwig/Documents/CreditNote.cs @@ -37,8 +37,8 @@ namespace Elwig.Documents { private CreditNoteDeliveryData? _data; private Dictionary? _underDeliveries; - public CreditNote(PaymentMember p, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary? underDeliveries = null) : - base($"{Name} {(p.Credit != null ? $"Nr. {p.Credit.Year}/{p.Credit.TgNr:000}" : p.Member.FullName)} – {p.Variant.Name}", p.Member) { + public CreditNote(PaymentMember p, DateOnly? dateFrom, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary? underDeliveries = null) : + base($"{Name} {(p.Credit != null ? $"Nr. {p.Credit.Year}/{p.Credit.TgNr:000}" : p.Member.FullName)} – {p.Variant.Name}", p.Member, dateFrom) { UseBillingAddress = true; ShowDateAndLocation = true; Payment = p; @@ -58,12 +58,12 @@ namespace Elwig.Documents { ConsiderCustomModifiers = billingData.ConsiderCustomModifiers; } - public static async Task Initialize(int year, int avnr, int mgnr, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary? underDeliveries = null) { + public static async Task Initialize(int year, int avnr, int mgnr, DateOnly? dateFrom, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary? underDeliveries = null) { using var ctx = new AppDbContext(); var p = await ctx.MemberPayments .Where(p => p.Year == year && p.AvNr == avnr && p.MgNr == mgnr) .SingleAsync(); - return new CreditNote(p, billingData, data, underDeliveries); + return new CreditNote(p, dateFrom, billingData, data, underDeliveries); } protected override async Task LoadData(AppDbContext ctx) { diff --git a/Elwig/Documents/DeliveryConfirmation.cs b/Elwig/Documents/DeliveryConfirmation.cs index 54c9321..3475a6e 100644 --- a/Elwig/Documents/DeliveryConfirmation.cs +++ b/Elwig/Documents/DeliveryConfirmation.cs @@ -24,8 +24,8 @@ namespace Elwig.Documents { public Dictionary MemberBuckets = []; public List MemberStats = []; - public DeliveryConfirmation(int year, Member m, DeliveryConfirmationDeliveryData? data = null) : - base($"{Name} {year}", m) { + public DeliveryConfirmation(int year, Member m, DateOnly? dateFrom, DeliveryConfirmationDeliveryData? data = null) : + base($"{Name} {year}", m, dateFrom) { _year = year; ShowDateAndLocation = true; UseBillingAddress = true; diff --git a/Elwig/Documents/DeliveryNote.cs b/Elwig/Documents/DeliveryNote.cs index 93f87dc..8e0da19 100644 --- a/Elwig/Documents/DeliveryNote.cs +++ b/Elwig/Documents/DeliveryNote.cs @@ -29,14 +29,12 @@ namespace Elwig.Documents { public int DisplayStats = App.Client.ModeDeliveryNoteStats; public DeliveryNote(Delivery d) : - base($"{Name} Nr. {d.LsNr}", d.Member) { + base($"{Name} Nr. {d.LsNr}", d.Member, DateOnly.FromDateTime(d.ModifiedAt)) { UseBillingAddress = true; ShowDateAndLocation = true; Delivery = d; Text = App.Client.TextDeliveryNote; DocumentId = d.LsNr; - Date = DateOnly.FromDateTime(d.ModifiedAt); - IsDoublePaged = true; } public static async Task Initialize(int year, int did) { diff --git a/Elwig/Documents/Document.cs b/Elwig/Documents/Document.cs index 78836da..b0549b9 100644 --- a/Elwig/Documents/Document.cs +++ b/Elwig/Documents/Document.cs @@ -49,14 +49,12 @@ namespace Elwig.Documents { public bool IsPreview = false; private iText.Layout.Document? _doc; - public int CurrentNextSeason; public string? DocumentId; public string Title; public string Author; public DateOnly Date; public Document(string title) { - CurrentNextSeason = Utils.CurrentNextSeason; Title = title; Author = App.Client.NameFull; Date = DateOnly.FromDateTime(Utils.Today); diff --git a/Elwig/Documents/Letterhead.cs b/Elwig/Documents/Letterhead.cs index 3209f57..c4c1744 100644 --- a/Elwig/Documents/Letterhead.cs +++ b/Elwig/Documents/Letterhead.cs @@ -6,7 +6,7 @@ using iText.Layout; namespace Elwig.Documents { public class Letterhead : BusinessDocument { public Letterhead(Member m) : - base($"Briefkopf {m.FullName}", m, true) { + base($"Briefkopf {m.FullName}", m, null, includeSender: true) { } protected override void RenderBody(iText.Layout.Document doc, PdfDocument pdf) { diff --git a/Elwig/Documents/MemberDataSheet.cs b/Elwig/Documents/MemberDataSheet.cs index 22b53c8..104767a 100644 --- a/Elwig/Documents/MemberDataSheet.cs +++ b/Elwig/Documents/MemberDataSheet.cs @@ -23,7 +23,8 @@ namespace Elwig.Documents { public List ActiveAreaCommitments = []; public MemberDataSheet(Member m) : - base($"{Name} {m.AdministrativeName}", m) { + base($"{Name} {m.AdministrativeName}", m, DateOnly.FromDateTime(m.ModifiedAt)) { + ShowDateAndLocation = true; DocumentId = $"{Name} {m.MgNr}"; } diff --git a/Elwig/Services/MemberService.cs b/Elwig/Services/MemberService.cs index 9adde38..56d61c4 100644 --- a/Elwig/Services/MemberService.cs +++ b/Elwig/Services/MemberService.cs @@ -413,7 +413,7 @@ namespace Elwig.Services { await b.CalculateBuckets(); App.HintContextChange(); - using var doc = new DeliveryConfirmation(year, m); + using var doc = new DeliveryConfirmation(year, m, null); await Utils.ExportDocument(doc, mode, emailData: (m, $"{DeliveryConfirmation.Name} {year}", $"Im Anhang finden Sie die Anlieferungsbestätigung {year}")); } catch (Exception exc) { MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); @@ -426,7 +426,7 @@ namespace Elwig.Services { Mouse.OverrideCursor = Cursors.Wait; await Task.Run(async () => { try { - using var doc = await CreditNote.Initialize(year, avnr, m.MgNr); + using var doc = await CreditNote.Initialize(year, avnr, m.MgNr, null); await Utils.ExportDocument(doc, mode, emailData: (m, $"{CreditNote.Name} {doc.Payment.Variant.Name}", $"Im Anhang finden Sie die Traubengutschrift {doc.Payment.Variant.Name}")); } catch (Exception exc) { MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); diff --git a/Elwig/Windows/MailWindow.xaml.cs b/Elwig/Windows/MailWindow.xaml.cs index 6e1cb58..6a368dd 100644 --- a/Elwig/Windows/MailWindow.xaml.cs +++ b/Elwig/Windows/MailWindow.xaml.cs @@ -756,14 +756,14 @@ namespace Elwig.Windows { } else { return []; } - return [new GeneratedDoc(new DeliveryConfirmation(year, m, data) { Date = postalDate })]; + return [new GeneratedDoc(new DeliveryConfirmation(year, m, postalDate, data) { Date = postalDate })]; } 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(data.Item2[m.MgNr], data.Item3, data.Item1[m.MgNr]) { Date = postalDate })]; + return [new GeneratedDoc(new CreditNote(data.Item2[m.MgNr], postalDate, data.Item3, data.Item1[m.MgNr]) { Date = postalDate })]; } catch (Exception) { return []; } diff --git a/Tests/UnitTests/DocumentTests/CreditNoteTest.cs b/Tests/UnitTests/DocumentTests/CreditNoteTest.cs index 1cf4db4..d429802 100644 --- a/Tests/UnitTests/DocumentTests/CreditNoteTest.cs +++ b/Tests/UnitTests/DocumentTests/CreditNoteTest.cs @@ -6,7 +6,7 @@ namespace Tests.UnitTests.DocumentTests { [Test] public async Task Test_01_VirtualCreditNote() { - using var doc = await CreditNote.Initialize(2020, 1, 101); + using var doc = await CreditNote.Initialize(2020, 1, 101, null); var text = await Utils.GeneratePdfText(doc); Assert.Multiple(() => { Assert.That(text, Contains.Substring(""" diff --git a/Tests/UnitTests/DocumentTests/DeliveryConfirmationTest.cs b/Tests/UnitTests/DocumentTests/DeliveryConfirmationTest.cs index 8989bb5..354b05b 100644 --- a/Tests/UnitTests/DocumentTests/DeliveryConfirmationTest.cs +++ b/Tests/UnitTests/DocumentTests/DeliveryConfirmationTest.cs @@ -11,7 +11,7 @@ namespace Tests.UnitTests.DocumentTests { using var ctx = new AppDbContext(); var m = await ctx.FetchMembers(101).SingleAsync(); var data = await DeliveryConfirmationDeliveryData.ForMember(ctx.DeliveryParts, 2020, m!); - using var doc = new DeliveryConfirmation(2020, m!, data); + using var doc = new DeliveryConfirmation(2020, m!, null, data); var text = await Utils.GeneratePdfText(doc); Assert.Multiple(() => { Assert.That(text, Contains.Substring("""