@page "/sender" @attribute [Microsoft.AspNetCore.Authorization.Authorize(Policy = "Sender")] @using System.Text.Json @using EnvelopeGenerator.ReceiverUI.Models @using DevExpress.Blazor @inject EnvelopeGenerator.ReceiverUI.Services.EnvelopeService EnvelopeService @inject EnvelopeGenerator.ReceiverUI.Services.AuthService AuthService @inject NavigationManager Navigation @inject IJSRuntime JSRuntime
Umschlag-Übersicht
@if (_isLoading && _allEnvelopes == null) {
Lädt...

Umschläge werden geladen...

} else if (_errorMessage != null) {
Fehler beim Laden der Umschläge

@_errorMessage

} else {
@if (_activeTab == "active") { @((cellContext.DataItem as EnvelopeDto)?.Title) @{ var envelope = cellContext.DataItem as EnvelopeDto; if (envelope != null) { var statusInfo = GetStatusInfo(envelope.Status);
@statusInfo.Label
} }
@{ var envelope = cellContext.DataItem as EnvelopeDto; if (envelope != null) { var receivers = envelope.EnvelopeReceivers ?? new List(); var signed = receivers.Count(r => r.Signed); var total = receivers.Count;
@signed / @total unterschrieben @if (total > 0) {
}
} }
Empfänger
@{ var envelope = detailContext.DataItem as EnvelopeDto; if (envelope?.EnvelopeReceivers?.Any() == true) {
@foreach (var receiver in envelope.EnvelopeReceivers) {
@if (receiver.Signed) { Unterschrieben } else { Ausstehend }
@receiver.Name @receiver.Email
}
} else {

Keine Empfänger

} }
} else { @((cellContext.DataItem as EnvelopeDto)?.Title) @{ var envelope = cellContext.DataItem as EnvelopeDto; if (envelope != null) { var statusInfo = GetStatusInfo(envelope.Status);
@statusInfo.Label
} }
@{ var envelope = cellContext.DataItem as EnvelopeDto; if (envelope != null) { var receivers = envelope.EnvelopeReceivers ?? new List(); var signed = receivers.Count(r => r.Signed); var total = receivers.Count;
@signed / @total unterschrieben @if (total > 0) {
}
} }
Empfänger
@{ var envelope = detailContext.DataItem as EnvelopeDto; if (envelope?.EnvelopeReceivers?.Any() == true) {
@foreach (var receiver in envelope.EnvelopeReceivers) {
@if (receiver.Signed) { Unterschrieben } else { Ausstehend }
@receiver.Name @receiver.Email
}
} else {

Keine Empfänger

} }
}
}
@code { private IEnumerable? _allEnvelopes; private IEnumerable? _activeEnvelopes; private IEnumerable? _completedEnvelopes; private EnvelopeDto? _selectedEnvelope; private string _activeTab = "active"; private bool _isLoading = true; private bool _isLoggingOut = false; private string? _errorMessage; private DxGrid? _gridActive; private DxGrid? _gridCompleted; protected override async Task OnInitializedAsync() { await LoadEnvelopesAsync(); } async Task LoadEnvelopesAsync() { _isLoading = true; _errorMessage = null; await InvokeAsync(StateHasChanged); try { _allEnvelopes = await EnvelopeService.GetAsync(); // Split into active and completed based on status var envelopes = _allEnvelopes.ToList(); _activeEnvelopes = envelopes.Where(e => ((EnvelopeStatus)e.Status).IsActive()).ToList(); _completedEnvelopes = envelopes.Where(e => ((EnvelopeStatus)e.Status).IsCompleted()).ToList(); await JSRuntime.InvokeVoidAsync("console.log", $"Loaded {_activeEnvelopes.Count()} active and {_completedEnvelopes.Count()} completed envelopes"); } catch (Exception ex) { _errorMessage = ex.Message; await JSRuntime.InvokeVoidAsync("console.error", "Fehler beim Laden der Umschläge:", ex.ToString()); } finally { _isLoading = false; await InvokeAsync(StateHasChanged); } } async Task RefreshEnvelopes() { await LoadEnvelopesAsync(); } void CreateEnvelope() { // TODO: Navigate to envelope creation page JSRuntime.InvokeVoidAsync("console.log", "Create envelope clicked - not yet implemented"); } void EditEnvelope() { if (_selectedEnvelope == null) return; // TODO: Navigate to envelope editor JSRuntime.InvokeVoidAsync("console.log", $"Edit envelope {_selectedEnvelope.Id} clicked - not yet implemented"); } void DeleteEnvelope() { if (_selectedEnvelope == null) return; // TODO: Show delete confirmation dialog JSRuntime.InvokeVoidAsync("console.log", $"Delete envelope {_selectedEnvelope.Id} clicked - not yet implemented"); } async Task LogoutAsync() { _isLoggingOut = true; await InvokeAsync(StateHasChanged); await AuthService.LogoutSenderAsync(); Navigation.NavigateTo("/sender/login", forceLoad: true); } bool IsEnvelopeSent(EnvelopeDto envelope) { var status = (EnvelopeStatus)envelope.Status; return status >= EnvelopeStatus.EnvelopeQueued; } (string Label, string CssClass, string DotColor) GetStatusInfo(int statusCode) { var status = (EnvelopeStatus)statusCode; return status switch { EnvelopeStatus.EnvelopePartlySigned => ("Teilweise unterschrieben", "partly-signed", "green"), EnvelopeStatus.EnvelopeQueued => ("In Warteschlange", "queued", "orange"), EnvelopeStatus.EnvelopeSent => ("Gesendet", "sent", "orange"), EnvelopeStatus.EnvelopeCompletelySigned => ("Vollständig unterschrieben", "completed", "green"), EnvelopeStatus.EnvelopeDeleted => ("Gelöscht", "deleted", "red"), EnvelopeStatus.EnvelopeRejected => ("Abgelehnt", "rejected", "red"), EnvelopeStatus.EnvelopeWithdrawn => ("Zurückgezogen", "withdrawn", "red"), EnvelopeStatus.EnvelopeCreated => ("Erstellt", "created", "blue"), EnvelopeStatus.EnvelopeSaved => ("Gespeichert", "saved", "blue"), _ => ("Unbekannt", "unknown", "blue") }; } void OnCustomizeElement(GridCustomizeElementEventArgs e) { // Future: Add custom row coloring based on status if needed } void OnSelectedEnvelopeChanged(object envelope) { _selectedEnvelope = envelope as EnvelopeDto; } }