Compare commits

..

14 Commits

Author SHA1 Message Date
2ae6dda27e refactor(EnvelopeMailService): remove SendTFAQrCodeAsync method 2025-09-08 17:41:34 +02:00
e5a25c5893 refactor(EnvelopeReceiverDto): add option to make Receiver property generic 2025-09-08 17:32:00 +02:00
7d0648ede4 Um den Receiver in ReceiverSecretDto umwandeln zu können, fügen Sie ein Mapping-Profil hinzu. 2025-09-08 17:25:40 +02:00
bb6ca82289 feat(ReceiverSecretDto): ReceiverDto wurde so hinzugefügt, dass es vererbt wird.
- Die Eigenschaft TotpSecretkey wurde aus ReceiverDto entfernt.
 - Die Eigenschaft TotpSecretkey wurde zu ReceiverSecretDto hinzugefügt.
2025-09-08 17:23:20 +02:00
ed7068fe71 refactor(ReceiverReadDto): rename as ReceiverDto 2025-09-08 17:19:38 +02:00
876c5def56 fix(Extensions): update to add suffix 2025-09-08 16:53:44 +02:00
40697435ff fix(EnvelopeDto): convert type of Status-property to EnvelopeStatus 2025-09-08 16:20:16 +02:00
b43399ad01 fix(EGDbContext): add Envelope-property to Envelope-History relation definition on model builder 2025-09-08 16:16:22 +02:00
f41f26b810 refactor(DocumentReceiverElement): make AddedWhen nullable and add ChangedWho-property 2025-09-08 15:00:02 +02:00
442b7f7451 refactor(EGDbContext): split to regions 2025-09-08 13:03:12 +02:00
beada59593 refactor(HomeController): update EnvelopeLocked to use _mediator 2025-09-08 12:58:29 +02:00
b78aff102a remove then-calback method implementation on EnvelopeLocked-endpoint. 2025-09-08 11:55:08 +02:00
67f068ef38 refactor(Envelope): rename Receivers property as EnvelopeReceivers 2025-09-08 11:48:54 +02:00
122df4bd62 chore: remove DevExpress.Data.v21.2 and GdPicture.NET.14 2025-09-08 11:32:53 +02:00
50 changed files with 214 additions and 216 deletions

View File

@@ -1,6 +1,6 @@
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
using DigitalData.UserManager.Application.DTOs.User;
using EnvelopeGenerator.Application.Envelopes.Queries;
using EnvelopeGenerator.Domain.Constants;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.AspNetCore.Mvc;
@@ -25,7 +25,7 @@ public record EnvelopeDto
/// <summary>
///
/// </summary>
public required EnvelopeStatusQuery Status { get; set; }
public required EnvelopeStatus Status { get; set; }
/// <summary>
/// Default value is string.Empty

View File

@@ -62,7 +62,7 @@ public record EnvelopeHistoryDto
/// <summary>
/// Information about the receiver associated with this history entry.
/// </summary>
public ReceiverReadDto? Receiver { get; set; }
public ReceiverDto? Receiver { get; set; }
/// <summary>
/// Optional comment related to this history entry.

View File

@@ -6,9 +6,8 @@ namespace EnvelopeGenerator.Application.Dto.EnvelopeReceiver;
/// <summary>
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public record EnvelopeReceiverDto() : EnvelopeReceiverBasicDto()
public record EnvelopeReceiverDto<TReceiverDto> : EnvelopeReceiverBasicDto where TReceiverDto : ReceiverDto
{
/// <summary>
///
@@ -18,5 +17,11 @@ public record EnvelopeReceiverDto() : EnvelopeReceiverBasicDto()
/// <summary>
///
/// </summary>
public ReceiverReadDto? Receiver { get; set; }
}
public TReceiverDto? Receiver { get; set; }
}
/// <summary>
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public record EnvelopeReceiverDto : EnvelopeReceiverDto<ReceiverDto>;

View File

@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc;
using EnvelopeGenerator.Application.Dto.Receiver;
using Microsoft.AspNetCore.Mvc;
namespace EnvelopeGenerator.Application.Dto.EnvelopeReceiver;
@@ -6,7 +7,7 @@ namespace EnvelopeGenerator.Application.Dto.EnvelopeReceiver;
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public record EnvelopeReceiverSecretDto : EnvelopeReceiverDto
public record EnvelopeReceiverSecretDto : EnvelopeReceiverDto<ReceiverSecretDto>
{
/// <summary>
///

View File

@@ -59,5 +59,5 @@ public class EnvelopeReceiverReadOnlyDto
/// <summary>
/// Gets or inits the associated receiver details.
/// </summary>
public ReceiverReadDto? Receiver { get; set; }
public ReceiverDto? Receiver { get; set; }
}

View File

@@ -34,7 +34,8 @@ public class MappingProfile : Profile
CreateMap<Domain.Entities.EnvelopeReceiver, EnvelopeReceiverDto>();
CreateMap<Domain.Entities.EnvelopeReceiver, EnvelopeReceiverSecretDto>();
CreateMap<EnvelopeType, EnvelopeTypeDto>();
CreateMap<Domain.Entities.Receiver, ReceiverReadDto>();
CreateMap<Domain.Entities.Receiver, ReceiverDto>();
CreateMap<Domain.Entities.Receiver, ReceiverSecretDto>();
CreateMap<Domain.Entities.EnvelopeReceiverReadOnly, EnvelopeReceiverReadOnlyDto>();
// DTO to Entity mappings
@@ -48,7 +49,7 @@ public class MappingProfile : Profile
CreateMap<EnvelopeHistoryCreateDto, Domain.Entities.EnvelopeHistory>();
CreateMap<EnvelopeReceiverDto, Domain.Entities.EnvelopeReceiver>();
CreateMap<EnvelopeTypeDto, EnvelopeType>();
CreateMap<ReceiverReadDto, Domain.Entities.Receiver>().ForMember(rcv => rcv.EnvelopeReceivers, rcvReadDto => rcvReadDto.Ignore());
CreateMap<ReceiverDto, Domain.Entities.Receiver>().ForMember(rcv => rcv.EnvelopeReceivers, rcvReadDto => rcvReadDto.Ignore());
CreateMap<Domain.Entities.EnvelopeReceiver, EnvelopeReceiverBasicDto>();
CreateMap<EnvelopeReceiverReadOnlyCreateDto, Domain.Entities.EnvelopeReceiverReadOnly>();
CreateMap<EnvelopeReceiverReadOnlyUpdateDto, Domain.Entities.EnvelopeReceiverReadOnly>();

