BusinessDocument: Add DateFrom to be used for ShowDateAndLocation
All checks were successful
Test / Run tests (push) Successful in 2m0s

This commit is contained in:
2026-04-07 12:02:48 +02:00
parent 278d79429b
commit 0a9c800116
11 changed files with 20 additions and 21 deletions

View File

@@ -22,6 +22,7 @@ namespace Elwig.Documents {
public bool IncludeSender = false; public bool IncludeSender = false;
public bool UseBillingAddress = false; public bool UseBillingAddress = false;
public bool ShowDateAndLocation = false; public bool ShowDateAndLocation = false;
public DateOnly? DateFrom;
protected Table? Aside; protected Table? Aside;
public string Address { public string Address {
@@ -47,11 +48,12 @@ namespace Elwig.Documents {
return NewAsideCell(new KernedParagraph(text, 10), colspan, isName); 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) { base(title) {
Member = m; Member = m;
Location = App.BranchLocation; Location = App.BranchLocation;
IncludeSender = includeSender; IncludeSender = includeSender;
DateFrom = dateFrom;
} }
protected override void BeforeRenderBody(iText.Layout.Document doc, PdfDocument pdf) { 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)); doc.Add(new KernedParagraph(Title, 12).SetFont(BF).SetMargins(0, 0, 12, 0));
} }

View File

