Compare commits
14 Commits
741ebc8975
...
2ae6dda27e
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ae6dda27e | |||
| e5a25c5893 | |||
| 7d0648ede4 | |||
| bb6ca82289 | |||
| ed7068fe71 | |||
| 876c5def56 | |||
| 40697435ff | |||
| b43399ad01 | |||
| f41f26b810 | |||
| 442b7f7451 | |||
| beada59593 | |||
| b78aff102a | |||
| 67f068ef38 | |||
| 122df4bd62 |
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>;
|
||||
@@ -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>
|
||||
///
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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>();
|
||||
|
||||
@@ -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>
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
///
|
||||
|
||||
@@ -15,6 +15,6 @@ public class MappingProfile : Profile
|
||||
/// </summary>
|
||||
public MappingProfile()
|
||||
{
|
||||
CreateMap<Receiver, ReceiverReadDto>();
|
||||
CreateMap<Receiver, ReceiverDto>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
///
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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>
|
||||
///
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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!);
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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..")
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
8
EnvelopeGenerator.Form/frmMain.Designer.vb
generated
8
EnvelopeGenerator.Form/frmMain.Designer.vb
generated
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 =>
|
||||
|
||||
@@ -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 =>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user