View File

@@ -8,7 +8,7 @@ namespace EnvelopeGenerator.Application.Dto.Receiver;
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public class ReceiverReadDto
public class ReceiverDto
{
/// <summary>
///
@@ -41,11 +41,6 @@ public class ReceiverReadDto
/// </summary>
public string? LastUsedName => EnvelopeReceivers?.LastOrDefault()?.Name;
/// <summary>
///
/// </summary>
public string? TotpSecretkey { get; set; } = null;
/// <summary>
///
/// </summary>

View File

@@ -0,0 +1,15 @@
using Microsoft.AspNetCore.Mvc;
namespace EnvelopeGenerator.Application.Dto.Receiver;
/// <summary>
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public class ReceiverSecretDto : ReceiverDto
{
/// <summary>
///
/// </summary>
public string? TotpSecretkey { get; set; }
}

View File

@@ -59,7 +59,7 @@ public class CreateEnvelopeReceiverCommandHandler : IRequestHandler<CreateEnvelo
var res = _mapper.Map<CreateEnvelopeReceiverResponse>(envelope);
res.UnsentReceivers = unsentRecipients;
res.SentReceiver = _mapper.Map<IEnumerable<ReceiverReadDto>>(sentRecipients);
res.SentReceiver = _mapper.Map<IEnumerable<ReceiverDto>>(sentRecipients);
return res;
}
}

View File

@@ -11,7 +11,7 @@ public record CreateEnvelopeReceiverResponse : EnvelopeDto
/// <summary>
///
/// </summary>
public IEnumerable<ReceiverReadDto> SentReceiver { get; set; } = new List<ReceiverReadDto>();
public IEnumerable<ReceiverDto> SentReceiver { get; set; } = new List<ReceiverDto>();
/// <summary>
///

View File

@@ -15,6 +15,6 @@ public class MappingProfile : Profile
/// </summary>
public MappingProfile()
{
CreateMap<Receiver, ReceiverReadDto>();
CreateMap<Receiver, ReceiverDto>();
}
}

View File

@@ -9,6 +9,7 @@ using EnvelopeGenerator.Application.Receivers.Queries;
using MediatR;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using EnvelopeGenerator.Application.SQL;
namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries;
@@ -131,12 +132,13 @@ public class ReadEnvelopeReceiverQueryHandler : IRequestHandler<ReadEnvelopeRece
q = q.Where(er => !status.Ignore.Contains(er.Envelope!.Status));
}
var envRcvs = await q.Include(er => er.Envelope).ThenInclude(e => e!.Documents).ThenInclude(d => d.Elements)
.Include(er => er.Envelope).ThenInclude(e => e!.History)
var envRcvs = await q
.Include(er => er.Envelope).ThenInclude(e => e!.Documents!).ThenInclude(d => d.Elements)
.Include(er => er.Envelope).ThenInclude(e => e!.Histories)
.Include(er => er.Envelope).ThenInclude(e => e!.User)
.Include(er => er.Receiver)
.ToListAsync(cancel);
return _mapper.Map<IEnumerable<EnvelopeReceiverDto>>(envRcvs);
return _mapper.Map<List<EnvelopeReceiverDto>>(envRcvs);
}
}
}

View File

@@ -71,7 +71,7 @@ public class ReceiverAlreadySignedQueryHandler : IRequestHandler<ReceiverAlready
return await _repo.Read()
.Where(er => er.Envelope!.Uuid == request.Envelope.Uuid)
.Where(er => er.Receiver!.Signature == request.Receiver.Signature)
.Where(er => er.Envelope!.History.Any(hist => hist.Status == EnvelopeStatus.DocumentSigned))
.Where(er => er.Envelope!.Histories.Any(hist => hist.Status == EnvelopeStatus.DocumentSigned))
.AnyAsync(cancel);
}
}

View File

@@ -42,6 +42,6 @@ public class ReadHistoryQueryHandler : IRequestHandler<ReadHistoryQuery, IEnumer
query = query.Where(h => h.Status == request.Status);
var hists = await query.ToListAsync(cancel);
return _mapper.Map<IEnumerable<EnvelopeHistoryDto>>(hists);
return _mapper.Map<List<EnvelopeHistoryDto>>(hists);
}
}

View File

@@ -71,7 +71,7 @@ public interface IEnvelopeHistoryService : ICRUDService<EnvelopeHistoryCreateDto
/// </summary>
/// <param name="envelopeId"></param>
/// <returns></returns>
Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId);
Task<IEnumerable<ReceiverDto>> ReadRejectingReceivers(int envelopeId);
/// <summary>
///

View File

@@ -35,11 +35,4 @@ public interface IEnvelopeMailService : IEmailOutService
/// <param name="envelopeReceiverDto"></param>
/// <returns></returns>
Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
/// <summary>
///
/// </summary>
/// <param name="envelopeReceiverDto"></param>
/// <returns></returns>
Task<DataResult<int>> SendTFAQrCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
}

View File

@@ -10,7 +10,7 @@ namespace EnvelopeGenerator.Application.Interfaces.Services;
///
/// </summary>
[Obsolete("Use MediatR")]
public interface IReceiverService : ICRUDService<CreateReceiverCommand, ReceiverReadDto, Receiver, int>
public interface IReceiverService : ICRUDService<CreateReceiverCommand, ReceiverDto, Receiver, int>
{
/// <summary>
///
@@ -18,7 +18,7 @@ public interface IReceiverService : ICRUDService<CreateReceiverCommand, Receiver
/// <param name="emailAddress"></param>
/// <param name="signature"></param>
/// <returns></returns>
Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null);
Task<DataResult<ReceiverDto>> ReadByAsync(string? emailAddress = null, string? signature = null);
/// <summary>
///

View File

