Compare commits
69 Commits
cf300d3ade
...
feat/homep
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43019e6710 | ||
|
|
2f634f18bd | ||
|
|
41b5b62f2c | ||
|
|
1e34042f77 | ||
|
|
54e3eed557 | ||
|
|
934414c3b6 | ||
|
|
f9c34ef8fd | ||
|
|
4615205aa5 | ||
|
|
a5a8a9e416 | ||
|
|
255843d760 | ||
|
|
121f0568ad | ||
|
|
5d95f2f221 | ||
|
|
3d5053d177 | ||
|
|
b79bc2e418 | ||
|
|
b4154b60a7 | ||
|
|
0090fc0dfa | ||
|
|
6eac92b7cb | ||
|
|
1b1edca23c | ||
|
|
57ea9e01f8 | ||
|
|
1a99041c60 | ||
|
|
56c735890d | ||
|
|
3688373481 | ||
|
|
b8fbeee322 | ||
|
|
57e4dfb3fb | ||
|
|
afc8d3baf0 | ||
|
|
51d77367ca | ||
|
|
614f3768d9 | ||
|
|
5f780f8d1e | ||
|
|
20825aa3ea | ||
|
|
c5b508d274 | ||
|
|
4eec4451b2 | ||
|
|
ca4718e159 | ||
|
|
33fcb5b70e | ||
|
|
82d8521a25 | ||
|
|
2f9d07312b | ||
|
|
fa36593b26 | ||
|
|
9cdb1409c0 | ||
|
|
95785e8c8b | ||
|
|
6d6e62c8d0 | ||
|
|
1720e137f9 | ||
|
|
3e6e2078bb | ||
|
|
6b0ec9386c | ||
|
|
ee49538f1e | ||
|
|
311009bc97 | ||
|
|
f5028a82fa | ||
|
|
07d70dbd22 | ||
|
|
152050ebf4 | ||
|
|
e27daa4b90 | ||
|
|
c63f369bd6 | ||
|
|
c50e16d74f | ||
|
|
808a02968b | ||
|
|
bbd03615e1 | ||
|
|
772d510705 | ||
|
|
aa918d875d | ||
|
|
28fdf0a115 | ||
|
|
120c8623dd | ||
|
|
363329ca18 | ||
|
|
eb0c6dabf4 | ||
|
|
cd88af6807 | ||
|
|
1941de1928 | ||
|
|
22347a0202 | ||
|
|
e54d9d2da8 | ||
|
|
06b1aa9560 | ||
|
|
4f35fe54be | ||
|
|
84e3e4e18d | ||
|
|
7f26bb4766 | ||
|
|
f674be5200 | ||
|
|
0718f24339 | ||
|
|
6abc17c3bf |
@@ -1,6 +1,6 @@
|
|||||||
namespace EnvelopeGenerator.Application.Configurations
|
namespace EnvelopeGenerator.Application.Configurations
|
||||||
{
|
{
|
||||||
public class CodeGeneratorParams
|
public class AuthenticatorParams
|
||||||
{
|
{
|
||||||
public string CharPool { get; init; } = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789012345678901234567890123456789";
|
public string CharPool { get; init; } = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789012345678901234567890123456789";
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Configurations;
|
||||||
|
|
||||||
|
public class DbTriggerParams : Dictionary<string, IEnumerable<string>>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
namespace EnvelopeGenerator.Application.Configurations
|
|
||||||
{
|
|
||||||
public class DispatcherConfig
|
|
||||||
{
|
|
||||||
public int SendingProfile { get; init; } = 1;
|
|
||||||
|
|
||||||
public string AddedWho { get; init; } = "DDEnvelopGenerator";
|
|
||||||
|
|
||||||
public int ReminderTypeId { get; init; } = 202377;
|
|
||||||
|
|
||||||
public string EmailAttmt1 { get; init; } = string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Configurations;
|
||||||
|
|
||||||
|
public class DispatcherParams
|
||||||
|
{
|
||||||
|
public int SendingProfile { get; init; } = 1;
|
||||||
|
|
||||||
|
public string AddedWho { get; init; } = "DDEnvelopGenerator";
|
||||||
|
|
||||||
|
public int ReminderTypeId { get; init; } = 202377;
|
||||||
|
|
||||||
|
public string EmailAttmt1 { get; init; } = string.Empty;
|
||||||
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
namespace EnvelopeGenerator.Application.Configurations
|
|
||||||
{
|
|
||||||
public class EnvelopeReceiverCacheParams
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the cache key format for SMS codes.
|
|
||||||
/// The placeholder {0} represents the envelopeReceiverId.
|
|
||||||
/// </summary>
|
|
||||||
public string CodeCacheKeyFormat { get; init; } = "sms-code-{0}";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the cache expiration key format for SMS codes.
|
|
||||||
/// The placeholder {0} represents the envelopeReceiverId.
|
|
||||||
/// </summary>
|
|
||||||
public string CodeExpirationCacheKeyFormat { get; init; } = "sms-code-expiration-{0}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Client;
|
|
||||||
using Microsoft.Extensions.Caching.Distributed;
|
|
||||||
using OtpNet;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Configurations.GtxMessaging
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// https://www.gtx-messaging.com/en/api-docs/sms-rest-api/
|
|
||||||
/// </summary>
|
|
||||||
public class SmsParams : IHttpClientOptions
|
|
||||||
{
|
|
||||||
public required string Uri { get; init; }
|
|
||||||
|
|
||||||
public string? Path { get; init; }
|
|
||||||
|
|
||||||
public Dictionary<string, object>? Headers { get; init; }
|
|
||||||
|
|
||||||
public Dictionary<string, object?>? QueryParams { get; init; }
|
|
||||||
|
|
||||||
public string RecipientQueryParamName { get; init; } = "to";
|
|
||||||
|
|
||||||
public string MessageQueryParamName { get; init; } = "text";
|
|
||||||
|
|
||||||
public int CodeLength { get; init; } = 5;
|
|
||||||
|
|
||||||
public int SmsTotpStep { get; init; } = 300;
|
|
||||||
|
|
||||||
public string DefaultTotpMessageFormat { get; init; } = "{0}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Client;
|
||||||
|
namespace EnvelopeGenerator.Application.Configurations;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// https://www.gtx-messaging.com/en/api-docs/sms-rest-api/
|
||||||
|
/// </summary>
|
||||||
|
public class GtxMessagingParams : IHttpClientOptions
|
||||||
|
{
|
||||||
|
public required string Uri { get; init; }
|
||||||
|
|
||||||
|
public string? Path { get; init; }
|
||||||
|
|
||||||
|
public Dictionary<string, object>? Headers { get; init; }
|
||||||
|
|
||||||
|
public Dictionary<string, object?>? QueryParams { get; init; }
|
||||||
|
|
||||||
|
public string RecipientQueryParamName { get; init; } = "to";
|
||||||
|
|
||||||
|
public string MessageQueryParamName { get; init; } = "text";
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
namespace EnvelopeGenerator.Application.Configurations
|
|
||||||
{
|
|
||||||
public class MailConfig
|
|
||||||
{
|
|
||||||
public required Dictionary<string, string> Placeholders { get; init; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Configurations;
|
||||||
|
|
||||||
|
public class MailParams
|
||||||
|
{
|
||||||
|
public required Dictionary<string, string> Placeholders { get; init; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
using OtpNet;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Configurations
|
||||||
|
{
|
||||||
|
public class TotpSmsParams
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The unit is second.
|
||||||
|
/// </summary>
|
||||||
|
public int TotpStep { get; init; } = 90;
|
||||||
|
|
||||||
|
public string Format { get; init; } = "Ihr 2FA-Passwort lautet {0}. Gültig bis {1}";
|
||||||
|
|
||||||
|
public ExpirationHandler Expiration { get; init; } = new();
|
||||||
|
|
||||||
|
public VerificationWindow? TotpVerificationWindow { get; private init; } = VerificationWindow.RfcSpecifiedNetworkDelay;
|
||||||
|
|
||||||
|
private IEnumerable<int>? _tvwParams;
|
||||||
|
|
||||||
|
public IEnumerable<int>? TotpVerificationWindowParams
|
||||||
|
{
|
||||||
|
get => _tvwParams;
|
||||||
|
init
|
||||||
|
{
|
||||||
|
_tvwParams = value;
|
||||||
|
if(_tvwParams is not null)
|
||||||
|
TotpVerificationWindow = new(previous: _tvwParams.ElementAtOrDefault(0), future: _tvwParams.ElementAtOrDefault(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ExpirationHandler
|
||||||
|
{
|
||||||
|
public string CacheKeyFormat { get; init; } = "e{0}_r{1}_sms_code_expiration";
|
||||||
|
|
||||||
|
public string Format { get; init; } = "HH:mm:ss";
|
||||||
|
|
||||||
|
public string CultureName
|
||||||
|
{
|
||||||
|
get => _cultureInfo.Name;
|
||||||
|
init => _cultureInfo = new(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CultureInfo _cultureInfo = new("de-DE");
|
||||||
|
|
||||||
|
public CultureInfo CultureInfo => _cultureInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
using OtpNet;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface ICodeGenerator
|
|
||||||
{
|
|
||||||
string GenerateCode(int length);
|
|
||||||
|
|
||||||
string GenerateTotpSecretKey(int? length = null);
|
|
||||||
|
|
||||||
byte[] GenerateTotpQrCode(string userEmail, string secretKey, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null);
|
|
||||||
|
|
||||||
byte[] GenerateTotpQrCode(string userEmail, int? length = null, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null);
|
|
||||||
|
|
||||||
string GenerateTotp(string secretKey, int step = 30);
|
|
||||||
|
|
||||||
bool VerifyTotp(string totpCode, string secretKey, int step = 30, VerificationWindow? window = null);
|
|
||||||
|
|
||||||
bool GetTotpExpirationTime(int step = 30);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using DigitalData.Core.DTO;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IConfigService : IReadService<ConfigDto, Config, int>
|
|
||||||
{
|
|
||||||
Task<DataResult<ConfigDto>> ReadFirstAsync();
|
|
||||||
|
|
||||||
Task<ConfigDto> ReadDefaultAsync();
|
|
||||||
|
|
||||||
Task<string> ReadDefaultSignatureHost();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IDocumentReceiverElementService : IBasicCRUDService<DocumentReceiverElementDto, DocumentReceiverElement, int>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IDocumentStatusService : IBasicCRUDService<DocumentStatusDto, DocumentStatus, int>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using DigitalData.Core.DTO;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
using static EnvelopeGenerator.Common.Constants;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEmailTemplateService : IBasicCRUDService<EmailTemplateDto, EmailTemplate, int>
|
|
||||||
{
|
|
||||||
Task<DataResult<EmailTemplateDto>> ReadByNameAsync(EmailTemplateType type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeCertificateService : IBasicCRUDService<EnvelopeCertificateDto, EnvelopeCertificate, int>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeDocumentService : IBasicCRUDService<EnvelopeDocumentDto, EnvelopeDocument, int>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using DigitalData.Core.DTO;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.Receiver;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
using static EnvelopeGenerator.Common.Constants;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeHistoryService : ICRUDService<EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>
|
|
||||||
{
|
|
||||||
Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null);
|
|
||||||
|
|
||||||
Task<bool> AccessCodeAlreadyRequested(int envelopeId, string userReference);
|
|
||||||
|
|
||||||
Task<bool> IsSigned(int envelopeId, string userReference);
|
|
||||||
|
|
||||||
Task<bool> IsRejected(int envelopeId, string? userReference = null);
|
|
||||||
|
|
||||||
Task<IEnumerable<EnvelopeHistoryDto>> ReadAsync(int? envelopeId = null, string? userReference = null, ReferenceType? referenceType = null, int? status = null, bool withSender = false, bool withReceiver = false);
|
|
||||||
|
|
||||||
Task<IEnumerable<EnvelopeHistoryDto>> ReadRejectedAsync(int envelopeId, string? userReference = null);
|
|
||||||
|
|
||||||
Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId);
|
|
||||||
|
|
||||||
Task<DataResult<long>> RecordAsync(int envelopeId, string userReference, EnvelopeStatus status, string? comment = null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
using DigitalData.Core.DTO;
|
|
||||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
|
||||||
using EnvelopeGenerator.Common;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeMailService : IEmailOutService
|
|
||||||
{
|
|
||||||
Task<DataResult<int>> SendAsync(EnvelopeReceiverDto envelopeReceiverDto, Constants.EmailTemplateType tempType, Dictionary<string, object>? optionalPlaceholders = null);
|
|
||||||
|
|
||||||
Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto, Dictionary<string, object>? optionalPlaceholders = null);
|
|
||||||
|
|
||||||
Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
|
|
||||||
|
|
||||||
Task<DataResult<int>> SendTFAQrCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeReceiverReadOnlyService : ICRUDService<EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnlyDto, EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly, long>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using DigitalData.Core.DTO;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.Messaging;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeReceiverService : IBasicCRUDService<EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>
|
|
||||||
{
|
|
||||||
|
|
||||||
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true);
|
|
||||||
|
|
||||||
Task<DataResult<IEnumerable<string?>>> ReadAccessCodeByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true);
|
|
||||||
|
|
||||||
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true);
|
|
||||||
|
|
||||||
Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
|
|
||||||
|
|
||||||
Task<DataResult<EnvelopeReceiverSecretDto>> ReadWithSecretByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
|
|
||||||
|
|
||||||
Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
|
|
||||||
|
|
||||||
Task<DataResult<string>> ReadAccessCodeByIdAsync(int envelopeId, int receiverId);
|
|
||||||
|
|
||||||
Task<DataResult<bool>> VerifyAccessCodeAsync(string uuid, string signature, string accessCode);
|
|
||||||
|
|
||||||
Task<DataResult<bool>> VerifyAccessCodeAsync(string envelopeReceiverId, string accessCode);
|
|
||||||
|
|
||||||
Task<DataResult<bool>> IsExisting(string envelopeReceiverId);
|
|
||||||
|
|
||||||
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses);
|
|
||||||
|
|
||||||
Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail);
|
|
||||||
|
|
||||||
Task<DataResult<SmsResponse>> SendSmsAsync(string envelopeReceiverId, string message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using DigitalData.Core.DTO;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeService : IBasicCRUDService<EnvelopeDto, Envelope, int>
|
|
||||||
{
|
|
||||||
Task<DataResult<IEnumerable<EnvelopeDto>>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false);
|
|
||||||
|
|
||||||
Task<DataResult<EnvelopeDto>> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false);
|
|
||||||
|
|
||||||
Task<DataResult<IEnumerable<EnvelopeDto>>> ReadByUserAsync(int userId, int? min_status = null, int? max_status = null, params int[]ignore_statuses);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IEnvelopeTypeService : IBasicCRUDService<EnvelopeTypeDto, EnvelopeType, int>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
using Microsoft.IdentityModel.Tokens;
|
|
||||||
using System.IdentityModel.Tokens.Jwt;
|
|
||||||
using System.Security.Claims;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IJWTService<TClaimValue>
|
|
||||||
{
|
|
||||||
public static SymmetricSecurityKey GenerateSecurityKey(int byteSize = 32)
|
|
||||||
{
|
|
||||||
using var rng = RandomNumberGenerator.Create();
|
|
||||||
var randomBytes = new byte[byteSize];
|
|
||||||
rng.GetBytes(randomBytes);
|
|
||||||
var securityKey = new SymmetricSecurityKey(randomBytes);
|
|
||||||
|
|
||||||
return securityKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
string GenerateToken(TClaimValue claimValue);
|
|
||||||
|
|
||||||
JwtSecurityToken? ReadSecurityToken(string token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
using EnvelopeGenerator.Application.DTOs.Messaging;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts;
|
|
||||||
|
|
||||||
public interface IMessagingService
|
|
||||||
{
|
|
||||||
string ServiceProvider { get; }
|
|
||||||
|
|
||||||
Task<SmsResponse> SendSmsAsync(string recipient, string message);
|
|
||||||
|
|
||||||
Task<SmsResponse> SendSmsCodeAsync(string recipient, string secretKey, string messageFormat = "{0}");
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions;
|
|
||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using DigitalData.Core.DTO;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.Receiver;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IReceiverService : ICRUDService<ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
|
|
||||||
{
|
|
||||||
Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null);
|
|
||||||
|
|
||||||
Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null);
|
|
||||||
|
|
||||||
Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto) where TUpdateDto : IUnique<int>;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using DigitalData.Core.Abstractions.Application;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
|
||||||
{
|
|
||||||
public interface IUserReceiverService : IBasicCRUDService<UserReceiverDto, UserReceiver, int>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IConfigRepository : ICRUDRepository<Config, int>
|
||||||
|
{
|
||||||
|
Task<Config?> ReadFirstAsync();
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IDocumentReceiverElementRepository : ICRUDRepository<DocumentReceiverElement, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IDocumentStatusRepository : ICRUDRepository<DocumentStatus, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEmailTemplateRepository : ICRUDRepository<EmailTemplate, int>
|
||||||
|
{
|
||||||
|
Task<EmailTemplate?> ReadByNameAsync(EmailTemplateType type);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEnvelopeCertificateRepository : ICRUDRepository<EnvelopeCertificate, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEnvelopeDocumentRepository : ICRUDRepository<EnvelopeDocument, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEnvelopeHistoryRepository : ICRUDRepository<EnvelopeHistory, long>
|
||||||
|
{
|
||||||
|
Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null);
|
||||||
|
|
||||||
|
Task<IEnumerable<EnvelopeHistory>> ReadAsync(int? envelopeId = null, string? userReference = null, int? status = null, bool withSender = false, bool withReceiver = false);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEnvelopeReceiverReadOnlyRepository : ICRUDRepository<EnvelopeReceiverReadOnly, long>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEnvelopeReceiverRepository : ICRUDRepository<EnvelopeReceiver, (int Envelope, int Receiver)>
|
||||||
|
{
|
||||||
|
Task<IEnumerable<EnvelopeReceiver>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<IEnumerable<EnvelopeReceiver>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<EnvelopeReceiver?> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<string?> ReadAccessCodeAsync(string uuid, string signature, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<int> CountAsync(string uuid, string signature);
|
||||||
|
|
||||||
|
Task<EnvelopeReceiver?> ReadByIdAsync(int envelopeId, int receiverId, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<string?> ReadAccessCodeByIdAsync(int envelopeId, int receiverId, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<IEnumerable<EnvelopeReceiver>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses);
|
||||||
|
|
||||||
|
Task<EnvelopeReceiver?> ReadLastByReceiver(string email);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEnvelopeRepository : ICRUDRepository<Envelope, int>
|
||||||
|
{
|
||||||
|
Task<IEnumerable<Envelope>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false);
|
||||||
|
|
||||||
|
Task<Envelope?> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false);
|
||||||
|
|
||||||
|
Task<IEnumerable<Envelope>> ReadByUserAsync(int userId, int? min_status = null, int? max_status = null, params int[] ignore_statuses);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IEnvelopeTypeRepository : ICRUDRepository<EnvelopeType, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IReceiverRepository : ICRUDRepository<Receiver, int>
|
||||||
|
{
|
||||||
|
Task<Receiver?> ReadByAsync(string? emailAddress = null, string? signature = null);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Infrastructure;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
|
public interface IUserReceiverRepository : ICRUDRepository<UserReceiver, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using OtpNet;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IAuthenticator
|
||||||
|
{
|
||||||
|
string GenerateCode(int length);
|
||||||
|
|
||||||
|
string GenerateTotpSecretKey(int? length = null);
|
||||||
|
|
||||||
|
byte[] GenerateTotpQrCode(string userEmail, string secretKey, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null);
|
||||||
|
|
||||||
|
byte[] GenerateTotpQrCode(string userEmail, int? length = null, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null);
|
||||||
|
|
||||||
|
string GenerateTotp(string secretKey, int step = 30);
|
||||||
|
|
||||||
|
bool VerifyTotp(string totpCode, string secretKey, int step = 30, VerificationWindow? window = null);
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IConfigService : IReadService<ConfigDto, Config, int>
|
||||||
|
{
|
||||||
|
Task<DataResult<ConfigDto>> ReadFirstAsync();
|
||||||
|
|
||||||
|
Task<ConfigDto> ReadDefaultAsync();
|
||||||
|
|
||||||
|
Task<string> ReadDefaultSignatureHost();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IDocumentReceiverElementService : IBasicCRUDService<DocumentReceiverElementDto, DocumentReceiverElement, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IDocumentStatusService : IBasicCRUDService<DocumentStatusDto, DocumentStatus, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEmailTemplateService : IBasicCRUDService<EmailTemplateDto, EmailTemplate, int>
|
||||||
|
{
|
||||||
|
Task<DataResult<EmailTemplateDto>> ReadByNameAsync(EmailTemplateType type);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeCertificateService : IBasicCRUDService<EnvelopeCertificateDto, EnvelopeCertificate, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeDocumentService : IBasicCRUDService<EnvelopeDocumentDto, EnvelopeDocument, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeHistoryService : ICRUDService<EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>
|
||||||
|
{
|
||||||
|
Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null);
|
||||||
|
|
||||||
|
Task<bool> AccessCodeAlreadyRequested(int envelopeId, string userReference);
|
||||||
|
|
||||||
|
Task<bool> IsSigned(int envelopeId, string userReference);
|
||||||
|
|
||||||
|
Task<bool> IsRejected(int envelopeId, string? userReference = null);
|
||||||
|
|
||||||
|
Task<IEnumerable<EnvelopeHistoryDto>> ReadAsync(int? envelopeId = null, string? userReference = null, ReferenceType? referenceType = null, int? status = null, bool withSender = false, bool withReceiver = false);
|
||||||
|
|
||||||
|
Task<IEnumerable<EnvelopeHistoryDto>> ReadRejectedAsync(int envelopeId, string? userReference = null);
|
||||||
|
|
||||||
|
Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId);
|
||||||
|
|
||||||
|
Task<DataResult<long>> RecordAsync(int envelopeId, string userReference, EnvelopeStatus status, string? comment = null);
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
|
using EnvelopeGenerator.Common;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeMailService : IEmailOutService
|
||||||
|
{
|
||||||
|
Task<DataResult<int>> SendAsync(EnvelopeReceiverDto envelopeReceiverDto, Constants.EmailTemplateType tempType, Dictionary<string, object>? optionalPlaceholders = null);
|
||||||
|
|
||||||
|
Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto, Dictionary<string, object>? optionalPlaceholders = null);
|
||||||
|
|
||||||
|
Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
|
||||||
|
|
||||||
|
Task<DataResult<int>> SendTFAQrCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeReceiverReadOnlyService : ICRUDService<EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnlyDto, EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly, long>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Messaging;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeReceiverService : IBasicCRUDService<EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>
|
||||||
|
{
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<string?>>> ReadAccessCodeByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true);
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<DataResult<EnvelopeReceiverSecretDto>> ReadWithSecretByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
|
||||||
|
|
||||||
|
Task<DataResult<string>> ReadAccessCodeByIdAsync(int envelopeId, int receiverId);
|
||||||
|
|
||||||
|
Task<DataResult<bool>> VerifyAccessCodeAsync(string uuid, string signature, string accessCode);
|
||||||
|
|
||||||
|
Task<DataResult<bool>> VerifyAccessCodeAsync(string envelopeReceiverId, string accessCode);
|
||||||
|
|
||||||
|
Task<DataResult<bool>> IsExisting(string envelopeReceiverId);
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses);
|
||||||
|
|
||||||
|
Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail);
|
||||||
|
|
||||||
|
Task<DataResult<SmsResponse>> SendSmsAsync(string envelopeReceiverId, string message);
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeService : IBasicCRUDService<EnvelopeDto, Envelope, int>
|
||||||
|
{
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeDto>>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false);
|
||||||
|
|
||||||
|
Task<DataResult<EnvelopeDto>> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false);
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeDto>>> ReadByUserAsync(int userId, int? min_status = null, int? max_status = null, params int[] ignore_statuses);
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Messaging;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeSmsHandler
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// If expiration is passed then, sends sms and returns smsResponse and up-to-date expiration; otherwise send expiration.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="er_secret"></param>
|
||||||
|
/// <param name="cToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<(SmsResponse? SmsResponse, DateTime Expiration)> SendTotpAsync(EnvelopeReceiverSecretDto er_secret, CancellationToken cToken = default);
|
||||||
|
|
||||||
|
bool VerifyTotp(string totpCode, string secretKey);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IEnvelopeTypeService : IBasicCRUDService<EnvelopeTypeDto, EnvelopeType, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IReceiverService : ICRUDService<ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
|
||||||
|
{
|
||||||
|
Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null);
|
||||||
|
|
||||||
|
Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null);
|
||||||
|
|
||||||
|
Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto) where TUpdateDto : IUnique<int>;
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using EnvelopeGenerator.Application.DTOs.Messaging;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
//TODO: move to DigitalData.Core
|
||||||
|
public interface ISmsSender
|
||||||
|
{
|
||||||
|
string ServiceProvider { get; }
|
||||||
|
|
||||||
|
Task<SmsResponse> SendSmsAsync(string recipient, string message);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
|
public interface IUserReceiverService : IBasicCRUDService<UserReceiverDto, UserReceiver, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
{
|
{
|
||||||
public required bool Ok { get; init; }
|
public required bool Ok { get; init; }
|
||||||
|
|
||||||
|
public bool Failed => !Ok;
|
||||||
|
|
||||||
public dynamic? Errors { get; init; }
|
public dynamic? Errors { get; init; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ using System.Text;
|
|||||||
|
|
||||||
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
||||||
{
|
{
|
||||||
public record ReceiverCreateDto([EmailAddress] string EmailAddress, string? TotpSecretkey = null, DateTime? TotpExpiration = null)
|
public record ReceiverCreateDto([EmailAddress] string EmailAddress, string? TotpSecretkey = null)
|
||||||
{
|
{
|
||||||
public string Signature => sha256HexOfMail.Value;
|
public string Signature => sha256HexOfMail.Value;
|
||||||
|
|
||||||
|
|||||||
@@ -4,23 +4,21 @@ using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
|
|||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
namespace EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
|
||||||
|
public record ReceiverReadDto(
|
||||||
|
int Id,
|
||||||
|
string EmailAddress,
|
||||||
|
string Signature,
|
||||||
|
DateTime AddedWhen
|
||||||
|
) : BaseDTO<int>(Id), IUnique<int>
|
||||||
{
|
{
|
||||||
public record ReceiverReadDto(
|
[JsonIgnore]
|
||||||
int Id,
|
public IEnumerable<EnvelopeReceiverBasicDto>? EnvelopeReceivers { get; init; }
|
||||||
string EmailAddress,
|
|
||||||
string Signature,
|
|
||||||
DateTime AddedWhen
|
|
||||||
) : BaseDTO<int>(Id), IUnique<int>
|
|
||||||
{
|
|
||||||
[JsonIgnore]
|
|
||||||
public IEnumerable<EnvelopeReceiverBasicDto>? EnvelopeReceivers { get; init; }
|
|
||||||
|
|
||||||
public string? LastUsedName => EnvelopeReceivers?.LastOrDefault()?.Name;
|
public string? LastUsedName => EnvelopeReceivers?.LastOrDefault()?.Name;
|
||||||
|
|
||||||
public string? TotpSecretkey { get; set; } = null;
|
public string? TotpSecretkey { get; set; } = null;
|
||||||
|
|
||||||
[TemplatePlaceholder("[TFA_QR_EXPIRATION]")]
|
public DateTime? TfaRegDeadline { get; set; }
|
||||||
public DateTime? TotpExpiration { get; set; } = null;
|
};
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
using DigitalData.Core.Abstractions;
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
namespace EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
{
|
|
||||||
public record ReceiverUpdateDto(int Id, string? TotpSecretkey = null, DateTime? TotpExpiration = null) : IUnique<int>;
|
public record ReceiverUpdateDto(int Id, string? TotpSecretkey = null, DateTime? TfaRegDeadline = null) : IUnique<int>;
|
||||||
}
|
|
||||||
@@ -26,8 +26,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\EnvelopeGenerator.Domain\EnvelopeGenerator.Domain.csproj" />
|
||||||
<ProjectReference Include="..\EnvelopeGenerator.Extensions\EnvelopeGenerator.Extensions.csproj" />
|
<ProjectReference Include="..\EnvelopeGenerator.Extensions\EnvelopeGenerator.Extensions.csproj" />
|
||||||
<ProjectReference Include="..\EnvelopeGenerator.Infrastructure\EnvelopeGenerator.Infrastructure.csproj" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,78 +1,52 @@
|
|||||||
using DigitalData.UserManager.Application.MappingProfiles;
|
using DigitalData.UserManager.Application.MappingProfiles;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Application.MappingProfiles;
|
using EnvelopeGenerator.Application.MappingProfiles;
|
||||||
using EnvelopeGenerator.Application.Configurations;
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
using EnvelopeGenerator.Application.Services;
|
using EnvelopeGenerator.Application.Services;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
using EnvelopeGenerator.Infrastructure.Repositories;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
using DigitalData.Core.Client;
|
using DigitalData.Core.Client;
|
||||||
using EnvelopeGenerator.Application.Configurations.GtxMessaging;
|
|
||||||
using QRCoder;
|
using QRCoder;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Extensions
|
namespace EnvelopeGenerator.Application.Extensions;
|
||||||
|
|
||||||
|
public static class DIExtensions
|
||||||
{
|
{
|
||||||
public static class DIExtensions
|
public static IServiceCollection AddEnvelopeGeneratorServices(this IServiceCollection services, IConfiguration config)
|
||||||
{
|
{
|
||||||
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfigurationSection dispatcherConfigSection, IConfigurationSection mailConfigSection, IConfigurationSection smsConfigSection, IConfigurationSection codeGeneratorConfigSection, IConfigurationSection envelopeReceiverCacheParamsSection)
|
//Inject CRUD Service and repositoriesad
|
||||||
{
|
services.TryAddScoped<IConfigService, ConfigService>();
|
||||||
//Inject CRUD Service and repositoriesad
|
services.TryAddScoped<IDocumentReceiverElementService, DocumentReceiverElementService>();
|
||||||
services.TryAddScoped<IConfigRepository, ConfigRepository>();
|
services.TryAddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
|
||||||
services.TryAddScoped<IDocumentReceiverElementRepository, DocumentReceiverElementRepository>();
|
services.TryAddScoped<IEnvelopeHistoryService, EnvelopeHistoryService>();
|
||||||
services.TryAddScoped<IEnvelopeDocumentRepository, EnvelopeDocumentRepository>();
|
services.TryAddScoped<IDocumentStatusService, DocumentStatusService>();
|
||||||
services.TryAddScoped<IConfigRepository, ConfigRepository>();
|
services.TryAddScoped<IEmailTemplateService, EmailTemplateService>();
|
||||||
services.TryAddScoped<IDocumentReceiverElementRepository, DocumentReceiverElementRepository>();
|
services.TryAddScoped<IEnvelopeService, EnvelopeService>();
|
||||||
services.TryAddScoped<IDocumentStatusRepository, DocumentStatusRepository>();
|
services.TryAddScoped<IEnvelopeCertificateService, EnvelopeCertificateService>();
|
||||||
services.TryAddScoped<IEmailTemplateRepository, EmailTemplateRepository>();
|
services.TryAddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
|
||||||
services.TryAddScoped<IEnvelopeRepository, EnvelopeRepository>();
|
services.TryAddScoped<IEnvelopeReceiverService, EnvelopeReceiverService>();
|
||||||
services.TryAddScoped<IEnvelopeCertificateRepository, EnvelopeCertificateRepository>();
|
services.TryAddScoped<IEnvelopeTypeService, EnvelopeTypeService>();
|
||||||
services.TryAddScoped<IEnvelopeDocumentRepository, EnvelopeDocumentRepository>();
|
services.TryAddScoped<IReceiverService, ReceiverService>();
|
||||||
services.TryAddScoped<IEnvelopeHistoryRepository, EnvelopeHistoryRepository>();
|
services.TryAddScoped<IUserReceiverService, UserReceiverService>();
|
||||||
services.TryAddScoped<IEnvelopeReceiverRepository, EnvelopeReceiverRepository>();
|
services.TryAddScoped<IEnvelopeReceiverReadOnlyService, EnvelopeReceiverReadOnlyService>();
|
||||||
services.TryAddScoped<IEnvelopeTypeRepository, EnvelopeTypeRepository>();
|
|
||||||
services.TryAddScoped<IReceiverRepository, ReceiverRepository>();
|
|
||||||
services.TryAddScoped<IUserReceiverRepository, UserReceiverRepository>();
|
|
||||||
services.TryAddScoped<IEnvelopeReceiverReadOnlyRepository, EnvelopeReceiverReadOnlyRepository>();
|
|
||||||
services.TryAddScoped<IConfigService, ConfigService>();
|
|
||||||
services.TryAddScoped<IDocumentReceiverElementService, DocumentReceiverElementService>();
|
|
||||||
services.TryAddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
|
|
||||||
services.TryAddScoped<IEnvelopeHistoryService, EnvelopeHistoryService>();
|
|
||||||
services.TryAddScoped<IDocumentStatusService, DocumentStatusService>();
|
|
||||||
services.TryAddScoped<IEmailTemplateService, EmailTemplateService>();
|
|
||||||
services.TryAddScoped<IEnvelopeService, EnvelopeService>();
|
|
||||||
services.TryAddScoped<IEnvelopeCertificateService, EnvelopeCertificateService>();
|
|
||||||
services.TryAddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
|
|
||||||
services.TryAddScoped<IEnvelopeReceiverService, EnvelopeReceiverService>();
|
|
||||||
services.TryAddScoped<IEnvelopeTypeService, EnvelopeTypeService>();
|
|
||||||
services.TryAddScoped<IReceiverService, ReceiverService>();
|
|
||||||
services.TryAddScoped<IUserReceiverService, UserReceiverService>();
|
|
||||||
services.TryAddScoped<IEnvelopeReceiverReadOnlyService, EnvelopeReceiverReadOnlyService>();
|
|
||||||
|
|
||||||
//Auto mapping profiles
|
//Auto mapping profiles
|
||||||
services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly);
|
services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly);
|
||||||
services.AddAutoMapper(typeof(UserMappingProfile).Assembly);
|
services.AddAutoMapper(typeof(UserMappingProfile).Assembly);
|
||||||
|
|
||||||
services.Configure<DispatcherConfig>(dispatcherConfigSection);
|
services.Configure<DispatcherParams>(config.GetSection(nameof(DispatcherParams)));
|
||||||
services.Configure<MailConfig>(mailConfigSection);
|
services.Configure<MailParams>(config.GetSection(nameof(MailParams)));
|
||||||
services.Configure<CodeGeneratorParams>(codeGeneratorConfigSection);
|
services.Configure<AuthenticatorParams>(config.GetSection(nameof(AuthenticatorParams)));
|
||||||
services.Configure<EnvelopeReceiverCacheParams>(envelopeReceiverCacheParamsSection);
|
services.Configure<TotpSmsParams>(config.GetSection(nameof(TotpSmsParams)));
|
||||||
|
services.Configure<DbTriggerParams>(config.GetSection(nameof(DbTriggerParams)));
|
||||||
|
|
||||||
services.AddHttpClientService<SmsParams>(smsConfigSection);
|
services.AddHttpClientService<GtxMessagingParams>(config.GetSection(nameof(GtxMessagingParams)));
|
||||||
services.TryAddSingleton<IMessagingService, GtxMessagingService>();
|
services.TryAddSingleton<ISmsSender, GTXSmsSender>();
|
||||||
services.TryAddSingleton<ICodeGenerator, CodeGenerator>();
|
services.TryAddSingleton<IEnvelopeSmsHandler, EnvelopeSmsHandler>();
|
||||||
services.TryAddSingleton<IEnvelopeReceiverCache, EnvelopeReceiverCache>();
|
services.TryAddSingleton<IAuthenticator, Authenticator>();
|
||||||
services.TryAddSingleton<QRCodeGenerator>();
|
services.TryAddSingleton<QRCodeGenerator>();
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
|
||||||
|
|
||||||
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfiguration config) => services.AddEnvelopeGenerator(
|
|
||||||
dispatcherConfigSection: config.GetSection("DispatcherConfig"),
|
|
||||||
mailConfigSection: config.GetSection("MailConfig"),
|
|
||||||
smsConfigSection: config.GetSection("SmsConfig"),
|
|
||||||
codeGeneratorConfigSection: config.GetSection("CodeGeneratorParams"),
|
|
||||||
envelopeReceiverCacheParamsSection: config.GetSection("EnvelopeReceiverCacheParams"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
using EnvelopeGenerator.Application.DTOs.Receiver;
|
|
||||||
using EnvelopeGenerator.Extensions;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Extensions
|
|
||||||
{
|
|
||||||
public static class DTOExtensions
|
|
||||||
{
|
|
||||||
public static bool IsTotpSecretExpired(this ReceiverReadDto dto, int minutesBeforeExpiration = 30)
|
|
||||||
=> dto.TotpExpiration < DateTime.Now.AddMinutes(minutesBeforeExpiration * -1);
|
|
||||||
|
|
||||||
public static bool IsTotpSecretInvalid(this ReceiverReadDto dto, int minutesBeforeExpiration = 30)
|
|
||||||
=> dto.IsTotpSecretExpired(minutesBeforeExpiration) || dto.TotpSecretkey is null;
|
|
||||||
|
|
||||||
public static bool IsTotpSecretValid(this ReceiverReadDto dto, int minutesBeforeExpiration = 30)
|
|
||||||
=> !dto.IsTotpSecretInvalid(minutesBeforeExpiration);
|
|
||||||
|
|
||||||
public static bool IsTotpValid(this ReceiverReadDto dto, string totp) => dto.TotpSecretkey is null ? throw new ArgumentNullException(nameof(dto), $"TotpSecretkey of DTO cannot validate without TotpSecretkey. Dto: {JsonConvert.SerializeObject(dto)}") : totp.IsValidTotp(dto.TotpSecretkey);
|
|
||||||
|
|
||||||
public static bool IsTotpInvalid(this ReceiverReadDto dto, string totp) => !dto.IsTotpValid(totp: totp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -163,10 +163,10 @@
|
|||||||
<value>Bitte überprüfen Sie die Standortinformationen. Wenn sie falsch sind, korrigieren Sie diese bitte.</value>
|
<value>Bitte überprüfen Sie die Standortinformationen. Wenn sie falsch sind, korrigieren Sie diese bitte.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedBodyAccess" xml:space="preserve">
|
<data name="LockedBodyAccess" xml:space="preserve">
|
||||||
<value>Wir haben Ihnen gerade den Zugriffscode an die hinterlegte Email Adresse gesendet. Dies kann evtl. einige Minuten dauern.</value>
|
<value>Wir senden Ihnen nun einen Zugriffscode an Ihre hinterlegte Email-Adresse. Dies kann evtl. einige Minuten dauern!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedBodyAuthenticator" xml:space="preserve">
|
<data name="LockedBodyAuthenticator" xml:space="preserve">
|
||||||
<value>Ihr QR-Code ist bis {0} gültig.</value>
|
<value>Bitte geben Sie den in Ihrer Authenticator-App angegebenen TOTP-Code ein.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedBodyAuthenticatorNew" xml:space="preserve">
|
<data name="LockedBodyAuthenticatorNew" xml:space="preserve">
|
||||||
<value>Wir haben den QR-Code an Ihre E-Mail-Adresse gesendet. Ihr QR-Code ist bis {0} gültig. Sie können ihn für alle Umschläge verwenden, die Sie an diese E-Mail-Adresse erhalten.</value>
|
<value>Wir haben den QR-Code an Ihre E-Mail-Adresse gesendet. Ihr QR-Code ist bis {0} gültig. Sie können ihn für alle Umschläge verwenden, die Sie an diese E-Mail-Adresse erhalten.</value>
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
<value>SMS-Code</value>
|
<value>SMS-Code</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedFooterBodyAccess" xml:space="preserve">
|
<data name="LockedFooterBodyAccess" xml:space="preserve">
|
||||||
<value>Bitte überprüfen Sie Ihr Email Postfach inklusive Spam-Ordner. Sie können auch den Absender bitten, Ihnen den Code auf anderem Wege zukommen zu lassen.</value>
|
<value>Bitte überprüfen Sie Ihr Email Postfach inklusive Spam-Ordner. Sie können auch den Absender <a class="mail-link" href="mailto:{0}?subject={1}&body={2}" target="_blank">{0}</a> bitten, Ihnen den Code auf anderem Wege zukommen zu lassen.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedFooterBodyAuthenticator" xml:space="preserve">
|
<data name="LockedFooterBodyAuthenticator" xml:space="preserve">
|
||||||
<value>Der neue QR-Code wird nur einmal für einen bestimmten Zeitraum gesendet und nach dem Scannen in Ihrer Authenticator-App gespeichert. Er kann für alle Umschläge verwendet werden, die an dieselbe E-Mail-Adresse gesendet werden, bis er abläuft. Wenn Sie die QR-Code-Mail nicht erhalten oder sie sowohl aus der Mail als auch aus authenticator löschen, kontaktieren Sie bitte den Absender.</value>
|
<value>Der neue QR-Code wird nur einmal für einen bestimmten Zeitraum gesendet und nach dem Scannen in Ihrer Authenticator-App gespeichert. Er kann für alle Umschläge verwendet werden, die an dieselbe E-Mail-Adresse gesendet werden, bis er abläuft. Wenn Sie die QR-Code-Mail nicht erhalten oder sie sowohl aus der Mail als auch aus authenticator löschen, kontaktieren Sie bitte den Absender.</value>
|
||||||
|
|||||||
@@ -163,10 +163,10 @@
|
|||||||
<value>Please review the location information. If it is incorrect, kindly make the necessary corrections.</value>
|
<value>Please review the location information. If it is incorrect, kindly make the necessary corrections.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedBodyAccess" xml:space="preserve">
|
<data name="LockedBodyAccess" xml:space="preserve">
|
||||||
<value>We have just sent you the access code to the email address you provided. This may take a few minutes.</value>
|
<value>We will now send you an access code to your registered e-mail address. This may take a few minutes!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedBodyAuthenticator" xml:space="preserve">
|
<data name="LockedBodyAuthenticator" xml:space="preserve">
|
||||||
<value>Your QR code is valid until {0}.</value>
|
<value>Please enter the TOTP provided in your Authenticator app.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedBodyAuthenticatorNew" xml:space="preserve">
|
<data name="LockedBodyAuthenticatorNew" xml:space="preserve">
|
||||||
<value>We have sent the QR code to your e-mail address. Your QR code is valid until {0}. You can use it for all envelopes received at this email address.</value>
|
<value>We have sent the QR code to your e-mail address. Your QR code is valid until {0}. You can use it for all envelopes received at this email address.</value>
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
<value>SMS Code</value>
|
<value>SMS Code</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedFooterBodyAccess" xml:space="preserve">
|
<data name="LockedFooterBodyAccess" xml:space="preserve">
|
||||||
<value>Please check your email inbox including your spam folder. Furthermore, you can also ask the sender to send the code by other means.</value>
|
<value>Please check your email inbox including the spam folder. You can also ask the sender <a class="mail-link" href="mailto:{0}?subject={1}&body={2}" target="_blank">{0}</a> to send you the code by other means.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockedFooterBodyAuthenticator" xml:space="preserve">
|
<data name="LockedFooterBodyAuthenticator" xml:space="preserve">
|
||||||
<value>The new QR code is sent only once for a given period and is saved in your authenticator app once scanned. It can be used for all envelopes received at the same email address until it expires. If you do not receive the QR code mail or delete it both from the mail and from authenticator, please contact the sender.</value>
|
<value>The new QR code is sent only once for a given period and is saved in your authenticator app once scanned. It can be used for all envelopes received at the same email address until it expires. If you do not receive the QR code mail or delete it both from the mail and from authenticator, please contact the sender.</value>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
using EnvelopeGenerator.Application.Configurations;
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using OtpNet;
|
using OtpNet;
|
||||||
using QRCoder;
|
using QRCoder;
|
||||||
@@ -7,17 +7,17 @@ using System.Text;
|
|||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services
|
||||||
{
|
{
|
||||||
public class CodeGenerator : ICodeGenerator
|
public class Authenticator : IAuthenticator
|
||||||
{
|
{
|
||||||
public static Lazy<CodeGenerator> LazyStatic => new(() => new CodeGenerator(Options.Create<CodeGeneratorParams>(new()), new QRCodeGenerator()));
|
public static Lazy<Authenticator> LazyStatic => new(() => new Authenticator(Options.Create<AuthenticatorParams>(new()), new QRCodeGenerator()));
|
||||||
|
|
||||||
public static CodeGenerator Static => LazyStatic.Value;
|
public static Authenticator Static => LazyStatic.Value;
|
||||||
|
|
||||||
private readonly CodeGeneratorParams _params;
|
private readonly AuthenticatorParams _params;
|
||||||
|
|
||||||
private readonly QRCodeGenerator _qrCodeGenerator;
|
private readonly QRCodeGenerator _qrCodeGenerator;
|
||||||
|
|
||||||
public CodeGenerator(IOptions<CodeGeneratorParams> options, QRCodeGenerator qrCodeGenerator)
|
public Authenticator(IOptions<AuthenticatorParams> options, QRCodeGenerator qrCodeGenerator)
|
||||||
{
|
{
|
||||||
_params = options.Value;
|
_params = options.Value;
|
||||||
_qrCodeGenerator = qrCodeGenerator;
|
_qrCodeGenerator = qrCodeGenerator;
|
||||||
@@ -67,10 +67,5 @@ namespace EnvelopeGenerator.Application.Services
|
|||||||
|
|
||||||
public bool VerifyTotp(string totpCode, string secretKey, int step = 30, VerificationWindow? window = null)
|
public bool VerifyTotp(string totpCode, string secretKey, int step = 30, VerificationWindow? window = null)
|
||||||
=> new Totp(Base32Encoding.ToBytes(secretKey), step).VerifyTotp(totpCode, out _, window);
|
=> new Totp(Base32Encoding.ToBytes(secretKey), step).VerifyTotp(totpCode, out _, window);
|
||||||
|
|
||||||
public bool GetTotpExpirationTime(int step = 30)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,33 +1,33 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.DTO;
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class ConfigService : ReadService<IConfigRepository, ConfigDto, Config, int>, IConfigService
|
||||||
{
|
{
|
||||||
public class ConfigService : ReadService<IConfigRepository, ConfigDto, Config, int>, IConfigService
|
|
||||||
{
|
|
||||||
private static readonly Guid DefaultConfigCacheId = Guid.NewGuid();
|
private static readonly Guid DefaultConfigCacheId = Guid.NewGuid();
|
||||||
|
|
||||||
private readonly IMemoryCache _cache;
|
private readonly IMemoryCache _cache;
|
||||||
private readonly ILogger<ConfigService> _logger;
|
private readonly ILogger<ConfigService> _logger;
|
||||||
public ConfigService(IConfigRepository repository, IMapper mapper, IMemoryCache memoryCache, ILogger<ConfigService> logger) : base(repository, mapper)
|
public ConfigService(IConfigRepository repository, IMapper mapper, IMemoryCache memoryCache, ILogger<ConfigService> logger) : base(repository, mapper)
|
||||||
{
|
{
|
||||||
_cache = memoryCache;
|
_cache = memoryCache;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<ConfigDto>> ReadFirstAsync()
|
public async Task<DataResult<ConfigDto>> ReadFirstAsync()
|
||||||
{
|
{
|
||||||
var config = await _repository.ReadFirstAsync();
|
var config = await _repository.ReadFirstAsync();
|
||||||
return config is null
|
return config is null
|
||||||
? Result.Fail<ConfigDto>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, "There is no configuration in DB.")
|
? Result.Fail<ConfigDto>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, "There is no configuration in DB.")
|
||||||
: Result.Success(_mapper.Map<ConfigDto>(config));
|
: Result.Success(_mapper.Map<ConfigDto>(config));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reads the default configuration asynchronously.
|
/// Reads the default configuration asynchronously.
|
||||||
@@ -43,18 +43,17 @@ namespace EnvelopeGenerator.Application.Services
|
|||||||
/// Thrown when the default configuration cannot be found.
|
/// Thrown when the default configuration cannot be found.
|
||||||
/// </exception>
|
/// </exception>
|
||||||
public async Task<ConfigDto> ReadDefaultAsync()
|
public async Task<ConfigDto> ReadDefaultAsync()
|
||||||
{
|
{
|
||||||
var config = await _cache.GetOrCreateAsync(DefaultConfigCacheId, _ => ReadFirstAsync().ThenAsync(
|
var config = await _cache.GetOrCreateAsync(DefaultConfigCacheId, _ => ReadFirstAsync().ThenAsync(
|
||||||
Success: config => config,
|
Success: config => config,
|
||||||
Fail: (mssg, ntc) =>
|
Fail: (mssg, ntc) =>
|
||||||
{
|
{
|
||||||
_logger.LogNotice(ntc);
|
_logger.LogNotice(ntc);
|
||||||
throw new InvalidOperationException("Default configuration cannot find.");
|
throw new InvalidOperationException("Default configuration cannot find.");
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return config!;
|
return config!;
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> ReadDefaultSignatureHost() => (await ReadDefaultAsync()).SignatureHost;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<string> ReadDefaultSignatureHost() => (await ReadDefaultAsync()).SignatureHost;
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class DocumentReceiverElementService : BasicCRUDService<IDocumentReceiverElementRepository, DocumentReceiverElementDto, DocumentReceiverElement, int>, IDocumentReceiverElementService
|
||||||
{
|
{
|
||||||
public class DocumentReceiverElementService : BasicCRUDService<IDocumentReceiverElementRepository, DocumentReceiverElementDto, DocumentReceiverElement, int>, IDocumentReceiverElementService
|
public DocumentReceiverElementService(IDocumentReceiverElementRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public DocumentReceiverElementService(IDocumentReceiverElementRepository repository, IMapper mapper)
|
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class DocumentStatusService : BasicCRUDService<IDocumentStatusRepository, DocumentStatusDto, DocumentStatus, int>, IDocumentStatusService
|
||||||
{
|
{
|
||||||
public class DocumentStatusService : BasicCRUDService<IDocumentStatusRepository, DocumentStatusDto, DocumentStatus, int>, IDocumentStatusService
|
public DocumentStatusService(IDocumentStatusRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public DocumentStatusService(IDocumentStatusRepository repository, IMapper mapper)
|
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,30 +1,29 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
using static EnvelopeGenerator.Common.Constants;
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
using DigitalData.Core.DTO;
|
using DigitalData.Core.DTO;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EmailTemplateService : BasicCRUDService<IEmailTemplateRepository, EmailTemplateDto, EmailTemplate, int>, IEmailTemplateService
|
||||||
{
|
{
|
||||||
public class EmailTemplateService : BasicCRUDService<IEmailTemplateRepository, EmailTemplateDto, EmailTemplate, int>, IEmailTemplateService
|
public EmailTemplateService(IEmailTemplateRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public EmailTemplateService(IEmailTemplateRepository repository, IMapper mapper)
|
}
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<DataResult<EmailTemplateDto>> ReadByNameAsync(EmailTemplateType type)
|
public async Task<DataResult<EmailTemplateDto>> ReadByNameAsync(EmailTemplateType type)
|
||||||
{
|
{
|
||||||
var temp = await _repository.ReadByNameAsync(type);
|
var temp = await _repository.ReadByNameAsync(type);
|
||||||
return temp is null
|
return temp is null
|
||||||
? Result.Fail<EmailTemplateDto>()
|
? Result.Fail<EmailTemplateDto>()
|
||||||
.Message(Key.InnerServiceError)
|
.Message(Key.InnerServiceError)
|
||||||
.Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"EmailTemplateType '{type}' is not found in DB. Please, define required e-mail template.")
|
.Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"EmailTemplateType '{type}' is not found in DB. Please, define required e-mail template.")
|
||||||
: Result.Success(_mapper.Map<EmailTemplateDto>(temp));
|
: Result.Success(_mapper.Map<EmailTemplateDto>(temp));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,19 +1,17 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
using EnvelopeGenerator.Application.Resources;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeCertificateService : BasicCRUDService<IEnvelopeCertificateRepository, EnvelopeCertificateDto, EnvelopeCertificate, int>, IEnvelopeCertificateService
|
||||||
{
|
{
|
||||||
public class EnvelopeCertificateService : BasicCRUDService<IEnvelopeCertificateRepository, EnvelopeCertificateDto, EnvelopeCertificate, int>, IEnvelopeCertificateService
|
public EnvelopeCertificateService(IEnvelopeCertificateRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public EnvelopeCertificateService(IEnvelopeCertificateRepository repository, IMapper mapper)
|
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,15 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeDocumentService : BasicCRUDService<IEnvelopeDocumentRepository, EnvelopeDocumentDto, EnvelopeDocument, int>, IEnvelopeDocumentService
|
||||||
{
|
{
|
||||||
public class EnvelopeDocumentService : BasicCRUDService<IEnvelopeDocumentRepository, EnvelopeDocumentDto, EnvelopeDocument, int>, IEnvelopeDocumentService
|
public EnvelopeDocumentService(IEnvelopeDocumentRepository repository, IMapper mapper) : base(repository, mapper)
|
||||||
{
|
{
|
||||||
public EnvelopeDocumentService(IEnvelopeDocumentRepository repository, IMapper mapper) : base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,85 +1,84 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
using static EnvelopeGenerator.Common.Constants;
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
using DigitalData.Core.DTO;
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
using EnvelopeGenerator.Application.DTOs.Receiver;
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeHistoryService : CRUDService<IEnvelopeHistoryRepository, EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>, IEnvelopeHistoryService
|
||||||
{
|
{
|
||||||
public class EnvelopeHistoryService : CRUDService<IEnvelopeHistoryRepository, EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>, IEnvelopeHistoryService
|
public EnvelopeHistoryService(IEnvelopeHistoryRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public EnvelopeHistoryService(IEnvelopeHistoryRepository repository, IMapper mapper)
|
}
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null) => await _repository.CountAsync(envelopeId: envelopeId, userReference: userReference, status: status);
|
public async Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null) => await _repository.CountAsync(envelopeId: envelopeId, userReference: userReference, status: status);
|
||||||
|
|
||||||
public async Task<bool> HasStatus(EnvelopeStatus status, int envelopeId, string userReference) => await _repository.CountAsync(
|
public async Task<bool> HasStatus(EnvelopeStatus status, int envelopeId, string userReference) => await _repository.CountAsync(
|
||||||
|
envelopeId: envelopeId,
|
||||||
|
userReference: userReference,
|
||||||
|
status: (int) status) > 0;
|
||||||
|
|
||||||
|
public async Task<bool> AccessCodeAlreadyRequested(int envelopeId, string userReference) => await _repository.CountAsync(
|
||||||
|
envelopeId: envelopeId,
|
||||||
|
userReference:userReference,
|
||||||
|
status: (int) EnvelopeStatus.AccessCodeRequested) > 0;
|
||||||
|
|
||||||
|
public async Task<bool> IsSigned(int envelopeId, string userReference) => await _repository.CountAsync(
|
||||||
|
envelopeId: envelopeId,
|
||||||
|
userReference: userReference,
|
||||||
|
status: (int) EnvelopeStatus.DocumentSigned) > 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if the specified envelope has been rejected.
|
||||||
|
/// <para><b>Note:</b> <i>If any document within the envelope is rejected, the entire envelope will be considered rejected.</i></para>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="envelopeId">The ID of the envelope to check.</param>
|
||||||
|
/// <param name="userReference">Optional user reference associated with the envelope.</param>
|
||||||
|
/// <returns>A task that represents the asynchronous operation. The task result contains a boolean value indicating whether the envelope is rejected.</returns>
|
||||||
|
public async Task<bool> IsRejected(int envelopeId, string? userReference = null)
|
||||||
|
{
|
||||||
|
return await _repository.CountAsync(
|
||||||
envelopeId: envelopeId,
|
envelopeId: envelopeId,
|
||||||
userReference: userReference,
|
userReference: userReference,
|
||||||
status: (int) status) > 0;
|
status: (int)EnvelopeStatus.DocumentRejected) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> AccessCodeAlreadyRequested(int envelopeId, string userReference) => await _repository.CountAsync(
|
public async Task<IEnumerable<EnvelopeHistoryDto>> ReadAsync(int? envelopeId = null, string? userReference = null, ReferenceType? referenceType = null, int? status = null, bool withSender = false, bool withReceiver = false)
|
||||||
envelopeId: envelopeId,
|
{
|
||||||
userReference:userReference,
|
var histDTOs = _mapper.Map<IEnumerable<EnvelopeHistoryDto>>(
|
||||||
status: (int) EnvelopeStatus.AccessCodeRequested) > 0;
|
await _repository.ReadAsync(
|
||||||
|
envelopeId: envelopeId,
|
||||||
|
userReference: userReference,
|
||||||
|
status: status,
|
||||||
|
withSender: withSender,
|
||||||
|
withReceiver: withReceiver));
|
||||||
|
return referenceType is null ? histDTOs : histDTOs.Where(h => h.ReferenceType == referenceType);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> IsSigned(int envelopeId, string userReference) => await _repository.CountAsync(
|
public async Task<IEnumerable<EnvelopeHistoryDto>> ReadRejectedAsync(int envelopeId, string? userReference = null) =>
|
||||||
envelopeId: envelopeId,
|
await ReadAsync(envelopeId: envelopeId, userReference: userReference, status: (int)EnvelopeStatus.DocumentRejected, withReceiver:true);
|
||||||
userReference: userReference,
|
|
||||||
status: (int) EnvelopeStatus.DocumentSigned) > 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Checks if the specified envelope has been rejected.
|
|
||||||
/// <para><b>Note:</b> <i>If any document within the envelope is rejected, the entire envelope will be considered rejected.</i></para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="envelopeId">The ID of the envelope to check.</param>
|
|
||||||
/// <param name="userReference">Optional user reference associated with the envelope.</param>
|
|
||||||
/// <returns>A task that represents the asynchronous operation. The task result contains a boolean value indicating whether the envelope is rejected.</returns>
|
|
||||||
public async Task<bool> IsRejected(int envelopeId, string? userReference = null)
|
|
||||||
{
|
|
||||||
return await _repository.CountAsync(
|
|
||||||
envelopeId: envelopeId,
|
|
||||||
userReference: userReference,
|
|
||||||
status: (int)EnvelopeStatus.DocumentRejected) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<IEnumerable<EnvelopeHistoryDto>> ReadAsync(int? envelopeId = null, string? userReference = null, ReferenceType? referenceType = null, int? status = null, bool withSender = false, bool withReceiver = false)
|
|
||||||
{
|
|
||||||
var histDTOs = _mapper.Map<IEnumerable<EnvelopeHistoryDto>>(
|
|
||||||
await _repository.ReadAsync(
|
|
||||||
envelopeId: envelopeId,
|
|
||||||
userReference: userReference,
|
|
||||||
status: status,
|
|
||||||
withSender: withSender,
|
|
||||||
withReceiver: withReceiver));
|
|
||||||
return referenceType is null ? histDTOs : histDTOs.Where(h => h.ReferenceType == referenceType);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<IEnumerable<EnvelopeHistoryDto>> ReadRejectedAsync(int envelopeId, string? userReference = null) =>
|
|
||||||
await ReadAsync(envelopeId: envelopeId, userReference: userReference, status: (int)EnvelopeStatus.DocumentRejected, withReceiver:true);
|
|
||||||
|
|
||||||
//TODO: use IQueryable in repository to incerease the performance
|
//TODO: use IQueryable in repository to incerease the performance
|
||||||
public async Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId)
|
public async Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId)
|
||||||
{
|
{
|
||||||
var envelopes = await ReadRejectedAsync(envelopeId);
|
var envelopes = await ReadRejectedAsync(envelopeId);
|
||||||
return envelopes is null
|
return envelopes is null
|
||||||
? Enumerable.Empty<ReceiverReadDto>()
|
? Enumerable.Empty<ReceiverReadDto>()
|
||||||
: envelopes
|
: envelopes
|
||||||
.Where(eh => eh?.Receiver != null)
|
.Where(eh => eh?.Receiver != null)
|
||||||
.Select(eh => eh.Receiver!);
|
.Select(eh => eh.Receiver!);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<long>> RecordAsync(int envelopeId, string userReference, EnvelopeStatus status, string? comment = null) =>
|
public async Task<DataResult<long>> RecordAsync(int envelopeId, string userReference, EnvelopeStatus status, string? comment = null) =>
|
||||||
await CreateAsync(new (EnvelopeId: envelopeId, UserReference: userReference, Status: (int)status, ActionDate: DateTime.Now, Comment: comment))
|
await CreateAsync(new (EnvelopeId: envelopeId, UserReference: userReference, Status: (int)status, ActionDate: DateTime.Now, Comment: comment))
|
||||||
.ThenAsync(
|
.ThenAsync(
|
||||||
Success: id => Result.Success(id),
|
Success: id => Result.Success(id),
|
||||||
Fail: (mssg, ntc) => Result.Fail<long>().Message(mssg).Notice(ntc)
|
Fail: (mssg, ntc) => Result.Fail<long>().Message(mssg).Notice(ntc)
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,6 @@ using DigitalData.Core.DTO;
|
|||||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||||
using DigitalData.EmailProfilerDispatcher.Abstraction.DTOs.EmailOut;
|
using DigitalData.EmailProfilerDispatcher.Abstraction.DTOs.EmailOut;
|
||||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Services;
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Services;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
using EnvelopeGenerator.Common;
|
using EnvelopeGenerator.Common;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@@ -14,6 +13,7 @@ using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
|||||||
using EnvelopeGenerator.Application.Configurations;
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
using EnvelopeGenerator.Application.Extensions;
|
using EnvelopeGenerator.Application.Extensions;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services
|
||||||
{
|
{
|
||||||
@@ -21,19 +21,19 @@ namespace EnvelopeGenerator.Application.Services
|
|||||||
{
|
{
|
||||||
private readonly IEmailTemplateService _tempService;
|
private readonly IEmailTemplateService _tempService;
|
||||||
private readonly IEnvelopeReceiverService _envRcvService;
|
private readonly IEnvelopeReceiverService _envRcvService;
|
||||||
private readonly DispatcherConfig _dConfig;
|
private readonly DispatcherParams _dConfig;
|
||||||
private readonly IConfigService _configService;
|
private readonly IConfigService _configService;
|
||||||
private readonly Dictionary<string, string> _placeholders;
|
private readonly Dictionary<string, string> _placeholders;
|
||||||
private readonly ICodeGenerator _codeGenerator;
|
private readonly IAuthenticator _authenticator;
|
||||||
|
|
||||||
public EnvelopeMailService(IEmailOutRepository repository, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions<DispatcherConfig> dispatcherConfigOptions, IConfigService configService, IOptions<MailConfig> mailConfig, ICodeGenerator codeGenerator) : base(repository, mapper)
|
public EnvelopeMailService(IEmailOutRepository repository, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions<DispatcherParams> dispatcherConfigOptions, IConfigService configService, IOptions<MailParams> mailConfig, IAuthenticator authenticator) : base(repository, mapper)
|
||||||
{
|
{
|
||||||
_tempService = tempService;
|
_tempService = tempService;
|
||||||
_envRcvService = envelopeReceiverService;
|
_envRcvService = envelopeReceiverService;
|
||||||
_dConfig = dispatcherConfigOptions.Value;
|
_dConfig = dispatcherConfigOptions.Value;
|
||||||
_configService = configService;
|
_configService = configService;
|
||||||
_placeholders = mailConfig.Value.Placeholders;
|
_placeholders = mailConfig.Value.Placeholders;
|
||||||
_codeGenerator = codeGenerator;
|
_authenticator = authenticator;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Dictionary<string, string>> CreatePlaceholders(string? accessCode = null, EnvelopeReceiverDto? envelopeReceiverDto = null)
|
private async Task<Dictionary<string, string>> CreatePlaceholders(string? accessCode = null, EnvelopeReceiverDto? envelopeReceiverDto = null)
|
||||||
@@ -164,14 +164,11 @@ namespace EnvelopeGenerator.Application.Services
|
|||||||
throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver information is missing. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}");
|
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)
|
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)}");
|
throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver.TotpSecretKey is null. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}");
|
||||||
if (dto.Receiver.TotpExpiration is null)
|
|
||||||
throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver.TotpExpiration is null. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}");
|
|
||||||
|
|
||||||
var totp_qr_64 = _codeGenerator.GenerateTotpQrCode(userEmail: dto.Receiver.EmailAddress, secretKey: dto.Receiver.TotpSecretkey).ToBase64String();
|
var totp_qr_64 = _authenticator.GenerateTotpQrCode(userEmail: dto.Receiver.EmailAddress, secretKey: dto.Receiver.TotpSecretkey).ToBase64String();
|
||||||
return SendAsync(dto, EmailTemplateType.TotpSecret, new()
|
return SendAsync(dto, EmailTemplateType.TotpSecret, new()
|
||||||
{
|
{
|
||||||
{"[TFA_QR_CODE]", totp_qr_64 },
|
{"[TFA_QR_CODE]", totp_qr_64 },
|
||||||
{"[TFA_EXPIRATION]", dto.Receiver.TotpExpiration }
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeReceiverReadOnlyService : CRUDService<IEnvelopeReceiverReadOnlyRepository, EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnlyDto, EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly, long>, IEnvelopeReceiverReadOnlyService
|
||||||
{
|
{
|
||||||
public class EnvelopeReceiverReadOnlyService : CRUDService<IEnvelopeReceiverReadOnlyRepository, EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnlyDto, EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly, long>, IEnvelopeReceiverReadOnlyService
|
public EnvelopeReceiverReadOnlyService(IEnvelopeReceiverReadOnlyRepository repository, IMapper mapper) : base(repository, mapper)
|
||||||
{
|
{
|
||||||
public EnvelopeReceiverReadOnlyService(IEnvelopeReceiverReadOnlyRepository repository, IMapper mapper) : base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,179 +1,178 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.DTO;
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
using EnvelopeGenerator.Application.Resources;
|
using EnvelopeGenerator.Application.Resources;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using EnvelopeGenerator.Extensions;
|
using EnvelopeGenerator.Extensions;
|
||||||
using EnvelopeGenerator.Application.DTOs.Messaging;
|
using EnvelopeGenerator.Application.DTOs.Messaging;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeReceiverService : BasicCRUDService<IEnvelopeReceiverRepository, EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>, IEnvelopeReceiverService
|
||||||
{
|
{
|
||||||
public class EnvelopeReceiverService : BasicCRUDService<IEnvelopeReceiverRepository, EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>, IEnvelopeReceiverService
|
private readonly IStringLocalizer<Resource> _localizer;
|
||||||
|
|
||||||
|
private readonly ISmsSender _smsSender;
|
||||||
|
|
||||||
|
public EnvelopeReceiverService(IEnvelopeReceiverRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper, ISmsSender smsSender)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
private readonly IStringLocalizer<Resource> _localizer;
|
_localizer = localizer;
|
||||||
|
_smsSender = smsSender;
|
||||||
|
}
|
||||||
|
|
||||||
private readonly IMessagingService _messagingService;
|
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true)
|
||||||
|
{
|
||||||
|
var env_rcvs = await _repository.ReadBySignatureAsync(signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
||||||
|
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
|
||||||
|
}
|
||||||
|
|
||||||
public EnvelopeReceiverService(IEnvelopeReceiverRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper, IMessagingService messagingService)
|
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true)
|
||||||
: base(repository, mapper)
|
{
|
||||||
{
|
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
||||||
_localizer = localizer;
|
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
|
||||||
_messagingService = messagingService;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true)
|
public async Task<DataResult<IEnumerable<string?>>> ReadAccessCodeByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true)
|
||||||
{
|
{
|
||||||
var env_rcvs = await _repository.ReadBySignatureAsync(signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver);
|
||||||
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
|
return Result.Success(env_rcvs.Select(er => er.AccessCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true)
|
public async Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
|
||||||
{
|
{
|
||||||
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
||||||
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
|
if (env_rcv is null)
|
||||||
}
|
return Result.Fail<EnvelopeReceiverDto>()
|
||||||
|
.Message(Key.EnvelopeReceiverNotFound);
|
||||||
|
|
||||||
public async Task<DataResult<IEnumerable<string?>>> ReadAccessCodeByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true)
|
return Result.Success(_mapper.Map<EnvelopeReceiverDto>(env_rcv));
|
||||||
{
|
}
|
||||||
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver);
|
|
||||||
return Result.Success(env_rcvs.Select(er => er.AccessCode));
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
|
public async Task<DataResult<EnvelopeReceiverSecretDto>> ReadWithSecretByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
|
||||||
{
|
{
|
||||||
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
||||||
if (env_rcv is null)
|
if (env_rcv is null)
|
||||||
return Result.Fail<EnvelopeReceiverDto>()
|
return Result.Fail<EnvelopeReceiverSecretDto>()
|
||||||
.Message(Key.EnvelopeReceiverNotFound);
|
.Message(Key.EnvelopeReceiverNotFound);
|
||||||
|
|
||||||
return Result.Success(_mapper.Map<EnvelopeReceiverDto>(env_rcv));
|
return Result.Success(_mapper.Map<EnvelopeReceiverSecretDto>(env_rcv));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<EnvelopeReceiverSecretDto>> ReadWithSecretByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
|
public async Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
|
||||||
{
|
{
|
||||||
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
||||||
if (env_rcv is null)
|
|
||||||
return Result.Fail<EnvelopeReceiverSecretDto>()
|
|
||||||
.Message(Key.EnvelopeReceiverNotFound);
|
|
||||||
|
|
||||||
return Result.Success(_mapper.Map<EnvelopeReceiverSecretDto>(env_rcv));
|
if (uuid is null || signature is null)
|
||||||
}
|
return Result.Fail<EnvelopeReceiverDto>()
|
||||||
|
.Message(_localizer[Key.WrongEnvelopeReceiverId])
|
||||||
|
.Notice(LogLevel.Warning, (uuid, signature).ToTitle())
|
||||||
|
.Notice(LogLevel.Warning, EnvelopeFlag.WrongEnvelopeReceiverId)
|
||||||
|
.Notice(LogLevel.Warning, Flag.PossibleSecurityBreach);
|
||||||
|
|
||||||
public async Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
|
return await ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
||||||
{
|
}
|
||||||
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
|
||||||
|
|
||||||
if (uuid is null || signature is null)
|
public async Task<DataResult<bool>> VerifyAccessCodeAsync(string uuid, string signature, string accessCode)
|
||||||
return Result.Fail<EnvelopeReceiverDto>()
|
{
|
||||||
.Message(_localizer[Key.WrongEnvelopeReceiverId])
|
var er = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature);
|
||||||
.Notice(LogLevel.Warning, (uuid, signature).ToTitle())
|
|
||||||
.Notice(LogLevel.Warning, EnvelopeFlag.WrongEnvelopeReceiverId)
|
|
||||||
.Notice(LogLevel.Warning, Flag.PossibleSecurityBreach);
|
|
||||||
|
|
||||||
return await ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
|
if (er is null)
|
||||||
}
|
return Result.Fail<bool>()
|
||||||
|
.Message(_localizer[Key.EnvelopeOrReceiverNonexists])
|
||||||
|
.Notice(LogLevel.Warning, (uuid, signature).ToTitle())
|
||||||
|
.Notice(LogLevel.Warning, EnvelopeFlag.EnvelopeOrReceiverNonexists)
|
||||||
|
.Notice(LogLevel.Warning, Flag.PossibleDataIntegrityIssue);
|
||||||
|
|
||||||
public async Task<DataResult<bool>> VerifyAccessCodeAsync(string uuid, string signature, string accessCode)
|
var actualAccessCode = er.AccessCode;
|
||||||
{
|
|
||||||
var er = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature);
|
|
||||||
|
|
||||||
if (er is null)
|
if (actualAccessCode is null)
|
||||||
return Result.Fail<bool>()
|
return Result.Fail<bool>()
|
||||||
.Message(_localizer[Key.EnvelopeOrReceiverNonexists])
|
.Message(_localizer[Key.AccessCodeNull])
|
||||||
.Notice(LogLevel.Warning, (uuid, signature).ToTitle())
|
.Notice(LogLevel.Critical, (uuid, signature).ToTitle())
|
||||||
.Notice(LogLevel.Warning, EnvelopeFlag.EnvelopeOrReceiverNonexists)
|
.Notice(LogLevel.Critical, EnvelopeFlag.AccessCodeNull)
|
||||||
.Notice(LogLevel.Warning, Flag.PossibleDataIntegrityIssue);
|
.Notice(LogLevel.Critical, Flag.DataIntegrityIssue);
|
||||||
|
|
||||||
var actualAccessCode = er.AccessCode;
|
else if (accessCode != actualAccessCode)
|
||||||
|
return Result.Success(false).Message(_localizer[Key.WrongAccessCode]);
|
||||||
|
else
|
||||||
|
return Result.Success(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (actualAccessCode is null)
|
public async Task<DataResult<bool>> VerifyAccessCodeAsync(string envelopeReceiverId, string accessCode)
|
||||||
return Result.Fail<bool>()
|
{
|
||||||
.Message(_localizer[Key.AccessCodeNull])
|
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
||||||
.Notice(LogLevel.Critical, (uuid, signature).ToTitle())
|
|
||||||
.Notice(LogLevel.Critical, EnvelopeFlag.AccessCodeNull)
|
|
||||||
.Notice(LogLevel.Critical, Flag.DataIntegrityIssue);
|
|
||||||
|
|
||||||
else if (accessCode != actualAccessCode)
|
if (uuid is null || signature is null)
|
||||||
return Result.Success(false).Message(_localizer[Key.WrongAccessCode]);
|
return Result.Fail<bool>()
|
||||||
else
|
.Message(Key.WrongEnvelopeReceiverId)
|
||||||
return Result.Success(true);
|
.Notice(LogLevel.Critical, EnvelopeFlag.WrongEnvelopeReceiverId)
|
||||||
}
|
.Notice(LogLevel.Critical, Flag.SecurityBreach)
|
||||||
|
.Notice(LogLevel.Critical, "Attempt to verify access code detected. Such actions are generally not initiated by well-intentioned users. Potential security breach suspected. Immediate investigation required.");
|
||||||
|
|
||||||
public async Task<DataResult<bool>> VerifyAccessCodeAsync(string envelopeReceiverId, string accessCode)
|
return await VerifyAccessCodeAsync(uuid: uuid, signature: signature, accessCode: accessCode);
|
||||||
{
|
}
|
||||||
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
|
||||||
|
|
||||||
if (uuid is null || signature is null)
|
public async Task<DataResult<bool>> IsExisting(string envelopeReceiverId)
|
||||||
return Result.Fail<bool>()
|
{
|
||||||
.Message(Key.WrongEnvelopeReceiverId)
|
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
||||||
.Notice(LogLevel.Critical, EnvelopeFlag.WrongEnvelopeReceiverId)
|
|
||||||
.Notice(LogLevel.Critical, Flag.SecurityBreach)
|
|
||||||
.Notice(LogLevel.Critical, "Attempt to verify access code detected. Such actions are generally not initiated by well-intentioned users. Potential security breach suspected. Immediate investigation required.");
|
|
||||||
|
|
||||||
return await VerifyAccessCodeAsync(uuid: uuid, signature: signature, accessCode: accessCode);
|
if (uuid is null || signature is null)
|
||||||
}
|
return Result.Fail<bool>().Notice(LogLevel.Warning, EnvelopeFlag.NonDecodableEnvelopeReceiverId, "In IsExisting(string envelopeReceiverId)");
|
||||||
|
|
||||||
public async Task<DataResult<bool>> IsExisting(string envelopeReceiverId)
|
int count = await _repository.CountAsync(uuid:uuid, signature:signature);
|
||||||
{
|
return Result.Success(count > 0);
|
||||||
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
}
|
||||||
|
|
||||||
if (uuid is null || signature is null)
|
|
||||||
return Result.Fail<bool>().Notice(LogLevel.Warning, EnvelopeFlag.NonDecodableEnvelopeReceiverId, "In IsExisting(string envelopeReceiverId)");
|
|
||||||
|
|
||||||
int count = await _repository.CountAsync(uuid:uuid, signature:signature);
|
|
||||||
return Result.Success(count > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<DataResult<string>> ReadAccessCodeByIdAsync(int envelopeId, int receiverId)
|
public async Task<DataResult<string>> ReadAccessCodeByIdAsync(int envelopeId, int receiverId)
|
||||||
{
|
{
|
||||||
var code = await _repository.ReadAccessCodeByIdAsync(envelopeId: envelopeId, receiverId: receiverId);
|
var code = await _repository.ReadAccessCodeByIdAsync(envelopeId: envelopeId, receiverId: receiverId);
|
||||||
return code is null ?
|
return code is null ?
|
||||||
Result.Fail<string>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"Access code is null. Envelope ID is {envelopeId} and receiver ID {receiverId}")
|
Result.Fail<string>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"Access code is null. Envelope ID is {envelopeId} and receiver ID {receiverId}")
|
||||||
: Result.Success(code);
|
: Result.Success(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses)
|
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses)
|
||||||
{
|
{
|
||||||
var er_list = await _repository.ReadByUsernameAsync(username: username, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses);
|
var er_list = await _repository.ReadByUsernameAsync(username: username, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses);
|
||||||
var dto_list = _mapper.Map<IEnumerable<EnvelopeReceiverDto>>(er_list);
|
var dto_list = _mapper.Map<IEnumerable<EnvelopeReceiverDto>>(er_list);
|
||||||
return Result.Success(dto_list);
|
return Result.Success(dto_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail)
|
public async Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail)
|
||||||
{
|
{
|
||||||
var er = await _repository.ReadLastByReceiver(mail);
|
var er = await _repository.ReadLastByReceiver(mail);
|
||||||
return er is null ? Result.Fail<string?>().Notice(LogLevel.None, Flag.NotFound) : Result.Success(er.Name);
|
return er is null ? Result.Fail<string?>().Notice(LogLevel.None, Flag.NotFound) : Result.Success(er.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<SmsResponse>> SendSmsAsync(string envelopeReceiverId, string message)
|
public async Task<DataResult<SmsResponse>> SendSmsAsync(string envelopeReceiverId, string message)
|
||||||
{
|
{
|
||||||
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
||||||
|
|
||||||
if (uuid is null || signature is null)
|
if (uuid is null || signature is null)
|
||||||
return Result.Fail<SmsResponse>()
|
return Result.Fail<SmsResponse>()
|
||||||
.Message(_localizer[Key.WrongEnvelopeReceiverId])
|
.Message(_localizer[Key.WrongEnvelopeReceiverId])
|
||||||
.Notice(LogLevel.Warning, (uuid, signature).ToTitle())
|
.Notice(LogLevel.Warning, (uuid, signature).ToTitle())
|
||||||
.Notice(LogLevel.Warning, EnvelopeFlag.WrongEnvelopeReceiverId)
|
.Notice(LogLevel.Warning, EnvelopeFlag.WrongEnvelopeReceiverId)
|
||||||
.Notice(LogLevel.Warning, Flag.PossibleSecurityBreach);
|
.Notice(LogLevel.Warning, Flag.PossibleSecurityBreach);
|
||||||
|
|
||||||
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: false, withReceiver: false);
|
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: false, withReceiver: false);
|
||||||
if (env_rcv is null)
|
if (env_rcv is null)
|
||||||
return Result.Fail<SmsResponse>()
|
return Result.Fail<SmsResponse>()
|
||||||
.Message(Key.EnvelopeReceiverNotFound);
|
.Message(Key.EnvelopeReceiverNotFound);
|
||||||
|
|
||||||
if (env_rcv.PhoneNumber is null)
|
if (env_rcv.PhoneNumber is null)
|
||||||
return Result.Fail<SmsResponse>()
|
return Result.Fail<SmsResponse>()
|
||||||
.Message(Key.PhoneNumberNonexists)
|
.Message(Key.PhoneNumberNonexists)
|
||||||
.Notice(LogLevel.Error, Flag.NotFound, $"An attempt was made to send sms to the user whose phone number is null. Envelope recipient ID is {envelopeReceiverId}, UUID is {uuid} and signature is {signature}.");
|
.Notice(LogLevel.Error, Flag.NotFound, $"An attempt was made to send sms to the user whose phone number is null. Envelope recipient ID is {envelopeReceiverId}, UUID is {uuid} and signature is {signature}.");
|
||||||
|
|
||||||
var res = await _messagingService.SendSmsAsync(recipient: env_rcv.PhoneNumber, message: message);
|
var res = await _smsSender.SendSmsAsync(recipient: env_rcv.PhoneNumber, message: message);
|
||||||
|
|
||||||
return Result.Success(res);
|
return Result.Success(res);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,43 +1,42 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.DTO;
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeService : BasicCRUDService<IEnvelopeRepository, EnvelopeDto, Envelope, int>, IEnvelopeService
|
||||||
{
|
{
|
||||||
public class EnvelopeService : BasicCRUDService<IEnvelopeRepository, EnvelopeDto, Envelope, int>, IEnvelopeService
|
public EnvelopeService(IEnvelopeRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public EnvelopeService(IEnvelopeRepository repository, IMapper mapper)
|
}
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<DataResult<IEnumerable<EnvelopeDto>>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false)
|
public async Task<DataResult<IEnumerable<EnvelopeDto>>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false)
|
||||||
{
|
{
|
||||||
var envelopes = await _repository.ReadAllWithAsync(documents: documents, history: history, documentReceiverElement: documentReceiverElement);
|
var envelopes = await _repository.ReadAllWithAsync(documents: documents, history: history, documentReceiverElement: documentReceiverElement);
|
||||||
var readDto = _mapper.Map<IEnumerable<EnvelopeDto>>(envelopes);
|
var readDto = _mapper.Map<IEnumerable<EnvelopeDto>>(envelopes);
|
||||||
return Result.Success(readDto);
|
return Result.Success(readDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<EnvelopeDto>> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false)
|
public async Task<DataResult<EnvelopeDto>> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false)
|
||||||
{
|
{
|
||||||
var envelope = await _repository.ReadByUuidAsync(uuid: uuid, withDocuments: withDocuments, withHistory: withHistory, withDocumentReceiverElement: withDocumentReceiverElement, withUser:withUser, withAll:withAll);
|
var envelope = await _repository.ReadByUuidAsync(uuid: uuid, withDocuments: withDocuments, withHistory: withHistory, withDocumentReceiverElement: withDocumentReceiverElement, withUser:withUser, withAll:withAll);
|
||||||
|
|
||||||
if (envelope is null)
|
if (envelope is null)
|
||||||
return Result.Fail<EnvelopeDto>();
|
return Result.Fail<EnvelopeDto>();
|
||||||
|
|
||||||
var readDto = _mapper.Map<EnvelopeDto>(envelope);
|
var readDto = _mapper.Map<EnvelopeDto>(envelope);
|
||||||
return Result.Success(readDto);
|
return Result.Success(readDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<IEnumerable<EnvelopeDto>>> ReadByUserAsync(int userId, int? min_status = null, int? max_status = null, params int[] ignore_statuses)
|
public async Task<DataResult<IEnumerable<EnvelopeDto>>> ReadByUserAsync(int userId, int? min_status = null, int? max_status = null, params int[] ignore_statuses)
|
||||||
{
|
{
|
||||||
var users = await _repository.ReadByUserAsync(userId: userId, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses);
|
var users = await _repository.ReadByUserAsync(userId: userId, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses);
|
||||||
var readDto = _mapper.Map<IEnumerable<EnvelopeDto>>(users);
|
var readDto = _mapper.Map<IEnumerable<EnvelopeDto>>(users);
|
||||||
return Result.Success(readDto);
|
return Result.Success(readDto);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
54
EnvelopeGenerator.Application/Services/EnvelopeSmsHandler.cs
Normal file
54
EnvelopeGenerator.Application/Services/EnvelopeSmsHandler.cs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Messaging;
|
||||||
|
using EnvelopeGenerator.Application.Extensions;
|
||||||
|
using Microsoft.Extensions.Caching.Distributed;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeSmsHandler : IEnvelopeSmsHandler
|
||||||
|
{
|
||||||
|
private readonly ISmsSender _sender;
|
||||||
|
|
||||||
|
private readonly TotpSmsParams _totpSmsParams;
|
||||||
|
|
||||||
|
private readonly IDistributedCache _dCache;
|
||||||
|
|
||||||
|
private readonly IAuthenticator _authenticator;
|
||||||
|
|
||||||
|
public EnvelopeSmsHandler(ISmsSender sender, IOptions<TotpSmsParams> totpSmsParamsOptions, IDistributedCache distributedCache, IAuthenticator authenticator)
|
||||||
|
{
|
||||||
|
_sender = sender;
|
||||||
|
_totpSmsParams = totpSmsParamsOptions.Value;
|
||||||
|
_dCache = distributedCache;
|
||||||
|
_authenticator = authenticator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If expiration is passed then, sends sms and returns smsResponse and up-to-date expiration; otherwise send expiration.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="er_secret"></param>
|
||||||
|
/// <param name="cToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<(SmsResponse? SmsResponse, DateTime Expiration)> SendTotpAsync(EnvelopeReceiverSecretDto er_secret, CancellationToken cToken = default)
|
||||||
|
{
|
||||||
|
var key = string.Format(_totpSmsParams.Expiration.CacheKeyFormat, er_secret.EnvelopeId, er_secret.ReceiverId);
|
||||||
|
var expiration = await _dCache.GetDateTimeAsync(key, cToken);
|
||||||
|
|
||||||
|
if(expiration is DateTime expirationDateTime && expirationDateTime >= DateTime.Now)
|
||||||
|
return (null, expirationDateTime);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var new_expiration = DateTime.Now.AddSeconds(_totpSmsParams.TotpStep);
|
||||||
|
var totp = _authenticator.GenerateTotp(er_secret.Receiver!.TotpSecretkey!, _totpSmsParams.TotpStep);
|
||||||
|
var msg = string.Format(_totpSmsParams.Format, totp, new_expiration.ToString(_totpSmsParams.Expiration.Format, _totpSmsParams.Expiration.CultureInfo));
|
||||||
|
await _dCache.SetDateTimeAsync(key, new_expiration, cToken: cToken);
|
||||||
|
return (await _sender.SendSmsAsync(er_secret.PhoneNumber!, msg), new_expiration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool VerifyTotp(string totpCode, string secretKey) => _authenticator
|
||||||
|
.VerifyTotp(totpCode, secretKey, _totpSmsParams.TotpStep, _totpSmsParams.TotpVerificationWindow);
|
||||||
|
}
|
||||||
@@ -1,30 +1,29 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
using DigitalData.Core.DTO;
|
using DigitalData.Core.DTO;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class EnvelopeTypeService : BasicCRUDService<IEnvelopeTypeRepository, EnvelopeTypeDto, EnvelopeType, int>, IEnvelopeTypeService
|
||||||
{
|
{
|
||||||
public class EnvelopeTypeService : BasicCRUDService<IEnvelopeTypeRepository, EnvelopeTypeDto, EnvelopeType, int>, IEnvelopeTypeService
|
private static readonly Guid CacheKey = Guid.NewGuid();
|
||||||
|
|
||||||
|
private readonly IMemoryCache _cache;
|
||||||
|
|
||||||
|
public EnvelopeTypeService(IEnvelopeTypeRepository repository, IMapper mapper, IMemoryCache cache)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
private static readonly Guid CacheKey = Guid.NewGuid();
|
_cache = cache;
|
||||||
|
|
||||||
private readonly IMemoryCache _cache;
|
|
||||||
|
|
||||||
public EnvelopeTypeService(IEnvelopeTypeRepository repository, IMapper mapper, IMemoryCache cache)
|
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
_cache = cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task<DataResult<IEnumerable<EnvelopeTypeDto>>> ReadAllAsync()
|
|
||||||
=> await _cache.GetOrCreateAsync(CacheKey, async entry => await base.ReadAllAsync())
|
|
||||||
?? Result.Fail<IEnumerable<EnvelopeTypeDto>>().Notice(LogLevel.Error, Flag.NotFound, "No cached envelope types are available in the database. If you have added any envelope types after the server started, please restart the server.");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override async Task<DataResult<IEnumerable<EnvelopeTypeDto>>> ReadAllAsync()
|
||||||
|
=> await _cache.GetOrCreateAsync(CacheKey, async entry => await base.ReadAllAsync())
|
||||||
|
?? Result.Fail<IEnumerable<EnvelopeTypeDto>>().Notice(LogLevel.Error, Flag.NotFound, "No cached envelope types are available in the database. If you have added any envelope types after the server started, please restart the server.");
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,32 +1,30 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Abstractions.Client;
|
using DigitalData.Core.Abstractions.Client;
|
||||||
using DigitalData.Core.Client;
|
using DigitalData.Core.Client;
|
||||||
using EnvelopeGenerator.Application.Configurations.GtxMessaging;
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs.Messaging;
|
using EnvelopeGenerator.Application.DTOs.Messaging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services;
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
public class GtxMessagingService : IMessagingService
|
//TODO: move to DigitalData.Core
|
||||||
|
public class GTXSmsSender : ISmsSender
|
||||||
{
|
{
|
||||||
private readonly IHttpClientService<SmsParams> _smsClient;
|
private readonly IHttpClientService<GtxMessagingParams> _smsClient;
|
||||||
|
|
||||||
private readonly SmsParams _smsParams;
|
private readonly GtxMessagingParams _smsParams;
|
||||||
|
|
||||||
private readonly IMapper _mapper;
|
private readonly IMapper _mapper;
|
||||||
|
|
||||||
private readonly ICodeGenerator _codeGen;
|
|
||||||
|
|
||||||
public string ServiceProvider { get; }
|
public string ServiceProvider { get; }
|
||||||
|
|
||||||
public GtxMessagingService(IHttpClientService<SmsParams> smsClient, IOptions<SmsParams> smsParamsOptions, IMapper mapper, ICodeGenerator codeGenerator)
|
public GTXSmsSender(IHttpClientService<GtxMessagingParams> smsClient, IOptions<GtxMessagingParams> smsParamsOptions, IMapper mapper)
|
||||||
{
|
{
|
||||||
_smsClient = smsClient;
|
_smsClient = smsClient;
|
||||||
_smsParams = smsParamsOptions.Value;
|
_smsParams = smsParamsOptions.Value;
|
||||||
_mapper = mapper;
|
_mapper = mapper;
|
||||||
ServiceProvider = GetType().Name.Replace("Service", string.Empty);
|
ServiceProvider = GetType().Name.Replace("Service", string.Empty);
|
||||||
_codeGen = codeGenerator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<SmsResponse> SendSmsAsync(string recipient, string message)
|
public async Task<SmsResponse> SendSmsAsync(string recipient, string message)
|
||||||
@@ -39,11 +37,4 @@ public class GtxMessagingService : IMessagingService
|
|||||||
.ThenAsync(res => res.Json<GtxMessagingResponse>())
|
.ThenAsync(res => res.Json<GtxMessagingResponse>())
|
||||||
.ThenAsync(_mapper.Map<SmsResponse>);
|
.ThenAsync(_mapper.Map<SmsResponse>);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<SmsResponse> SendSmsCodeAsync(string recipient, string secretKey, string? messageFormat = null)
|
|
||||||
{
|
|
||||||
var code = _codeGen.GenerateTotp(secretKey, _smsParams.SmsTotpStep);
|
|
||||||
var message = string.Format(messageFormat ?? _smsParams.DefaultTotpMessageFormat, code);
|
|
||||||
return await SendSmsAsync(recipient: recipient, message: message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,52 +1,51 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
using EnvelopeGenerator.Application.DTOs.Receiver;
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
using DigitalData.Core.DTO;
|
using DigitalData.Core.DTO;
|
||||||
using DigitalData.Core.Abstractions;
|
using DigitalData.Core.Abstractions;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class ReceiverService : CRUDService<IReceiverRepository, ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>, IReceiverService
|
||||||
{
|
{
|
||||||
public class ReceiverService : CRUDService<IReceiverRepository, ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>, IReceiverService
|
public ReceiverService(IReceiverRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public ReceiverService(IReceiverRepository repository, IMapper mapper)
|
}
|
||||||
: base(repository, mapper)
|
|
||||||
|
public async Task<DataResult<ReceiverReadDto>> 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.Success(_mapper.Map<ReceiverReadDto>(rcv));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null)
|
||||||
|
{
|
||||||
|
var rcv = await _repository.ReadByAsync(emailAddress: emailAddress, signature: signature);
|
||||||
|
|
||||||
|
if (rcv is null)
|
||||||
|
return Result.Fail();
|
||||||
|
|
||||||
|
return await _repository.DeleteAsync(rcv) ? Result.Success() : Result.Fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual async Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto) where TUpdateDto : IUnique<int>
|
||||||
|
{
|
||||||
|
var val = await _repository.ReadByIdAsync(updateDto.Id);
|
||||||
|
if (val == null)
|
||||||
{
|
{
|
||||||
|
return Result.Fail().Notice(LogLevel.Warning, Flag.NotFound, $"{updateDto.Id} is not found in update process of {GetType()} entity.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null)
|
var entity = _mapper.Map(updateDto, val);
|
||||||
{
|
return (await _repository.UpdateAsync(entity)) ? Result.Success() : Result.Fail();
|
||||||
var rcv = await _repository.ReadByAsync(emailAddress: emailAddress, signature: signature);
|
|
||||||
|
|
||||||
if (rcv is null)
|
|
||||||
return Result.Fail<ReceiverReadDto>();
|
|
||||||
|
|
||||||
return Result.Success(_mapper.Map<ReceiverReadDto>(rcv));
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null)
|
|
||||||
{
|
|
||||||
var rcv = await _repository.ReadByAsync(emailAddress: emailAddress, signature: signature);
|
|
||||||
|
|
||||||
if (rcv is null)
|
|
||||||
return Result.Fail();
|
|
||||||
|
|
||||||
return await _repository.DeleteAsync(rcv) ? Result.Success() : Result.Fail();
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual async Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto) where TUpdateDto : IUnique<int>
|
|
||||||
{
|
|
||||||
var val = await _repository.ReadByIdAsync(updateDto.Id);
|
|
||||||
if (val == null)
|
|
||||||
{
|
|
||||||
return Result.Fail().Notice(LogLevel.Warning, Flag.NotFound, $"{updateDto.Id} is not found in update process of {GetType()} entity.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var entity = _mapper.Map(updateDto, val);
|
|
||||||
return (await _repository.UpdateAsync(entity)) ? Result.Success() : Result.Fail();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services;
|
||||||
|
|
||||||
|
public class UserReceiverService : BasicCRUDService<IUserReceiverRepository, UserReceiverDto, UserReceiver, int>, IUserReceiverService
|
||||||
{
|
{
|
||||||
public class UserReceiverService : BasicCRUDService<IUserReceiverRepository, UserReceiverDto, UserReceiver, int>, IUserReceiverService
|
public UserReceiverService(IUserReceiverRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
public UserReceiverService(IUserReceiverRepository repository, IMapper mapper)
|
|
||||||
: base(repository, mapper)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,6 +112,13 @@
|
|||||||
End Enum
|
End Enum
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
|
#Region "Role"
|
||||||
|
Public NotInheritable Class ReceiverRole
|
||||||
|
Public Const PreAuth As String = "PreAuth"
|
||||||
|
Public Const FullyAuth As String = "FullyAuth"
|
||||||
|
End Class
|
||||||
|
#End Region
|
||||||
|
|
||||||
#Region "Constants"
|
#Region "Constants"
|
||||||
|
|
||||||
Public Const DATABASE = "DATABASE"
|
Public Const DATABASE = "DATABASE"
|
||||||
|
|||||||
@@ -6,4 +6,6 @@
|
|||||||
Public Property SendingProfile As Integer = 0
|
Public Property SendingProfile As Integer = 0
|
||||||
Public Property SignatureHost As String = ""
|
Public Property SignatureHost As String = ""
|
||||||
Public Property Default_TFA_Enabled As Boolean = False
|
Public Property Default_TFA_Enabled As Boolean = False
|
||||||
|
Public Property Default_TFA_WithPhone As Boolean = False
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ Public Class ConfigModel
|
|||||||
.SendingProfile = oRow.ItemEx("SENDING_PROFILE", 0),
|
.SendingProfile = oRow.ItemEx("SENDING_PROFILE", 0),
|
||||||
.SignatureHost = oRow.ItemEx("SIGNATURE_HOST", ""),
|
.SignatureHost = oRow.ItemEx("SIGNATURE_HOST", ""),
|
||||||
.ExternalProgramName = oRow.ItemEx("EXTERNAL_PROGRAM_NAME", ""),
|
.ExternalProgramName = oRow.ItemEx("EXTERNAL_PROGRAM_NAME", ""),
|
||||||
.Default_TFA_Enabled = oRow.ItemEx("DEF_TFA_ENABLED", False)
|
.Default_TFA_Enabled = oRow.ItemEx("DEF_TFA_ENABLED", False),
|
||||||
|
.Default_TFA_WithPhone = oRow.ItemEx("DEF_TFA_WITH_PHONE", False)
|
||||||
}
|
}
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ Public Class ReceiverModel
|
|||||||
Try
|
Try
|
||||||
Dim oSql As String
|
Dim oSql As String
|
||||||
oSql = "SELECT TOP 1 [PHONE_NUMBER] FROM dbo.VWSIG_ENVELOPE_RECEIVERS "
|
oSql = "SELECT TOP 1 [PHONE_NUMBER] FROM dbo.VWSIG_ENVELOPE_RECEIVERS "
|
||||||
oSql += $" WHERE ENV_USERID_CREATED = {pUserId}) "
|
oSql += $" WHERE ENV_USERID_CREATED = {pUserId} "
|
||||||
oSql += $" AND EMAIL_ADDRESS = '{pEmailAddress}' "
|
oSql += $" AND EMAIL_ADDRESS = '{pEmailAddress}' "
|
||||||
oSql += " AND Len([PHONE_NUMBER]) > 0 "
|
oSql += " AND Len([PHONE_NUMBER]) > 0 "
|
||||||
oSql += " ORDER BY [ADDED_WHEN] DESC"
|
oSql += " ORDER BY [ADDED_WHEN] DESC"
|
||||||
|
|||||||
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' indem Sie "*" wie unten gezeigt eingeben:
|
' indem Sie "*" wie unten gezeigt eingeben:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2.2.0.0")>
|
<Assembly: AssemblyVersion("2.3.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("2.2.0.0")>
|
<Assembly: AssemblyFileVersion("2.3.0.0")>
|
||||||
|
|||||||
@@ -50,6 +50,6 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
public (int Envelope, int Receiver) Id => (Envelope: EnvelopeId, Receiver: ReceiverId);
|
public (int Envelope, int Receiver) Id => (Envelope: EnvelopeId, Receiver: ReceiverId);
|
||||||
|
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public bool HasPhoneNumber => PhoneNumber is not null;
|
public bool HasPhoneNumber => !string.IsNullOrWhiteSpace(PhoneNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,34 +2,33 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Domain.Entities
|
namespace EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
[Table("TBSIG_RECEIVER", Schema = "dbo")]
|
||||||
|
public class Receiver : IUnique<int>
|
||||||
{
|
{
|
||||||
[Table("TBSIG_RECEIVER", Schema = "dbo")]
|
[Key]
|
||||||
public class Receiver : IUnique<int>
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
{
|
[Column("GUID")]
|
||||||
[Key]
|
public int Id { get; set; }
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
||||||
[Column("GUID")]
|
|
||||||
public int Id { get; set; }
|
|
||||||
|
|
||||||
[Required, EmailAddress]
|
[Required, EmailAddress]
|
||||||
[Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")]
|
[Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")]
|
||||||
public required string EmailAddress { get; set; }
|
public required string EmailAddress { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("SIGNATURE", TypeName = "nvarchar(64)")]
|
[Column("SIGNATURE", TypeName = "nvarchar(64)")]
|
||||||
public required string Signature { get; set; }
|
public required string Signature { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ADDED_WHEN", TypeName = "datetime")]
|
[Column("ADDED_WHEN", TypeName = "datetime")]
|
||||||
public DateTime AddedWhen { get; set; }
|
public DateTime AddedWhen { get; set; }
|
||||||
|
|
||||||
[Column("TOTP_SECRET_KEY", TypeName = "nvarchar(MAX)")]
|
[Column("TOTP_SECRET_KEY", TypeName = "nvarchar(MAX)")]
|
||||||
public string? TotpSecretkey { get; set; }
|
public string? TotpSecretkey { get; set; }
|
||||||
|
|
||||||
[Column("TOTP_EXPIRATION", TypeName = "datetime")]
|
[Column("TFA_REG_DEADLINE", TypeName = "datetime")]
|
||||||
public DateTime? TotpExpiration { get; set; }
|
public DateTime? TfaRegDeadline { get; set; }
|
||||||
|
|
||||||
public IEnumerable<EnvelopeReceiver>? EnvelopeReceivers { get; init; }
|
public IEnumerable<EnvelopeReceiver>? EnvelopeReceivers { get; init; }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -54,6 +54,7 @@
|
|||||||
<Reference Include="DevExpress.Charts.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.Charts.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DevExpress.Data.v21.2" />
|
<Reference Include="DevExpress.Data.v21.2" />
|
||||||
<Reference Include="DevExpress.Data.Desktop.v21.2" />
|
<Reference Include="DevExpress.Data.Desktop.v21.2" />
|
||||||
|
<Reference Include="DevExpress.Dialogs.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
<Reference Include="DevExpress.Utils.v21.2" />
|
<Reference Include="DevExpress.Utils.v21.2" />
|
||||||
<Reference Include="DevExpress.Sparkline.v21.2.Core" />
|
<Reference Include="DevExpress.Sparkline.v21.2.Core" />
|
||||||
<Reference Include="DevExpress.Utils.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
<Reference Include="DevExpress.Utils.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
@@ -64,6 +65,7 @@
|
|||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="DevExpress.XtraCharts.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.XtraCharts.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DevExpress.XtraCharts.v21.2.Wizard, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
<Reference Include="DevExpress.XtraCharts.v21.2.Wizard, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
|
<Reference Include="DevExpress.XtraDialogs.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DevExpress.XtraEditors.v21.2" />
|
<Reference Include="DevExpress.XtraEditors.v21.2" />
|
||||||
<Reference Include="DevExpress.Printing.v21.2.Core" />
|
<Reference Include="DevExpress.Printing.v21.2.Core" />
|
||||||
<Reference Include="DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
@@ -167,6 +169,12 @@
|
|||||||
<Compile Include="frmMain.vb">
|
<Compile Include="frmMain.vb">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="frmOrderFiles.Designer.vb">
|
||||||
|
<DependentUpon>frmOrderFiles.vb</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="frmOrderFiles.vb">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="frmRueckruf.Designer.vb">
|
<Compile Include="frmRueckruf.Designer.vb">
|
||||||
<DependentUpon>frmRueckruf.vb</DependentUpon>
|
<DependentUpon>frmRueckruf.vb</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -222,6 +230,9 @@
|
|||||||
<DependentUpon>frmMain.vb</DependentUpon>
|
<DependentUpon>frmMain.vb</DependentUpon>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="frmOrderFiles.resx">
|
||||||
|
<DependentUpon>frmOrderFiles.vb</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="frmRueckruf.resx">
|
<EmbeddedResource Include="frmRueckruf.resx">
|
||||||
<DependentUpon>frmRueckruf.vb</DependentUpon>
|
<DependentUpon>frmRueckruf.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ Module ModuleSettings
|
|||||||
Public MS_GDPICTUREKEY As String = ""
|
Public MS_GDPICTUREKEY As String = ""
|
||||||
Public DB_DD_ECM As MSSQLServer = Nothing
|
Public DB_DD_ECM As MSSQLServer = Nothing
|
||||||
Public DEF_TF_ENABLED As Boolean = False
|
Public DEF_TF_ENABLED As Boolean = False
|
||||||
|
Public DEF_TF_ENABLED_WITH_PHONE As Boolean = False
|
||||||
Public MYUSER As User
|
Public MYUSER As User
|
||||||
Public MyTempFiles As TempFiles
|
Public MyTempFiles As TempFiles
|
||||||
Public SQL_REP_ENV_USER_LM As String = ""
|
Public SQL_REP_ENV_USER_LM As String = ""
|
||||||
|
|||||||
16
EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb
generated
16
EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb
generated
@@ -60,6 +60,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
|
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
|
||||||
Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
|
Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
|
||||||
Me.bbtnitm_ConcatFiles = New DevExpress.XtraBars.BarButtonItem()
|
Me.bbtnitm_ConcatFiles = New DevExpress.XtraBars.BarButtonItem()
|
||||||
|
Me.btnShowFile = New DevExpress.XtraBars.BarButtonItem()
|
||||||
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
|
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
|
||||||
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
||||||
Me.RibbonPageGroupDocuments = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
Me.RibbonPageGroupDocuments = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
||||||
@@ -101,7 +102,6 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.EnvelopeDocumentBindingSource = New System.Windows.Forms.BindingSource(Me.components)
|
Me.EnvelopeDocumentBindingSource = New System.Windows.Forms.BindingSource(Me.components)
|
||||||
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
|
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
|
||||||
Me.txtEnvelopeIdLabel = New DevExpress.XtraBars.BarStaticItem()
|
Me.txtEnvelopeIdLabel = New DevExpress.XtraBars.BarStaticItem()
|
||||||
Me.btnShowFile = New DevExpress.XtraBars.BarButtonItem()
|
|
||||||
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.SplitContainerControl1.Panel1.SuspendLayout()
|
Me.SplitContainerControl1.Panel1.SuspendLayout()
|
||||||
@@ -359,6 +359,13 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.bbtnitm_ConcatFiles.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitm_ConcatFiles.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
Me.bbtnitm_ConcatFiles.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitm_ConcatFiles.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
Me.bbtnitm_ConcatFiles.Name = "bbtnitm_ConcatFiles"
|
Me.bbtnitm_ConcatFiles.Name = "bbtnitm_ConcatFiles"
|
||||||
'
|
'
|
||||||
|
'btnShowFile
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.btnShowFile, "btnShowFile")
|
||||||
|
Me.btnShowFile.Id = 17
|
||||||
|
Me.btnShowFile.ImageOptions.SvgImage = CType(resources.GetObject("btnShowFile.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
|
Me.btnShowFile.Name = "btnShowFile"
|
||||||
|
'
|
||||||
'RibbonPage1
|
'RibbonPage1
|
||||||
'
|
'
|
||||||
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroupDocuments, Me.RibbonPageGroupInvitation, Me.RibbonPageGroupAddSignature, Me.RibbonPageGroupReceiver})
|
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroupDocuments, Me.RibbonPageGroupInvitation, Me.RibbonPageGroupAddSignature, Me.RibbonPageGroupReceiver})
|
||||||
@@ -684,13 +691,6 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.txtEnvelopeIdLabel.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
|
Me.txtEnvelopeIdLabel.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
|
||||||
Me.txtEnvelopeIdLabel.Tag = "Envelope-ID: {0}"
|
Me.txtEnvelopeIdLabel.Tag = "Envelope-ID: {0}"
|
||||||
'
|
'
|
||||||
'btnShowFile
|
|
||||||
'
|
|
||||||
resources.ApplyResources(Me.btnShowFile, "btnShowFile")
|
|
||||||
Me.btnShowFile.Id = 17
|
|
||||||
Me.btnShowFile.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem4.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
|
||||||
Me.btnShowFile.Name = "btnShowFile"
|
|
||||||
'
|
|
||||||
'frmEnvelopeEditor
|
'frmEnvelopeEditor
|
||||||
'
|
'
|
||||||
Me.AllowDrop = True
|
Me.AllowDrop = True
|
||||||
|
|||||||
@@ -436,7 +436,7 @@
|
|||||||
<data name="btnShowFile.Caption" xml:space="preserve">
|
<data name="btnShowFile.Caption" xml:space="preserve">
|
||||||
<value>Dokument anzeigen</value>
|
<value>Dokument anzeigen</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BarButtonItem4.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="btnShowFile.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
|
||||||
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
|
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
|
||||||
@@ -1131,6 +1131,12 @@
|
|||||||
<data name=">>bbtnitm_ConcatFiles.Type" xml:space="preserve">
|
<data name=">>bbtnitm_ConcatFiles.Type" xml:space="preserve">
|
||||||
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>btnShowFile.Name" xml:space="preserve">
|
||||||
|
<value>btnShowFile</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnShowFile.Type" xml:space="preserve">
|
||||||
|
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||||
|
</data>
|
||||||
<data name=">>RibbonPage1.Name" xml:space="preserve">
|
<data name=">>RibbonPage1.Name" xml:space="preserve">
|
||||||
<value>RibbonPage1</value>
|
<value>RibbonPage1</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1329,12 +1335,6 @@
|
|||||||
<data name=">>txtEnvelopeIdLabel.Type" xml:space="preserve">
|
<data name=">>txtEnvelopeIdLabel.Type" xml:space="preserve">
|
||||||
<value>DevExpress.XtraBars.BarStaticItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
<value>DevExpress.XtraBars.BarStaticItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>btnShowFile.Name" xml:space="preserve">
|
|
||||||
<value>btnShowFile</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnShowFile.Type" xml:space="preserve">
|
|
||||||
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>frmEnvelopeEditor</value>
|
<value>frmEnvelopeEditor</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
If oResult = DialogResult.Cancel Then
|
If oResult = DialogResult.Cancel Then
|
||||||
Controller.DeleteEnvelopeFromDisk(Controller.Envelope)
|
Controller.DeleteEnvelopeFromDisk(Controller.Envelope)
|
||||||
Me.Close()
|
Me.Close()
|
||||||
|
Else
|
||||||
|
Envelope = Controller.Envelope
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
Controller = New EnvelopeEditorController(State, Envelope)
|
Controller = New EnvelopeEditorController(State, Envelope)
|
||||||
@@ -166,8 +168,12 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SetPhoneNumberColumnVisible()
|
Private Sub SetPhoneNumberColumnVisible()
|
||||||
|
If IsNothing(Envelope) Then
|
||||||
|
colPhoneNumber.Visible = False
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
If Envelope.TFA_Enabled = True Then
|
If Envelope.TFA_Enabled = True Then
|
||||||
colPhoneNumber.Visible = True
|
colPhoneNumber.Visible = DEF_TF_ENABLED_WITH_PHONE
|
||||||
Else
|
Else
|
||||||
colPhoneNumber.Visible = False
|
colPhoneNumber.Visible = False
|
||||||
End If
|
End If
|
||||||
@@ -586,7 +592,9 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_EMAIL), oEmailAdress)
|
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_EMAIL), oEmailAdress)
|
||||||
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_NAME), oLastName)
|
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_NAME), oLastName)
|
||||||
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_CODE), oAccessCode)
|
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_CODE), oAccessCode)
|
||||||
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_PHONE), oPhoneNumber)
|
If Envelope.TFA_Enabled AndAlso DEF_TF_ENABLED_WITH_PHONE Then
|
||||||
|
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_PHONE), oPhoneNumber)
|
||||||
|
End If
|
||||||
Else
|
Else
|
||||||
Dim oMsg = Resources.Envelope.Error_email_Validation
|
Dim oMsg = Resources.Envelope.Error_email_Validation
|
||||||
oMsg = oMsg.Replace("@Mail", oEmailAdress)
|
oMsg = oMsg.Replace("@Mail", oEmailAdress)
|
||||||
@@ -639,22 +647,23 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Async Sub bbtnitm_ConcatFiles_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitm_ConcatFiles.ItemClick
|
Private Async Sub bbtnitm_ConcatFiles_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitm_ConcatFiles.ItemClick
|
||||||
ENVELOPE_TEMP_DOCUMENT = String.Empty
|
|
||||||
OpenFileDialog1.Multiselect = True
|
|
||||||
OpenFileDialog1.Title = Resources.Envelope.Dialog_Concat_PDF
|
|
||||||
Dim oSuccess As Boolean = False
|
|
||||||
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
|
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
|
||||||
Try
|
Try
|
||||||
Dim oErr As Boolean = False
|
|
||||||
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
|
ENVELOPE_TEMP_DOCUMENT = String.Empty
|
||||||
|
Dim openform As New frmOrderFiles
|
||||||
|
openform.oTitle = Resources.Envelope.Dialog_Concat_PDF
|
||||||
|
openform.ShowDialog()
|
||||||
|
If Not IsNothing(openform.fileResults) Then
|
||||||
Dim oIDX As Integer = -1
|
Dim oIDX As Integer = -1
|
||||||
For Each oFile As String In OpenFileDialog1.FileNames
|
For Each oFile As String In openform.fileResults
|
||||||
oIDX += 1
|
oIDX += 1
|
||||||
Next
|
Next
|
||||||
|
Dim oSuccess As Boolean = False
|
||||||
|
Dim oErr As Boolean = False
|
||||||
Dim arPDF As GdPicturePDF() = New GdPicturePDF(oIDX) {}
|
Dim arPDF As GdPicturePDF() = New GdPicturePDF(oIDX) {}
|
||||||
oIDX = 0
|
oIDX = 0
|
||||||
For Each oFile As String In OpenFileDialog1.FileNames
|
For Each oFile As String In openform.fileResults
|
||||||
arPDF(oIDX) = New GdPicturePDF()
|
arPDF(oIDX) = New GdPicturePDF()
|
||||||
If arPDF(oIDX).LoadFromFile(oFile) <> GdPictureStatus.OK Then
|
If arPDF(oIDX).LoadFromFile(oFile) <> GdPictureStatus.OK Then
|
||||||
MsgBox($"PDF Status of file {oFile} is not OK. Please check PDF-conformity!", MsgBoxStyle.Critical)
|
MsgBox($"PDF Status of file {oFile} is not OK. Please check PDF-conformity!", MsgBoxStyle.Critical)
|
||||||
@@ -691,7 +700,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
End If
|
End If
|
||||||
dstPDF.Dispose()
|
dstPDF.Dispose()
|
||||||
oIDX = 0
|
oIDX = 0
|
||||||
For Each oFile As String In OpenFileDialog1.FileNames
|
For Each oFile As String In openform.fileResults
|
||||||
arPDF(oIDX).CloseDocument()
|
arPDF(oIDX).CloseDocument()
|
||||||
oIDX += 1
|
oIDX += 1
|
||||||
Next
|
Next
|
||||||
@@ -701,8 +710,8 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
End If
|
|
||||||
|
|
||||||
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
Finally
|
Finally
|
||||||
@@ -710,7 +719,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
End Try
|
End Try
|
||||||
|
|
||||||
|
|
||||||
'frmChooseDocVariant.ShowDialog()
|
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -741,7 +750,6 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Private Async Sub frmEnvelopeEditor_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
|
Private Async Sub frmEnvelopeEditor_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
|
||||||
' Den Pfad der Datei(en) erhalten
|
' Den Pfad der Datei(en) erhalten
|
||||||
Dim ofiles() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
|
Dim ofiles() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
|
||||||
|
|
||||||
' Beispiel: Ersten Dateipfad anzeigen
|
' Beispiel: Ersten Dateipfad anzeigen
|
||||||
If ofiles IsNot Nothing AndAlso ofiles.Length > 0 Then
|
If ofiles IsNot Nothing AndAlso ofiles.Length > 0 Then
|
||||||
If Not ofiles(0).ToString.EndsWith("pdf") Then
|
If Not ofiles(0).ToString.EndsWith("pdf") Then
|
||||||
@@ -754,7 +762,6 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
SplashScreenManager.CloseOverlayForm(oHandle)
|
SplashScreenManager.CloseOverlayForm(oHandle)
|
||||||
' MessageBox.Show("Dateipfad: " & ofiles(0), "Datei abgelegt", MessageBoxButtons.OK, MessageBoxIcon.Information)
|
' MessageBox.Show("Dateipfad: " & ofiles(0), "Datei abgelegt", MessageBoxButtons.OK, MessageBoxIcon.Information)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|||||||
@@ -56,20 +56,25 @@ Public Class frmEnvelopeMainData
|
|||||||
cmbLanguage.Properties.Items.AddRange(New List(Of String) From {"de", "en"})
|
cmbLanguage.Properties.Items.AddRange(New List(Of String) From {"de", "en"})
|
||||||
|
|
||||||
groupAllOptions.Expanded = False
|
groupAllOptions.Expanded = False
|
||||||
|
Dim EnvelopeType = oTypes.FirstOrDefault()
|
||||||
If NewEnvelopeMode = True Then
|
If NewEnvelopeMode = True Then
|
||||||
Dim oType = oTypes.FirstOrDefault()
|
|
||||||
|
|
||||||
' This will trigger loading values from the type
|
' This will trigger loading values from the type
|
||||||
cmbEnvelopeType.EditValue = oType
|
cmbEnvelopeType.EditValue = EnvelopeType
|
||||||
chked_2Faktor.EditValue = DEF_TF_ENABLED
|
chked_2Faktor.EditValue = DEF_TF_ENABLED
|
||||||
|
|
||||||
Else
|
Else
|
||||||
' This will trigger loading values from the type
|
If Envelope.EnvelopeType.ContractType = 0 Then
|
||||||
cmbEnvelopeType.EditValue = Envelope.EnvelopeType
|
cmbEnvelopeType.EditValue = EnvelopeType
|
||||||
' cmbEnvelopeType.SelectedIndex = Convert.ToInt32(Envelope.EnvelopeType) - 1
|
Else
|
||||||
' cmbEnvelopeType.SelectedIndex = Envelope.Type.Id - 1
|
' This will trigger loading values from the type
|
||||||
' cmbEnvelopeType.SelectedItem = cmbEnvelopeType.Properties.Items.Cast(Of EnvelopeType).Where(Function(i) i.Id = Envelope.EnvelopeType.Id).SingleOrDefault()
|
cmbEnvelopeType.EditValue = Envelope.EnvelopeType
|
||||||
|
' cmbEnvelopeType.SelectedIndex = Convert.ToInt32(Envelope.EnvelopeType) - 1
|
||||||
|
' cmbEnvelopeType.SelectedIndex = Envelope.Type.Id - 1
|
||||||
|
' cmbEnvelopeType.SelectedItem = cmbEnvelopeType.Properties.Items.Cast(Of EnvelopeType).Where(Function(i) i.Id = Envelope.EnvelopeType.Id).SingleOrDefault()
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
' Now we can override these values with the values from envelope
|
' Now we can override these values with the values from envelope
|
||||||
txtTitle.EditValue = Envelope.Title
|
txtTitle.EditValue = Envelope.Title
|
||||||
|
|||||||
211
EnvelopeGenerator.Form/frmMain.Designer.vb
generated
211
EnvelopeGenerator.Form/frmMain.Designer.vb
generated
@@ -62,10 +62,11 @@ Partial Class frmMain
|
|||||||
Me.bbtnitmEB = New DevExpress.XtraBars.BarButtonItem()
|
Me.bbtnitmEB = New DevExpress.XtraBars.BarButtonItem()
|
||||||
Me.bbtnitmInfoMail = New DevExpress.XtraBars.BarButtonItem()
|
Me.bbtnitmInfoMail = New DevExpress.XtraBars.BarButtonItem()
|
||||||
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
|
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
|
||||||
|
Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
|
||||||
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
|
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
|
||||||
Me.RibbonPageEnvelopeActions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
Me.RibbonPageEnvelopeActions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
||||||
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
||||||
Me.RibbonPageFunctions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
Me.RibbonPageGroupFunctions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
||||||
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
|
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
|
||||||
Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
|
||||||
Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
|
Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
|
||||||
@@ -86,9 +87,12 @@ Partial Class frmMain
|
|||||||
Me.GridColumn5 = New DevExpress.XtraGrid.Columns.GridColumn()
|
Me.GridColumn5 = New DevExpress.XtraGrid.Columns.GridColumn()
|
||||||
Me.GridColumn7 = New DevExpress.XtraGrid.Columns.GridColumn()
|
Me.GridColumn7 = New DevExpress.XtraGrid.Columns.GridColumn()
|
||||||
Me.XtraTabPageAdmin = New DevExpress.XtraTab.XtraTabPage()
|
Me.XtraTabPageAdmin = New DevExpress.XtraTab.XtraTabPage()
|
||||||
|
Me.SplitContainerControl2 = New DevExpress.XtraEditors.SplitContainerControl()
|
||||||
Me.GridControlData = New DevExpress.XtraGrid.GridControl()
|
Me.GridControlData = New DevExpress.XtraGrid.GridControl()
|
||||||
Me.GridViewData = New DevExpress.XtraGrid.Views.Grid.GridView()
|
Me.GridViewData = New DevExpress.XtraGrid.Views.Grid.GridView()
|
||||||
Me.PanelControl1 = New DevExpress.XtraEditors.PanelControl()
|
Me.PanelControl1 = New DevExpress.XtraEditors.PanelControl()
|
||||||
|
Me.GroupControl2 = New DevExpress.XtraEditors.GroupControl()
|
||||||
|
Me.LabelControl1 = New DevExpress.XtraEditors.LabelControl()
|
||||||
Me.GroupControl1 = New DevExpress.XtraEditors.GroupControl()
|
Me.GroupControl1 = New DevExpress.XtraEditors.GroupControl()
|
||||||
Me.btnEnvelopes_All = New DevExpress.XtraEditors.SimpleButton()
|
Me.btnEnvelopes_All = New DevExpress.XtraEditors.SimpleButton()
|
||||||
Me.btnEnvelopes_thisYear = New DevExpress.XtraEditors.SimpleButton()
|
Me.btnEnvelopes_thisYear = New DevExpress.XtraEditors.SimpleButton()
|
||||||
@@ -96,9 +100,7 @@ Partial Class frmMain
|
|||||||
Me.btnEnvelopes_thismonth = New DevExpress.XtraEditors.SimpleButton()
|
Me.btnEnvelopes_thismonth = New DevExpress.XtraEditors.SimpleButton()
|
||||||
Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components)
|
Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components)
|
||||||
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
|
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
|
||||||
Me.GroupControl2 = New DevExpress.XtraEditors.GroupControl()
|
Me.XtraSaveFileDialog1 = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components)
|
||||||
Me.SplitContainerControl2 = New DevExpress.XtraEditors.SplitContainerControl()
|
|
||||||
Me.ChartControl1 = New DevExpress.XtraCharts.ChartControl()
|
|
||||||
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.SplitContainerControl1.Panel1.SuspendLayout()
|
Me.SplitContainerControl1.Panel1.SuspendLayout()
|
||||||
@@ -118,20 +120,19 @@ Partial Class frmMain
|
|||||||
CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.XtraTabPageAdmin.SuspendLayout()
|
Me.XtraTabPageAdmin.SuspendLayout()
|
||||||
CType(Me.GridControlData, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
||||||
CType(Me.GridViewData, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
||||||
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
||||||
Me.PanelControl1.SuspendLayout()
|
|
||||||
CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
||||||
Me.GroupControl1.SuspendLayout()
|
|
||||||
CType(Me.GroupControl2, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
||||||
CType(Me.SplitContainerControl2, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.SplitContainerControl2, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.SplitContainerControl2.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.SplitContainerControl2.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.SplitContainerControl2.Panel1.SuspendLayout()
|
Me.SplitContainerControl2.Panel1.SuspendLayout()
|
||||||
CType(Me.SplitContainerControl2.Panel2, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.SplitContainerControl2.Panel2, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.SplitContainerControl2.Panel2.SuspendLayout()
|
|
||||||
Me.SplitContainerControl2.SuspendLayout()
|
Me.SplitContainerControl2.SuspendLayout()
|
||||||
CType(Me.ChartControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.GridControlData, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.GridViewData, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
Me.PanelControl1.SuspendLayout()
|
||||||
|
CType(Me.GroupControl2, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
Me.GroupControl2.SuspendLayout()
|
||||||
|
CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
Me.GroupControl1.SuspendLayout()
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
'SplashScreenManager1
|
'SplashScreenManager1
|
||||||
@@ -140,16 +141,16 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'SplitContainerControl1
|
'SplitContainerControl1
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.SplitContainerControl1, "SplitContainerControl1")
|
||||||
Me.SplitContainerControl1.Collapsed = True
|
Me.SplitContainerControl1.Collapsed = True
|
||||||
Me.SplitContainerControl1.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2
|
Me.SplitContainerControl1.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2
|
||||||
resources.ApplyResources(Me.SplitContainerControl1, "SplitContainerControl1")
|
|
||||||
Me.SplitContainerControl1.Horizontal = False
|
Me.SplitContainerControl1.Horizontal = False
|
||||||
Me.SplitContainerControl1.Name = "SplitContainerControl1"
|
Me.SplitContainerControl1.Name = "SplitContainerControl1"
|
||||||
'
|
'
|
||||||
'SplitContainerControl1.Panel1
|
'SplitContainerControl1.Panel1
|
||||||
'
|
'
|
||||||
Me.SplitContainerControl1.Panel1.Controls.Add(Me.XtraTabControlMain)
|
|
||||||
resources.ApplyResources(Me.SplitContainerControl1.Panel1, "SplitContainerControl1.Panel1")
|
resources.ApplyResources(Me.SplitContainerControl1.Panel1, "SplitContainerControl1.Panel1")
|
||||||
|
Me.SplitContainerControl1.Panel1.Controls.Add(Me.XtraTabControlMain)
|
||||||
'
|
'
|
||||||
'SplitContainerControl1.Panel2
|
'SplitContainerControl1.Panel2
|
||||||
'
|
'
|
||||||
@@ -165,19 +166,25 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'XtraTabPage1
|
'XtraTabPage1
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.XtraTabPage1, "XtraTabPage1")
|
||||||
Me.XtraTabPage1.Controls.Add(Me.GridEnvelopes)
|
Me.XtraTabPage1.Controls.Add(Me.GridEnvelopes)
|
||||||
Me.XtraTabPage1.Name = "XtraTabPage1"
|
Me.XtraTabPage1.Name = "XtraTabPage1"
|
||||||
resources.ApplyResources(Me.XtraTabPage1, "XtraTabPage1")
|
|
||||||
'
|
'
|
||||||
'GridEnvelopes
|
'GridEnvelopes
|
||||||
'
|
'
|
||||||
resources.ApplyResources(Me.GridEnvelopes, "GridEnvelopes")
|
resources.ApplyResources(Me.GridEnvelopes, "GridEnvelopes")
|
||||||
|
Me.GridEnvelopes.EmbeddedNavigator.AccessibleDescription = resources.GetString("GridEnvelopes.EmbeddedNavigator.AccessibleDescription")
|
||||||
|
Me.GridEnvelopes.EmbeddedNavigator.AccessibleName = resources.GetString("GridEnvelopes.EmbeddedNavigator.AccessibleName")
|
||||||
Me.GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
|
Me.GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
|
||||||
Me.GridEnvelopes.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
|
Me.GridEnvelopes.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
|
||||||
|
Me.GridEnvelopes.EmbeddedNavigator.BackgroundImage = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.BackgroundImage"), System.Drawing.Image)
|
||||||
Me.GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
|
Me.GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
|
||||||
Me.GridEnvelopes.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
|
Me.GridEnvelopes.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
|
||||||
|
Me.GridEnvelopes.EmbeddedNavigator.MaximumSize = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.MaximumSize"), System.Drawing.Size)
|
||||||
Me.GridEnvelopes.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
|
Me.GridEnvelopes.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
|
||||||
|
Me.GridEnvelopes.EmbeddedNavigator.ToolTip = resources.GetString("GridEnvelopes.EmbeddedNavigator.ToolTip")
|
||||||
Me.GridEnvelopes.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
|
Me.GridEnvelopes.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
|
||||||
|
Me.GridEnvelopes.EmbeddedNavigator.ToolTipTitle = resources.GetString("GridEnvelopes.EmbeddedNavigator.ToolTipTitle")
|
||||||
GridLevelNode1.LevelTemplate = Me.ViewReceivers
|
GridLevelNode1.LevelTemplate = Me.ViewReceivers
|
||||||
GridLevelNode1.RelationName = "Receivers"
|
GridLevelNode1.RelationName = "Receivers"
|
||||||
GridLevelNode2.LevelTemplate = Me.ViewHistory
|
GridLevelNode2.LevelTemplate = Me.ViewHistory
|
||||||
@@ -191,6 +198,7 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'ViewReceivers
|
'ViewReceivers
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.ViewReceivers, "ViewReceivers")
|
||||||
Me.ViewReceivers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColReceiverStatus, Me.ColName, Me.ColEmail, Me.ColSignedDate, Me.colAccessCode, Me.ColStatusReceiver})
|
Me.ViewReceivers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColReceiverStatus, Me.ColName, Me.ColEmail, Me.ColSignedDate, Me.colAccessCode, Me.ColStatusReceiver})
|
||||||
Me.ViewReceivers.GridControl = Me.GridEnvelopes
|
Me.ViewReceivers.GridControl = Me.GridEnvelopes
|
||||||
Me.ViewReceivers.Name = "ViewReceivers"
|
Me.ViewReceivers.Name = "ViewReceivers"
|
||||||
@@ -200,7 +208,6 @@ Partial Class frmMain
|
|||||||
Me.ViewReceivers.OptionsView.ShowDetailButtons = False
|
Me.ViewReceivers.OptionsView.ShowDetailButtons = False
|
||||||
Me.ViewReceivers.OptionsView.ShowGroupPanel = False
|
Me.ViewReceivers.OptionsView.ShowGroupPanel = False
|
||||||
Me.ViewReceivers.OptionsView.ShowIndicator = False
|
Me.ViewReceivers.OptionsView.ShowIndicator = False
|
||||||
resources.ApplyResources(Me.ViewReceivers, "ViewReceivers")
|
|
||||||
'
|
'
|
||||||
'ColReceiverStatus
|
'ColReceiverStatus
|
||||||
'
|
'
|
||||||
@@ -244,6 +251,7 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'ViewHistory
|
'ViewHistory
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.ViewHistory, "ViewHistory")
|
||||||
Me.ViewHistory.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatus, Me.ColHistoryUserReference, Me.ColHistoryDate})
|
Me.ViewHistory.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatus, Me.ColHistoryUserReference, Me.ColHistoryDate})
|
||||||
Me.ViewHistory.GridControl = Me.GridEnvelopes
|
Me.ViewHistory.GridControl = Me.GridEnvelopes
|
||||||
Me.ViewHistory.Name = "ViewHistory"
|
Me.ViewHistory.Name = "ViewHistory"
|
||||||
@@ -275,6 +283,7 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'ViewEnvelopes
|
'ViewEnvelopes
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.ViewEnvelopes, "ViewEnvelopes")
|
||||||
Me.ViewEnvelopes.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colEnvelopeId, Me.colContractType, Me.colStatus, Me.colTitle, Me.colAddedWhen})
|
Me.ViewEnvelopes.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colEnvelopeId, Me.colContractType, Me.colStatus, Me.colTitle, Me.colAddedWhen})
|
||||||
Me.ViewEnvelopes.GridControl = Me.GridEnvelopes
|
Me.ViewEnvelopes.GridControl = Me.GridEnvelopes
|
||||||
Me.ViewEnvelopes.Name = "ViewEnvelopes"
|
Me.ViewEnvelopes.Name = "ViewEnvelopes"
|
||||||
@@ -316,12 +325,14 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'RibbonControl
|
'RibbonControl
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.RibbonControl, "RibbonControl")
|
||||||
Me.RibbonControl.ExpandCollapseItem.Id = 0
|
Me.RibbonControl.ExpandCollapseItem.Id = 0
|
||||||
Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer)
|
Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer)
|
||||||
Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer)
|
Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer)
|
||||||
Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.BarButtonItem2})
|
Me.RibbonControl.ExpandCollapseItem.ImageOptions.SvgImage = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
resources.ApplyResources(Me.RibbonControl, "RibbonControl")
|
Me.RibbonControl.ExpandCollapseItem.SearchTags = resources.GetString("RibbonControl.ExpandCollapseItem.SearchTags")
|
||||||
Me.RibbonControl.MaxItemId = 17
|
Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.BarButtonItem2, Me.BarButtonItem3})
|
||||||
|
Me.RibbonControl.MaxItemId = 18
|
||||||
Me.RibbonControl.Name = "RibbonControl"
|
Me.RibbonControl.Name = "RibbonControl"
|
||||||
Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2})
|
Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2})
|
||||||
Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
|
Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
|
||||||
@@ -410,6 +421,8 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
resources.ApplyResources(Me.btnOpenLogDirectory, "btnOpenLogDirectory")
|
resources.ApplyResources(Me.btnOpenLogDirectory, "btnOpenLogDirectory")
|
||||||
Me.btnOpenLogDirectory.Id = 10
|
Me.btnOpenLogDirectory.Id = 10
|
||||||
|
Me.btnOpenLogDirectory.ImageOptions.ImageIndex = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.ImageIndex"), Integer)
|
||||||
|
Me.btnOpenLogDirectory.ImageOptions.LargeImageIndex = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.LargeImageIndex"), Integer)
|
||||||
Me.btnOpenLogDirectory.ImageOptions.SvgImage = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
Me.btnOpenLogDirectory.ImageOptions.SvgImage = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
Me.btnOpenLogDirectory.Name = "btnOpenLogDirectory"
|
Me.btnOpenLogDirectory.Name = "btnOpenLogDirectory"
|
||||||
'
|
'
|
||||||
@@ -418,13 +431,20 @@ Partial Class frmMain
|
|||||||
resources.ApplyResources(Me.BarCheckItem1, "BarCheckItem1")
|
resources.ApplyResources(Me.BarCheckItem1, "BarCheckItem1")
|
||||||
Me.BarCheckItem1.Id = 12
|
Me.BarCheckItem1.Id = 12
|
||||||
Me.BarCheckItem1.ImageOptions.Image = CType(resources.GetObject("BarCheckItem1.ImageOptions.Image"), System.Drawing.Image)
|
Me.BarCheckItem1.ImageOptions.Image = CType(resources.GetObject("BarCheckItem1.ImageOptions.Image"), System.Drawing.Image)
|
||||||
|
Me.BarCheckItem1.ImageOptions.ImageIndex = CType(resources.GetObject("BarCheckItem1.ImageOptions.ImageIndex"), Integer)
|
||||||
Me.BarCheckItem1.ImageOptions.LargeImage = CType(resources.GetObject("BarCheckItem1.ImageOptions.LargeImage"), System.Drawing.Image)
|
Me.BarCheckItem1.ImageOptions.LargeImage = CType(resources.GetObject("BarCheckItem1.ImageOptions.LargeImage"), System.Drawing.Image)
|
||||||
|
Me.BarCheckItem1.ImageOptions.LargeImageIndex = CType(resources.GetObject("BarCheckItem1.ImageOptions.LargeImageIndex"), Integer)
|
||||||
|
Me.BarCheckItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarCheckItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
Me.BarCheckItem1.Name = "BarCheckItem1"
|
Me.BarCheckItem1.Name = "BarCheckItem1"
|
||||||
'
|
'
|
||||||
'bsitmInfo
|
'bsitmInfo
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.bsitmInfo, "bsitmInfo")
|
||||||
Me.bsitmInfo.Id = 13
|
Me.bsitmInfo.Id = 13
|
||||||
Me.bsitmInfo.ImageOptions.Image = CType(resources.GetObject("bsitmInfo.ImageOptions.Image"), System.Drawing.Image)
|
Me.bsitmInfo.ImageOptions.Image = CType(resources.GetObject("bsitmInfo.ImageOptions.Image"), System.Drawing.Image)
|
||||||
|
Me.bsitmInfo.ImageOptions.ImageIndex = CType(resources.GetObject("bsitmInfo.ImageOptions.ImageIndex"), Integer)
|
||||||
|
Me.bsitmInfo.ImageOptions.LargeImageIndex = CType(resources.GetObject("bsitmInfo.ImageOptions.LargeImageIndex"), Integer)
|
||||||
|
Me.bsitmInfo.ImageOptions.SvgImage = CType(resources.GetObject("bsitmInfo.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
Me.bsitmInfo.Name = "bsitmInfo"
|
Me.bsitmInfo.Name = "bsitmInfo"
|
||||||
Me.bsitmInfo.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
|
Me.bsitmInfo.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
|
||||||
Me.bsitmInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
Me.bsitmInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
||||||
@@ -434,6 +454,8 @@ Partial Class frmMain
|
|||||||
resources.ApplyResources(Me.bbtnitmEB, "bbtnitmEB")
|
resources.ApplyResources(Me.bbtnitmEB, "bbtnitmEB")
|
||||||
Me.bbtnitmEB.Enabled = False
|
Me.bbtnitmEB.Enabled = False
|
||||||
Me.bbtnitmEB.Id = 14
|
Me.bbtnitmEB.Id = 14
|
||||||
|
Me.bbtnitmEB.ImageOptions.ImageIndex = CType(resources.GetObject("bbtnitmEB.ImageOptions.ImageIndex"), Integer)
|
||||||
|
Me.bbtnitmEB.ImageOptions.LargeImageIndex = CType(resources.GetObject("bbtnitmEB.ImageOptions.LargeImageIndex"), Integer)
|
||||||
Me.bbtnitmEB.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmEB.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
Me.bbtnitmEB.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmEB.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
Me.bbtnitmEB.Name = "bbtnitmEB"
|
Me.bbtnitmEB.Name = "bbtnitmEB"
|
||||||
'
|
'
|
||||||
@@ -441,6 +463,8 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
resources.ApplyResources(Me.bbtnitmInfoMail, "bbtnitmInfoMail")
|
resources.ApplyResources(Me.bbtnitmInfoMail, "bbtnitmInfoMail")
|
||||||
Me.bbtnitmInfoMail.Id = 15
|
Me.bbtnitmInfoMail.Id = 15
|
||||||
|
Me.bbtnitmInfoMail.ImageOptions.ImageIndex = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.ImageIndex"), Integer)
|
||||||
|
Me.bbtnitmInfoMail.ImageOptions.LargeImageIndex = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.LargeImageIndex"), Integer)
|
||||||
Me.bbtnitmInfoMail.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
Me.bbtnitmInfoMail.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
Me.bbtnitmInfoMail.Name = "bbtnitmInfoMail"
|
Me.bbtnitmInfoMail.Name = "bbtnitmInfoMail"
|
||||||
'
|
'
|
||||||
@@ -448,12 +472,23 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2")
|
resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2")
|
||||||
Me.BarButtonItem2.Id = 16
|
Me.BarButtonItem2.Id = 16
|
||||||
|
Me.BarButtonItem2.ImageOptions.ImageIndex = CType(resources.GetObject("BarButtonItem2.ImageOptions.ImageIndex"), Integer)
|
||||||
|
Me.BarButtonItem2.ImageOptions.LargeImageIndex = CType(resources.GetObject("BarButtonItem2.ImageOptions.LargeImageIndex"), Integer)
|
||||||
Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
Me.BarButtonItem2.Name = "BarButtonItem2"
|
Me.BarButtonItem2.Name = "BarButtonItem2"
|
||||||
'
|
'
|
||||||
|
'BarButtonItem3
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.BarButtonItem3, "BarButtonItem3")
|
||||||
|
Me.BarButtonItem3.Id = 17
|
||||||
|
Me.BarButtonItem3.ImageOptions.ImageIndex = CType(resources.GetObject("BarButtonItem3.ImageOptions.ImageIndex"), Integer)
|
||||||
|
Me.BarButtonItem3.ImageOptions.LargeImageIndex = CType(resources.GetObject("BarButtonItem3.ImageOptions.LargeImageIndex"), Integer)
|
||||||
|
Me.BarButtonItem3.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem3.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
|
||||||
|
Me.BarButtonItem3.Name = "BarButtonItem3"
|
||||||
|
'
|
||||||
'RibbonPage1
|
'RibbonPage1
|
||||||
'
|
'
|
||||||
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageFunctions})
|
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageGroupFunctions})
|
||||||
Me.RibbonPage1.Name = "RibbonPage1"
|
Me.RibbonPage1.Name = "RibbonPage1"
|
||||||
resources.ApplyResources(Me.RibbonPage1, "RibbonPage1")
|
resources.ApplyResources(Me.RibbonPage1, "RibbonPage1")
|
||||||
'
|
'
|
||||||
@@ -469,18 +504,19 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
Me.RibbonPageGroup1.Alignment = DevExpress.XtraBars.Ribbon.RibbonPageGroupAlignment.Far
|
Me.RibbonPageGroup1.Alignment = DevExpress.XtraBars.Ribbon.RibbonPageGroupAlignment.Far
|
||||||
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
|
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
|
||||||
|
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem3)
|
||||||
Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
|
Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
|
||||||
resources.ApplyResources(Me.RibbonPageGroup1, "RibbonPageGroup1")
|
resources.ApplyResources(Me.RibbonPageGroup1, "RibbonPageGroup1")
|
||||||
'
|
'
|
||||||
'RibbonPageFunctions
|
'RibbonPageGroupFunctions
|
||||||
'
|
'
|
||||||
Me.RibbonPageFunctions.ItemLinks.Add(Me.btnShowDocument)
|
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnShowDocument)
|
||||||
Me.RibbonPageFunctions.ItemLinks.Add(Me.btnContactReceiver)
|
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.BarButtonItem2)
|
||||||
Me.RibbonPageFunctions.ItemLinks.Add(Me.bbtnitmInfoMail)
|
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnContactReceiver)
|
||||||
Me.RibbonPageFunctions.ItemLinks.Add(Me.bbtnitmEB)
|
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmEB)
|
||||||
Me.RibbonPageFunctions.ItemLinks.Add(Me.BarButtonItem2)
|
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmInfoMail)
|
||||||
Me.RibbonPageFunctions.Name = "RibbonPageFunctions"
|
Me.RibbonPageGroupFunctions.Name = "RibbonPageGroupFunctions"
|
||||||
resources.ApplyResources(Me.RibbonPageFunctions, "RibbonPageFunctions")
|
resources.ApplyResources(Me.RibbonPageGroupFunctions, "RibbonPageGroupFunctions")
|
||||||
'
|
'
|
||||||
'RibbonPage2
|
'RibbonPage2
|
||||||
'
|
'
|
||||||
@@ -497,28 +533,34 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'RibbonStatusBar
|
'RibbonStatusBar
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.RibbonStatusBar, "RibbonStatusBar")
|
||||||
Me.RibbonStatusBar.ItemLinks.Add(Me.txtRefreshLabel)
|
Me.RibbonStatusBar.ItemLinks.Add(Me.txtRefreshLabel)
|
||||||
Me.RibbonStatusBar.ItemLinks.Add(Me.txtEnvelopeIdLabel)
|
Me.RibbonStatusBar.ItemLinks.Add(Me.txtEnvelopeIdLabel)
|
||||||
Me.RibbonStatusBar.ItemLinks.Add(Me.bsitmInfo)
|
Me.RibbonStatusBar.ItemLinks.Add(Me.bsitmInfo)
|
||||||
resources.ApplyResources(Me.RibbonStatusBar, "RibbonStatusBar")
|
|
||||||
Me.RibbonStatusBar.Name = "RibbonStatusBar"
|
Me.RibbonStatusBar.Name = "RibbonStatusBar"
|
||||||
Me.RibbonStatusBar.Ribbon = Me.RibbonControl
|
Me.RibbonStatusBar.Ribbon = Me.RibbonControl
|
||||||
'
|
'
|
||||||
'XtraTabPage2
|
'XtraTabPage2
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.XtraTabPage2, "XtraTabPage2")
|
||||||
Me.XtraTabPage2.Controls.Add(Me.GridCompleted)
|
Me.XtraTabPage2.Controls.Add(Me.GridCompleted)
|
||||||
Me.XtraTabPage2.Name = "XtraTabPage2"
|
Me.XtraTabPage2.Name = "XtraTabPage2"
|
||||||
resources.ApplyResources(Me.XtraTabPage2, "XtraTabPage2")
|
|
||||||
'
|
'
|
||||||
'GridCompleted
|
'GridCompleted
|
||||||
'
|
'
|
||||||
resources.ApplyResources(Me.GridCompleted, "GridCompleted")
|
resources.ApplyResources(Me.GridCompleted, "GridCompleted")
|
||||||
|
Me.GridCompleted.EmbeddedNavigator.AccessibleDescription = resources.GetString("GridCompleted.EmbeddedNavigator.AccessibleDescription")
|
||||||
|
Me.GridCompleted.EmbeddedNavigator.AccessibleName = resources.GetString("GridCompleted.EmbeddedNavigator.AccessibleName")
|
||||||
Me.GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
|
Me.GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
|
||||||
Me.GridCompleted.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
|
Me.GridCompleted.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
|
||||||
|
Me.GridCompleted.EmbeddedNavigator.BackgroundImage = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.BackgroundImage"), System.Drawing.Image)
|
||||||
Me.GridCompleted.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
|
Me.GridCompleted.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
|
||||||
Me.GridCompleted.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
|
Me.GridCompleted.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
|
||||||
|
Me.GridCompleted.EmbeddedNavigator.MaximumSize = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.MaximumSize"), System.Drawing.Size)
|
||||||
Me.GridCompleted.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
|
Me.GridCompleted.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
|
||||||
|
Me.GridCompleted.EmbeddedNavigator.ToolTip = resources.GetString("GridCompleted.EmbeddedNavigator.ToolTip")
|
||||||
Me.GridCompleted.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
|
Me.GridCompleted.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
|
||||||
|
Me.GridCompleted.EmbeddedNavigator.ToolTipTitle = resources.GetString("GridCompleted.EmbeddedNavigator.ToolTipTitle")
|
||||||
GridLevelNode3.LevelTemplate = Me.ViewReceiversCompleted
|
GridLevelNode3.LevelTemplate = Me.ViewReceiversCompleted
|
||||||
GridLevelNode3.RelationName = "Receivers"
|
GridLevelNode3.RelationName = "Receivers"
|
||||||
GridLevelNode4.LevelTemplate = Me.ViewHistoryCompleted
|
GridLevelNode4.LevelTemplate = Me.ViewHistoryCompleted
|
||||||
@@ -532,6 +574,7 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'ViewReceiversCompleted
|
'ViewReceiversCompleted
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.ViewReceiversCompleted, "ViewReceiversCompleted")
|
||||||
Me.ViewReceiversCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColStatusCompleted, Me.ColNameCompleted, Me.ColEmailCompleted, Me.ColSignedDateCompleted})
|
Me.ViewReceiversCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColStatusCompleted, Me.ColNameCompleted, Me.ColEmailCompleted, Me.ColSignedDateCompleted})
|
||||||
Me.ViewReceiversCompleted.GridControl = Me.GridCompleted
|
Me.ViewReceiversCompleted.GridControl = Me.GridCompleted
|
||||||
Me.ViewReceiversCompleted.Name = "ViewReceiversCompleted"
|
Me.ViewReceiversCompleted.Name = "ViewReceiversCompleted"
|
||||||
@@ -541,7 +584,6 @@ Partial Class frmMain
|
|||||||
Me.ViewReceiversCompleted.OptionsView.ShowDetailButtons = False
|
Me.ViewReceiversCompleted.OptionsView.ShowDetailButtons = False
|
||||||
Me.ViewReceiversCompleted.OptionsView.ShowGroupPanel = False
|
Me.ViewReceiversCompleted.OptionsView.ShowGroupPanel = False
|
||||||
Me.ViewReceiversCompleted.OptionsView.ShowIndicator = False
|
Me.ViewReceiversCompleted.OptionsView.ShowIndicator = False
|
||||||
resources.ApplyResources(Me.ViewReceiversCompleted, "ViewReceiversCompleted")
|
|
||||||
'
|
'
|
||||||
'ColStatusCompleted
|
'ColStatusCompleted
|
||||||
'
|
'
|
||||||
@@ -569,6 +611,7 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'ViewHistoryCompleted
|
'ViewHistoryCompleted
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.ViewHistoryCompleted, "ViewHistoryCompleted")
|
||||||
Me.ViewHistoryCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatusCompleted, Me.ColHistoryUserReferenceCompleted, Me.ColHistoryDateCompleted})
|
Me.ViewHistoryCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatusCompleted, Me.ColHistoryUserReferenceCompleted, Me.ColHistoryDateCompleted})
|
||||||
Me.ViewHistoryCompleted.GridControl = Me.GridCompleted
|
Me.ViewHistoryCompleted.GridControl = Me.GridCompleted
|
||||||
Me.ViewHistoryCompleted.Name = "ViewHistoryCompleted"
|
Me.ViewHistoryCompleted.Name = "ViewHistoryCompleted"
|
||||||
@@ -602,6 +645,7 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'ViewCompleted
|
'ViewCompleted
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.ViewCompleted, "ViewCompleted")
|
||||||
Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn4, Me.GridColumn5, Me.GridColumn7})
|
Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn4, Me.GridColumn5, Me.GridColumn7})
|
||||||
Me.ViewCompleted.GridControl = Me.GridCompleted
|
Me.ViewCompleted.GridControl = Me.GridCompleted
|
||||||
Me.ViewCompleted.Name = "ViewCompleted"
|
Me.ViewCompleted.Name = "ViewCompleted"
|
||||||
@@ -635,14 +679,41 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'XtraTabPageAdmin
|
'XtraTabPageAdmin
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.XtraTabPageAdmin, "XtraTabPageAdmin")
|
||||||
Me.XtraTabPageAdmin.Controls.Add(Me.SplitContainerControl2)
|
Me.XtraTabPageAdmin.Controls.Add(Me.SplitContainerControl2)
|
||||||
Me.XtraTabPageAdmin.Controls.Add(Me.PanelControl1)
|
Me.XtraTabPageAdmin.Controls.Add(Me.PanelControl1)
|
||||||
Me.XtraTabPageAdmin.Name = "XtraTabPageAdmin"
|
Me.XtraTabPageAdmin.Name = "XtraTabPageAdmin"
|
||||||
resources.ApplyResources(Me.XtraTabPageAdmin, "XtraTabPageAdmin")
|
'
|
||||||
|
'SplitContainerControl2
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.SplitContainerControl2, "SplitContainerControl2")
|
||||||
|
Me.SplitContainerControl2.Name = "SplitContainerControl2"
|
||||||
|
'
|
||||||
|
'SplitContainerControl2.Panel1
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.SplitContainerControl2.Panel1, "SplitContainerControl2.Panel1")
|
||||||
|
Me.SplitContainerControl2.Panel1.Controls.Add(Me.GridControlData)
|
||||||
|
'
|
||||||
|
'SplitContainerControl2.Panel2
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.SplitContainerControl2.Panel2, "SplitContainerControl2.Panel2")
|
||||||
|
Me.SplitContainerControl2.SplitterPosition = 584
|
||||||
'
|
'
|
||||||
'GridControlData
|
'GridControlData
|
||||||
'
|
'
|
||||||
resources.ApplyResources(Me.GridControlData, "GridControlData")
|
resources.ApplyResources(Me.GridControlData, "GridControlData")
|
||||||
|
Me.GridControlData.EmbeddedNavigator.AccessibleDescription = resources.GetString("GridControlData.EmbeddedNavigator.AccessibleDescription")
|
||||||
|
Me.GridControlData.EmbeddedNavigator.AccessibleName = resources.GetString("GridControlData.EmbeddedNavigator.AccessibleName")
|
||||||
|
Me.GridControlData.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridControlData.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridControlData.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.BackgroundImage = CType(resources.GetObject("GridControlData.EmbeddedNavigator.BackgroundImage"), System.Drawing.Image)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridControlData.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridControlData.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.MaximumSize = CType(resources.GetObject("GridControlData.EmbeddedNavigator.MaximumSize"), System.Drawing.Size)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridControlData.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.ToolTip = resources.GetString("GridControlData.EmbeddedNavigator.ToolTip")
|
||||||
|
Me.GridControlData.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridControlData.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
|
||||||
|
Me.GridControlData.EmbeddedNavigator.ToolTipTitle = resources.GetString("GridControlData.EmbeddedNavigator.ToolTipTitle")
|
||||||
Me.GridControlData.MainView = Me.GridViewData
|
Me.GridControlData.MainView = Me.GridViewData
|
||||||
Me.GridControlData.MenuManager = Me.RibbonControl
|
Me.GridControlData.MenuManager = Me.RibbonControl
|
||||||
Me.GridControlData.Name = "GridControlData"
|
Me.GridControlData.Name = "GridControlData"
|
||||||
@@ -650,51 +721,63 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
'GridViewData
|
'GridViewData
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.GridViewData, "GridViewData")
|
||||||
Me.GridViewData.GridControl = Me.GridControlData
|
Me.GridViewData.GridControl = Me.GridControlData
|
||||||
Me.GridViewData.Name = "GridViewData"
|
Me.GridViewData.Name = "GridViewData"
|
||||||
'
|
'
|
||||||
'PanelControl1
|
'PanelControl1
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.PanelControl1, "PanelControl1")
|
||||||
Me.PanelControl1.Controls.Add(Me.GroupControl2)
|
Me.PanelControl1.Controls.Add(Me.GroupControl2)
|
||||||
Me.PanelControl1.Controls.Add(Me.GroupControl1)
|
Me.PanelControl1.Controls.Add(Me.GroupControl1)
|
||||||
resources.ApplyResources(Me.PanelControl1, "PanelControl1")
|
|
||||||
Me.PanelControl1.Name = "PanelControl1"
|
Me.PanelControl1.Name = "PanelControl1"
|
||||||
'
|
'
|
||||||
|
'GroupControl2
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.GroupControl2, "GroupControl2")
|
||||||
|
Me.GroupControl2.Controls.Add(Me.LabelControl1)
|
||||||
|
Me.GroupControl2.Name = "GroupControl2"
|
||||||
|
'
|
||||||
|
'LabelControl1
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.LabelControl1, "LabelControl1")
|
||||||
|
Me.LabelControl1.Name = "LabelControl1"
|
||||||
|
'
|
||||||
'GroupControl1
|
'GroupControl1
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.GroupControl1, "GroupControl1")
|
||||||
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_All)
|
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_All)
|
||||||
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_thisYear)
|
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_thisYear)
|
||||||
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_lastmonth)
|
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_lastmonth)
|
||||||
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_thismonth)
|
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_thismonth)
|
||||||
resources.ApplyResources(Me.GroupControl1, "GroupControl1")
|
|
||||||
Me.GroupControl1.Name = "GroupControl1"
|
Me.GroupControl1.Name = "GroupControl1"
|
||||||
'
|
'
|
||||||
'btnEnvelopes_All
|
'btnEnvelopes_All
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.btnEnvelopes_All, "btnEnvelopes_All")
|
||||||
Me.btnEnvelopes_All.Appearance.BackColor = System.Drawing.Color.MediumTurquoise
|
Me.btnEnvelopes_All.Appearance.BackColor = System.Drawing.Color.MediumTurquoise
|
||||||
Me.btnEnvelopes_All.Appearance.Options.UseBackColor = True
|
Me.btnEnvelopes_All.Appearance.Options.UseBackColor = True
|
||||||
resources.ApplyResources(Me.btnEnvelopes_All, "btnEnvelopes_All")
|
|
||||||
Me.btnEnvelopes_All.Name = "btnEnvelopes_All"
|
Me.btnEnvelopes_All.Name = "btnEnvelopes_All"
|
||||||
'
|
'
|
||||||
'btnEnvelopes_thisYear
|
'btnEnvelopes_thisYear
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.btnEnvelopes_thisYear, "btnEnvelopes_thisYear")
|
||||||
Me.btnEnvelopes_thisYear.Appearance.BackColor = System.Drawing.Color.LightSeaGreen
|
Me.btnEnvelopes_thisYear.Appearance.BackColor = System.Drawing.Color.LightSeaGreen
|
||||||
Me.btnEnvelopes_thisYear.Appearance.Options.UseBackColor = True
|
Me.btnEnvelopes_thisYear.Appearance.Options.UseBackColor = True
|
||||||
resources.ApplyResources(Me.btnEnvelopes_thisYear, "btnEnvelopes_thisYear")
|
|
||||||
Me.btnEnvelopes_thisYear.Name = "btnEnvelopes_thisYear"
|
Me.btnEnvelopes_thisYear.Name = "btnEnvelopes_thisYear"
|
||||||
'
|
'
|
||||||
'btnEnvelopes_lastmonth
|
'btnEnvelopes_lastmonth
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.btnEnvelopes_lastmonth, "btnEnvelopes_lastmonth")
|
||||||
Me.btnEnvelopes_lastmonth.Appearance.BackColor = System.Drawing.Color.Turquoise
|
Me.btnEnvelopes_lastmonth.Appearance.BackColor = System.Drawing.Color.Turquoise
|
||||||
Me.btnEnvelopes_lastmonth.Appearance.Options.UseBackColor = True
|
Me.btnEnvelopes_lastmonth.Appearance.Options.UseBackColor = True
|
||||||
resources.ApplyResources(Me.btnEnvelopes_lastmonth, "btnEnvelopes_lastmonth")
|
|
||||||
Me.btnEnvelopes_lastmonth.Name = "btnEnvelopes_lastmonth"
|
Me.btnEnvelopes_lastmonth.Name = "btnEnvelopes_lastmonth"
|
||||||
'
|
'
|
||||||
'btnEnvelopes_thismonth
|
'btnEnvelopes_thismonth
|
||||||
'
|
'
|
||||||
|
resources.ApplyResources(Me.btnEnvelopes_thismonth, "btnEnvelopes_thismonth")
|
||||||
Me.btnEnvelopes_thismonth.Appearance.BackColor = System.Drawing.Color.Aquamarine
|
Me.btnEnvelopes_thismonth.Appearance.BackColor = System.Drawing.Color.Aquamarine
|
||||||
Me.btnEnvelopes_thismonth.Appearance.Options.UseBackColor = True
|
Me.btnEnvelopes_thismonth.Appearance.Options.UseBackColor = True
|
||||||
resources.ApplyResources(Me.btnEnvelopes_thismonth, "btnEnvelopes_thismonth")
|
|
||||||
Me.btnEnvelopes_thismonth.Name = "btnEnvelopes_thismonth"
|
Me.btnEnvelopes_thismonth.Name = "btnEnvelopes_thismonth"
|
||||||
'
|
'
|
||||||
'RefreshTimer
|
'RefreshTimer
|
||||||
@@ -705,32 +788,10 @@ Partial Class frmMain
|
|||||||
'
|
'
|
||||||
resources.ApplyResources(Me.SaveFileDialog1, "SaveFileDialog1")
|
resources.ApplyResources(Me.SaveFileDialog1, "SaveFileDialog1")
|
||||||
'
|
'
|
||||||
'GroupControl2
|
'XtraSaveFileDialog1
|
||||||
'
|
'
|
||||||
resources.ApplyResources(Me.GroupControl2, "GroupControl2")
|
resources.ApplyResources(Me.XtraSaveFileDialog1, "XtraSaveFileDialog1")
|
||||||
Me.GroupControl2.Name = "GroupControl2"
|
Me.XtraSaveFileDialog1.FileName = "XtraSaveFileDialog1"
|
||||||
'
|
|
||||||
'SplitContainerControl2
|
|
||||||
'
|
|
||||||
resources.ApplyResources(Me.SplitContainerControl2, "SplitContainerControl2")
|
|
||||||
Me.SplitContainerControl2.Name = "SplitContainerControl2"
|
|
||||||
'
|
|
||||||
'SplitContainerControl2.Panel1
|
|
||||||
'
|
|
||||||
Me.SplitContainerControl2.Panel1.Controls.Add(Me.GridControlData)
|
|
||||||
resources.ApplyResources(Me.SplitContainerControl2.Panel1, "SplitContainerControl2.Panel1")
|
|
||||||
'
|
|
||||||
'SplitContainerControl2.Panel2
|
|
||||||
'
|
|
||||||
Me.SplitContainerControl2.Panel2.Controls.Add(Me.ChartControl1)
|
|
||||||
resources.ApplyResources(Me.SplitContainerControl2.Panel2, "SplitContainerControl2.Panel2")
|
|
||||||
Me.SplitContainerControl2.SplitterPosition = 501
|
|
||||||
'
|
|
||||||
'ChartControl1
|
|
||||||
'
|
|
||||||
resources.ApplyResources(Me.ChartControl1, "ChartControl1")
|
|
||||||
Me.ChartControl1.Name = "ChartControl1"
|
|
||||||
Me.ChartControl1.SeriesSerializable = New DevExpress.XtraCharts.Series(-1) {}
|
|
||||||
'
|
'
|
||||||
'frmMain
|
'frmMain
|
||||||
'
|
'
|
||||||
@@ -762,20 +823,20 @@ Partial Class frmMain
|
|||||||
CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
Me.XtraTabPageAdmin.ResumeLayout(False)
|
Me.XtraTabPageAdmin.ResumeLayout(False)
|
||||||
|
CType(Me.SplitContainerControl2.Panel1, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
Me.SplitContainerControl2.Panel1.ResumeLayout(False)
|
||||||
|
CType(Me.SplitContainerControl2.Panel2, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.SplitContainerControl2, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
Me.SplitContainerControl2.ResumeLayout(False)
|
||||||
CType(Me.GridControlData, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.GridControlData, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.GridViewData, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.GridViewData, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
Me.PanelControl1.ResumeLayout(False)
|
Me.PanelControl1.ResumeLayout(False)
|
||||||
|
CType(Me.GroupControl2, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
Me.GroupControl2.ResumeLayout(False)
|
||||||
|
Me.GroupControl2.PerformLayout()
|
||||||
CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
Me.GroupControl1.ResumeLayout(False)
|
Me.GroupControl1.ResumeLayout(False)
|
||||||
CType(Me.GroupControl2, System.ComponentModel.ISupportInitialize).EndInit()
|
|
||||||
CType(Me.SplitContainerControl2.Panel1, System.ComponentModel.ISupportInitialize).EndInit()
|
|
||||||
Me.SplitContainerControl2.Panel1.ResumeLayout(False)
|
|
||||||
CType(Me.SplitContainerControl2.Panel2, System.ComponentModel.ISupportInitialize).EndInit()
|
|
||||||
Me.SplitContainerControl2.Panel2.ResumeLayout(False)
|
|
||||||
CType(Me.SplitContainerControl2, System.ComponentModel.ISupportInitialize).EndInit()
|
|
||||||
Me.SplitContainerControl2.ResumeLayout(False)
|
|
||||||
CType(Me.ChartControl1, System.ComponentModel.ISupportInitialize).EndInit()
|
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
Me.PerformLayout()
|
Me.PerformLayout()
|
||||||
|
|
||||||
@@ -825,7 +886,6 @@ Partial Class frmMain
|
|||||||
Friend WithEvents txtRefreshLabel As DevExpress.XtraBars.BarStaticItem
|
Friend WithEvents txtRefreshLabel As DevExpress.XtraBars.BarStaticItem
|
||||||
Friend WithEvents btnShowDocument As DevExpress.XtraBars.BarButtonItem
|
Friend WithEvents btnShowDocument As DevExpress.XtraBars.BarButtonItem
|
||||||
Friend WithEvents btnContactReceiver As DevExpress.XtraBars.BarButtonItem
|
Friend WithEvents btnContactReceiver As DevExpress.XtraBars.BarButtonItem
|
||||||
Friend WithEvents RibbonPageFunctions As DevExpress.XtraBars.Ribbon.RibbonPageGroup
|
|
||||||
Friend WithEvents colEnvelopeId As DevExpress.XtraGrid.Columns.GridColumn
|
Friend WithEvents colEnvelopeId As DevExpress.XtraGrid.Columns.GridColumn
|
||||||
Friend WithEvents ViewHistoryCompleted As DevExpress.XtraGrid.Views.Grid.GridView
|
Friend WithEvents ViewHistoryCompleted As DevExpress.XtraGrid.Views.Grid.GridView
|
||||||
Friend WithEvents ColHistoryStatusCompleted As DevExpress.XtraGrid.Columns.GridColumn
|
Friend WithEvents ColHistoryStatusCompleted As DevExpress.XtraGrid.Columns.GridColumn
|
||||||
@@ -853,5 +913,8 @@ Partial Class frmMain
|
|||||||
Friend WithEvents GridViewData As DevExpress.XtraGrid.Views.Grid.GridView
|
Friend WithEvents GridViewData As DevExpress.XtraGrid.Views.Grid.GridView
|
||||||
Friend WithEvents GroupControl2 As DevExpress.XtraEditors.GroupControl
|
Friend WithEvents GroupControl2 As DevExpress.XtraEditors.GroupControl
|
||||||
Friend WithEvents SplitContainerControl2 As DevExpress.XtraEditors.SplitContainerControl
|
Friend WithEvents SplitContainerControl2 As DevExpress.XtraEditors.SplitContainerControl
|
||||||
Friend WithEvents ChartControl1 As DevExpress.XtraCharts.ChartControl
|
Friend WithEvents LabelControl1 As DevExpress.XtraEditors.LabelControl
|
||||||
|
Friend WithEvents BarButtonItem3 As DevExpress.XtraBars.BarButtonItem
|
||||||
|
Friend WithEvents XtraSaveFileDialog1 As DevExpress.XtraEditors.XtraSaveFileDialog
|
||||||
|
Friend WithEvents RibbonPageGroupFunctions As DevExpress.XtraBars.Ribbon.RibbonPageGroup
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -353,12 +353,260 @@
|
|||||||
MC40QzIuMSwyNS4zLDIuMiwyNS4zLDIuMiwyNS4yeiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0K
|
MC40QzIuMSwyNS4zLDIuMiwyNS4zLDIuMiwyNS4yeiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0K
|
||||||
ICA8cGF0aCBkPSJNMzEuMywxNEg5LjZMNCwyNmgyMS44YzAuNSwwLDEuMS0wLjMsMS4zLTAuN0wzMiwx
|
ICA8cGF0aCBkPSJNMzEuMywxNEg5LjZMNCwyNmgyMS44YzAuNSwwLDEuMS0wLjMsMS4zLTAuN0wzMiwx
|
||||||
NC43QzMyLjEsMTQuMywzMS44LDE0LDMxLjMsMTR6IiBjbGFzcz0iWWVsbG93IiAvPg0KPC9zdmc+Cw==
|
NC43QzMyLjEsMTQuMywzMS44LDE0LDMxLjMsMTR6IiBjbGFzcz0iWWVsbG93IiAvPg0KPC9zdmc+Cw==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="BarCheckItem1.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABN0RVh0VGl0
|
||||||
|
bGUAUHJvamVjdDtGaWxlOz37jYIAAAK6SURBVDhPfdNbSNNRHAfwv5bRNK3Ql1WEc5IgDLsIFk3LiIJK
|
||||||
|
Ic2XHlJLNC95mVpumCOWLrXUZJZu5g3NoqtYKJnhpZeSIHrIkuFDpRFl7eru+3bO2RouqMFn52Hn9/39
|
||||||
|
zuGMA+BTl7hFQLQo9vDn5fER8zLR+pbKGJ5g5Z6/0U8gsYpYrRBv1sp388skceHRxbFh0eUxwWUlgiAt
|
||||||
|
+S3Ii+4L8AtYGCyd0Pacg7anCCOydMx1FWLuVgE+dubjgyYfD4oOY1adh/cduXinOjNJG/kFTF85BevC
|
||||||
|
Sz+2b29g+TqD5cUZmBdew/TlFdOVd5TOHEqsIehEAdyINA362SF8firDp2Eps/iiEX39w7jaOYVGSuPR
|
||||||
|
oJlEg5pon0CtamyKBQ3mHoB2qAa92TvRlBKNtoxYvNXkoJ5sdLvh4yJfjMsNJ1Grek6n4XENh2JRtYOP
|
||||||
|
a6TYaZiAXMyHYl8klDfGWYHZ4mBMFidBVwccThcuXX9GA4K51uPxUGUkoO7gVphnMnB+VwTa0kVQtI6x
|
||||||
|
TqZlB4xeBrOHzeFCdeMIDQjhujOTMVqdjoq4jTgr5EEi2oBHhWLUNI2STm4YzXZSZIfe5ICerDqTHVa7
|
||||||
|
C1XKYU/AzRMJGMhJQnuqEB3HhFCnRuFhXgKk9U9YJz0p0Jls0Bk9fhHLVifKFY9pwDqu+YgI6rQ4NCfz
|
||||||
|
0UTt56MjbRsqLg/BYnf6in4aPJYMVhgtdhRfvEcDQjm5OGpamSSEMjEKdWIBavdGoiVlO0pr7sNMOi15
|
||||||
|
i5b0VvzwrnqzDQXSO54ANgbHhRMRK2wqlN1lN84KGQu+66wMnSincoAGhPmepN/z5Li1uRdus0v7cwfs
|
||||||
|
GASdhoZlS/r+GxCUWdI9frq8j23MkvQiq6wXmVQpUdKDk/nt9H/B+1dAAEHfezARQtBj0vNSYV48juMC
|
||||||
|
fwOJP3aHKtHXCAAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="BarCheckItem1.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABN0RVh0VGl0
|
||||||
|
bGUAUHJvamVjdDtGaWxlOz37jYIAAAiRSURBVFhHlZcJVJTXFcdJbG2axCZICgoqnGjcJRqXurUmBg1W
|
||||||
|
U7eoRUshVkyMIoIFhYCA4oBKkE0GEFwTWRUVFxQFRFDcMJrVE42ABhWHGdZhBob8e+/7vg8HQ23zzvmd
|
||||||
|
+3n85v3/3333vvewAPALzMZzRLft3kuszycH+FxI8s8rSfC9Xhzrg/wtK788vnHZqXRfFz/3qaP60Hsv
|
||||||
|
Er8lnpd/1+XcT/OsIcSPqFa8XRLv8+jG/g24fTQSFSei8fCcGt9mBONashcKVG74fPn0ex+NcZhG7/+B
|
||||||
|
6C7/9pnD3AC/3BXdiBeObXCruJW2HgXhbjjwiTN2uk7G1veGYccHo5HsMhbH1s1CacRCBI3vV0Xv2xIv
|
||||||
|
E78hupqTEcPcAAvxDxhOocLviFf2eTjj6g53qN4dDI9Rdu6uw2ym2b3c3W7xICunDwdbuYZMsEd+wFT4
|
||||||
|
Ob7Gsw0irImX5N8rcFa6XB6L6pLdhQ8v7MXDC3skSncLHpTuElxU++GHg8E4EeqO6uIUVJ/bKfipiGJR
|
||||||
|
Mgq2rsCXqZ7I9l2A+4WJuF+gxj3mrBpVZxNQeWYHKvPjcTMzvEg20ZEFMSpPx6Hpbj5aNWVmXETrY+aC
|
||||||
|
TOkTakpgfHSeKJY5B+NDpkimUGB4UCDgZ+03GTj+6VzO0AsEZ+HJKFd7oOG7NOguh0N3SUZ+1jLyc115
|
||||||
|
HHTX1QLt9QTUdkKN2nKKhKZceubI7+muRqHhZjKyPKexAV6azgZKty1GdWEU7mR4oiLHCxWHvXE3ZzW+
|
||||||
|
y/iYWEH/Xo2qYz6oLtiMnJw8pKRfwc4MgmJy2mVBEpHIHLgkUH8hcTJrL+6fCaP5tyBm9hA28ArRbUtS
|
||||||
|
gdAWoyB0Hm5l+qE8biGuxy7Elah5OOnvhOxVE5C5cjyOr5+K8vgF+D7DC8kk2tUwGtvQpDeirl6PR5oG
|
||||||
|
VNzTovzrn1Bc9iMyE+Pwbfo6RLwnDFgS3cJiTwttMU76z0RJxFwUh0wV5K2bjC88RqOqPAtV17IQ5mSP
|
||||||
|
XJ8JKItegqQDl9H+889oM0m0mtoFLQbJgK6hBQ81jbhTVYu4fRdAr+Jk0ffYtS0C22aPYwNWROdC3OU+
|
||||||
|
sSj+b4OQtGAo1POHIHrWAKS4OqK9iYqwOhr+k2wQOqUPktymiPSa2mXhNopt7TDKtBha0dhshEbbTAY0
|
||||||
|
iEw5Jww06tuQe/YbBHoGVJPcH4lfbFS26jkOSFw8GlHT+yLiHVvEzB9M4gnQf70Ua8dYIWSyNRL/MQkJ
|
||||||
|
n5dJBmRREVvbYWg1UTShuaUVtbQMtykDm+PPCAN6Y7swkXPqKyz3TdlKerxl897TYcJm76KBOL1hNtLc
|
||||||
|
RmCPyxConB1wM80Z17b3xpqRloid9ToOeTsjfv9FmCj1LG4gYUWcaWGMJmhpGX6o0CDosxPCAGeqRZgw
|
||||||
|
IfvEDXy4JiWcNLkdO0zY7CEDFyOX4OgnY3Fo+VsIf7cPPh70Ej4a+CKCJlpj16IhOBHwPuL2loq1N7RJ
|
||||||
|
okKYRBX0VIx1jQbcrqiFn+qIKFA2QStGy8ZGTMjMLYfrSrWKdHkpREv2Sp3XH5ciF+PoirdwhEhzH4GE
|
||||||
|
2f0R5WyPnfPfQObSN6kbZiJmdwkZoPWmL5dE22RhggpRbzChvtGIygd1CIvNg1dwNjw3ZMEzKAurAplM
|
||||||
|
5OTdQPiOM1yQylJY2Ca+74Dzqvk46OGI7GVvSvzLEVnLCIqZSx1x2HcGonedlwzIX8uCijDHJj0VIlGj
|
||||||
|
0+PHezrcvPUAV76qQtn1SpRcvYvCstsovnQbYXH5bKCHYsAuzrkfTgfMRNo/hyPdfTgyiHS3YYI04oDr
|
||||||
|
MGR7T0NUSjHaaP1ZrNmcFhInuAg51jcZqRhb8JiMVGuacO9BPe7e14nauFOpwabYU2yAj24+AC36Rjv1
|
||||||
|
wZHVU5A6dwBS5/RH6vwB2L3gDexZOBB7F1H8+0CkrXoHkTuLROV3FpZEmUaGMtBA7cixnmIdm6HCrNE1
|
||||||
|
o7qmETW1jQjdnscGeFcUBvptm2KLzGV/QsJfHWTskTDDATtm2AviqBZS3egekEgHDRloIvEOUWoxIcrp
|
||||||
|
b5ZiA0eiXqHDhF5sVsHUIaT7qmLAPnxSL+xfMhKxTn0RY0Y0dQMTNdUOiS7jEZFwlgyYhKAk2iYJyqJP
|
||||||
|
BFtRR7GOIxWlTkZDy9JIZoIihQHeliUDm8ZZI2XeUHz2l96ErYiRCn/uja2TeyP+g3FQUfVy7wsDJNBJ
|
||||||
|
lKHJWZwjp14R1lFrahskuE4Cth5nAz0VA3aBo6xqYpz6YctEG2yZYI61QDXeGjFzxmBzbL7Y8SRhFpMF
|
||||||
|
5Wfzr2W0CrJ4bb1BdJB/RC4bUM4Fi1ddXu/h4T+iZ22gY08EOloicIQlPlUYbgn/YZZQTR+JjTGnxeaj
|
||||||
|
fKECi0niBkmYxcxEFTTCQBvWqY6ygdcUA3xn43T0JQYQA2X4fqcwlBgbQtXLX9AhLkTNvraBi41bUDIg
|
||||||
|
RCmysKaO2rLOIFrYd/MRNsAHkzDA+zGvBRv5PcE71NNwz9py9bIBRVRZ21p6FsIspkAFx6IaEmUDj2UD
|
||||||
|
3L5rN+V0MsCDTTwLftEqaNtxse1qWVgRl4U70kwij3kTYmTRGoo1dXoRuXV9QoUBvj1377ge/zfkIQxw
|
||||||
|
9fK2q6xxxxezsBBUvlSiRsfCLXhE/f9IS5cVrV500JqQQzyxDfHrDKwPzxUpFOnltArhJ+mt6fhaFpWF
|
||||||
|
OZIwiwsD1EFeG7J54l7ErzLQ0y/8qLiQSPcA6S7ANSEdTsrB1Pl8kHZLeeMicYZPR5rv/14CrgE+tXqs
|
||||||
|
CU4v/HfYYTBrNx2GDxWTz8YceNOaeoceIg6K9HoFHxSspi9lPJkgho7koEws99t3juaTtuKuRM2RB18c
|
||||||
|
+ALBRyj3L7vnNWQ4leb0fgr+e9Ec/g2Lc9c936WoOfLgLLAJbldeDjbzv1D+Lnwa/j+eh+azeO4/pQGb
|
||||||
|
2zax9GEAAAAASUVORK5CYII=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="bsitmInfo.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0
|
||||||
|
bGUASW5mbzttEi2GAAAKW0lEQVRYR5VWd1DVVxYmbdOTzc5sZst/O7M7s7Ozs9mdzCRZE5WiYCFERSmS
|
||||||
|
KIL0IrCASpUighQpAtKLICC9FwFBenvwKArSm9IFBQXRb8+5D4iazGT3zHzv3nfv/Z3vO+eee38/OQAv
|
||||||
|
4f+w134Gv2g/4eOfxOx2uXhCgoCE+hLRJmS2CcRnSvjZTZLXN/DGz2BzTqyNvt4sF53WJBdFiEyllhCZ
|
||||||
|
0igXwbjW8KOAOCLZVPQqNpwJwpD4ys+uXGs4F5nWVBuV2twandayHnW9eT0ytbGNnNaGJdW4+YYX/IvW
|
||||||
|
vsnrN5597ef8hiXVyfzzT8z1lpcmxcTGw4Q3Qq/WqEekNvWm5HeguWMME1NLmJl/hOfPnwtwf+L+Ihrb
|
||||||
|
R5GUK0FYUm3fpahyLXr2LX6e/bzqPyShZpNHTqTmxUkyEfWFkNw/hSfVN+Te6MEkkW4ak64/e46n68+w
|
||||||
|
9vSZaJ+uP8czGmObnFpEdmkngmKrG097xP6ZfHFGXqepLY7A2CrmkVl4smw/GGQiat/wYqXw5Pr5zjv3
|
||||||
|
aJhJgdW1dfSNL6Go7R5Sasbgk9MHr+xeJNwcQWb9ODoG5rH0aA1rtI5FtvdMIjiuat7VN12ZfHI2tkT4
|
||||||
|
R1Yyl8xCr27sxwa5T2ihUlRq4+rE/QfMLSKUDi0gqGgAAYVDCCwZQVDpKGEEAcXDuJg3BK+su3BNvQP3
|
||||||
|
lG7c6prCw0erQvDY5AIux9esOnglq5DvLRE+4eXMJ7OguFvciLQ7X0z5y+WEmtn707KUrzx5iqSqEfjk
|
||||||
|
9SOQCENujCGkfAzBhMCyMQSQGL/CYXiTCM+sfiHCLq4Tgdl3MD2/jJXHa6I+/CLK54xtLv2NOFjEa16X
|
||||||
|
S5hTZv7RN7nhSn+LFtZJb08K8kcrawgu6Id3bj/8S4ZxqWxUwL9oBCXSKUzMr2D+4SqqumfgQeTuWQNw
|
||||||
|
TevD2aQe/CdaCqe4DkzOPCQ/q5B0jcH9Un49cbxH2DwhW8Z/3nQLyNFOyGgS5Jy+6LIBeGTehU/+EHwp
|
||||||
|
1b5Fw/DKG0Dz3TmsrK5jefUpnlARPqb+mcQuuFzvg9O1Ozh7tRs2MZ0wC2vD+WQp5hZWsEyZiEyqhbVz
|
||||||
|
3DHiepvAAW8Z/3nbK6S0b3h8TlRzbfc0HJO7KbI+nM8dxHki9iIhDsldmJxdJlLZCWBr75vGqah2OBD5
|
||||||
|
mas9sI3tgg1lwIIE6Ac0IvvWEGYXlnF3aBoOXln9xPUBgU+GyIKI3tYtUTnyWq1wuLS8CqerneSwB+fS
|
||||||
|
+3Auox9ulGKGHUUaX3wHD2l7uvpnkFxyG7o+NyniDtgnUOrjumDN5Fc6YBLaKgQY+tVh7N4SFhYfIzim
|
||||||
|
HPqWAarE+asXBbx19kK6f3XjXRF9K0cU3Y7TyT1wpKJyTOuFE+2tE7VnaMz8Sit0LlRCw7UMWm7lsApv
|
||||||
|
gmWEBFYxXZQJKcwjOmAa2gbD4Bbo+TfgqOctZFcP4t70Q5RVdcP8TEwQcb5LENvAP+84emfVDI7MiKqN
|
||||||
|
KOiFZZQEtvFdsE/shj0VlT0Rn6bWJr4TJpcbEZQuRX3XJBZXnoqt0CUi88h2mIZLYHy5FYZBMvLjvvXQ
|
||||||
|
9qiGR1wbxu8too2K0dIhgYvxQwIXoxDw7lmvzNnFpceYmVuGU6yEopBQFqSwpiNlzWnllvbWMKQJkr4Z
|
||||||
|
Il6TYXlNbNvR81Uw5qhDWnEysAknKPXHL9bj+wu1lKVqHPeswuD4PPoGp2HhkDhHnB8TuA6Eivft3a+v
|
||||||
|
rdOFM0ZnVsOlAkaXW2B2RQIzSidHZhHZATNq9QMbkVZxFwtE/IDALZumWyVOBjVDL6AJun4NOOZTT9tU
|
||||||
|
C01Kv7pLJfZYFaJ/eBb9I7MwOxO/RpyfEPhOEAI+sHFNEQKG6BR8Z1eCAw4VMCCHRlRIRhSZAFW1QUgL
|
||||||
|
DrncwCRlap5uuwW6etnUXcplxBcboONdRxmpgZYHk9/EXqti7D1VgN7BGdwemIKxXQwL+M1LAiwdk2Yf
|
||||||
|
LK5gYHQOOuRsj3Ux1E6X4weKRI9Sqr8BPRJ15FwleobnSMATcRGxHXAokxF7EbFnNTTcqnDIkfwQ+W7z
|
||||||
|
fGg4lOB2/zRapKPQt4rgLWABYgu4Bt43to2t6x24h8HReZzyuwVly0LstS7BXpsSHHSsJOe1OOZLERIO
|
||||||
|
Uga6h2Yxt/QEsySAX1Sq9sXQcq+GpjsRO1dgv10p+SjAbosCKJnmwtz7Jrr6psQpOGYS3Eicv35RwLu6
|
||||||
|
5iFBReVSjE4sIC6nC0pm+VA5VSQiECAxqvZlQsxe20L0ji5ghgVQ4fIpULMrwn77UiFYhcQrE/Fui3wi
|
||||||
|
z4O8URZCUySQ0ps1Ia0GR3S9wojzpVPw9gEdZzV3v2xMzT5CS+cE7Vk+dpOI3RQFC1EmqJwqFBEdOV2A
|
||||||
|
abpUphefYIZazoS5dwUUTXLFPBPvMsuDIkWuaJQDZfMc1EtGxevZ/tw17FY7pUGc/E5gbtlFRPhY1yxs
|
||||||
|
QNozBv4G8E1ogYJxLmUiTziUoQDyxtmobh/H1IPHArMPn2CZ3pgzdN/vMMzCLopYyTRHiJE3ysYOg0x4
|
||||||
|
xzTR+R9Hbkk7NPT8hojrt4Stm5CNlbz33VHnk64+GeK4tHSO46hjMYnIgRI544h2meVCgZyGprVj/P6P
|
||||||
|
X0hDEw8QQineSWSKJtmEHMiTGP6vdaZQRN8iHYe1YzxFb21CXJvp3xKwmYVPtAwCmosrpGglxRUNg1C1
|
||||||
|
ysNOcqZAkSuSGAUi2GGYia/1rmPbiTRs003F1/ppIlJ54yyx37x++8kM7LPIQWntABrpOzIq6SYO6pxv
|
||||||
|
J45PCfw23CKX0zbkq1lWjF/Jf//VcbOQ+Rp6LzRLx8hBP7TPFmHHSSIwIAJyziQKAtkCPMaiWMQOIt6u
|
||||||
|
nw7t04Uoqu5Dg2QE2UUSaOn5L3z2xYHtxMFvwpeil9PUv8QND/Cx+FB+n6m6nmXYWgGdCv7SrWkehmdE
|
||||||
|
HXaZZArn2w0yiIxAZAI09o1+Br6hrCgaZcD9Sh2qmgZR1zaMtNxm6BhcWvtKQZe/kvnoiS8itaNe1GzY
|
||||||
|
kRP+L34TioLcrmx4RFM/4EFiei05GkFd6zBu1A3gYmwj9FxLcNg2H1+foPTrpom+nksJfGIaUFrTj5qW
|
||||||
|
YdS2DCEsvgKHfriw+OXOY9rkky8eUXjM9a2WB3U37NCxiy8K2BTx0d8/3/+F2lGPdlvnRKTnt5DjIeGY
|
||||||
|
UdNM2GhvNQ8SuJX1U3OaYWYXhX2HXTr++o9d/yZffO9vVr0QsF/DnbobdkDHWwh4RQRvx/uET3eqmJqq
|
||||||
|
anmO6luEwiswB8lZjcgoaEM1pZmRTv2kzAacD8jGcZNg7D9ybnSbooEFPft7Ale8SDtjk2fPYVf6u2Fq
|
||||||
|
2l5bAl4RwcXCFfsR4Xefb9NSVVK1Cd1LkRF6v9XyxLeaHtij7ty3R92pQ2GfVdg/v1T/jtb+gcD7/Q6B
|
||||||
|
A3mJnKFyyJmGNmy/hqecqqbHT0D2qhCuYE4nHyWO7o8b4D6P8T7zGl67RbznkIucwEFnQaxy0ElO+YAT
|
||||||
|
Tf3vtimEjyo75pQyyYvgMZ7jNQxe/wsmJ/df0Zh/vpjXMzsAAAAASUVORK5CYII=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="bbtnitmEB.Caption" xml:space="preserve">
|
||||||
|
<value>Show results report</value>
|
||||||
|
</data>
|
||||||
|
<data name="bbtnitmEB.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
|
||||||
|
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
|
||||||
|
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJYEAAAC77u/
|
||||||
|
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
|
||||||
|
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
|
||||||
|
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
|
||||||
|
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
|
||||||
|
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
|
||||||
|
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
|
||||||
|
MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
|
||||||
|
Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkRvY3VtZW50UERGIj4NCiAgICA8cGF0aCBkPSJN
|
||||||
|
MjIsMjR2NEgyVjJoMTR2NWMwLDAuNiwwLjQsMSwxLDFoNXY0aDJWN2wtNy03SDFDMC40LDAsMCwwLjQs
|
||||||
|
MCwxdjI4YzAsMC42LDAuNCwxLDEsMWgyMmMwLjYsMCwxLTAuNCwxLTEgICB2LTVIMjJ6IiBjbGFzcz0i
|
||||||
|
QmxhY2siIC8+DQogICAgPHBhdGggZD0iTTE5LjIsMTZjMC4zLDAuNSwwLjQsMS4xLDAuNCwxLjljMCww
|
||||||
|
LjktMC4yLDEuNS0wLjUsMmMtMC4zLDAuNS0wLjcsMC43LTEuMywwLjdoLTAuNnYtNS4zaDAuNiAgIEMx
|
||||||
|
OC40LDE1LjMsMTguOSwxNS42LDE5LjIsMTZ6IE0xMi4xLDE1LjNoLTAuNXYyLjZoMC41YzAuNywwLDEu
|
||||||
|
MS0wLjQsMS4xLTEuM2MwLTAuNC0wLjEtMC44LTAuMy0xQzEyLjYsMTUuNCwxMi40LDE1LjMsMTIuMSwx
|
||||||
|
NS4zeiAgICBNMzAsMTJ2MTJINlYxMkgzMHogTTE0LjgsMTYuNWMwLTAuOC0wLjItMS41LTAuNi0xLjlj
|
||||||
|
LTAuNC0wLjQtMS0wLjctMS44LTAuN0gxMHY4aDEuNnYtMi43aDAuNmMwLjgsMCwxLjQtMC4zLDEuOS0w
|
||||||
|
LjggICBDMTQuNSwxOCwxNC44LDE3LjMsMTQuOCwxNi41eiBNMjEuMiwxNy45YzAtMi42LTEuMS0zLjkt
|
||||||
|
My40LTMuOWgtMi4xdjhoMi4yYzEuMSwwLDEuOS0wLjQsMi41LTEuMUMyMC45LDIwLjIsMjEuMiwxOS4y
|
||||||
|
LDIxLjIsMTcuOXogICAgTTI2LDE0aC0zLjd2OGgxLjZ2LTMuMWgydi0xLjNoLTJ2LTIuMkgyNlYxNHoi
|
||||||
|
IGNsYXNzPSJSZWQiIC8+DQogIDwvZz4NCjwvc3ZnPgs=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="bbtnitmInfoMail.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
|
||||||
|
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
|
||||||
|
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKQCAAAC77u/
|
||||||
|
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
|
||||||
|
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
|
||||||
|
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
|
||||||
|
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
|
||||||
|
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
|
||||||
|
WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLlJlZHtmaWxsOiNEMTFD
|
||||||
|
MUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7Zmls
|
||||||
|
bDojNzI3MjcyO30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuNzU7fQo8L3N0eWxl
|
||||||
|
Pg0KICA8ZyBpZD0iTWFpbCI+DQogICAgPHBhdGggZD0iTTE2LDE4LjNsMTQtOFYyNWMwLDAuNS0wLjUs
|
||||||
|
MS0xLDFIM2MtMC41LDAtMS0wLjUtMS0xVjEwLjNMMTYsMTguM3ogTTI5LDZIM0MyLjUsNiwyLDYuNSwy
|
||||||
|
LDd2MWwxNCw4bDE0LThWNyAgIEMzMCw2LjUsMjkuNSw2LDI5LDZ6IiBjbGFzcz0iQmxhY2siIC8+DQog
|
||||||
|
IDwvZz4NCjwvc3ZnPgs=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="BarButtonItem2.Caption" xml:space="preserve">
|
||||||
|
<value>Send invitation again</value>
|
||||||
|
</data>
|
||||||
|
<data name="BarButtonItem2.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
|
||||||
|
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
|
||||||
|
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKQCAAAC77u/
|
||||||
|
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
|
||||||
|
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
|
||||||
|
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
|
||||||
|
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
|
||||||
|
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
|
||||||
|
WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLlJlZHtmaWxsOiNEMTFD
|
||||||
|
MUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7Zmls
|
||||||
|
bDojNzI3MjcyO30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuNzU7fQo8L3N0eWxl
|
||||||
|
Pg0KICA8ZyBpZD0iTWFpbCI+DQogICAgPHBhdGggZD0iTTE2LDE4LjNsMTQtOFYyNWMwLDAuNS0wLjUs
|
||||||
|
MS0xLDFIM2MtMC41LDAtMS0wLjUtMS0xVjEwLjNMMTYsMTguM3ogTTI5LDZIM0MyLjUsNiwyLDYuNSwy
|
||||||
|
LDd2MWwxNCw4bDE0LThWNyAgIEMzMCw2LjUsMjkuNSw2LDI5LDZ6IiBjbGFzcz0iQmxhY2siIC8+DQog
|
||||||
|
IDwvZz4NCjwvc3ZnPgs=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="BarButtonItem3.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
|
||||||
|
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
|
||||||
|
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAHYNAAAC77u/
|
||||||
|
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
|
||||||
|
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
|
||||||
|
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
|
||||||
|
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
|
||||||
|
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5H
|
||||||
|
cmVlbntmaWxsOiMwMzlDMjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgkuc3Qwe29wYWNpdHk6MC4z
|
||||||
|
O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTgsNGgxOHY2aDJWM2MwLTAuNS0wLjUtMS0xLTFIN0M2LjUs
|
||||||
|
Miw2LDIuNSw2LDN2N2gyVjR6IiBjbGFzcz0iQmxhY2siIC8+DQogIDxwYXRoIGQ9Ik0yNiwyNkg4di04
|
||||||
|
SDZ2OWMwLDAuNSwwLjUsMSwxLDFoMjBjMC41LDAsMS0wLjUsMS0xdi05aC0yVjI2eiIgY2xhc3M9IkJs
|
||||||
|
YWNrIiAvPg0KICA8cGF0aCBkPSJNMzEsOEgzQzIuNCw4LDIsOC40LDIsOXYxMGMwLDAuNiwwLjQsMSwx
|
||||||
|
LDFoMjhjMC42LDAsMS0wLjQsMS0xVjlDMzIsOC40LDMxLjYsOCwzMSw4eiBNOS4xLDE4bC0xLjMtMi41
|
||||||
|
ICBjLTAuMS0wLjEtMC4xLTAuMy0wLjItMC41aDBjMCwwLjEtMC4xLDAuMy0wLjIsMC41TDYuMSwxOEg0
|
||||||
|
bDIuNS0zLjlsLTIuMi0zLjloMi4xbDEuMSwyLjNjMC4xLDAuMiwwLjIsMC40LDAuMiwwLjdoMCAgYzAt
|
||||||
|
MC4yLDAuMS0wLjQsMC4yLTAuN2wxLjItMi4zaDEuOWwtMi4zLDMuOGwyLjQsMy45SDkuMXogTTE2Ljcs
|
||||||
|
MThoLTQuNnYtNy43aDEuN3Y2LjNoMi45VjE4eiBNMjIuNCwxNi45Yy0wLjIsMC4zLTAuNCwwLjUtMC43
|
||||||
|
LDAuNyAgcy0wLjYsMC4zLTEsMC40Yy0wLjQsMC4xLTAuOCwwLjEtMS4yLDAuMWMtMC40LDAtMC44LDAt
|
||||||
|
MS4yLTAuMWMtMC40LTAuMS0wLjctMC4yLTEtMC4zVjE2YzAuMywwLjMsMC42LDAuNSwxLDAuNnMwLjcs
|
||||||
|
MC4yLDEuMSwwLjIgIGMwLjIsMCwwLjQsMCwwLjYtMC4xczAuMy0wLjEsMC40LTAuMmMwLjEtMC4xLDAu
|
||||||
|
Mi0wLjIsMC4yLTAuMmMwLjEtMC4xLDAuMS0wLjIsMC4xLTAuM2MwLTAuMiwwLTAuMy0wLjEtMC40ICBj
|
||||||
|
LTAuMS0wLjEtMC4yLTAuMi0wLjQtMC4zUzIwLDE1LjEsMTkuOCwxNXMtMC40LTAuMi0wLjctMC4zYy0w
|
||||||
|
LjYtMC4zLTEuMS0wLjYtMS4zLTAuOWMtMC4zLTAuNC0wLjQtMC44LTAuNC0xLjMgIGMwLTAuNCwwLjEt
|
||||||
|
MC43LDAuMi0xYzAuMi0wLjMsMC40LTAuNSwwLjctMC43YzAuMy0wLjIsMC42LTAuMywxLTAuNHMwLjgt
|
||||||
|
MC4xLDEuMi0wLjFjMC40LDAsMC44LDAsMS4xLDAuMWMwLjMsMCwwLjYsMC4xLDAuOSwwLjIgIHYxLjZj
|
||||||
|
LTAuMS0wLjEtMC4zLTAuMi0wLjQtMC4ycy0wLjMtMC4xLTAuNS0wLjJjLTAuMiwwLTAuMy0wLjEtMC41
|
||||||
|
LTAuMXMtMC4zLDAtMC41LDBjLTAuMiwwLTAuNCwwLTAuNSwwLjFjLTAuMiwwLTAuMywwLjEtMC40LDAu
|
||||||
|
MiAgYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEs
|
||||||
|
MCwwLjIsMC4xLDAuM2MwLjEsMC4xLDAuMiwwLjIsMC4zLDAuM2MwLjEsMC4xLDAuMywwLjIsMC41LDAu
|
||||||
|
MyAgczAuNCwwLjIsMC42LDAuM2MwLjMsMC4xLDAuNiwwLjMsMC44LDAuNGMwLjIsMC4xLDAuNSwwLjMs
|
||||||
|
MC42LDAuNWMwLjIsMC4yLDAuMywwLjQsMC40LDAuNnMwLjEsMC41LDAuMSwwLjggIEMyMi42LDE2LjMs
|
||||||
|
MjIuNSwxNi42LDIyLjQsMTYuOXogTTI4LjEsMThsLTEuMy0yLjVjLTAuMS0wLjEtMC4xLTAuMy0wLjIt
|
||||||
|
MC41aDBjMCwwLjEtMC4xLDAuMy0wLjIsMC41TDI1LjEsMThIMjNsMi41LTMuOWwtMi4yLTMuOSAgaDIu
|
||||||
|
MWwxLjEsMi4zYzAuMSwwLjIsMC4yLDAuNCwwLjIsMC43aDBjMC0wLjIsMC4xLTAuNCwwLjItMC43bDEu
|
||||||
|
Mi0yLjNoMS45bC0yLjMsMy44bDIuNCwzLjlIMjguMXoiIGNsYXNzPSJHcmVlbiIgLz4NCiAgPGcgY2xh
|
||||||
|
c3M9InN0MCI+DQogICAgPHBhdGggZD0iTTMxLDhIM0MyLjQsOCwyLDguNCwyLDl2MTBjMCwwLjYsMC40
|
||||||
|
LDEsMSwxaDI4YzAuNiwwLDEtMC40LDEtMVY5QzMyLDguNCwzMS42LDgsMzEsOHogTTkuMSwxOGwtMS4z
|
||||||
|
LTIuNSAgIGMtMC4xLTAuMS0wLjEtMC4zLTAuMi0wLjVoMGMwLDAuMS0wLjEsMC4zLTAuMiwwLjVMNi4x
|
||||||
|
LDE4SDRsMi41LTMuOWwtMi4yLTMuOWgyLjFsMS4xLDIuM2MwLjEsMC4yLDAuMiwwLjQsMC4yLDAuN2gw
|
||||||
|
ICAgYzAtMC4yLDAuMS0wLjQsMC4yLTAuN2wxLjItMi4zaDEuOWwtMi4zLDMuOGwyLjQsMy45SDkuMXog
|
||||||
|
TTE2LjcsMThoLTQuNnYtNy43aDEuN3Y2LjNoMi45VjE4eiBNMjIuNCwxNi45ICAgYy0wLjIsMC4zLTAu
|
||||||
|
NCwwLjUtMC43LDAuN3MtMC42LDAuMy0xLDAuNGMtMC40LDAuMS0wLjgsMC4xLTEuMiwwLjFjLTAuNCww
|
||||||
|
LTAuOCwwLTEuMi0wLjFjLTAuNC0wLjEtMC43LTAuMi0xLTAuM1YxNiAgIGMwLjMsMC4zLDAuNiwwLjUs
|
||||||
|
MSwwLjZzMC43LDAuMiwxLjEsMC4yYzAuMiwwLDAuNCwwLDAuNi0wLjFzMC4zLTAuMSwwLjQtMC4yYzAu
|
||||||
|
MS0wLjEsMC4yLTAuMiwwLjItMC4yYzAuMS0wLjEsMC4xLTAuMiwwLjEtMC4zICAgYzAtMC4yLDAtMC4z
|
||||||
|
LTAuMS0wLjRjLTAuMS0wLjEtMC4yLTAuMi0wLjQtMC4zUzIwLDE1LjEsMTkuOCwxNXMtMC40LTAuMi0w
|
||||||
|
LjctMC4zYy0wLjYtMC4zLTEuMS0wLjYtMS4zLTAuOSAgIGMtMC4zLTAuNC0wLjQtMC44LTAuNC0xLjNj
|
||||||
|
MC0wLjQsMC4xLTAuNywwLjItMWMwLjItMC4zLDAuNC0wLjUsMC43LTAuN2MwLjMtMC4yLDAuNi0wLjMs
|
||||||
|
MS0wLjRzMC44LTAuMSwxLjItMC4xICAgYzAuNCwwLDAuOCwwLDEuMSwwLjFjMC4zLDAsMC42LDAuMSww
|
||||||
|
LjksMC4ydjEuNmMtMC4xLTAuMS0wLjMtMC4yLTAuNC0wLjJzLTAuMy0wLjEtMC41LTAuMmMtMC4yLDAt
|
||||||
|
MC4zLTAuMS0wLjUtMC4xcy0wLjMsMC0wLjUsMCAgIGMtMC4yLDAtMC40LDAtMC41LDAuMWMtMC4yLDAt
|
||||||
|
MC4zLDAuMS0wLjQsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAu
|
||||||
|
MSwwLjNjMCwwLjEsMCwwLjIsMC4xLDAuMyAgIGMwLjEsMC4xLDAuMiwwLjIsMC4zLDAuM2MwLjEsMC4x
|
||||||
|
LDAuMywwLjIsMC41LDAuM3MwLjQsMC4yLDAuNiwwLjNjMC4zLDAuMSwwLjYsMC4zLDAuOCwwLjRjMC4y
|
||||||
|
LDAuMSwwLjUsMC4zLDAuNiwwLjUgICBjMC4yLDAuMiwwLjMsMC40LDAuNCwwLjZzMC4xLDAuNSwwLjEs
|
||||||
|
MC44QzIyLjYsMTYuMywyMi41LDE2LjYsMjIuNCwxNi45eiBNMjguMSwxOGwtMS4zLTIuNWMtMC4xLTAu
|
||||||
|
MS0wLjEtMC4zLTAuMi0wLjVoMCAgIGMwLDAuMS0wLjEsMC4zLTAuMiwwLjVMMjUuMSwxOEgyM2wyLjUt
|
||||||
|
My45bC0yLjItMy45aDIuMWwxLjEsMi4zYzAuMSwwLjIsMC4yLDAuNCwwLjIsMC43aDBjMC0wLjIsMC4x
|
||||||
|
LTAuNCwwLjItMC43bDEuMi0yLjNoMS45ICAgbC0yLjMsMy44bDIuNCwzLjlIMjguMXoiIGNsYXNzPSJC
|
||||||
|
bHVlIiAvPg0KICA8L2c+DQo8L3N2Zz4L
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RibbonPageGroup1.Text" xml:space="preserve">
|
<data name="RibbonPageGroup1.Text" xml:space="preserve">
|
||||||
<value>Data</value>
|
<value>Data</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RibbonPageGroup2.Text" xml:space="preserve">
|
<data name="RibbonPageGroupFunctions.Text" xml:space="preserve">
|
||||||
<value>Functions</value>
|
<value>Functions</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RibbonPageGroup3.Text" xml:space="preserve">
|
<data name="RibbonPageGroup3.Text" xml:space="preserve">
|
||||||
@@ -397,7 +645,24 @@
|
|||||||
<data name="XtraTabPage2.Text" xml:space="preserve">
|
<data name="XtraTabPage2.Text" xml:space="preserve">
|
||||||
<value>Completed Envelopes</value>
|
<value>Completed Envelopes</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<data name="btnEnvelopes_All.Text" xml:space="preserve">
|
||||||
|
<value>All over</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnEnvelopes_thisYear.Text" xml:space="preserve">
|
||||||
|
<value>this year</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnEnvelopes_lastmonth.Text" xml:space="preserve">
|
||||||
|
<value>last month</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnEnvelopes_thismonth.Text" xml:space="preserve">
|
||||||
|
<value>this month</value>
|
||||||
|
</data>
|
||||||
|
<data name="GroupControl1.Text" xml:space="preserve">
|
||||||
|
<value>Envelopes per user</value>
|
||||||
|
</data>
|
||||||
|
<data name="XtraTabPageAdmin.Text" xml:space="preserve">
|
||||||
|
<value>Reports (Admin) - BETA</value>
|
||||||
|
</data>
|
||||||
<data name="frmMain.IconOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="frmMain.IconOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
|
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,7 @@ Imports EnvelopeGenerator.Common
|
|||||||
Imports EnvelopeGenerator.Common.My
|
Imports EnvelopeGenerator.Common.My
|
||||||
Imports System.Diagnostics
|
Imports System.Diagnostics
|
||||||
Imports System.ComponentModel
|
Imports System.ComponentModel
|
||||||
|
Imports DevExpress.XtraPrinting
|
||||||
|
|
||||||
Public Class frmMain
|
Public Class frmMain
|
||||||
Private ReadOnly LogConfig As LogConfig
|
Private ReadOnly LogConfig As LogConfig
|
||||||
@@ -195,7 +196,7 @@ Public Class frmMain
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub XtraTabControl1_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles XtraTabControlMain.SelectedPageChanged
|
Private Sub XtraTabControl1_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles XtraTabControlMain.SelectedPageChanged
|
||||||
RibbonPageFunctions.Enabled = True
|
RibbonPageGroupFunctions.Enabled = True
|
||||||
RibbonPageEnvelopeActions.Enabled = True
|
RibbonPageEnvelopeActions.Enabled = True
|
||||||
Select Case XtraTabControlMain.SelectedTabPageIndex
|
Select Case XtraTabControlMain.SelectedTabPageIndex
|
||||||
Case 1
|
Case 1
|
||||||
@@ -215,7 +216,7 @@ Public Class frmMain
|
|||||||
txtEnvelopeIdLabel.Caption = "No Envelope selected"
|
txtEnvelopeIdLabel.Caption = "No Envelope selected"
|
||||||
|
|
||||||
Case 2
|
Case 2
|
||||||
RibbonPageFunctions.Enabled = False
|
RibbonPageGroupFunctions.Enabled = False
|
||||||
RibbonPageEnvelopeActions.Enabled = False
|
RibbonPageEnvelopeActions.Enabled = False
|
||||||
End Select
|
End Select
|
||||||
End Sub
|
End Sub
|
||||||
@@ -395,7 +396,7 @@ Public Class frmMain
|
|||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
MsgBox(Resources.Envelope.Document_could_not_be_opened, MsgBoxStyle.Critical, Text)
|
MsgBox(Resources.Envelope.Document_could_not_be_opened, MsgBoxStyle.Critical, Text)
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
End Try
|
End Try
|
||||||
Me.Cursor = Cursors.Default
|
Me.Cursor = Cursors.Default
|
||||||
End Sub
|
End Sub
|
||||||
@@ -640,4 +641,27 @@ Public Class frmMain
|
|||||||
|
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Private Sub LabelControl1_Click(sender As Object, e As EventArgs) Handles LabelControl1.Click
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick
|
||||||
|
XtraSaveFileDialog1.FileName = "Overview.xlsx"
|
||||||
|
XtraSaveFileDialog1.DefaultExt = ".xlsx"
|
||||||
|
|
||||||
|
If XtraSaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
|
||||||
|
Dim oOptions As New XlsxExportOptions() With {
|
||||||
|
.ExportMode = XlsxExportMode.SingleFile
|
||||||
|
}
|
||||||
|
If XtraTabControlMain.SelectedTabPageIndex = 0 Then
|
||||||
|
GridEnvelopes.ExportToXlsx(XtraSaveFileDialog1.FileName, oOptions)
|
||||||
|
ElseIf XtraTabControlMain.SelectedTabPageIndex = 1 Then
|
||||||
|
GridCompleted.ExportToXlsx(XtraSaveFileDialog1.FileName, oOptions)
|
||||||
|
ElseIf XtraTabControlMain.SelectedTabPageIndex = 2 Then
|
||||||
|
GridControlData.ExportToXlsx(XtraSaveFileDialog1.FileName, oOptions)
|
||||||
|
End If
|
||||||
|
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user