Add user input fields and enhance signature details

Added input fields for "Full Name," "Position," and "Place" in `ReportViewer.razor` to collect additional user details. Introduced validation for required fields ("Full Name" and "Place") in `ApplySignatureAsync`. Updated `CreateSignedReportInstance` and `AddSignature` to include these details in the signature label, which now dynamically displays full name, position (if provided), place, and date. Adjusted layout and bounds for proper alignment and spacing in the report.
This commit is contained in:
2026-05-28 16:57:27 +02:00
parent 0a22e4e5cc
commit 60f01565da

View File

@@ -82,6 +82,25 @@
<canvas id="receiver-image-signature-pad" width="520" height="160" class="border rounded bg-white w-100" style="max-width: 520px;"></canvas>
}
<div class="border-top mt-3 pt-3">
<p class="text-muted mb-2">Bitte geben Sie die folgenden Angaben ein. Das Datum wird automatisch hinzugefuegt.</p>
<div class="row g-2">
<div class="col-12 col-md-6">
<label class="form-label" for="receiver-signer-name">Vor- und Nachname *</label>
<input id="receiver-signer-name" class="form-control" value="@SignerFullName" @oninput="args => SignerFullName = args.Value?.ToString() ?? string.Empty" />
</div>
<div class="col-12 col-md-6">
<label class="form-label" for="receiver-signer-position">Position</label>
<input id="receiver-signer-position" class="form-control" value="@SignerPosition" @oninput="args => SignerPosition = args.Value?.ToString() ?? string.Empty" />
</div>
<div class="col-12 col-md-6">
<label class="form-label" for="receiver-signature-place">Ort *</label>
<input id="receiver-signature-place" class="form-control" value="@SignaturePlace" @oninput="args => SignaturePlace = args.Value?.ToString() ?? string.Empty" />
</div>
</div>
</div>
@if(!string.IsNullOrWhiteSpace(PopupValidationMessage)) {
<div class="text-danger mt-2">@PopupValidationMessage</div>
}
@@ -125,6 +144,9 @@
string ActiveSignatureTab = SignatureTabDraw;
string TypedSignatureText = string.Empty;
string TypedSignatureFont = "'Brush Script MT', cursive";
string SignerFullName = string.Empty;
string SignerPosition = string.Empty;
string SignaturePlace = string.Empty;
int ViewerKey;
protected override async Task OnInitializedAsync() {
@@ -195,6 +217,16 @@
}
async Task ApplySignatureAsync() {
if(string.IsNullOrWhiteSpace(SignerFullName)) {
PopupValidationMessage = "Bitte geben Sie Vor- und Nachname ein.";
return;
}
if(string.IsNullOrWhiteSpace(SignaturePlace)) {
PopupValidationMessage = "Bitte geben Sie den Ort ein.";
return;
}
var signatureDataUrl = await GetActiveSignatureDataUrlAsync();
if(string.IsNullOrWhiteSpace(signatureDataUrl)) {
@@ -204,7 +236,7 @@
PopupValidationMessage = null;
SignatureValidationMessage = null;
Report = CreateSignedReportInstance(signatureDataUrl);
Report = CreateSignedReportInstance(signatureDataUrl, SignerFullName.Trim(), SignerPosition.Trim(), SignaturePlace.Trim());
SignatureApplied = true;
SignaturePopupVisible = false;
ViewerKey++;
@@ -242,13 +274,13 @@
: PredefinedReports.ReportsFactory.GetReport("LargeDatasetReport");
}
XtraReport CreateSignedReportInstance(string signatureDataUrl) {
XtraReport CreateSignedReportInstance(string signatureDataUrl, string signerFullName, string signerPosition, string signaturePlace) {
var report = CreateReportInstance();
AddSignature(report, signatureDataUrl);
AddSignature(report, signatureDataUrl, signerFullName, signerPosition, signaturePlace);
return report;
}
static void AddSignature(XtraReport report, string signatureDataUrl) {
static void AddSignature(XtraReport report, string signatureDataUrl, string signerFullName, string signerPosition, string signaturePlace) {
var imageBytes = Convert.FromBase64String(signatureDataUrl[(signatureDataUrl.IndexOf(',') + 1)..]);
using var imageStream = new MemoryStream(imageBytes);
var imageSource = new ImageSource(DXImage.FromStream(imageStream));
@@ -259,13 +291,17 @@
report.Bands.Add(bottomMargin);
}
bottomMargin.HeightF = Math.Max(bottomMargin.HeightF, 120F);
bottomMargin.HeightF = Math.Max(bottomMargin.HeightF, 140F);
RemoveExistingSignature(bottomMargin);
var signatureInformation = string.IsNullOrWhiteSpace(signerPosition)
? $"Empfaengerunterschrift\nName: {signerFullName}\nOrt: {signaturePlace}\nDatum: {DateTime.Now:g}"
: $"Empfaengerunterschrift\nName: {signerFullName}\nPosition: {signerPosition}\nOrt: {signaturePlace}\nDatum: {DateTime.Now:g}";
var signatureLabel = new XRLabel {
Name = "receiverSignatureLabel",
Text = $"Empfaengerunterschrift - {DateTime.Now:g}",
BoundsF = new RectangleF(390F, 6F, 230F, 18F),
Text = signatureInformation,
BoundsF = new RectangleF(390F, 6F, 230F, 48F),
Font = new DXFont("Open Sans", 8F, DXFontStyle.Bold),
ForeColor = System.Drawing.Color.FromArgb(73, 80, 87),
TextAlignment = TextAlignment.MiddleLeft
@@ -274,7 +310,7 @@
var signature = new XRPictureBox {
Name = "receiverSignatureImage",
ImageSource = imageSource,
BoundsF = new RectangleF(390F, 28F, 230F, 70F),
BoundsF = new RectangleF(390F, 58F, 230F, 70F),
Sizing = ImageSizeMode.ZoomImage,
Borders = BorderSide.Bottom,
BorderColor = System.Drawing.Color.FromArgb(73, 80, 87)