@@ -15,7 +15,7 @@ namespace EnvelopeGenerator.Application.Receivers.Commands;
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public record CreateReceiverCommand : IRequest<(ReceiverReadDto Receiver, bool AlreadyExists)>
public record CreateReceiverCommand : IRequest<(ReceiverDto Receiver, bool AlreadyExists)>
{
/// <summary>
///
@@ -54,7 +54,7 @@ public record CreateReceiverCommand : IRequest<(ReceiverReadDto Receiver, bool A
/// <summary>
///
/// </summary>
public class CreateReceiverCommandHandler : IRequestHandler<CreateReceiverCommand, (ReceiverReadDto Receiver, bool AlreadyExists)>
public class CreateReceiverCommandHandler : IRequestHandler<CreateReceiverCommand, (ReceiverDto Receiver, bool AlreadyExists)>
{
/// <summary>
///
@@ -79,7 +79,7 @@ public class CreateReceiverCommandHandler : IRequestHandler<CreateReceiverComman
/// <param name="request"></param>
/// <param name="cancel"></param>
/// <returns></returns>
public async Task<(ReceiverReadDto Receiver, bool AlreadyExists)> Handle(CreateReceiverCommand request, CancellationToken cancel)
public async Task<(ReceiverDto Receiver, bool AlreadyExists)> Handle(CreateReceiverCommand request, CancellationToken cancel)
{
var receiver = await _repo.ReadOnly()
.Where(r => r.EmailAddress == request.EmailAddress)
@@ -90,7 +90,7 @@ public class CreateReceiverCommandHandler : IRequestHandler<CreateReceiverComman
if (!alreadyExists)
receiver = await _repo.CreateAsync(request, cancel);
var receiverDto = _mapper.Map<ReceiverReadDto>(receiver);
var receiverDto = _mapper.Map<ReceiverDto>(receiver);
return (receiverDto, alreadyExists);
}
}

View File

@@ -1,5 +1,4 @@
using Microsoft.Extensions.Localization;
using System.Runtime.CompilerServices;
namespace EnvelopeGenerator.Application.Resources;
@@ -328,39 +327,39 @@ public static class Extensions
///
/// </summary>
/// <param name="localizer"></param>
/// <param name="arg0"></param>
/// <param name="suffix"></param>
/// <returns></returns>
public static string LockedTitle(this IStringLocalizer localizer, object? arg0) => string.Format(localizer[nameof(Privacy)].Value, arg0);
public static string LockedTitle(this IStringLocalizer localizer, string suffix) => localizer[nameof(LockedTitle) + suffix].Value;
/// <summary>
///
/// </summary>
/// <param name="localizer"></param>
/// <param name="arg0"></param>
/// <param name="suffix"></param>
/// <returns></returns>
public static string LockedBody(this IStringLocalizer localizer, object? arg0) => string.Format(localizer[nameof(LockedBody)].Value, arg0);
public static string LockedBody(this IStringLocalizer localizer, string suffix) => localizer[nameof(LockedBody) + suffix].Value;
/// <summary>
///
/// </summary>
/// <param name="localizer"></param>
/// <param name="arg0"></param>
/// <param name="suffix"></param>
/// <returns></returns>
public static string LockedCodeLabel(this IStringLocalizer localizer, object? arg0) => string.Format(localizer[nameof(LockedCodeLabel)].Value, arg0);
public static string LockedCodeLabel(this IStringLocalizer localizer, string suffix) => localizer[nameof(LockedCodeLabel) + suffix].Value;
/// <summary>
///
/// </summary>
/// <param name="localizer"></param>
/// <param name="arg0"></param>
/// <param name="suffix"></param>
/// <returns></returns>
public static string LockedFooterTitle(this IStringLocalizer localizer, object? arg0) => string.Format(localizer[nameof(LockedFooterTitle)].Value, arg0);
public static string LockedFooterTitle(this IStringLocalizer localizer, string suffix) => localizer[nameof(LockedFooterTitle) + suffix].Value;
/// <summary>
///
/// </summary>
/// <param name="localizer"></param>
/// <param name="arg0"></param>
/// <param name="suffix"></param>
/// <returns></returns>
public static string LockedFooterBody(this IStringLocalizer localizer, object? arg0) => string.Format(localizer[nameof(LockedFooterBody)].Value, arg0);
public static string LockedFooterBody(this IStringLocalizer localizer, string suffix) => localizer[nameof(LockedFooterBody) + suffix].Value;
}

View File

@@ -121,11 +121,11 @@ public class EnvelopeHistoryService : CRUDService<IEnvelopeHistoryRepository, En
/// </summary>
/// <param name="envelopeId"></param>
/// <returns></returns>
public async Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId)
public async Task<IEnumerable<ReceiverDto>> ReadRejectingReceivers(int envelopeId)
{
var envelopes = await ReadRejectedAsync(envelopeId);
return envelopes is null
? Enumerable.Empty<ReceiverReadDto>()
? Enumerable.Empty<ReceiverDto>()
: envelopes
.Where(eh => eh?.Receiver != null)
.Select(eh => eh.Receiver!);

View File

@@ -181,31 +181,10 @@ public async Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto, Di
return await CreateWithTemplateAsync(createDto: mail, placeholders: placeholders, dto.Envelope);
}
/// <summary>
///
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
/// <summary>
///
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto dto) => await SendAsync(dto: dto, tempType: EmailTemplateType.DocumentAccessCodeReceived);
/// <summary>
///
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public Task<DataResult<int>> SendTFAQrCodeAsync(EnvelopeReceiverDto dto)
{
// Check if receiver or secret key is null
if (dto.Receiver is null)
throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver information is missing. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}");
if (dto.Receiver.TotpSecretkey is null)
throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver.TotpSecretKey is null. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}");
var totp_qr_64 = _authenticator.GenerateTotpQrCode(userEmail: dto.Receiver.EmailAddress, secretKey: dto.Receiver.TotpSecretkey).ToBase64String();
return SendAsync(dto, EmailTemplateType.TotpSecret, new()
{
{"[TFA_QR_CODE]", totp_qr_64 },
});
}
}

View File

@@ -13,7 +13,7 @@ namespace EnvelopeGenerator.Application.Services;
///
/// </summary>
[Obsolete("Use MediatR")]
public class ReceiverService : CRUDService<IReceiverRepository, CreateReceiverCommand, ReceiverReadDto, Receiver, int>, IReceiverService
public class ReceiverService : CRUDService<IReceiverRepository, CreateReceiverCommand, ReceiverDto, Receiver, int>, IReceiverService
{
/// <summary>
///
@@ -31,14 +31,14 @@ public class ReceiverService : CRUDService<IReceiverRepository, CreateReceiverCo
/// <param name="emailAddress"></param>
/// <param name="signature"></param>
/// <returns></returns>
public async Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null)
public async Task<DataResult<ReceiverDto>> ReadByAsync(string? emailAddress = null, string? signature = null)
{
var rcv = await _repository.ReadByAsync(emailAddress: emailAddress, signature: signature);
if (rcv is null)
return Result.Fail<ReceiverReadDto>();
return Result.Fail<ReceiverDto>();
return Result.Success(_mapper.Map<ReceiverReadDto>(rcv));
return Result.Success(_mapper.Map<ReceiverDto>(rcv));
}
/// <summary>

