diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor index 1c6133cf..b3de0f5f 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor @@ -279,7 +279,7 @@ if (envelope != null) { var receivers = envelope.EnvelopeReceivers?.ToList() ?? []; - var signed = receivers.Count(r => r.Signed); + var signed = GetSignedReceiverCount(envelope); var total = receivers.Count;
@@ -314,8 +314,11 @@ @foreach (var receiver in envelope.EnvelopeReceivers) {
- - @if (receiver.Signed) + @{ + var isSigned = IsReceiverSigned(envelope, receiver); + } + + @if (isSigned) { @@ -442,7 +445,7 @@ if (envelope != null) { var receivers = envelope.EnvelopeReceivers?.ToList() ?? []; - var signed = receivers.Count(r => r.Signed); + var signed = GetSignedReceiverCount(envelope); var total = receivers.Count;
@@ -477,8 +480,11 @@ @foreach (var receiver in envelope.EnvelopeReceivers) {
- - @if (receiver.Signed) + @{ + var isSigned = IsReceiverSigned(envelope, receiver); + } + + @if (isSigned) { @@ -945,6 +951,40 @@ .ToList(); } + int GetSignedReceiverCount(EnvelopeDto envelope) + { + var receivers = envelope.EnvelopeReceivers?.ToList() ?? []; + if (receivers.Count == 0) + return 0; + + return receivers.Count(r => IsReceiverSigned(envelope, r)); + } + + bool IsReceiverSigned(EnvelopeDto envelope, EnvelopeGenerator.Application.Common.Dto.EnvelopeReceiver.EnvelopeReceiverDto receiver) + { + var status = (EnvelopeStatus)envelope.Status; + if (status is EnvelopeStatus.EnvelopeCompletelySigned or EnvelopeStatus.MessageCompletionSent) + return true; + + var histories = envelope.Histories?.Where(h => h.Status == EnvelopeStatus.DocumentSigned).ToList() ?? []; + if (histories.Count == 0) + return false; + + if (histories.Any(h => h.Receiver?.Id == receiver.ReceiverId)) + return true; + + var receiverEmail = receiver.Receiver?.EmailAddress; + if (!string.IsNullOrWhiteSpace(receiverEmail) && + histories.Any(h => string.Equals(h.UserReference, receiverEmail, StringComparison.OrdinalIgnoreCase))) + return true; + + if (!string.IsNullOrWhiteSpace(receiver.Name) && + histories.Any(h => string.Equals(h.UserReference, receiver.Name, StringComparison.OrdinalIgnoreCase))) + return true; + + return false; + } + DateTime GetHistoryDate(HistoryDto history) { return history.ActionDate ?? history.AddedWhen;