@@ -37,8 +37,8 @@ namespace Elwig.Documents {
private CreditNoteDeliveryData? _data; private CreditNoteDeliveryData? _data;
private Dictionary<string, UnderDelivery>? _underDeliveries; private Dictionary<string, UnderDelivery>? _underDeliveries;
public CreditNote(PaymentMember p, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary<string, UnderDelivery>? underDeliveries = null) : public CreditNote(PaymentMember p, DateOnly? dateFrom, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary<string, UnderDelivery>? underDeliveries = null) :
base($"{Name} {(p.Credit != null ? $"Nr. {p.Credit.Year}/{p.Credit.TgNr:000}" : p.Member.FullName)} {p.Variant.Name}", p.Member) { base($"{Name} {(p.Credit != null ? $"Nr. {p.Credit.Year}/{p.Credit.TgNr:000}" : p.Member.FullName)} {p.Variant.Name}", p.Member, dateFrom) {
UseBillingAddress = true; UseBillingAddress = true;
ShowDateAndLocation = true; ShowDateAndLocation = true;
Payment = p; Payment = p;
@@ -58,12 +58,12 @@ namespace Elwig.Documents {
ConsiderCustomModifiers = billingData.ConsiderCustomModifiers; ConsiderCustomModifiers = billingData.ConsiderCustomModifiers;
} }
public static async Task<CreditNote> Initialize(int year, int avnr, int mgnr, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary<string, UnderDelivery>? underDeliveries = null) { public static async Task<CreditNote> Initialize(int year, int avnr, int mgnr, DateOnly? dateFrom, BillingData? billingData = null, CreditNoteDeliveryData? data = null, Dictionary<string, UnderDelivery>? underDeliveries = null) {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var p = await ctx.MemberPayments var p = await ctx.MemberPayments
.Where(p => p.Year == year && p.AvNr == avnr && p.MgNr == mgnr) .Where(p => p.Year == year && p.AvNr == avnr && p.MgNr == mgnr)
.SingleAsync(); .SingleAsync();
return new CreditNote(p, billingData, data, underDeliveries); return new CreditNote(p, dateFrom, billingData, data, underDeliveries);
} }
protected override async Task LoadData(AppDbContext ctx) { protected override async Task LoadData(AppDbContext ctx) {

View File

@@ -24,8 +24,8 @@ namespace Elwig.Documents {
public Dictionary<string, MemberBucket> MemberBuckets = []; public Dictionary<string, MemberBucket> MemberBuckets = [];
public List<MemberStat> MemberStats = []; public List<MemberStat> MemberStats = [];
public DeliveryConfirmation(int year, Member m, DeliveryConfirmationDeliveryData? data = null) : public DeliveryConfirmation(int year, Member m, DateOnly? dateFrom, DeliveryConfirmationDeliveryData? data = null) :
base($"{Name} {year}", m) { base($"{Name} {year}", m, dateFrom) {
_year = year; _year = year;
ShowDateAndLocation = true; ShowDateAndLocation = true;
UseBillingAddress = true; UseBillingAddress = true;

View File

@@ -29,14 +29,12 @@ namespace Elwig.Documents {
public int DisplayStats = App.Client.ModeDeliveryNoteStats; public int DisplayStats = App.Client.ModeDeliveryNoteStats;
public DeliveryNote(Delivery d) : public DeliveryNote(Delivery d) :
base($"{Name} Nr. {d.LsNr}", d.Member) { base($"{Name} Nr. {d.LsNr}", d.Member, DateOnly.FromDateTime(d.ModifiedAt)) {
UseBillingAddress = true; UseBillingAddress = true;
ShowDateAndLocation = true; ShowDateAndLocation = true;
Delivery = d; Delivery = d;
Text = App.Client.TextDeliveryNote; Text = App.Client.TextDeliveryNote;
DocumentId = d.LsNr; DocumentId = d.LsNr;
Date = DateOnly.FromDateTime(d.ModifiedAt);
IsDoublePaged = true;
} }
public static async Task<DeliveryNote> Initialize(int year, int did) { public static async Task<DeliveryNote> Initialize(int year, int did) {

View File

@@ -49,14 +49,12 @@ namespace Elwig.Documents {
public bool IsPreview = false; public bool IsPreview = false;
private iText.Layout.Document? _doc; private iText.Layout.Document? _doc;
public int CurrentNextSeason;
public string? DocumentId; public string? DocumentId;
public string Title; public string Title;
public string Author; public string Author;
public DateOnly Date; public DateOnly Date;
public Document(string title) { public Document(string title) {
CurrentNextSeason = Utils.CurrentNextSeason;
Title = title; Title = title;
Author = App.Client.NameFull; Author = App.Client.NameFull;
Date = DateOnly.FromDateTime(Utils.Today); Date = DateOnly.FromDateTime(Utils.Today);

View File

@@ -6,7 +6,7 @@ using iText.Layout;
namespace Elwig.Documents { namespace Elwig.Documents {
public class Letterhead : BusinessDocument { public class Letterhead : BusinessDocument {
public Letterhead(Member m) : 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) { protected override void RenderBody(iText.Layout.Document doc, PdfDocument pdf) {

View File

@@ -23,7 +23,8 @@ namespace Elwig.Documents {
public List<AreaCom> ActiveAreaCommitments = []; public List<AreaCom> ActiveAreaCommitments = [];
public MemberDataSheet(Member m) : public MemberDataSheet(Member m) :
base($"{Name} {m.AdministrativeName}", m) { base($"{Name} {m.AdministrativeName}", m, DateOnly.FromDateTime(m.ModifiedAt)) {
ShowDateAndLocation = true;
DocumentId = $"{Name} {m.MgNr}"; DocumentId = $"{Name} {m.MgNr}";
} }

View File

@@ -413,7 +413,7 @@ namespace Elwig.Services {
await b.CalculateBuckets(); await b.CalculateBuckets();
App.HintContextChange(); 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}")); await Utils.ExportDocument(doc, mode, emailData: (m, $"{DeliveryConfirmation.Name} {year}", $"Im Anhang finden Sie die Anlieferungsbestätigung {year}"));
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
@@ -426,7 +426,7 @@ namespace Elwig.Services {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.Wait;
await Task.Run(async () => { await Task.Run(async () => {
try { 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}")); 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) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);

View File

@@ -756,14 +756,14 @@ namespace Elwig.Windows {
} else { } else {
return []; 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) { } else if (doc.Type == DocType.CreditNote) {
var details = ((int, int))doc.Details!; var details = ((int, int))doc.Details!;
var year = details.Item1; var year = details.Item1;
var avnr = details.Item2; var avnr = details.Item2;
var data = cnData[(year, avnr)]; var data = cnData[(year, avnr)];
try { 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) { } catch (Exception) {
return []; return [];
} }

View File

@@ -6,7 +6,7 @@ namespace Tests.UnitTests.DocumentTests {
[Test] [Test]
public async Task Test_01_VirtualCreditNote() { 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); var text = await Utils.GeneratePdfText(doc);
Assert.Multiple(() => { Assert.Multiple(() => {
Assert.That(text, Contains.Substring(""" Assert.That(text, Contains.Substring("""

View File

@@ -11,7 +11,7 @@ namespace Tests.UnitTests.DocumentTests {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var m = await ctx.FetchMembers(101).SingleAsync(); var m = await ctx.FetchMembers(101).SingleAsync();
var data = await DeliveryConfirmationDeliveryData.ForMember(ctx.DeliveryParts, 2020, m!); 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); var text = await Utils.GeneratePdfText(doc);
Assert.Multiple(() => { Assert.Multiple(() => {
Assert.That(text, Contains.Substring(""" Assert.That(text, Contains.Substring("""