View File

@@ -85,7 +85,7 @@ Namespace Jobs
oEnvelope.CURRENT_WORK_APP = "signFLOW_API_EnvJob_InvMail"
Logger.Debug("SendInvMail - Loading Envelope Data..")
Dim oEnvelopeData = GetEnvelopeData(oId)
oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id).OfType(Of EnvelopeReceiver).ToList()
oEnvelope.EnvelopeReceivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id).OfType(Of EnvelopeReceiver).ToList()
Logger.Debug("SendInvMail - Created Reveivers!")
If oEnvelopeData Is Nothing Then
Logger.Warn("SendInvMail - EnvelopeData could not be loaded for Id [{0}]!", oId)
@@ -135,7 +135,7 @@ Namespace Jobs
Throw New ArgumentNullException("EnvelopeData")
End If
oEnvelope.CURRENT_WORK_APP = "signFLOW_API_EnvJob_Withdrawn"
oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id).OfType(Of EnvelopeReceiver).ToList()
oEnvelope.EnvelopeReceivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id).OfType(Of EnvelopeReceiver).ToList()
Logger.Debug("WithdrawnEnv - Sending Withdrawn Mails..")

View File

@@ -336,7 +336,7 @@ Namespace Jobs
' oAttachment = pAttachment
End If
For Each oReceiver In pEnvelope.Receivers
For Each oReceiver In pEnvelope.EnvelopeReceivers
If ActionService.CompleteEnvelope(pEnvelope, oReceiver) = False Then ', oAttachment
Logger.Error("Envelope could not be completed for receiver [{0}]", oReceiver.Receiver.EmailAddress)
Return False

View File

@@ -61,9 +61,9 @@ Public Class EnvelopeModel
oEnvelope.DocResult = Nothing
End If
oEnvelope.User = UserModel.SelectUser(oEnvelope.UserId)
oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id)
oEnvelope.EnvelopeReceivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id)
oEnvelope.Documents = DocumentModel.List(oEnvelope.Id)
oEnvelope.History = HistoryModel.List(oEnvelope.Id)
oEnvelope.Histories = HistoryModel.List(oEnvelope.Id)
oEnvelope.Type = EnvelopeTypeModel.GetById(oEnvelope.EnvelopeTypeId)
Return oEnvelope

View File

@@ -29,7 +29,7 @@ Public Class ActionService
Return False
End If
Dim oSendResult = pEnvelope.Receivers.
Dim oSendResult = pEnvelope.EnvelopeReceivers.
Select(Function(r) EmailService.SendDocumentReceivedEmail(pEnvelope, r)).
All(Function(r) r = True)
@@ -50,7 +50,7 @@ Public Class ActionService
Return False
End If
Dim oSendResult As Boolean = False
For Each oReceiver In pEnvelope.Receivers
For Each oReceiver In pEnvelope.EnvelopeReceivers
EmailService.SendDocumentReceivedEmail(pEnvelope, oReceiver)
Next
Return oSendResult
@@ -75,7 +75,7 @@ Public Class ActionService
Return False
End If
Dim oSendResult = pEnvelope.Receivers.
Dim oSendResult = pEnvelope.EnvelopeReceivers.
Select(Function(r) EmailService.SendEnvelopeDeletedEmail(pEnvelope, r, pReason)).
All(Function(r) r = True)
@@ -87,7 +87,7 @@ Public Class ActionService
End Function
Public Function API_SendWithdrawn_Mails(pEnvelope As Domain.Entities.Envelope, pReason As String) As Boolean
Dim oSendResult As Boolean = False
For Each oReceiver As ReceiverVM In pEnvelope.Receivers
For Each oReceiver As ReceiverVM In pEnvelope.EnvelopeReceivers
If EmailService.SendEnvelopeDeletedEmail(pEnvelope, oReceiver, pReason) = False Then
Return False
End If

View File

@@ -304,7 +304,7 @@ Namespace My.Resources
'''</summary>
Public Shared ReadOnly Property Incomplete_Receivers() As String
Get
Return ResourceManager.GetString("Incomplete Receivers", resourceCulture)
Return ResourceManager.GetString("Incomplete EnvelopeReceivers", resourceCulture)
End Get
End Property
@@ -371,7 +371,7 @@ Namespace My.Resources
'''</summary>
Public Shared ReadOnly Property Missing_Receivers() As String
Get
Return ResourceManager.GetString("Missing Receivers", resourceCulture)
Return ResourceManager.GetString("Missing EnvelopeReceivers", resourceCulture)
End Get
End Property

View File

@@ -90,10 +90,17 @@ public class DocumentReceiverElement
[Required]
[Column("ADDED_WHEN", TypeName = "datetime")]
[DefaultValue("GETDATE()")]
public DateTime AddedWhen { get; set; }
public DateTime? AddedWhen { get; set; }
[Column("CHANGED_WHEN", TypeName = "datetime")]
public DateTime ChangedWhen { get; set; }
public DateTime? ChangedWhen { get; set; }
[Column("CHANGED_WHO", TypeName = "nvarchar(100)")]
public string
#if NET
?
#endif
ChangedWho { get; set; }
[ForeignKey("DocumentId")]
public virtual EnvelopeDocument Document { get; set; }

View File

@@ -36,8 +36,8 @@ public class Envelope
CertificationType = (int)Constants.CertificationType.AdvancedElectronicSignature;
UseAccessCode = false;
Documents = Enumerable.Empty<EnvelopeDocument>().ToList();
History = Enumerable.Empty<EnvelopeHistory>().ToList();
Receivers = Enumerable.Empty<EnvelopeReceiver>().ToList();
Histories = Enumerable.Empty<EnvelopeHistory>().ToList();
EnvelopeReceivers = Enumerable.Empty<EnvelopeReceiver>().ToList();
#endif
}
@@ -158,15 +158,23 @@ public class Envelope
public bool IsAlreadySent => Status > EnvelopeStatus.EnvelopeSaved;
#endif
public List<EnvelopeDocument> Documents { get; set; }
public List<EnvelopeDocument>
#if NET
?
#endif
Documents { get; set; }
public List<EnvelopeHistory> History { get; set; }
public List<EnvelopeHistory>
#if NET
?
#endif
Histories { get; set; }
public List<EnvelopeReceiver>
#if NET
?
#endif
Receivers { get; set; }
EnvelopeReceivers { get; set; }
//#if NETFRAMEWORK
/// <summary>
@@ -179,10 +187,10 @@ public class Envelope
if (!Documents?.Any() ?? true)
errors.Add(My.Resources.Envelope.Missing_Documents);
if (!Receivers?.Any() ?? true)
if (!EnvelopeReceivers?.Any() ?? true)
errors.Add(My.Resources.Envelope.Missing_Receivers);
if (Receivers?.Any(r => !r.HasEmailAndName) ?? false)
if (EnvelopeReceivers?.Any(r => !r.HasEmailAndName) ?? false)
errors.Add(My.Resources.Envelope.Incomplete_Receivers);
return errors;

View File

@@ -318,7 +318,7 @@ namespace My.Resources {
/// </summary>
public static string Incomplete_Receivers {
get {
return ResourceManager.GetString("Incomplete Receivers", resourceCulture);
return ResourceManager.GetString("Incomplete EnvelopeReceivers", resourceCulture);
}
}
@@ -381,7 +381,7 @@ namespace My.Resources {
/// </summary>
public static string Missing_Receivers {
get {
return ResourceManager.GetString("Missing Receivers", resourceCulture);
return ResourceManager.GetString("Missing EnvelopeReceivers", resourceCulture);
}
}

View File

@@ -300,7 +300,7 @@ internal class Envelope {
/// </summary>
internal static string Incomplete_Receivers {
get {
return ResourceManager.GetString("Incomplete Receivers", resourceCulture);
return ResourceManager.GetString("Incomplete EnvelopeReceivers", resourceCulture);
}
}
@@ -363,7 +363,7 @@ internal class Envelope {
/// </summary>
internal static string Missing_Receivers {
get {
return ResourceManager.GetString("Missing Receivers", resourceCulture);
return ResourceManager.GetString("Missing EnvelopeReceivers", resourceCulture);
}
}

View File

@@ -75,7 +75,7 @@ Public MustInherit Class BaseController
Throw New ApplicationException("could not delete documents")
End If
Dim oResult2 = pEnvelope.Receivers.
Dim oResult2 = pEnvelope.EnvelopeReceivers.
Select(Function(r) ReceiverModel.Delete(r.Receiver.Id, pEnvelope.Id, oTransaction)).
All(Function(r) r = True)

View File

@@ -30,7 +30,7 @@ Public Class EnvelopeEditorController
Envelope = pEnvelope
Envelope.Documents = DocumentModel.List(pEnvelope.Id).ToList()
Envelope.Receivers = ReceiverModel.ListEnvelopeReceivers(pEnvelope.Id).Cast(Of EnvelopeReceiver)().ToList()
Envelope.EnvelopeReceivers = ReceiverModel.ListEnvelopeReceivers(pEnvelope.Id).Cast(Of EnvelopeReceiver)().ToList()
Thumbnail = New Thumbnail(pState.LogConfig)
ActionService = New ActionService(pState, Nothing)
@@ -56,7 +56,7 @@ Public Class EnvelopeEditorController
If ElementModel.OneElementPerReceiverExist(Envelope.Id) = False Then
For Each receiverItem As EnvelopeReceiver In Envelope.Receivers
For Each receiverItem As EnvelopeReceiver In Envelope.EnvelopeReceivers
If ElementModel.ElementsExist(Envelope.Id, receiverItem.Envelope.Id) = False Then
oEnvelopeErrors.Add(String.Format(Resources.Envelope.Missing_Elements_for_Receiver, receiverItem.Name))
End If
@@ -106,7 +106,7 @@ Public Class EnvelopeEditorController
Dim oAllReceivers As List(Of Receiver) = ReceiverModel.ListReceivers(pReceiversFromGrid).ToList()
pEnvelope.Receivers.Clear()
pEnvelope.EnvelopeReceivers.Clear()
For Each oReceiver In pReceiversFromGrid
If oReceiver.EmailAddress Is Nothing Then Continue For
@@ -118,7 +118,7 @@ Public Class EnvelopeEditorController
oReceiver.Signature = oDbReceiver.Signature
End If
pEnvelope.Receivers.Add(oReceiver)
pEnvelope.EnvelopeReceivers.Add(oReceiver)
Next
Return True
@@ -395,7 +395,7 @@ Public Class EnvelopeEditorController
Return False
End If
Return pEnvelope.Receivers.
Return pEnvelope.EnvelopeReceivers.
Select(Function(r) ReceiverModel.Assign(pEnvelope, r, pTransaction)).
All(Function(pResult) pResult = True)

View File

@@ -486,7 +486,7 @@ Partial Public Class frmEnvelopeEditor
'
'EnvelopeReceiverBindingSource
'
Me.EnvelopeReceiverBindingSource.DataMember = "Receivers"
Me.EnvelopeReceiverBindingSource.DataMember = "EnvelopeReceivers"
Me.EnvelopeReceiverBindingSource.DataSource = GetType(EnvelopeGenerator.Form.frmEnvelopeEditor)
'
'ViewReceivers

View File

@@ -105,7 +105,7 @@ Partial Public Class frmEnvelopeEditor
Else
Controller = New EnvelopeEditorController(State, Envelope)
Documents = New BindingList(Of EnvelopeDocument)(Controller.Envelope.Documents)
Receivers = New BindingList(Of ReceiverVM)(Controller.Envelope.Receivers.Select(Function(r) ReceiverVM.From(r)).ToList())
Receivers = New BindingList(Of ReceiverVM)(Controller.Envelope.EnvelopeReceivers.Select(Function(r) ReceiverVM.From(r)).ToList())
For Each docItem As EnvelopeDocument In Documents
If Not File.Exists(docItem.Filepath) Then
@@ -233,7 +233,7 @@ Partial Public Class frmEnvelopeEditor
.Document = Controller.Envelope.Documents.
Where(Function(d) d.Filename = oDocument.Filename).
SingleOrDefault(),
.Receivers = Controller.Envelope.Receivers.Select(Function(r) ReceiverVM.From(r)).ToList()
.Receivers = Controller.Envelope.EnvelopeReceivers.Select(Function(r) ReceiverVM.From(r)).ToList()
}
oForm.ShowDialog()
@@ -549,7 +549,7 @@ Partial Public Class frmEnvelopeEditor
ViewReceivers.DeleteRow(ViewReceivers.FocusedRowHandle)
Else
' Doppelte E-Mail-Adresse? TODO
'Dim oReceivers = Controller.Envelope.Receivers
'Dim oReceivers = Controller.Envelope.EnvelopeReceivers
CellValueChanged = True
Dim oNameCellValue = ViewReceivers.GetRowCellValue(e.RowHandle, COL_NAME)
If oNameCellValue Is Nothing Then

View File

@@ -194,9 +194,9 @@ Partial Class frmMain
Me.GridEnvelopes.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
Me.GridEnvelopes.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
GridLevelNode1.LevelTemplate = Me.ViewReceivers
GridLevelNode1.RelationName = "Receivers"
GridLevelNode1.RelationName = "EnvelopeReceivers"
GridLevelNode2.LevelTemplate = Me.ViewHistory
GridLevelNode2.RelationName = "History"
GridLevelNode2.RelationName = "Histories"
Me.GridEnvelopes.LevelTree.Nodes.AddRange(New DevExpress.XtraGrid.GridLevelNode() {GridLevelNode1, GridLevelNode2})
Me.GridEnvelopes.MainView = Me.ViewEnvelopes
Me.GridEnvelopes.MenuManager = Me.RibbonControl
@@ -580,9 +580,9 @@ Partial Class frmMain
Me.GridCompleted.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
Me.GridCompleted.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
GridLevelNode3.LevelTemplate = Me.ViewReceiversCompleted
GridLevelNode3.RelationName = "Receivers"
GridLevelNode3.RelationName = "EnvelopeReceivers"
GridLevelNode4.LevelTemplate = Me.ViewHistoryCompleted
GridLevelNode4.RelationName = "History"
GridLevelNode4.RelationName = "Histories"
Me.GridCompleted.LevelTree.Nodes.AddRange(New DevExpress.XtraGrid.GridLevelNode() {GridLevelNode3, GridLevelNode4})
Me.GridCompleted.MainView = Me.ViewCompleted
Me.GridCompleted.MenuManager = Me.RibbonControl

View File

@@ -624,7 +624,7 @@ Public Class frmMain
Dim oController = New EnvelopeEditorController(State, oEnvelope)
Dim Documents As New BindingList(Of EnvelopeDocument)
Dim Receivers = New BindingList(Of ReceiverVM)(oController.Envelope.Receivers.Select(Function(r) ReceiverVM.From(r)).ToList())
Dim Receivers = New BindingList(Of ReceiverVM)(oController.Envelope.EnvelopeReceivers.Select(Function(r) ReceiverVM.From(r)).ToList())
For Each oReceiver As ReceiverVM In Receivers
If oReceiver.EmailAddress = selReceiver.EmailAddress Then
If oController.ActionService.ResendReceiver(oEnvelope, oReceiver) = True Then
@@ -872,7 +872,7 @@ Public Class frmMain
If oEnvelope.UseAccessCode = True Then
Dim oController = New EnvelopeEditorController(State, oEnvelope)
Dim Documents As New BindingList(Of EnvelopeDocument)
Dim Receivers = New BindingList(Of ReceiverVM)(oController.Envelope.Receivers.Select(Function(r) ReceiverVM.From(r)).ToList())
Dim Receivers = New BindingList(Of ReceiverVM)(oController.Envelope.EnvelopeReceivers.Select(Function(r) ReceiverVM.From(r)).ToList())
For Each oReceiver As ReceiverVM In Receivers
If oReceiver.EmailAddress = selReceiver.EmailAddress Then
If oController.ActionService.ManuallySendAccessCode(oEnvelope, oReceiver) = True Then

View File

@@ -208,7 +208,7 @@ public class EnvelopeReceiverController : ControllerBase
var res = _mapper.Map<CreateEnvelopeReceiverResponse>(envelope);
res.UnsentReceivers = unsentReceivers;
res.SentReceiver = _mapper.Map<List<ReceiverReadDto>>(sentReceivers.Select(er => er.Receiver));
res.SentReceiver = _mapper.Map<List<ReceiverDto>>(sentReceivers.Select(er => er.Receiver));
#endregion
#region Add document

View File

@@ -21,7 +21,7 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers;
[ApiController]
[Authorize]
[Obsolete("Use MediatR")]
public class ReceiverController : CRUDControllerBaseWithErrorHandling<IReceiverService, CreateReceiverCommand, ReceiverReadDto, UpdateReceiverCommand, Receiver, int>
public class ReceiverController : CRUDControllerBaseWithErrorHandling<IReceiverService, CreateReceiverCommand, ReceiverDto, UpdateReceiverCommand, Receiver, int>
{
/// <summary>
/// Initialisiert eine neue Instanz des <see cref="ReceiverController"/>-Controllers.

View File

@@ -90,46 +90,60 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
{
modelBuilder.Entity<Config>().HasNoKey();
#region EnvelopeReceiver
modelBuilder.Entity<EnvelopeReceiver>()
.HasKey(er => new { er.EnvelopeId, er.ReceiverId });
modelBuilder.Entity<EnvelopeDocument>();
modelBuilder.Entity<DocumentReceiverElement>();
modelBuilder.Entity<DocumentStatus>();
modelBuilder.Entity<EmailTemplate>();
modelBuilder.Entity<EnvelopeReceiver>()
.HasOne(er => er.Envelope)
.WithMany(e => e.EnvelopeReceivers)
.HasForeignKey(er => er.EnvelopeId);
modelBuilder.Entity<EnvelopeReceiver>()
.HasOne(er => er.Receiver)
.WithMany(r => r.EnvelopeReceivers)
.HasForeignKey(er => er.ReceiverId);
#endregion EnvelopeReceiver
#region Envelope
modelBuilder.Entity<Envelope>()
.HasIndex(e => e.Uuid)
.IsUnique();
modelBuilder.Entity<EnvelopeHistory>();
modelBuilder.Entity<EnvelopeType>();
modelBuilder.Entity<Receiver>()
.HasIndex(e => e.Signature)
.IsUnique();
modelBuilder.Entity<Receiver>()
.HasIndex(e => e.EmailAddress)
.IsUnique();
modelBuilder.Entity<EmailOut>();
// Configure the one-to-many relationship of Envelope
modelBuilder.Entity<Envelope>()
.HasMany(e => e.Documents)
.WithOne()
.HasForeignKey(ed => ed.EnvelopeId);
modelBuilder.Entity<Envelope>()
.HasMany(e => e.History)
.WithOne()
.HasForeignKey(eh => eh.EnvelopeId);
.HasMany(e => e.Histories)
.WithOne(h => h.Envelope)
.HasForeignKey(hist => hist.EnvelopeId);
#endregion Envelope
#region Receiver
modelBuilder.Entity<Receiver>()
.HasIndex(e => e.Signature)
.IsUnique();
modelBuilder.Entity<Receiver>()
.HasIndex(e => e.EmailAddress)
.IsUnique();
#endregion Receiver
#region EnvelopeDocument
modelBuilder.Entity<EnvelopeDocument>()
.HasMany(ed => ed.Elements)
.WithOne(e => e.Document)
.HasForeignKey(e => e.DocumentId);
#endregion EnvelopeDocument
#region DocumentReceiverElement
modelBuilder.Entity<DocumentReceiverElement>()
.HasOne(dre => dre.Document)
.WithMany(ed => ed.Elements)
.HasForeignKey(dre => dre.DocumentId);
#endregion DocumentReceiverElement
if (!IsMigration)
{
@@ -146,12 +160,15 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
.HasPrincipalKey(e => e.Email);
}
#region EnvelopeReceiverReadOnly
modelBuilder.Entity<EnvelopeReceiverReadOnly>()
.HasOne(erro => erro.Receiver)
.WithMany()
.HasForeignKey(erro => erro.AddedWho)
.HasPrincipalKey(r => r.EmailAddress);
#endregion EnvelopeReceiverReadOnly
#region DocumentStatus
modelBuilder.Entity<DocumentStatus>()
.HasOne(ds => ds.Envelope)
.WithMany()
@@ -161,12 +178,9 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
.HasOne(ds => ds.Receiver)
.WithMany()
.HasForeignKey(ds => ds.ReceiverId);
#endregion DocumentStatus
modelBuilder.Entity<DocumentStatus>()
.HasOne(ds => ds.Receiver)
.WithMany()
.HasForeignKey(ds => ds.ReceiverId);
#region Trigger
// Configure entities to handle database triggers
void AddTrigger<T>() where T : class => _triggers
.Where(t => t.Key == typeof(T).Name)
@@ -176,7 +190,7 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
modelBuilder.Entity<T>().ToTable(tb => tb.HasTrigger(tName));
_logger?.LogInformation("Trigger '{triggerName}' has been added to the '{entityName}' entity.", tName, typeof(T).Name);
});
// TODO: call add trigger methods with attributes and reflection
AddTrigger<Config>();
AddTrigger<DocumentReceiverElement>();
@@ -190,6 +204,7 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
AddTrigger<EnvelopeType>();
AddTrigger<Receiver>();
AddTrigger<EmailOut>();
#endregion Trigger
//configure model builder for user manager tables
modelBuilder.ConfigureUserManager();

View File

@@ -1300,7 +1300,7 @@ namespace EnvelopeGenerator.Infrastructure.Migrations
modelBuilder.Entity("EnvelopeGenerator.Domain.Entities.EnvelopeHistory", b =>
{
b.HasOne("EnvelopeGenerator.Domain.Entities.Envelope", null)
.WithMany("History")
.WithMany("Histories")
.HasForeignKey("EnvelopeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@@ -1352,7 +1352,7 @@ namespace EnvelopeGenerator.Infrastructure.Migrations
modelBuilder.Entity("EnvelopeGenerator.Domain.Entities.Receiver", b =>
{
b.HasOne("EnvelopeGenerator.Domain.Entities.Envelope", null)
.WithMany("Receivers")
.WithMany("EnvelopeReceivers")
.HasForeignKey("EnvelopeId");
});
@@ -1360,9 +1360,9 @@ namespace EnvelopeGenerator.Infrastructure.Migrations
{
b.Navigation("Documents");
b.Navigation("History");
b.Navigation("Histories");
b.Navigation("Receivers");
b.Navigation("EnvelopeReceivers");
});
modelBuilder.Entity("EnvelopeGenerator.Domain.Entities.EnvelopeDocument", b =>

View File

@@ -1297,7 +1297,7 @@ namespace EnvelopeGenerator.Infrastructure.Migrations
modelBuilder.Entity("EnvelopeGenerator.Domain.Entities.EnvelopeHistory", b =>
{
b.HasOne("EnvelopeGenerator.Domain.Entities.Envelope", null)
.WithMany("History")
.WithMany("Histories")
.HasForeignKey("EnvelopeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@@ -1349,7 +1349,7 @@ namespace EnvelopeGenerator.Infrastructure.Migrations
modelBuilder.Entity("EnvelopeGenerator.Domain.Entities.Receiver", b =>
{
b.HasOne("EnvelopeGenerator.Domain.Entities.Envelope", null)
.WithMany("Receivers")
.WithMany("EnvelopeReceivers")
.HasForeignKey("EnvelopeId");
});
@@ -1357,9 +1357,9 @@ namespace EnvelopeGenerator.Infrastructure.Migrations
{
b.Navigation("Documents");
b.Navigation("History");
b.Navigation("Histories");
b.Navigation("Receivers");
b.Navigation("EnvelopeReceivers");
});
modelBuilder.Entity("EnvelopeGenerator.Domain.Entities.EnvelopeDocument", b =>

View File

@@ -25,7 +25,7 @@ public class EnvelopeRepository : CRUDRepository<Envelope, int, EGDbContext>, IE
query = query.Include(e => e.Documents);
if (history)
query = query.Include(e => e.History);
query = query.Include(e => e.Histories);
return await query.ToListAsync();
}
@@ -44,7 +44,7 @@ public class EnvelopeRepository : CRUDRepository<Envelope, int, EGDbContext>, IE
query = query.Include(e => e.User!);
if (withAll || withHistory)
query = query.Include(e => e.History);
query = query.Include(e => e.Histories);
return await query.FirstOrDefaultAsync();
}

View File

@@ -28,7 +28,7 @@ public class EnvelopeReceiverRepository : CRUDRepository<EnvelopeReceiver, (int
if (withEnvelope)
query = query
.Include(er => er.Envelope).ThenInclude(e => e!.Documents!).ThenInclude(d => d.Elements!.Where(e => signature == null || e.Receiver!.Signature == signature))
.Include(er => er.Envelope).ThenInclude(e => e!.History)
.Include(er => er.Envelope).ThenInclude(e => e!.Histories)
.Include(er => er.Envelope).ThenInclude(e => e!.User);
if (withReceiver)
@@ -63,7 +63,7 @@ public class EnvelopeReceiverRepository : CRUDRepository<EnvelopeReceiver, (int
if (withEnvelope)
query = query
.Include(er => er.Envelope).ThenInclude(e => e!.Documents!).ThenInclude(d => d.Elements!.Where(e => e.Receiver!.Id == receiverId))
.Include(er => er.Envelope).ThenInclude(e => e!.History)
.Include(er => er.Envelope).ThenInclude(e => e!.Histories)
.Include(er => er.Envelope).ThenInclude(e => e!.User);
if (withReceiver)

View File

@@ -17,7 +17,6 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
using Newtonsoft.Json;
using OtpNet;
using System.Security.Claims;
using EnvelopeGenerator.Domain.Constants;
namespace EnvelopeGenerator.Web.Controllers;
@@ -110,28 +109,29 @@ public class HomeController : ViewControllerBase
[HttpGet("{envelopeReceiverId}/Locked")]
[Obsolete("Use DigitalData.Core.Exceptions and .Middleware")]
public async Task<IActionResult> EnvelopeLocked([FromRoute] string envelopeReceiverId)
public async Task<IActionResult> EnvelopeLocked([FromRoute] string envelopeReceiverId, CancellationToken cancel)
{
try
{
return await _envRcvService.ReadByEnvelopeReceiverIdAsync(envelopeReceiverId: envelopeReceiverId).ThenAsync(
SuccessAsync: async er => {
if (User.IsInRole(ReceiverRole.FullyAuth))
return await CreateShowEnvelopeView(envelopeReceiverId, er);
else
return View()
.WithData("EnvelopeKey", envelopeReceiverId)
.WithData("TFAEnabled", er.Envelope!.TFAEnabled)
.WithData("HasPhoneNumber", er.HasPhoneNumber)
.WithData("SenderEmail", er.Envelope.User!.Email)
.WithData("EnvelopeTitle", er.Envelope.Title);
},
Fail: IActionResult (messages, notices) =>
var er = await _mediator.ReadEnvelopeReceiverAsync(envelopeReceiverId, cancel);
if (er is null)
{
_logger.LogNotice(notices);
Response.StatusCode = StatusCodes.Status401Unauthorized;
return this.ViewEnvelopeNotFound();
});
}
if (User.IsInRole(ReceiverRole.FullyAuth))
return await CreateShowEnvelopeView(envelopeReceiverId, er);
else
{
ViewData["EnvelopeKey"] = envelopeReceiverId;
ViewData["TFAEnabled"] = er.Envelope!.TFAEnabled;
ViewData["HasPhoneNumber"] = er.HasPhoneNumber;
ViewData["SenderEmail"] = er.Envelope.User!.Email;
ViewData["EnvelopeTitle"] = er.Envelope.Title;
return View();
}
}
catch(Exception ex)
{

View File

@@ -1,37 +1,24 @@
using DigitalData.Core.API;
using EnvelopeGenerator.Application.Interfaces.Services;
using EnvelopeGenerator.Application.Dto.EnvelopeHistory;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.AspNetCore.Mvc;
using EnvelopeGenerator.Domain.Constants;
using Microsoft.AspNetCore.Mvc;
using MediatR;
using EnvelopeGenerator.Application.Histories.Queries;
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEnvelopeHistoryController : CRUDControllerBase<IEnvelopeHistoryService, EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>
[ApiController]
[Route("api/[controller]")]
public class TestEnvelopeHistoryController : ControllerBase
{
public TestEnvelopeHistoryController(ILogger<TestEnvelopeHistoryController> logger, IEnvelopeHistoryService service) : base(logger, service)
{
}
ILogger<TestEnvelopeHistoryController> _logger;
[HttpGet("Count")]
public async Task<IActionResult> Count(int? envelopeId = null, string? userReference = null, EnvelopeStatus? status = null)
{
return Ok(await _service.CountAsync(envelopeId, userReference, status));
}
private readonly IMediator _mediator;
[HttpGet("is-ac-req")]
public async Task<IActionResult> AccessCodeAlreadyRequested(int envelopeId, string userReference)
public TestEnvelopeHistoryController(ILogger<TestEnvelopeHistoryController> logger, IMediator mediator)
{
return Ok(await _service.AccessCodeAlreadyRequested(envelopeId, userReference));
_logger = logger;
_mediator = mediator;
}
[HttpGet]
public async Task<IActionResult> GetAsyncWith(int? envelopeId = null, string? userReference = null, EnvelopeStatus? status = null)
{
return Ok(await _service.ReadAsync(envelopeId: envelopeId, userReference: userReference, status: status));
}
[NonAction]
public override Task<IActionResult> GetAll() => base.GetAll();
public async Task<IActionResult> Get([FromQuery] ReadHistoryQuery readHistoryQuery, CancellationToken cancel)
=> Ok(await _mediator.Send(readHistoryQuery, cancel));
}

View File

@@ -7,7 +7,7 @@ using EnvelopeGenerator.Application.Receivers.Commands;
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestReceiverController : CRUDControllerBase<IReceiverService, CreateReceiverCommand, ReceiverReadDto, UpdateReceiverCommand, Receiver, int>
public class TestReceiverController : CRUDControllerBase<IReceiverService, CreateReceiverCommand, ReceiverDto, UpdateReceiverCommand, Receiver, int>
{
public TestReceiverController(ILogger<TestReceiverController> logger, IReceiverService service) : base(logger, service)
{

View File

@@ -2131,15 +2131,6 @@
<ProjectReference Include="..\EnvelopeGenerator.Infrastructure\EnvelopeGenerator.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v21.2">
<HintPath>D:\ProgramFiles\DevExpress 21.2\Components\Bin\Framework\DevExpress.Data.v21.2.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14">
<HintPath>D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Content Update="appsettings.json">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>

View File

@@ -6,9 +6,9 @@
//TODO: Create view model
var nonce = _accessor.HttpContext?.Items["csp-nonce"] as string;
var cImg = _cImgOpt.Value;
ViewData["Title"] = _localizer.DocProtected();
string codeType = ViewData["CodeType"] is string _codeType ? _codeType : "accessCode";
string codeKeyName = (char.ToUpper(codeType[0]) + codeType.Substring(1)).Replace("Code", "");
ViewData["Title"] = _localizer.LockedTitle(codeKeyName);
bool viaSms = codeType == "smsCode";
bool viaAuthenticator = codeType == "authenticatorCode";
bool viaTFA = viaSms || viaAuthenticator;

View File

@@ -8,7 +8,7 @@
@functions {
string encodeEnvelopeKey(Envelope envelope)
{
var receiver = envelope.Receivers!.First();
var receiver = envelope.EnvelopeReceivers!.First();
return (envelope.Uuid, receiver.Receiver!.Signature).ToEnvelopeKey();
}