Compare commits
283 Commits
8de0d70e7b
...
customer/C
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd7454d38e | ||
|
|
f7c3ed280a | ||
|
|
9ffeb7afe8 | ||
|
|
a83994af43 | ||
|
|
8345034fcd | ||
|
|
a763d3c353 | ||
|
|
5ba5d2755b | ||
|
|
8629599f86 | ||
|
|
d166ae5a8b | ||
|
|
145d139e3a | ||
|
|
d3ce34ee31 | ||
|
|
fd61d4431f | ||
|
|
93417d1b37 | ||
|
|
ca3ea36a83 | ||
|
|
c59d9bbf57 | ||
|
|
0cf1cd10c0 | ||
|
|
1da73d1754 | ||
|
|
24037f8366 | ||
|
|
91b891513f | ||
|
|
e7d1f1574f | ||
|
|
80a3a26af8 | ||
|
|
9905ea5a12 | ||
|
|
a7a77cd491 | ||
|
|
f795b1447f | ||
|
|
e5e12bfb61 | ||
|
|
6a8baf08ed | ||
|
|
10ac34a9f7 | ||
|
|
72af1cc2a2 | ||
|
|
cd32ae2a35 | ||
|
|
ddc0c9c6f3 | ||
|
|
489c2a2a9f | ||
|
|
320e81719b | ||
|
|
66a8471f05 | ||
|
|
c7a4ef4722 | ||
|
|
1673ea81df | ||
|
|
306956a7be | ||
|
|
bfe3d38ecc | ||
|
|
6e5bb58f65 | ||
|
|
b96c6c10f8 | ||
|
|
afedfdd596 | ||
|
|
3a7099feb4 | ||
|
|
c704d222f0 | ||
|
|
83ce528e2f | ||
|
|
9cc15f9beb | ||
|
|
d323244157 | ||
|
|
56d35c65bb | ||
|
|
15eabfc834 | ||
|
|
11e8c46e44 | ||
|
|
a14bd78415 | ||
|
|
609f7d09fc | ||
|
|
4c21cb4ba7 | ||
|
|
00ebf45605 | ||
|
|
387777972b | ||
|
|
b7569982ff | ||
|
|
d6be88b61d | ||
|
|
8e454a0419 | ||
|
|
f8932e14c0 | ||
|
|
812bf9b25a | ||
|
|
0d591d5350 | ||
|
|
c9712af73e | ||
|
|
da483706b1 | ||
|
|
4b600cb190 | ||
|
|
25a56a22fa | ||
|
|
4e81f0949c | ||
|
|
18e79cf516 | ||
|
|
fad0a6070c | ||
|
|
755fcfeef2 | ||
|
|
40739b598b | ||
|
|
9782503d1d | ||
|
|
35ced9b9ad | ||
|
|
9b28c0a1d1 | ||
|
|
fd19c5be58 | ||
|
|
58b13e233c | ||
|
|
ce55066208 | ||
|
|
7d582d2422 | ||
|
|
fe1d553a8d | ||
|
|
99c05a44f5 | ||
|
|
678360953d | ||
|
|
9867e81220 | ||
|
|
49cfc3c044 | ||
|
|
43ae15b71c | ||
|
|
1c2df71e0f | ||
|
|
a806ec27db | ||
|
|
14bd2e22fc | ||
|
|
f94728bf67 | ||
|
|
caeaf1774e | ||
|
|
1388b40a6b | ||
|
|
e44d5f644c | ||
|
|
fe9fd3024e | ||
|
|
b664e35b11 | ||
|
|
a77a31121f | ||
|
|
381de6b554 | ||
|
|
13bd727b3e | ||
|
|
9021291aef | ||
|
|
8bd7ab13d0 | ||
|
|
8eefd94569 | ||
|
|
b3b2baf0e4 | ||
|
|
836380048a | ||
|
|
f105aaa567 | ||
|
|
6238d66ca2 | ||
|
|
7e325a7eb6 | ||
|
|
c91446c5ac | ||
| eaf4cd773d | |||
| 8950482bac | |||
|
|
b615446274 | ||
|
|
f276735b5c | ||
|
|
31aa5829f6 | ||
| 27a5538229 | |||
| 322fb2fd7e | |||
| 8e33094806 | |||
| 54b246f8e4 | |||
|
|
5c51ea679e | ||
|
|
e264a10a36 | ||
| 2f8aed8640 | |||
| 29eac347c3 | |||
|
|
dd6ab13e6e | ||
|
|
d94d9f045e | ||
|
|
12bfcb1f25 | ||
|
|
63613f2073 | ||
|
|
1c11a0e8f0 | ||
|
|
d376065246 | ||
|
|
4166dfde4b | ||
|
|
1bc43a5a77 | ||
|
|
33f4c6e489 | ||
|
|
a4b880f1d2 | ||
| a7f38eafb2 | |||
| 67a8506a37 | |||
|
|
ecec1e1206 | ||
|
|
854ed45abd | ||
|
|
c0cece62af | ||
|
|
408969d6dd | ||
|
|
9e019c0b69 | ||
|
|
2f4ffac9c4 | ||
|
|
6464a591a8 | ||
|
|
56df8234c7 | ||
|
|
95958f2a1d | ||
|
|
39cc257466 | ||
|
|
c4a66ee5bb | ||
|
|
cc3f6efbd7 | ||
|
|
c0a6103eb2 | ||
|
|
79bb454fd1 | ||
|
|
fc91a451f6 | ||
|
|
1efd241ab0 | ||
|
|
e8ff922726 | ||
|
|
8f3e72ae8b | ||
|
|
9279f8e79a | ||
|
|
1b2a316e5f | ||
|
|
36d305a1e8 | ||
|
|
963a36acfa | ||
|
|
30ee71eaf5 | ||
|
|
5f161d81f2 | ||
|
|
4d040959a5 | ||
|
|
5846a7433c | ||
|
|
2f41a993ee | ||
|
|
eac7454989 | ||
|
|
8c767a73b4 | ||
|
|
9e33fc1d96 | ||
|
|
23bf7579f6 | ||
|
|
13b9394073 | ||
|
|
af27163b08 | ||
|
|
155726a6b0 | ||
|
|
9f8142a5d6 | ||
|
|
0f97c325cf | ||
|
|
7961fcbf0f | ||
|
|
a1d251d705 | ||
|
|
07ad18eccb | ||
|
|
bf23fceb6b | ||
|
|
2dc860b923 | ||
|
|
9b2c5d9ca5 | ||
|
|
76bfb895a9 | ||
|
|
38aa6a6217 | ||
|
|
0268756cf9 | ||
|
|
f509cc8b3b | ||
|
|
290a1dd522 | ||
|
|
2c147f44b7 | ||
|
|
3fd2f90f65 | ||
|
|
d077a66796 | ||
|
|
f16a8bcdb9 | ||
|
|
33f161a5fe | ||
|
|
7697939d7e | ||
|
|
34b3c46720 | ||
|
|
65618e5df9 | ||
|
|
8d5493969f | ||
|
|
0818b8d606 | ||
|
|
047c4d09e8 | ||
|
|
26f2e157c6 | ||
|
|
f26f400937 | ||
|
|
0e4cfc452f | ||
|
|
95b80a650c | ||
|
|
f4dd17fca9 | ||
|
|
e4aed5309e | ||
|
|
c31f081208 | ||
| 76d4151182 | |||
| df2537bf29 | |||
| 5ca4c04669 | |||
| 297ecfab7b | |||
| 48db26931c | |||
|
|
21934928c2 | ||
|
|
21e8a86a99 | ||
|
|
0228e82c63 | ||
|
|
50247517b9 | ||
|
|
1357b714cf | ||
|
|
88da8e4ace | ||
|
|
89290c03f9 | ||
|
|
3b27260b14 | ||
|
|
9fa5827b09 | ||
|
|
3448c17d8b | ||
|
|
48ec83161d | ||
|
|
cc63b24947 | ||
|
|
c3db8d0d00 | ||
|
|
037ebfbe5c | ||
|
|
42258cbbb8 | ||
|
|
4c96274084 | ||
|
|
b594ddb646 | ||
|
|
b60ae62779 | ||
|
|
7863e861c7 | ||
|
|
2014f6149d | ||
|
|
60afdc23da | ||
|
|
90ac81c576 | ||
|
|
8d6d483c5d | ||
|
|
824bf6fb82 | ||
|
|
0c6fd2efe3 | ||
|
|
1f4cf54406 | ||
|
|
a6635f4a20 | ||
|
|
ed25482cee | ||
|
|
1664b5739e | ||
|
|
0ef9d3c49e | ||
|
|
86bdb233c2 | ||
|
|
bc6972bcfb | ||
|
|
2e66129485 | ||
|
|
81220ac9b4 | ||
|
|
d7252ce888 | ||
|
|
ba723bdddb | ||
|
|
68714c2937 | ||
|
|
cf9286e4c3 | ||
|
|
87a766a2e8 | ||
|
|
674d753735 | ||
|
|
c688a42e45 | ||
|
|
db83f25d57 | ||
|
|
ef6e921451 | ||
|
|
dd18094deb | ||
|
|
4f61f1b6cb | ||
|
|
efcd254749 | ||
|
|
357866ea44 | ||
|
|
d8617093ce | ||
|
|
b19cccdc34 | ||
|
|
79aa6f4cb3 | ||
|
|
a285a0b9c2 | ||
|
|
84442410a5 | ||
|
|
22a3ec914d | ||
|
|
9620cb7189 | ||
|
|
eb096cb201 | ||
|
|
cc01f57125 | ||
| a7cf500858 | |||
| b24f06509e | |||
|
|
6b3c90c618 | ||
|
|
966b7de3c4 | ||
|
|
8efe321cc7 | ||
|
|
6338b81571 | ||
| 0582e7e002 | |||
| 3f40b9449b | |||
| fd694b2cee | |||
| d4a9eba6ab | |||
|
|
f2e718565d | ||
|
|
f7b11e3427 | ||
|
|
74cb595128 | ||
|
|
23609d2bd7 | ||
|
|
1c55c4aa99 | ||
|
|
87c839549a | ||
| 02d883dfbf | |||
| f51c500f90 | |||
|
|
49cfeb28d9 | ||
|
|
5e758899ab | ||
|
|
f5dd3cf8be | ||
|
|
2c17d440c0 | ||
|
|
6941a3db8d | ||
|
|
1584fd6f1c | ||
|
|
2512de0f26 | ||
|
|
db83eb90ee | ||
|
|
501d48961e | ||
|
|
ab713a23ac | ||
|
|
cbb03d77ba | ||
|
|
29ae546d98 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -361,3 +361,5 @@ MigrationBackup/
|
|||||||
|
|
||||||
# Fody - auto-generated XML schema
|
# Fody - auto-generated XML schema
|
||||||
FodyWeavers.xsd
|
FodyWeavers.xsd
|
||||||
|
/EnvelopeGenerator.Web/.config/dotnet-tools.json
|
||||||
|
/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/.vscode
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IConfigService : IBasicCRUDService<IConfigRepository, ConfigDto, Config, int>
|
public interface IConfigService : IBasicCRUDService<ConfigDto, Config, int>
|
||||||
{
|
{
|
||||||
Task<IServiceResult<ConfigDto>> ReadFirstAsync();
|
Task<DataResult<ConfigDto>> ReadFirstAsync();
|
||||||
|
|
||||||
async Task<IServiceResult<ConfigDto>> ReadDefaultAsync() => await ReadFirstAsync();
|
Task<ConfigDto> ReadDefaultAsync();
|
||||||
}
|
|
||||||
|
Task<string> ReadDefaultSignatureHost();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IDocumentReceiverElementService : IBasicCRUDService<IDocumentReceiverElementRepository, DocumentReceiverElementDto, DocumentReceiverElement, int>
|
public interface IDocumentReceiverElementService : IBasicCRUDService<DocumentReceiverElementDto, DocumentReceiverElement, int>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IDocumentStatusService : IBasicCRUDService<IDocumentStatusRepository, DocumentStatusDto, DocumentStatus, int>
|
public interface IDocumentStatusService : IBasicCRUDService<DocumentStatusDto, DocumentStatus, int>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IEmailTemplateService : IBasicCRUDService<IEmailTemplateRepository, EmailTemplateDto, EmailTemplate, int>
|
public interface IEmailTemplateService : IBasicCRUDService<EmailTemplateDto, EmailTemplate, int>
|
||||||
{
|
{
|
||||||
|
Task<DataResult<EmailTemplateDto>> ReadByNameAsync(EmailTemplateType type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IEnvelopeCertificateService : IBasicCRUDService<IEnvelopeCertificateRepository, EnvelopeCertificateDto, EnvelopeCertificate, int>
|
public interface IEnvelopeCertificateService : IBasicCRUDService<EnvelopeCertificateDto, EnvelopeCertificate, int>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IEnvelopeDocumentService : IBasicCRUDService<IEnvelopeDocumentRepository, EnvelopeDocumentDto, EnvelopeDocument, int>
|
public interface IEnvelopeDocumentService : IBasicCRUDService<EnvelopeDocumentDto, EnvelopeDocument, int>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,29 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IEnvelopeHistoryService : IBasicCRUDService<IEnvelopeHistoryRepository, EnvelopeHistoryDto, EnvelopeHistory, long>
|
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,13 @@
|
|||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Common;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeMailService : IEmailOutService
|
||||||
|
{
|
||||||
|
Task<DataResult<int>> SendAsync(EnvelopeReceiverDto envelopeReceiverDto, Constants.EmailTemplateType tempType);
|
||||||
|
Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,29 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IEnvelopeReceiverService : IBasicCRUDService<IEnvelopeReceiverRepository, EnvelopeReceiverDto, EnvelopeReceiver, int>
|
public interface IEnvelopeReceiverService : IBasicCRUDService<EnvelopeReceiverDto, EnvelopeReceiver, object>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false);
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true);
|
||||||
|
|
||||||
|
Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true);
|
||||||
|
|
||||||
|
Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,15 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IEnvelopeService : IBasicCRUDService<IEnvelopeRepository, EnvelopeDto, Envelope, int>
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IEnvelopeTypeService : IBasicCRUDService<IEnvelopeTypeRepository, EnvelopeTypeDto, EnvelopeType, int>
|
public interface IEnvelopeTypeService : IBasicCRUDService<EnvelopeTypeDto, EnvelopeType, int>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
24
EnvelopeGenerator.Application/Contracts/IJWTService.cs
Normal file
24
EnvelopeGenerator.Application/Contracts/IJWTService.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
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,11 +1,14 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IReceiverService : IBasicCRUDService<IReceiverRepository, ReceiverDto, Receiver, int>
|
public interface IReceiverService : ICRUDService<ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
|
||||||
{
|
{
|
||||||
|
public Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null);
|
||||||
|
|
||||||
|
public Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.Abstractions.Application;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Contracts
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
{
|
{
|
||||||
public interface IUserReceiverService : IBasicCRUDService<IUserReceiverRepository, UserReceiverDto, UserReceiver, int>
|
public interface IUserReceiverService : IBasicCRUDService<UserReceiverDto, UserReceiver, int>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
57
EnvelopeGenerator.Application/DIExtensions.cs
Normal file
57
EnvelopeGenerator.Application/DIExtensions.cs
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
using DigitalData.UserManager.Application.MappingProfiles;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.MappingProfiles;
|
||||||
|
using EnvelopeGenerator.Application.Services;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Repositories;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application
|
||||||
|
{
|
||||||
|
public static class DIExtensions
|
||||||
|
{
|
||||||
|
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
//Inject CRUD Service and repositoriesad
|
||||||
|
services.AddScoped<IConfigRepository, ConfigRepository>();
|
||||||
|
services.AddScoped<IDocumentReceiverElementRepository, DocumentReceiverElementRepository>();
|
||||||
|
services.AddScoped<IEnvelopeDocumentRepository, EnvelopeDocumentRepository>();
|
||||||
|
services.AddScoped<IConfigRepository, ConfigRepository>();
|
||||||
|
services.AddScoped<IDocumentReceiverElementRepository, DocumentReceiverElementRepository>();
|
||||||
|
services.AddScoped<IDocumentStatusRepository, DocumentStatusRepository>();
|
||||||
|
services.AddScoped<IEmailTemplateRepository, EmailTemplateRepository>();
|
||||||
|
services.AddScoped<IEnvelopeRepository, EnvelopeRepository>();
|
||||||
|
services.AddScoped<IEnvelopeCertificateRepository, EnvelopeCertificateRepository>();
|
||||||
|
services.AddScoped<IEnvelopeDocumentRepository, EnvelopeDocumentRepository>();
|
||||||
|
services.AddScoped<IEnvelopeHistoryRepository, EnvelopeHistoryRepository>();
|
||||||
|
services.AddScoped<IEnvelopeReceiverRepository, EnvelopeReceiverRepository>();
|
||||||
|
services.AddScoped<IEnvelopeTypeRepository, EnvelopeTypeRepository>();
|
||||||
|
services.AddScoped<IReceiverRepository, ReceiverRepository>();
|
||||||
|
services.AddScoped<IUserReceiverRepository, UserReceiverRepository>();
|
||||||
|
services.AddScoped<IConfigService, ConfigService>();
|
||||||
|
services.AddScoped<IDocumentReceiverElementService, DocumentReceiverElementService>();
|
||||||
|
services.AddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
|
||||||
|
services.AddScoped<IEnvelopeHistoryService, EnvelopeHistoryService>();
|
||||||
|
services.AddScoped<IDocumentStatusService, DocumentStatusService>();
|
||||||
|
services.AddScoped<IEmailTemplateService, EmailTemplateService>();
|
||||||
|
services.AddScoped<IEnvelopeService, EnvelopeService>();
|
||||||
|
services.AddScoped<IEnvelopeCertificateService, EnvelopeCertificateService>();
|
||||||
|
services.AddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
|
||||||
|
services.AddScoped<IEnvelopeReceiverService, EnvelopeReceiverService>();
|
||||||
|
services.AddScoped<IEnvelopeTypeService, EnvelopeTypeService>();
|
||||||
|
services.AddScoped<IReceiverService, ReceiverService>();
|
||||||
|
services.AddScoped<IUserReceiverService, UserReceiverService>();
|
||||||
|
|
||||||
|
//Auto mapping profiles
|
||||||
|
services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly);
|
||||||
|
services.AddAutoMapper(typeof(UserMappingProfile).Assembly);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record DocumentReceiverElementDto(
|
public record DocumentReceiverElementDto(
|
||||||
int Guid,
|
int Id,
|
||||||
int DocumentId,
|
int DocumentId,
|
||||||
int ReceiverId,
|
int ReceiverId,
|
||||||
int ElementType,
|
int ElementType,
|
||||||
double PositionX,
|
double X,
|
||||||
double PositionY,
|
double Y,
|
||||||
double Width,
|
double Width,
|
||||||
double Height,
|
double Height,
|
||||||
int Page,
|
int Page,
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
int AnnotationIndex,
|
int AnnotationIndex,
|
||||||
DateTime AddedWhen,
|
DateTime AddedWhen,
|
||||||
DateTime? ChangedWhen,
|
DateTime? ChangedWhen,
|
||||||
EnvelopeDocumentDto? Document,
|
double Top,
|
||||||
EnvelopeReceiverDto? Receiver);
|
double Left
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record DocumentStatusDto(
|
public record DocumentStatusDto(
|
||||||
int Guid,
|
int Id,
|
||||||
int EnvelopeId,
|
int EnvelopeId,
|
||||||
int ReceiverId,
|
int ReceiverId,
|
||||||
int Status,
|
int Status,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record EmailTemplateDto(
|
public record EmailTemplateDto(
|
||||||
int Guid,
|
int Id,
|
||||||
string Name,
|
string Name,
|
||||||
string Body,
|
string Body,
|
||||||
string Subject);
|
string Subject);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record EnvelopeCertificateDto(
|
public record EnvelopeCertificateDto(
|
||||||
int Guid,
|
int Id,
|
||||||
int EnvelopeId,
|
int EnvelopeId,
|
||||||
string EnvelopeUuid,
|
string EnvelopeUuid,
|
||||||
string EnvelopeSubject,
|
string EnvelopeSubject,
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record EnvelopeDocumentDto
|
public record EnvelopeDocumentDto
|
||||||
{
|
(
|
||||||
public int Guid { get; init; }
|
int Id,
|
||||||
public int EnvelopeId { get; init; }
|
int EnvelopeId,
|
||||||
public string Filename { get; init; }
|
DateTime AddedWhen,
|
||||||
public string Filepath { get; init; }
|
IEnumerable<DocumentReceiverElementDto>? Elements
|
||||||
public DateTime AddedWhen { get; init; }
|
);
|
||||||
public string FilenameOriginal { get; init; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,27 +1,66 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
|
||||||
|
using DigitalData.UserManager.Application.DTOs.User;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record EnvelopeDto(
|
public record EnvelopeDto()
|
||||||
int Guid,
|
{
|
||||||
int UserId,
|
public int Id { get; set; }
|
||||||
int Status,
|
|
||||||
string EnvelopeUuid,
|
public int UserId { get; set; }
|
||||||
string Message,
|
|
||||||
DateTime? ExpiresWhen,
|
public int Status { get; set; }
|
||||||
DateTime? ExpiresWarningWhen,
|
|
||||||
DateTime AddedWhen,
|
public string StatusName { get; set; }
|
||||||
DateTime? ChangedWhen,
|
|
||||||
string Title,
|
public string Uuid { get; set; }
|
||||||
int? ContractType,
|
|
||||||
string Language,
|
[TemplatePlaceholder("[MESSAGE]")]
|
||||||
bool? SendReminderEmails,
|
public string Message { get; set; }
|
||||||
int? FirstReminderDays,
|
public DateTime? ExpiresWhen { get; set; }
|
||||||
int? ReminderIntervalDays,
|
public DateTime? ExpiresWarningWhen { get; set; }
|
||||||
int? EnvelopeType,
|
public DateTime AddedWhen { get; set; }
|
||||||
int? CertificationType,
|
public DateTime? ChangedWhen { get; set; }
|
||||||
bool? UseAccessCode,
|
|
||||||
int? FinalEmailToCreator,
|
[TemplatePlaceholder("[DOCUMENT_TITLE]")]
|
||||||
int? FinalEmailToReceivers,
|
public string Title { get; set; }
|
||||||
int? ExpiresWhenDays,
|
|
||||||
int? ExpiresWarningWhenDays,
|
public int? ContractType { get; set; }
|
||||||
bool DmzMoved);
|
|
||||||
|
public string Language { get; set; }
|
||||||
|
|
||||||
|
public bool? SendReminderEmails { get; set; }
|
||||||
|
|
||||||
|
public int? FirstReminderDays { get; set; }
|
||||||
|
|
||||||
|
public int? ReminderIntervalDays { get; set; }
|
||||||
|
|
||||||
|
public int? EnvelopeTypeId { get; set; }
|
||||||
|
|
||||||
|
public int? CertificationType { get; set; }
|
||||||
|
|
||||||
|
public bool? UseAccessCode { get; set; }
|
||||||
|
|
||||||
|
public int? FinalEmailToCreator { get; set; }
|
||||||
|
|
||||||
|
public int? FinalEmailToReceivers { get; set; }
|
||||||
|
|
||||||
|
public int? ExpiresWhenDays { get; set; }
|
||||||
|
|
||||||
|
public int? ExpiresWarningWhenDays { get; set; }
|
||||||
|
|
||||||
|
public bool DmzMoved { get; set; }
|
||||||
|
public UserReadDto? User { get; set; }
|
||||||
|
public EnvelopeType? EnvelopeType { get; set; }
|
||||||
|
|
||||||
|
public string? EnvelopeTypeTitle { get; set; }
|
||||||
|
|
||||||
|
public bool IsAlreadySent { get; set; }
|
||||||
|
|
||||||
|
public string? StatusTranslated { get; set; }
|
||||||
|
|
||||||
|
public string? ContractTypeTranslated { get; set; }
|
||||||
|
public IEnumerable<EnvelopeDocumentDto>? Documents { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeHistory
|
||||||
|
{
|
||||||
|
public record EnvelopeHistoryCreateDto(
|
||||||
|
int EnvelopeId,
|
||||||
|
string UserReference,
|
||||||
|
int Status,
|
||||||
|
DateTime? ActionDate,
|
||||||
|
string? Comment = null);
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using DigitalData.UserManager.Application.DTOs.User;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeHistory
|
||||||
|
{
|
||||||
|
public record EnvelopeHistoryDto(
|
||||||
|
long Id,
|
||||||
|
int EnvelopeId,
|
||||||
|
string UserReference,
|
||||||
|
int Status,
|
||||||
|
DateTime AddedWhen,
|
||||||
|
DateTime? ActionDate,
|
||||||
|
UserCreateDto? Sender,
|
||||||
|
ReceiverReadDto? Receiver,
|
||||||
|
ReferenceType ReferenceType,
|
||||||
|
string? Comment = null) : BaseDTO<long>(Id);
|
||||||
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
|
||||||
{
|
|
||||||
public record EnvelopeHistoryDto(
|
|
||||||
long Guid,
|
|
||||||
int EnvelopeId,
|
|
||||||
string UserReference,
|
|
||||||
int Status,
|
|
||||||
DateTime AddedWhen,
|
|
||||||
DateTime? ActionDate);
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,31 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record EnvelopeReceiverDto(
|
public record EnvelopeReceiverDto()
|
||||||
int EnvelopeId,
|
{
|
||||||
int ReceiverId,
|
public int EnvelopeId { get; set; }
|
||||||
int Sequence,
|
|
||||||
string Name,
|
public int ReceiverId { get; set; }
|
||||||
string JobTitle,
|
|
||||||
string CompanyName,
|
public int Sequence { get; set; }
|
||||||
string PrivateMessage,
|
|
||||||
string AccessCode,
|
[TemplatePlaceholder("[NAME_RECEIVER]")]
|
||||||
DateTime AddedWhen,
|
public string? Name { get; set; }
|
||||||
DateTime? ChangedWhen);
|
|
||||||
|
public string? JobTitle { get; set; }
|
||||||
|
|
||||||
|
public string? CompanyName { get; set; }
|
||||||
|
|
||||||
|
public string? PrivateMessage { get; set; }
|
||||||
|
|
||||||
|
public DateTime AddedWhen { get; set; }
|
||||||
|
|
||||||
|
public DateTime? ChangedWhen { get; set; }
|
||||||
|
|
||||||
|
public EnvelopeDto? Envelope { get; set; }
|
||||||
|
|
||||||
|
public ReceiverReadDto? Receiver { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record EnvelopeTypeDto(
|
public record EnvelopeTypeDto(
|
||||||
int Guid,
|
int Id,
|
||||||
string Title,
|
string Title,
|
||||||
string Language,
|
string Language,
|
||||||
int? ExpiresDays,
|
int? ExpiresDays,
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
||||||
|
{
|
||||||
|
public record ReceiverCreateDto([EmailAddress] string EmailAddress)
|
||||||
|
{
|
||||||
|
public string Signature => sha256HexOfMail.Value;
|
||||||
|
|
||||||
|
private readonly Lazy<string> sha256HexOfMail = new(() =>
|
||||||
|
{
|
||||||
|
var bytes_arr = Encoding.UTF8.GetBytes(EmailAddress.ToUpper());
|
||||||
|
var hash_arr = SHA256.HashData(bytes_arr);
|
||||||
|
var hexa_str = BitConverter.ToString(hash_arr);
|
||||||
|
return hexa_str.Replace("-", string.Empty);
|
||||||
|
});
|
||||||
|
|
||||||
|
public DateTime AddedWhen { get; } = DateTime.Now;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using DigitalData.Core.DTO;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
||||||
|
{
|
||||||
|
public record ReceiverReadDto(
|
||||||
|
int Id,
|
||||||
|
string EmailAddress,
|
||||||
|
string Signature,
|
||||||
|
DateTime AddedWhen
|
||||||
|
) : BaseDTO<int>(Id);
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
||||||
|
{
|
||||||
|
public record ReceiverUpdateDto();
|
||||||
|
}
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
|
||||||
{
|
|
||||||
public record ReceiverDto(
|
|
||||||
int Guid,
|
|
||||||
string EmailAddress,
|
|
||||||
string Signature,
|
|
||||||
DateTime AddedWhen);
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace EnvelopeGenerator.Application.DTOs
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
{
|
{
|
||||||
public record UserReceiverDto(
|
public record UserReceiverDto(
|
||||||
int Guid,
|
int Id,
|
||||||
int UserId,
|
int UserId,
|
||||||
int ReceiverId,
|
int ReceiverId,
|
||||||
string Name,
|
string Name,
|
||||||
|
|||||||
13
EnvelopeGenerator.Application/DispatcherConfig.cs
Normal file
13
EnvelopeGenerator.Application/DispatcherConfig.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
namespace EnvelopeGenerator.Application
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
10
EnvelopeGenerator.Application/EnvelopeFlag.cs
Normal file
10
EnvelopeGenerator.Application/EnvelopeFlag.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace EnvelopeGenerator.Application
|
||||||
|
{
|
||||||
|
public enum EnvelopeFlag
|
||||||
|
{
|
||||||
|
EnvelopeOrReceiverNonexists,
|
||||||
|
NonDecodableEnvelopeReceiverId,
|
||||||
|
WrongEnvelopeReceiverId,
|
||||||
|
AccessCodeNull
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net7.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
@@ -6,8 +6,19 @@
|
|||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="Resources\Model.Designer.vb" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||||
|
<PackageReference Include="DigitalData.Core.Abstractions" Version="1.0.1.1" />
|
||||||
|
<PackageReference Include="DigitalData.Core.Application" Version="1.0.0" />
|
||||||
|
<PackageReference Include="DigitalData.Core.DTO" Version="1.0.0" />
|
||||||
|
<PackageReference Include="DigitalData.EmailProfilerDispatcher" Version="1.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.18" />
|
||||||
|
<PackageReference Include="UserManager.Application" Version="1.0.0" />
|
||||||
|
<PackageReference Include="UserManager.Infrastructure" Version="1.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -15,12 +26,30 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DigitalData.Core.Application">
|
<Compile Update="Resources\Model.Designer.cs">
|
||||||
<HintPath>..\..\WebCoreModules\DigitalData.Core.Application\bin\Debug\net7.0\DigitalData.Core.Application.dll</HintPath>
|
<DesignTime>True</DesignTime>
|
||||||
</Reference>
|
<AutoGen>True</AutoGen>
|
||||||
<Reference Include="DigitalData.Core.Contracts">
|
<DependentUpon>Model.resx</DependentUpon>
|
||||||
<HintPath>..\..\WebCoreModules\DigitalData.Core.Application\bin\Debug\net7.0\DigitalData.Core.Contracts.dll</HintPath>
|
</Compile>
|
||||||
</Reference>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Update="Resources\Model.en.resx">
|
||||||
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<LastGenOutput>Model.en.Designer.vb</LastGenOutput>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="Resources\Model.resx">
|
||||||
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<LastGenOutput>Model.Designer.cs</LastGenOutput>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="Resources\Resource.de-DE.resx">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="Resources\Resource.en-US.resx">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
148
EnvelopeGenerator.Application/EnvelopeGeneratorExtensions.cs
Normal file
148
EnvelopeGenerator.Application/EnvelopeGeneratorExtensions.cs
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides extension methods for decoding and extracting information from an envelope receiver ID.
|
||||||
|
/// </summary>
|
||||||
|
public static class EnvelopeGeneratorExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Validates whether a given string is a correctly formatted Base-64 encoded string.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This method checks the string for proper Base-64 formatting, which includes validating
|
||||||
|
/// the length of the string (must be divisible by 4). It also checks each character to ensure
|
||||||
|
/// it belongs to the Base-64 character set (A-Z, a-z, 0-9, '+', '/', and '=' for padding).
|
||||||
|
/// The method ensures that padding characters ('=') only appear at the end of the string and
|
||||||
|
/// are in a valid configuration (either one '=' at the end if the string's length % 4 is 3,
|
||||||
|
/// or two '==' if the length % 4 is 2).
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="input">The Base-64 encoded string to validate.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// <c>true</c> if the string is a valid Base-64 encoded string; otherwise, <c>false</c>.
|
||||||
|
/// </returns>
|
||||||
|
/// <example>
|
||||||
|
/// <code>
|
||||||
|
/// string testString = "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnk=";
|
||||||
|
/// bool isValid = IsValidBase64String(testString);
|
||||||
|
/// Console.WriteLine(isValid); // Output: true
|
||||||
|
/// </code>
|
||||||
|
/// </example>
|
||||||
|
public static bool IsBase64String(this string input)
|
||||||
|
{
|
||||||
|
// Check if the string is null or empty
|
||||||
|
if (string.IsNullOrEmpty(input))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace valid base-64 padding
|
||||||
|
input = input.Trim();
|
||||||
|
int mod4 = input.Length % 4;
|
||||||
|
if (mod4 > 0)
|
||||||
|
{
|
||||||
|
// Base-64 string lengths should be divisible by 4
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check each character to ensure it is valid base-64
|
||||||
|
foreach (char c in input)
|
||||||
|
{
|
||||||
|
if (!char.IsLetterOrDigit(c) && c != '+' && c != '/' && c != '=')
|
||||||
|
{
|
||||||
|
// Invalid character detected
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure no invalid padding scenarios exist
|
||||||
|
if (input.EndsWith("==") && (input.Length % 4 == 0) ||
|
||||||
|
input.EndsWith("=") && (input.Length % 4 == 3))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return input.IndexOf('=') == -1; // No padding allowed except at the end
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Decodes the envelope receiver ID and extracts the envelope UUID and receiver signature.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="envelopeReceiverId">The base64 encoded string containing the envelope UUID and receiver signature.</param>
|
||||||
|
/// <returns>A tuple containing the envelope UUID and receiver signature.</returns>
|
||||||
|
public static (string? EnvelopeUuid, string? ReceiverSignature) DecodeEnvelopeReceiverId(this string envelopeReceiverId)
|
||||||
|
{
|
||||||
|
if (!envelopeReceiverId.IsBase64String())
|
||||||
|
{
|
||||||
|
return (null, null);
|
||||||
|
}
|
||||||
|
byte[] bytes = Convert.FromBase64String(envelopeReceiverId);
|
||||||
|
string decodedString = System.Text.Encoding.UTF8.GetString(bytes);
|
||||||
|
string[] parts = decodedString.Split(new string[] { "::" }, StringSplitOptions.None);
|
||||||
|
|
||||||
|
if (parts.Length > 1)
|
||||||
|
return (EnvelopeUuid: parts[0], ReceiverSignature: parts[1]);
|
||||||
|
else
|
||||||
|
return (string.Empty, string.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the envelope UUID from the decoded envelope receiver ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="envelopeReceiverId">The base64 encoded string to decode.</param>
|
||||||
|
/// <returns>The envelope UUID.</returns>
|
||||||
|
public static string? GetEnvelopeUuid(this string envelopeReceiverId) => envelopeReceiverId.DecodeEnvelopeReceiverId().EnvelopeUuid;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the receiver signature from the decoded envelope receiver ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="envelopeReceiverId">The base64 encoded string to decode.</param>
|
||||||
|
/// <returns>The receiver signature.</returns>
|
||||||
|
public static string? GetReceiverSignature(this string envelopeReceiverId) => envelopeReceiverId.DecodeEnvelopeReceiverId().ReceiverSignature;
|
||||||
|
|
||||||
|
public static string EncodeEnvelopeReceiverId(this (string envelopeUuid, string receiverSignature) input)
|
||||||
|
{
|
||||||
|
string combinedString = $"{input.envelopeUuid}::{input.receiverSignature}";
|
||||||
|
byte[] bytes = Encoding.UTF8.GetBytes(combinedString);
|
||||||
|
string base64String = Convert.ToBase64String(bytes);
|
||||||
|
|
||||||
|
return base64String;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LogEnvelopeError(this ILogger logger, string envelopeReceiverId, Exception? exception = null, string? message = null, params object?[] args)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder().AppendLine(envelopeReceiverId.DecodeEnvelopeReceiverId().ToTitle());
|
||||||
|
|
||||||
|
if (message is not null)
|
||||||
|
sb.AppendLine(message);
|
||||||
|
|
||||||
|
if(exception is null)
|
||||||
|
logger.Log(LogLevel.Error, sb.ToString(), args);
|
||||||
|
else
|
||||||
|
logger.Log(LogLevel.Error, exception, sb.AppendLine(exception.Message).ToString(), args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LogEnvelopeError(this ILogger logger, string? uuid, string? signature = null, Exception? exception = null, string? message = null, params object?[] args)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder($"Envelope Uuid: {uuid}");
|
||||||
|
|
||||||
|
if(signature is not null)
|
||||||
|
sb.AppendLine().Append($"Receiver Signature: {signature}");
|
||||||
|
|
||||||
|
if (message is not null)
|
||||||
|
sb.AppendLine().Append(message);
|
||||||
|
|
||||||
|
if (exception is null)
|
||||||
|
logger.Log(LogLevel.Error, sb.ToString(), args);
|
||||||
|
else
|
||||||
|
logger.Log(LogLevel.Error, exception, sb.ToString(), args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToTitle(this (string? UUID, string? Signature) envelopeReceiverTuple)
|
||||||
|
{
|
||||||
|
return $"UUID is {envelopeReceiverTuple.UUID} and signature is {envelopeReceiverTuple.Signature}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
EnvelopeGenerator.Application/Key.cs
Normal file
19
EnvelopeGenerator.Application/Key.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
namespace EnvelopeGenerator.Application
|
||||||
|
{
|
||||||
|
public static class Key
|
||||||
|
{
|
||||||
|
public static readonly string InnerServiceError = nameof(InnerServiceError);
|
||||||
|
public static readonly string EnvelopeNotFound = nameof(EnvelopeNotFound);
|
||||||
|
public static readonly string EnvelopeReceiverNotFound = nameof(EnvelopeReceiverNotFound);
|
||||||
|
public static readonly string AccessCodeNull = nameof(AccessCodeNull);
|
||||||
|
public static readonly string WrongAccessCode = nameof(WrongAccessCode);
|
||||||
|
public static readonly string DataIntegrityIssue = nameof(DataIntegrityIssue);
|
||||||
|
public static readonly string SecurityBreachOrDataIntegrity = nameof(SecurityBreachOrDataIntegrity);
|
||||||
|
public static readonly string PossibleDataIntegrityIssue = nameof(PossibleDataIntegrityIssue);
|
||||||
|
public static readonly string SecurityBreach = nameof(SecurityBreach);
|
||||||
|
public static readonly string PossibleSecurityBreach = nameof(PossibleSecurityBreach);
|
||||||
|
public static readonly string WrongEnvelopeReceiverId = nameof(WrongEnvelopeReceiverId);
|
||||||
|
public static readonly string EnvelopeOrReceiverNonexists = nameof(EnvelopeOrReceiverNonexists);
|
||||||
|
public static readonly string Default = nameof(Default);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.MappingProfiles
|
namespace EnvelopeGenerator.Application.MappingProfiles
|
||||||
@@ -17,9 +19,12 @@ namespace EnvelopeGenerator.Application.MappingProfiles
|
|||||||
CreateMap<EnvelopeCertificate, EnvelopeCertificateDto>();
|
CreateMap<EnvelopeCertificate, EnvelopeCertificateDto>();
|
||||||
CreateMap<EnvelopeDocument, EnvelopeDocumentDto>();
|
CreateMap<EnvelopeDocument, EnvelopeDocumentDto>();
|
||||||
CreateMap<EnvelopeHistory, EnvelopeHistoryDto>();
|
CreateMap<EnvelopeHistory, EnvelopeHistoryDto>();
|
||||||
|
CreateMap<EnvelopeHistory, EnvelopeHistoryCreateDto>();
|
||||||
CreateMap<EnvelopeReceiver, EnvelopeReceiverDto>();
|
CreateMap<EnvelopeReceiver, EnvelopeReceiverDto>();
|
||||||
CreateMap<EnvelopeType, EnvelopeTypeDto>();
|
CreateMap<EnvelopeType, EnvelopeTypeDto>();
|
||||||
CreateMap<Receiver, ReceiverDto>();
|
CreateMap<Receiver, ReceiverReadDto>();
|
||||||
|
CreateMap<Receiver, ReceiverCreateDto>();
|
||||||
|
CreateMap<Receiver, ReceiverUpdateDto>();
|
||||||
CreateMap<UserReceiver, UserReceiverDto>();
|
CreateMap<UserReceiver, UserReceiverDto>();
|
||||||
|
|
||||||
// DTO to Entity mappings
|
// DTO to Entity mappings
|
||||||
@@ -31,9 +36,12 @@ namespace EnvelopeGenerator.Application.MappingProfiles
|
|||||||
CreateMap<EnvelopeCertificateDto, EnvelopeCertificate>();
|
CreateMap<EnvelopeCertificateDto, EnvelopeCertificate>();
|
||||||
CreateMap<EnvelopeDocumentDto, EnvelopeDocument>();
|
CreateMap<EnvelopeDocumentDto, EnvelopeDocument>();
|
||||||
CreateMap<EnvelopeHistoryDto, EnvelopeHistory>();
|
CreateMap<EnvelopeHistoryDto, EnvelopeHistory>();
|
||||||
|
CreateMap<EnvelopeHistoryCreateDto, EnvelopeHistory>();
|
||||||
CreateMap<EnvelopeReceiverDto, EnvelopeReceiver>();
|
CreateMap<EnvelopeReceiverDto, EnvelopeReceiver>();
|
||||||
CreateMap<EnvelopeTypeDto, EnvelopeType>();
|
CreateMap<EnvelopeTypeDto, EnvelopeType>();
|
||||||
CreateMap<ReceiverDto, Receiver>();
|
CreateMap<ReceiverReadDto, Receiver>();
|
||||||
|
CreateMap<ReceiverCreateDto, Receiver>();
|
||||||
|
CreateMap<ReceiverUpdateDto, Receiver>();
|
||||||
CreateMap<UserReceiverDto, UserReceiver>();
|
CreateMap<UserReceiverDto, UserReceiver>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
EnvelopeGenerator.Application/Resources/Resource.cs
Normal file
9
EnvelopeGenerator.Application/Resources/Resource.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Resources
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The place holder class for Resource.*.resx
|
||||||
|
/// </summary>
|
||||||
|
public class Resource
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
219
EnvelopeGenerator.Application/Resources/Resource.de-DE.resx
Normal file
219
EnvelopeGenerator.Application/Resources/Resource.de-DE.resx
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="and" xml:space="preserve">
|
||||||
|
<value>und</value>
|
||||||
|
</data>
|
||||||
|
<data name="Back" xml:space="preserve">
|
||||||
|
<value>Zurück</value>
|
||||||
|
</data>
|
||||||
|
<data name="Complete" xml:space="preserve">
|
||||||
|
<value>Abschließen</value>
|
||||||
|
</data>
|
||||||
|
<data name="Confirmation" xml:space="preserve">
|
||||||
|
<value>Bestätigung</value>
|
||||||
|
</data>
|
||||||
|
<data name="de-DE" xml:space="preserve">
|
||||||
|
<value>Deutch</value>
|
||||||
|
</data>
|
||||||
|
<data name="DocProtected" xml:space="preserve">
|
||||||
|
<value>Dokument geschützt</value>
|
||||||
|
</data>
|
||||||
|
<data name="DocRejected" xml:space="preserve">
|
||||||
|
<value>Dokument abgelehnt</value>
|
||||||
|
</data>
|
||||||
|
<data name="DocSigned" xml:space="preserve">
|
||||||
|
<value>Dokument unterschrieben</value>
|
||||||
|
</data>
|
||||||
|
<data name="en-US" xml:space="preserve">
|
||||||
|
<value>Englisch</value>
|
||||||
|
</data>
|
||||||
|
<data name="EnvelopeInfo1" xml:space="preserve">
|
||||||
|
<value>Sie müssen {0} Vorgang unterzeichen. <span class="highlight highlight-envelope-info-1">Bitte prüfen Sie die Seite {1}</span>.</value>
|
||||||
|
</data>
|
||||||
|
<data name="EnvelopeInfo2" xml:space="preserve">
|
||||||
|
<value>Erstellt am {0} von {1}. Sie können den Absender über <span class="highlight highlight-envelope-info-2"><a class="mail-link" href="mailto:{2}?subject={3}&body=Sehr%20geehrter%20{4}%20{5},%0A%0A%0A">{6}</a></span> kontaktieren.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Finalize" xml:space="preserve">
|
||||||
|
<value>Abschließen</value>
|
||||||
|
</data>
|
||||||
|
<data name="Hello" xml:space="preserve">
|
||||||
|
<value>Hallo</value>
|
||||||
|
</data>
|
||||||
|
<data name="LocakedOpen" xml:space="preserve">
|
||||||
|
<value>Öffnen</value>
|
||||||
|
</data>
|
||||||
|
<data name="LocationWarning" xml:space="preserve">
|
||||||
|
<value>Bitte überprüfen Sie die Standortinformationen. Wenn sie falsch sind, korrigieren Sie diese bitte.</value>
|
||||||
|
</data>
|
||||||
|
<data name="LockedAccessCode" xml:space="preserve">
|
||||||
|
<value>Zugriffscode</value>
|
||||||
|
</data>
|
||||||
|
<data name="LockedBody" xml:space="preserve">
|
||||||
|
<value>Wir haben Ihnen gerade den Zugriffscode an die hinterlegte Email Adresse gesendet. Dies kann evtl. einige Minuten dauern.</value>
|
||||||
|
</data>
|
||||||
|
<data name="LockedFooterBody" 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>
|
||||||
|
</data>
|
||||||
|
<data name="LockedFooterTitle" xml:space="preserve">
|
||||||
|
<value>Sie haben keinen Zugriffscode erhalten?</value>
|
||||||
|
</data>
|
||||||
|
<data name="LockedTitle" xml:space="preserve">
|
||||||
|
<value>Dokument erfordert einen Zugriffscode</value>
|
||||||
|
</data>
|
||||||
|
<data name="Reject" xml:space="preserve">
|
||||||
|
<value>Ablehnen</value>
|
||||||
|
</data>
|
||||||
|
<data name="Rejection" xml:space="preserve">
|
||||||
|
<value>Ablehnung</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo1" xml:space="preserve">
|
||||||
|
<value>Dieser Unterzeichnungsvorgang wurde abgelehnt!</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo1_ext" xml:space="preserve">
|
||||||
|
<value>Vorgang abgebrochen!</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo2" xml:space="preserve">
|
||||||
|
<value>Sie können bei Bedarf mit {0}, <a href="mailto:{1}?subject={2}&body=Sehr geehrte(r)%20{0},%0A%0A%0A">{1}</a> Kontakt aufnehmen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo2_ext" xml:space="preserve">
|
||||||
|
<value>Das Vorgang wurde von einer der beteiligten Parteien abgelehnt. Sie können bei Bedarf mit {0}, <a href="mailto:{1}?subject={2}&body=Sehr geehrte(r)%20{0},%0A%0A%0A">{1}</a> Kontakt aufnehmen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionReasonQ" xml:space="preserve">
|
||||||
|
<value>Bitte geben Sie einen Grund an:</value>
|
||||||
|
</data>
|
||||||
|
<data name="SigAgree" xml:space="preserve">
|
||||||
|
<value>Durch Klick auf Abschließen stimme ich zu, dass die abgebildete und übermittelte Signatur als elektronische Darstellung meiner Signatur in den Fällen gelten, in denen ich sie auf Dokumenten, einschließlich rechtsgültiger Verträge verwende.</value>
|
||||||
|
</data>
|
||||||
|
<data name="SignDoc" xml:space="preserve">
|
||||||
|
<value>Dokument unterschreiben</value>
|
||||||
|
</data>
|
||||||
|
<data name="SigningProcessTitle" xml:space="preserve">
|
||||||
|
<value>Titel des Unterzeichnungs-Vorgangs</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnexpectedError" xml:space="preserve">
|
||||||
|
<value>Ein unerwarteter Fehler ist aufgetreten.</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomeToTheESignPortal" xml:space="preserve">
|
||||||
|
<value>Herzlich willkommen im eSign-Portal</value>
|
||||||
|
</data>
|
||||||
|
<data name="WrongAccessCode" xml:space="preserve">
|
||||||
|
<value>Ungültiger Zugangscode.</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
219
EnvelopeGenerator.Application/Resources/Resource.en-US.resx
Normal file
219
EnvelopeGenerator.Application/Resources/Resource.en-US.resx
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="and" xml:space="preserve">
|
||||||
|
<value>and</value>
|
||||||
|
</data>
|
||||||
|
<data name="Back" xml:space="preserve">
|
||||||
|
<value>Back</value>
|
||||||
|
</data>
|
||||||
|
<data name="Complete" xml:space="preserve">
|
||||||
|
<value>Complete</value>
|
||||||
|
</data>
|
||||||
|
<data name="Confirmation" xml:space="preserve">
|
||||||
|
<value>Confirmation</value>
|
||||||
|
</data>
|
||||||
|
<data name="de-DE" xml:space="preserve">
|
||||||
|
<value>German</value>
|
||||||
|
</data>
|
||||||
|
<data name="DocProtected" xml:space="preserve">
|
||||||
|
<value>Document protected</value>
|
||||||
|
</data>
|
||||||
|
<data name="DocRejected" xml:space="preserve">
|
||||||
|
<value>Document rejected</value>
|
||||||
|
</data>
|
||||||
|
<data name="DocSigned" xml:space="preserve">
|
||||||
|
<value>Document signed</value>
|
||||||
|
</data>
|
||||||
|
<data name="en-US" xml:space="preserve">
|
||||||
|
<value>English</value>
|
||||||
|
</data>
|
||||||
|
<data name="EnvelopeInfo1" xml:space="preserve">
|
||||||
|
<value>You have to sign {0} process. <span class="highlight highlight-envelope-info-1">Please check page {1}</span>.</value>
|
||||||
|
</data>
|
||||||
|
<data name="EnvelopeInfo2" xml:space="preserve">
|
||||||
|
<value>Created on {0} by {1}. You can contact the sender via <span class="highlight highlight-envelope-info-2"><a class="mail-link" href="mailto:{2}?subject={3}&body=Dear%20{4}%20{5},%0A%0A%0A">{6}</a></span>.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Finalize" xml:space="preserve">
|
||||||
|
<value>Finalize</value>
|
||||||
|
</data>
|
||||||
|
<data name="Hello" xml:space="preserve">
|
||||||
|
<value>Hello</value>
|
||||||
|
</data>
|
||||||
|
<data name="LocakedOpen" xml:space="preserve">
|
||||||
|
<value>Open</value>
|
||||||
|
</data>
|
||||||
|
<data name="LocationWarning" xml:space="preserve">
|
||||||
|
<value>Please review the location information. If it is incorrect, kindly make the necessary corrections.</value>
|
||||||
|
</data>
|
||||||
|
<data name="LockedAccessCode" xml:space="preserve">
|
||||||
|
<value>Access Code</value>
|
||||||
|
</data>
|
||||||
|
<data name="LockedBody" 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>
|
||||||
|
</data>
|
||||||
|
<data name="LockedFooterBody" 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>
|
||||||
|
</data>
|
||||||
|
<data name="LockedFooterTitle" xml:space="preserve">
|
||||||
|
<value>You have not received an access code?</value>
|
||||||
|
</data>
|
||||||
|
<data name="LockedTitle" xml:space="preserve">
|
||||||
|
<value>Document requires an access code</value>
|
||||||
|
</data>
|
||||||
|
<data name="Reject" xml:space="preserve">
|
||||||
|
<value>Reject</value>
|
||||||
|
</data>
|
||||||
|
<data name="Rejection" xml:space="preserve">
|
||||||
|
<value>Rejection</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo1" xml:space="preserve">
|
||||||
|
<value>This signing process was rejected!</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo1_ext" xml:space="preserve">
|
||||||
|
<value>Process canceled!</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo2" xml:space="preserve">
|
||||||
|
<value>You can contact {0}, <a href="mailto:{1}?subject={2}&body=Dear%20{0},%0A%0A%0A">{1}</a> if required.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionInfo2_ext" xml:space="preserve">
|
||||||
|
<value>The process has been rejected by one of the parties involved. You can contact {0}, <a href="mailto:{1}?subject={2}&body=Dear%20{0},%0A%0A%0A">{1}</a> if required.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RejectionReasonQ" xml:space="preserve">
|
||||||
|
<value>Please give a reason:</value>
|
||||||
|
</data>
|
||||||
|
<data name="SigAgree" xml:space="preserve">
|
||||||
|
<value>By clicking on Finalize, I agree that the signature shown and submitted is an electronic representation of my signature in cases where I use it on documents, including legally binding contracts.</value>
|
||||||
|
</data>
|
||||||
|
<data name="SignDoc" xml:space="preserve">
|
||||||
|
<value>Sign document</value>
|
||||||
|
</data>
|
||||||
|
<data name="SigningProcessTitle" xml:space="preserve">
|
||||||
|
<value>Title of the signing process</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnexpectedError" xml:space="preserve">
|
||||||
|
<value>An unexpected error has occurred.</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomeToTheESignPortal" xml:space="preserve">
|
||||||
|
<value>Welcome to the eSign portal</value>
|
||||||
|
</data>
|
||||||
|
<data name="WrongAccessCode" xml:space="preserve">
|
||||||
|
<value>Invalid access code.</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -1,30 +1,62 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.Application;
|
using DigitalData.Core.DTO;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services
|
||||||
{
|
{
|
||||||
public class ConfigService : BasicCRUDService<IConfigRepository, ConfigDto, Config, int>, IConfigService
|
public class ConfigService : BasicCRUDService<IConfigRepository, ConfigDto, Config, int>, IConfigService
|
||||||
{
|
{
|
||||||
public ConfigService(IConfigRepository repository, IKeyTranslationService translationService, IMapper mapper) : base(repository, translationService, mapper)
|
private static readonly Guid DefaultConfigCacheId = Guid.NewGuid();
|
||||||
|
|
||||||
|
private readonly IMemoryCache _cache;
|
||||||
|
private readonly ILogger<ConfigService> _logger;
|
||||||
|
public ConfigService(IConfigRepository repository, IMapper mapper, IMemoryCache memoryCache, ILogger<ConfigService> logger) : base(repository, mapper)
|
||||||
{
|
{
|
||||||
|
_cache = memoryCache;
|
||||||
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IServiceResult<ConfigDto>> ReadFirstAsync()
|
public async Task<DataResult<ConfigDto>> ReadFirstAsync()
|
||||||
{
|
{
|
||||||
var config = await _repository.ReadFirstAsync();
|
var config = await _repository.ReadFirstAsync();
|
||||||
|
return config is null
|
||||||
if (config is null)
|
? Result.Fail<ConfigDto>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, "There is no configuration in DB.")
|
||||||
return Failed<ConfigDto>("There is no configuration in DB.");
|
: Result.Success(_mapper.MapOrThrow<ConfigDto>(config));
|
||||||
|
|
||||||
return Successful(_mapper.MapOrThrow<ConfigDto>(config));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IServiceResult<ConfigDto>> ReadDefaultAsync() => await ReadFirstAsync();
|
/// <summary>
|
||||||
|
/// Reads the default configuration asynchronously.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// The configuration is cached in memory upon the first retrieval. If the configuration is updated,
|
||||||
|
/// the application needs to be restarted for the changes to take effect as the memory cache will not be updated automatically.
|
||||||
|
/// </remarks>
|
||||||
|
/// <returns>
|
||||||
|
/// A task that represents the asynchronous read operation. The task result contains the default configuration as a <see cref="ConfigDto"/>.
|
||||||
|
/// </returns>
|
||||||
|
/// <exception cref="InvalidOperationException">
|
||||||
|
/// Thrown when the default configuration cannot be found.
|
||||||
|
/// </exception>
|
||||||
|
public async Task<ConfigDto> ReadDefaultAsync()
|
||||||
|
{
|
||||||
|
var config = await _cache.GetOrCreateAsync(DefaultConfigCacheId, _ => ReadFirstAsync().ThenAsync(
|
||||||
|
Success: config => config,
|
||||||
|
Fail: (mssg, ntc) =>
|
||||||
|
{
|
||||||
|
_logger.LogNotice(ntc);
|
||||||
|
throw new InvalidOperationException("Default configuration cannot find.");
|
||||||
|
}));
|
||||||
|
|
||||||
|
return config!;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> ReadDefaultSignatureHost() => (await ReadDefaultAsync()).SignatureHost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
|
||||||
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, IKeyTranslationService translationService, IMapper mapper)
|
public DocumentReceiverElementService(IDocumentReceiverElementRepository repository, IMapper mapper)
|
||||||
: base(repository, translationService, mapper)
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
|
||||||
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, IKeyTranslationService translationService, IMapper mapper)
|
public DocumentStatusService(IDocumentStatusRepository repository, IMapper mapper)
|
||||||
: base(repository, translationService, mapper)
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,32 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using Microsoft.Extensions.Localization;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
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.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
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, IKeyTranslationService translationService, IMapper mapper)
|
public EmailTemplateService(IEmailTemplateRepository repository, IMapper mapper)
|
||||||
: base(repository, translationService, mapper)
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<EmailTemplateDto>> ReadByNameAsync(EmailTemplateType type)
|
||||||
|
{
|
||||||
|
var temp = await _repository.ReadByNameAsync(type);
|
||||||
|
return temp is null
|
||||||
|
? Result.Fail<EmailTemplateDto>()
|
||||||
|
.Message(Key.InnerServiceError)
|
||||||
|
.Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"EmailTemplateType '{type}' is not found in DB. Please, define required e-mail template.")
|
||||||
|
: Result.Success(_mapper.MapOrThrow<EmailTemplateDto>(temp));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using Microsoft.Extensions.Localization;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
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.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
|
||||||
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, IKeyTranslationService translationService, IMapper mapper)
|
public EnvelopeCertificateService(IEnvelopeCertificateRepository repository, IMapper mapper)
|
||||||
: base(repository, translationService, mapper)
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.Application;
|
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
@@ -11,7 +9,7 @@ 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, IKeyTranslationService translationService, IMapper mapper) : base(repository, translationService, mapper)
|
public EnvelopeDocumentService(IEnvelopeDocumentRepository repository, IMapper mapper) : base(repository, mapper)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,87 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using Microsoft.Extensions.Localization;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services
|
||||||
{
|
{
|
||||||
public class EnvelopeHistoryService : BasicCRUDService<IEnvelopeHistoryRepository, EnvelopeHistoryDto, EnvelopeHistory, long>, IEnvelopeHistoryService
|
public class EnvelopeHistoryService : CRUDService<IEnvelopeHistoryRepository, EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>, IEnvelopeHistoryService
|
||||||
{
|
{
|
||||||
public EnvelopeHistoryService(IEnvelopeHistoryRepository repository, IKeyTranslationService translationService, IMapper mapper)
|
public EnvelopeHistoryService(IEnvelopeHistoryRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper)
|
||||||
: base(repository, translationService, 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<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,
|
||||||
|
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.MapOrThrow<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
|
||||||
|
public async Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId)
|
||||||
|
{
|
||||||
|
var envelopes = await ReadRejectedAsync(envelopeId);
|
||||||
|
return envelopes is null
|
||||||
|
? Enumerable.Empty<ReceiverReadDto>()
|
||||||
|
: envelopes
|
||||||
|
.Where(eh => eh?.Receiver != null)
|
||||||
|
.Select(eh => eh.Receiver!);
|
||||||
|
}
|
||||||
|
|
||||||
|
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))
|
||||||
|
.ThenAsync(
|
||||||
|
Success: id => Result.Success(id),
|
||||||
|
Fail: (mssg, ntc) => Result.Fail<long>().Message(mssg).Notice(ntc)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.DTOs.EmailOut;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Services;
|
||||||
|
using DigitalData.UserManager.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Common;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeMailService : EmailOutService, IEnvelopeMailService
|
||||||
|
{
|
||||||
|
private readonly IEmailTemplateService _tempService;
|
||||||
|
private readonly IEnvelopeReceiverService _envRcvService;
|
||||||
|
private readonly DispatcherConfig _dConfig;
|
||||||
|
private readonly IConfigService _configService;
|
||||||
|
|
||||||
|
public EnvelopeMailService(IEmailOutRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions<DispatcherConfig> dispatcherConfigOptions, IConfigService configService) : base(repository, mapper)
|
||||||
|
{
|
||||||
|
_tempService = tempService;
|
||||||
|
_envRcvService = envelopeReceiverService;
|
||||||
|
_dConfig = dispatcherConfigOptions.Value;
|
||||||
|
_configService = configService;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: create ioptions and implement TemplatePlaceHolderAttribute instead of this method
|
||||||
|
private async Task<Dictionary<string, string>> CreatePlaceholders(string? accessCode = null, EnvelopeReceiverDto? envelopeReceiverDto = null)
|
||||||
|
{
|
||||||
|
Dictionary<string, string> placeholders = new() {
|
||||||
|
{ "[NAME_PORTAL]", "signFlow" },
|
||||||
|
{ "[SIGNATURE_TYPE]" , "signieren"},
|
||||||
|
{ "[REASON]", string.Empty } };
|
||||||
|
|
||||||
|
if (accessCode is not null)
|
||||||
|
placeholders["[DOCUMENT_ACCESS_CODE]"] = accessCode;
|
||||||
|
|
||||||
|
if(envelopeReceiverDto is not null && envelopeReceiverDto.Envelope is not null && envelopeReceiverDto.Receiver is not null)
|
||||||
|
{
|
||||||
|
var erId = (envelopeReceiverDto.Envelope.Uuid, envelopeReceiverDto.Receiver.Signature).EncodeEnvelopeReceiverId();
|
||||||
|
var sigHost = await _configService.ReadDefaultSignatureHost();
|
||||||
|
var linkToDoc = $"{sigHost}/envelope/{erId}";
|
||||||
|
placeholders["[LINK_TO_DOCUMENT]"] = linkToDoc;
|
||||||
|
placeholders["[LINK_TO_DOCUMENT_TEXT]"] = linkToDoc[..Math.Min(40, linkToDoc.Length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
return placeholders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto dto) => await SendAsync(dto: dto, tempType: Constants.EmailTemplateType.DocumentAccessCodeReceived);
|
||||||
|
|
||||||
|
public async Task<DataResult<int>> SendAsync(EnvelopeReceiverDto dto, Constants.EmailTemplateType tempType)
|
||||||
|
{
|
||||||
|
var tempSerResult = await _tempService.ReadByNameAsync(tempType);
|
||||||
|
if (tempSerResult.IsFailed)
|
||||||
|
return tempSerResult.ToFail<int>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"The email cannot send because '{tempType}' template cannot found.");
|
||||||
|
var temp = tempSerResult.Data;
|
||||||
|
|
||||||
|
var mail = new EmailOutCreateDto()
|
||||||
|
{
|
||||||
|
EmailAddress = dto.Receiver!.EmailAddress,
|
||||||
|
EmailSubj = temp.Subject,
|
||||||
|
EmailBody = temp.Body,
|
||||||
|
//email_type = envelope_status,
|
||||||
|
//message = envelope_message,
|
||||||
|
ReferenceId = dto.EnvelopeId, //REFERENCE_ID = ENVELOPE_ID
|
||||||
|
ReferenceString = dto!.Envelope!.Uuid, //REFERENCE_STRING = ENVELOPE_UUID
|
||||||
|
//receiver_name = receiver.name,
|
||||||
|
//receiver_access_code = receiver.access_code,
|
||||||
|
//sender_adress = envelope.user.email,
|
||||||
|
//sender_name = envelope.user.full_name,
|
||||||
|
//envelope_title = envelope.title,
|
||||||
|
ReminderTypeId = _dConfig.ReminderTypeId,
|
||||||
|
SendingProfile = _dConfig.SendingProfile,
|
||||||
|
EntityId = null,
|
||||||
|
WfId = (int) EnvelopeStatus.MessageAccessCodeSent,
|
||||||
|
WfReference = null,
|
||||||
|
AddedWho = _dConfig.AddedWho,
|
||||||
|
EmailAttmt1 = _dConfig.EmailAttmt1
|
||||||
|
};
|
||||||
|
|
||||||
|
//get acccess code
|
||||||
|
var acResult = await _envRcvService.ReadAccessCodeByIdAsync(envelopeId: dto.EnvelopeId, receiverId: dto.ReceiverId);
|
||||||
|
if (acResult.IsFailed)
|
||||||
|
return acResult.ToFail<int>().Notice(LogLevel.Error, "Therefore, access code cannot be sent");
|
||||||
|
var accessCode = acResult.Data;
|
||||||
|
|
||||||
|
var placeholders = await CreatePlaceholders(accessCode: accessCode, envelopeReceiverDto: dto);
|
||||||
|
|
||||||
|
return await CreateWithTemplateAsync(createDto: mail,placeholders: placeholders,
|
||||||
|
dto, dto.Envelope.User!, dto.Envelope);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,18 +1,126 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services
|
||||||
{
|
{
|
||||||
public class EnvelopeReceiverService : BasicCRUDService<IEnvelopeReceiverRepository, EnvelopeReceiverDto, EnvelopeReceiver, int>, IEnvelopeReceiverService
|
public class EnvelopeReceiverService : BasicCRUDService<IEnvelopeReceiverRepository, EnvelopeReceiverDto, EnvelopeReceiver, object>, IEnvelopeReceiverService
|
||||||
{
|
{
|
||||||
public EnvelopeReceiverService(IEnvelopeReceiverRepository repository, IKeyTranslationService translationService, IMapper mapper)
|
private readonly IStringLocalizer<Resource> _localizer;
|
||||||
: base(repository, translationService, mapper)
|
|
||||||
|
public EnvelopeReceiverService(IEnvelopeReceiverRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
|
_localizer = localizer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true)
|
||||||
|
{
|
||||||
|
var env_rcvs = await _repository.ReadBySignatureAsync(signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver);
|
||||||
|
return Result.Success(_mapper.MapOrThrow<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false)
|
||||||
|
{
|
||||||
|
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver);
|
||||||
|
return Result.Success(_mapper.MapOrThrow<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true)
|
||||||
|
{
|
||||||
|
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver);
|
||||||
|
if (env_rcv is null)
|
||||||
|
return Result.Fail<EnvelopeReceiverDto>()
|
||||||
|
.Message(Key.EnvelopeReceiverNotFound);
|
||||||
|
|
||||||
|
return Result.Success(_mapper.MapOrThrow<EnvelopeReceiverDto>(env_rcv));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true)
|
||||||
|
{
|
||||||
|
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
return await ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<bool>> VerifyAccessCodeAsync(string uuid, string signature, string accessCode)
|
||||||
|
{
|
||||||
|
var er = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
var actualAccessCode = er.AccessCode;
|
||||||
|
|
||||||
|
if (actualAccessCode is null)
|
||||||
|
return Result.Fail<bool>()
|
||||||
|
.Message(_localizer[Key.AccessCodeNull])
|
||||||
|
.Notice(LogLevel.Critical, (uuid, signature).ToTitle())
|
||||||
|
.Notice(LogLevel.Critical, EnvelopeFlag.AccessCodeNull)
|
||||||
|
.Notice(LogLevel.Critical, Flag.DataIntegrityIssue);
|
||||||
|
|
||||||
|
else if (accessCode != actualAccessCode)
|
||||||
|
return Result.Success(false).Message(_localizer[Key.WrongAccessCode]);
|
||||||
|
else
|
||||||
|
return Result.Success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<bool>> VerifyAccessCodeAsync(string envelopeReceiverId, string accessCode)
|
||||||
|
{
|
||||||
|
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
|
||||||
|
|
||||||
|
if (uuid is null || signature is null)
|
||||||
|
return Result.Fail<bool>()
|
||||||
|
.Message(Key.WrongEnvelopeReceiverId)
|
||||||
|
.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<bool>> IsExisting(string envelopeReceiverId)
|
||||||
|
{
|
||||||
|
(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)
|
||||||
|
{
|
||||||
|
var code = await _repository.ReadAccessCodeByIdAsync(envelopeId: envelopeId, receiverId: receiverId);
|
||||||
|
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.Success(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 dto_list = _mapper.MapOrThrow<IEnumerable<EnvelopeReceiverDto>>(er_list);
|
||||||
|
return Result.Success(dto_list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,41 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using DigitalData.Core.DTO;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
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, IKeyTranslationService translationService, IMapper mapper)
|
private readonly ILogger _logger;
|
||||||
: base(repository, translationService, mapper)
|
public EnvelopeService(IEnvelopeRepository repository, IMapper mapper, ILogger<EnvelopeService> logger)
|
||||||
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 readDto = _mapper.MapOrThrow<IEnumerable<EnvelopeDto>>(envelopes);
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
var envelope = await _repository.ReadByUuidAsync(uuid: uuid, withDocuments: withDocuments, withHistory: withHistory, withDocumentReceiverElement: withDocumentReceiverElement, withUser:withUser, withAll:withAll);
|
||||||
|
|
||||||
|
if (envelope is null)
|
||||||
|
return Result.Fail<EnvelopeDto>();
|
||||||
|
|
||||||
|
var readDto = _mapper.MapOrThrow<EnvelopeDto>(envelope);
|
||||||
|
return Result.Success(readDto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using Microsoft.Extensions.Localization;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
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.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
|
||||||
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
|
||||||
{
|
{
|
||||||
public EnvelopeTypeService(IEnvelopeTypeRepository repository, IKeyTranslationService translationService, IMapper mapper)
|
public EnvelopeTypeService(IEnvelopeTypeRepository repository, IMapper mapper)
|
||||||
: base(repository, translationService, mapper)
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,40 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using Microsoft.Extensions.Localization;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
using EnvelopeGenerator.Application.DTOs;
|
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
using EnvelopeGenerator.Infrastructure.Contracts;
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Services
|
namespace EnvelopeGenerator.Application.Services
|
||||||
{
|
{
|
||||||
public class ReceiverService : BasicCRUDService<IReceiverRepository, ReceiverDto, Receiver, int>, IReceiverService
|
public class ReceiverService : CRUDService<IReceiverRepository, ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>, IReceiverService
|
||||||
{
|
{
|
||||||
public ReceiverService(IReceiverRepository repository, IKeyTranslationService translationService, IMapper mapper)
|
public ReceiverService(IReceiverRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper)
|
||||||
: base(repository, translationService, 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.MapOrThrow<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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.Core.Application;
|
using DigitalData.Core.Application;
|
||||||
using DigitalData.Core.Contracts.CultureServices;
|
using Microsoft.Extensions.Localization;
|
||||||
using EnvelopeGenerator.Application.Contracts;
|
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.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
|
||||||
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, IKeyTranslationService translationService, IMapper mapper)
|
public UserReceiverService(IUserReceiverRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper)
|
||||||
: base(repository, translationService, mapper)
|
: base(repository, mapper)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
DocumentOpened = 2004
|
DocumentOpened = 2004
|
||||||
DocumentSigned = 2005
|
DocumentSigned = 2005
|
||||||
SignatureConfirmed = 2006
|
SignatureConfirmed = 2006
|
||||||
|
DocumentRejected = 2007
|
||||||
MessageInvitationSent = 3001 ' Wird von Trigger verwendet
|
MessageInvitationSent = 3001 ' Wird von Trigger verwendet
|
||||||
MessageAccessCodeSent = 3002
|
MessageAccessCodeSent = 3002
|
||||||
MessageConfirmationSent = 3003
|
MessageConfirmationSent = 3003
|
||||||
@@ -25,6 +26,13 @@
|
|||||||
MessageCompletionSent = 3005
|
MessageCompletionSent = 3005
|
||||||
End Enum
|
End Enum
|
||||||
|
|
||||||
|
Public Enum ReferenceType
|
||||||
|
Receiver
|
||||||
|
Sender
|
||||||
|
System
|
||||||
|
Unknown
|
||||||
|
End Enum
|
||||||
|
|
||||||
Public Enum ElementStatus
|
Public Enum ElementStatus
|
||||||
Created = 0
|
Created = 0
|
||||||
End Enum
|
End Enum
|
||||||
@@ -94,6 +102,7 @@
|
|||||||
Public Const DATABASE = "DATABASE"
|
Public Const DATABASE = "DATABASE"
|
||||||
Public Const LOGCONFIG = "LOGCONFIG"
|
Public Const LOGCONFIG = "LOGCONFIG"
|
||||||
Public Const GDPICTURE = "GDPICTURE"
|
Public Const GDPICTURE = "GDPICTURE"
|
||||||
|
Public Const IGNORED_LABELS = "IgnoredLabels"
|
||||||
|
|
||||||
Public Const GREEN_300 = "#bbf7d0"
|
Public Const GREEN_300 = "#bbf7d0"
|
||||||
Public Const RED_300 = "#fecaca"
|
Public Const RED_300 = "#fecaca"
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ Public Class EmailData
|
|||||||
Public Property EnvelopeTitle As String = ""
|
Public Property EnvelopeTitle As String = ""
|
||||||
|
|
||||||
Public Property EmailAttachment As String = ""
|
Public Property EmailAttachment As String = ""
|
||||||
|
Public Property ATT1_RELATED_ID As Long
|
||||||
|
Public Property ATT1_REL_TYPE As String = ""
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' Constructor for sending email to receiver
|
''' Constructor for sending email to receiver
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
Public Property Receivers As New List(Of EnvelopeReceiver)
|
Public Property Receivers As New List(Of EnvelopeReceiver)
|
||||||
Public Property History As New List(Of EnvelopeHistoryEntry)
|
Public Property History As New List(Of EnvelopeHistoryEntry)
|
||||||
Public Property EnvelopeType As EnvelopeType
|
Public Property EnvelopeType As EnvelopeType
|
||||||
|
Public Property DOC_RESULT As Byte()
|
||||||
Public ReadOnly Property EnvelopeTypeTitle As String
|
Public ReadOnly Property EnvelopeTypeTitle As String
|
||||||
Get
|
Get
|
||||||
Return EnvelopeType?.Title
|
Return EnvelopeType?.Title
|
||||||
|
|||||||
@@ -19,4 +19,5 @@ Public Class EnvelopeDocument
|
|||||||
Public Property Filepath As String
|
Public Property Filepath As String
|
||||||
|
|
||||||
Public Property PageCount As Integer
|
Public Property PageCount As Integer
|
||||||
|
Public Property Byte_Data As Byte()
|
||||||
End Class
|
End Class
|
||||||
@@ -220,6 +220,8 @@
|
|||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
<DependentUpon>Model.resx</DependentUpon>
|
<DependentUpon>Model.resx</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Strings\Model.vb" />
|
||||||
|
<Compile Include="TempFiles.vb" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="My Project\licenses.licx" />
|
<EmbeddedResource Include="My Project\licenses.licx" />
|
||||||
@@ -241,11 +243,13 @@
|
|||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Envelope.en.Designer.vb</LastGenOutput>
|
<LastGenOutput>Envelope.en.Designer.vb</LastGenOutput>
|
||||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Strings\Envelope.resx">
|
<EmbeddedResource Include="Strings\Envelope.resx">
|
||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Envelope1.Designer.vb</LastGenOutput>
|
<LastGenOutput>Envelope1.Designer.vb</LastGenOutput>
|
||||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Strings\Email.resx">
|
<EmbeddedResource Include="Strings\Email.resx">
|
||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
|||||||
@@ -7,15 +7,9 @@ Imports System.Security.Cryptography
|
|||||||
Imports System.IO
|
Imports System.IO
|
||||||
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions
|
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions
|
||||||
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument
|
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument
|
||||||
Imports EnvelopeGenerator.Common.My.Resources
|
|
||||||
Imports EnvelopeGenerator.Common.Constants
|
Imports EnvelopeGenerator.Common.Constants
|
||||||
Imports DevExpress.XtraBars.Docking
|
|
||||||
Imports System.ServiceModel
|
|
||||||
Imports DevExpress.XtraRichEdit.Export
|
|
||||||
Imports DevExpress.Pdf.Native.BouncyCastle.Asn1.Cms
|
|
||||||
Imports DevExpress.DataAccess.Sql
|
|
||||||
Imports DevExpress.DataProcessing
|
Imports DevExpress.DataProcessing
|
||||||
Imports Quartz.Logging.OperationName
|
Imports System.Data.SqlClient
|
||||||
|
|
||||||
Namespace Jobs
|
Namespace Jobs
|
||||||
Public Class FinalizeDocumentJob
|
Public Class FinalizeDocumentJob
|
||||||
@@ -41,11 +35,14 @@ Namespace Jobs
|
|||||||
|
|
||||||
Private ReadOnly CompleteWaitTime As Integer = 5
|
Private ReadOnly CompleteWaitTime As Integer = 5
|
||||||
Private ParentFolderUID As String = ""
|
Private ParentFolderUID As String = ""
|
||||||
|
Private myTempFiles As TempFiles
|
||||||
|
|
||||||
Private Class EnvelopeData
|
Private Class EnvelopeData
|
||||||
Public EnvelopeId As Integer
|
Public EnvelopeId As Integer
|
||||||
|
Public EnvelopeUUID As String
|
||||||
Public DocumentPath As String
|
Public DocumentPath As String
|
||||||
Public AnnotationData As List(Of String)
|
Public AnnotationData As List(Of String)
|
||||||
|
Public DocAsByte As Byte()
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
@@ -53,7 +50,8 @@ Namespace Jobs
|
|||||||
Dim oGdPictureKey As String = pContext.MergedJobDataMap.Item(Constants.GDPICTURE)
|
Dim oGdPictureKey As String = pContext.MergedJobDataMap.Item(Constants.GDPICTURE)
|
||||||
LogConfig = pContext.MergedJobDataMap.Item(Constants.LOGCONFIG)
|
LogConfig = pContext.MergedJobDataMap.Item(Constants.LOGCONFIG)
|
||||||
Logger = LogConfig.GetLogger()
|
Logger = LogConfig.GetLogger()
|
||||||
|
myTempFiles = New TempFiles(LogConfig)
|
||||||
|
myTempFiles.Create()
|
||||||
Dim JobId = pContext.JobDetail.Key
|
Dim JobId = pContext.JobDetail.Key
|
||||||
Logger.Info("Starting job {0}", JobId)
|
Logger.Info("Starting job {0}", JobId)
|
||||||
|
|
||||||
@@ -76,7 +74,8 @@ Namespace Jobs
|
|||||||
InitializeServices(oState)
|
InitializeServices(oState)
|
||||||
|
|
||||||
Logger.Debug("Loading PDFBurner..")
|
Logger.Debug("Loading PDFBurner..")
|
||||||
PDFBurner = New PDFBurner(LogConfig, oGdPictureKey)
|
Dim ignoredLabels As List(Of String) = pContext.MergedJobDataMap.Item(Constants.IGNORED_LABELS)
|
||||||
|
PDFBurner = New PDFBurner(LogConfig, oGdPictureKey, ignoredLabels)
|
||||||
|
|
||||||
Logger.Debug("Loading PDFMerger..")
|
Logger.Debug("Loading PDFMerger..")
|
||||||
PDFMerger = New PDFMerger(LogConfig, oGdPictureKey)
|
PDFMerger = New PDFMerger(LogConfig, oGdPictureKey)
|
||||||
@@ -86,6 +85,7 @@ Namespace Jobs
|
|||||||
Logger.Debug("My.Settings.RuninDMZ: [{0}]", My.Settings.RuninDMZ.ToString)
|
Logger.Debug("My.Settings.RuninDMZ: [{0}]", My.Settings.RuninDMZ.ToString)
|
||||||
Logger.Debug("My.Settings.NetUse_Usr: [{0}]", My.Settings.NetUse_Usr)
|
Logger.Debug("My.Settings.NetUse_Usr: [{0}]", My.Settings.NetUse_Usr)
|
||||||
|
|
||||||
|
|
||||||
If My.Settings.RuninDMZ = True Then
|
If My.Settings.RuninDMZ = True Then
|
||||||
If Config.DocumentPath_DMZ <> String.Empty Then
|
If Config.DocumentPath_DMZ <> String.Empty Then
|
||||||
Logger.Debug("RuninDMZ - Using DocumentPath_DMZ: [{0}] - Overwrite Document-Path", Config.DocumentPath_DMZ)
|
Logger.Debug("RuninDMZ - Using DocumentPath_DMZ: [{0}] - Overwrite Document-Path", Config.DocumentPath_DMZ)
|
||||||
@@ -114,11 +114,7 @@ Namespace Jobs
|
|||||||
If Config.ExportPath_DMZ <> String.Empty Then
|
If Config.ExportPath_DMZ <> String.Empty Then
|
||||||
Logger.Debug("RuninDMZ - Using ExportPath_DMZ: [{0}] - Overwrite ExportPath", Config.ExportPath_DMZ)
|
Logger.Debug("RuninDMZ - Using ExportPath_DMZ: [{0}] - Overwrite ExportPath", Config.ExportPath_DMZ)
|
||||||
Config.ExportPath = Config.ExportPath_DMZ
|
Config.ExportPath = Config.ExportPath_DMZ
|
||||||
Else
|
|
||||||
Config.ExportPath = Config.ExportPath
|
|
||||||
End If
|
End If
|
||||||
Else
|
|
||||||
Config.ExportPath = Config.ExportPath
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Logger.Debug("ExportPath: [{0}]", Config.ExportPath)
|
Logger.Debug("ExportPath: [{0}]", Config.ExportPath)
|
||||||
@@ -130,7 +126,7 @@ Namespace Jobs
|
|||||||
End If
|
End If
|
||||||
|
|
||||||
Dim oCompleteStatus As Integer = Constants.EnvelopeStatus.EnvelopeCompletelySigned
|
Dim oCompleteStatus As Integer = Constants.EnvelopeStatus.EnvelopeCompletelySigned
|
||||||
Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE WHERE STATUS = {oCompleteStatus} AND DATEDIFF(minute, CHANGED_WHEN, GETDATE()) >= {CompleteWaitTime}"
|
Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE WHERE STATUS = {oCompleteStatus} AND DATEDIFF(minute, CHANGED_WHEN, GETDATE()) >= {CompleteWaitTime} ORDER BY GUID"
|
||||||
Dim oTable = Database.GetDatatable(oSql)
|
Dim oTable = Database.GetDatatable(oSql)
|
||||||
|
|
||||||
Dim oEnvelopeIds As List(Of Integer) = oTable.Rows.Cast(Of DataRow).
|
Dim oEnvelopeIds As List(Of Integer) = oTable.Rows.Cast(Of DataRow).
|
||||||
@@ -138,111 +134,98 @@ Namespace Jobs
|
|||||||
Cast(Of Integer).
|
Cast(Of Integer).
|
||||||
ToList()
|
ToList()
|
||||||
|
|
||||||
Logger.Info("Found [{0}] completed envelopes.", oEnvelopeIds.Count)
|
If oEnvelopeIds.Count > 0 Then
|
||||||
|
Logger.Info("Found [{0}] completed envelopes.", oEnvelopeIds.Count)
|
||||||
|
End If
|
||||||
|
|
||||||
Dim oTotal As Integer = oEnvelopeIds.Count
|
Dim oTotal As Integer = oEnvelopeIds.Count
|
||||||
Dim oCurrent As Integer = 1
|
Dim oCurrent As Integer = 1
|
||||||
|
|
||||||
For Each oId In oEnvelopeIds
|
For Each oId In oEnvelopeIds
|
||||||
|
|
||||||
Logger.Info("Finalizing Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal)
|
Logger.Info("Finalizing Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal)
|
||||||
|
|
||||||
Logger.Debug("Loading Envelope..")
|
Logger.Debug("Loading Envelope..")
|
||||||
Dim oEnvelope = EnvelopeModel.GetById(oId)
|
|
||||||
|
|
||||||
If oEnvelope Is Nothing Then
|
|
||||||
Logger.Warn("Envelope could not be loaded for Id [{0}]!", oId)
|
|
||||||
Throw New ArgumentNullException("EnvelopeData")
|
|
||||||
End If
|
|
||||||
|
|
||||||
Logger.Debug("Loading Envelope Data..")
|
|
||||||
Dim oEnvelopeData = GetEnvelopeData(oId)
|
|
||||||
|
|
||||||
If Config.DOCUMENT_PATH_MOVE_AFTSEND <> String.Empty Then
|
|
||||||
oEnvelopeData.DocumentPath.Replace(Config.DocumentPathOrigin, Config.DOCUMENT_PATH_MOVE_AFTSEND)
|
|
||||||
Logger.Debug("Replaced Path in oEnvelopeData.DocumentPath!")
|
|
||||||
End If
|
|
||||||
|
|
||||||
If oEnvelopeData Is Nothing Then
|
|
||||||
Logger.Warn("EnvelopeData could not be loaded for Id [{0}]!", oId)
|
|
||||||
Throw New ArgumentNullException("EnvelopeData")
|
|
||||||
End If
|
|
||||||
|
|
||||||
Logger.Debug("Burning Annotations to pdf ...")
|
|
||||||
Dim oBurnedDocument As Byte() = BurnAnnotationsToPdf(oEnvelopeData)
|
|
||||||
If oBurnedDocument Is Nothing Then
|
|
||||||
Logger.Warn("Document could not be finalized!")
|
|
||||||
Throw New ApplicationException("Document could not be finalized")
|
|
||||||
End If
|
|
||||||
|
|
||||||
If ActionService.CreateReport(oEnvelope) = False Then
|
|
||||||
Logger.Warn("Document Report could not be created!")
|
|
||||||
Throw New ApplicationException("Document Report could not be created")
|
|
||||||
End If
|
|
||||||
|
|
||||||
Logger.Debug("Creating report..")
|
|
||||||
Dim oReport As Byte() = ReportCreator.CreateReport(oEnvelope)
|
|
||||||
Logger.Debug("Report created!")
|
|
||||||
|
|
||||||
Logger.Debug("Merging documents ...")
|
|
||||||
Dim oMergedDocument As Byte() = PDFMerger.MergeDocuments(oBurnedDocument, oReport)
|
|
||||||
Logger.Debug("Documents merged!")
|
|
||||||
|
|
||||||
Dim oOutputDirectoryPath = Path.Combine(Config.ExportPath, ParentFolderUID)
|
|
||||||
If Not Directory.Exists(oOutputDirectoryPath) Then
|
|
||||||
Directory.CreateDirectory(oOutputDirectoryPath)
|
|
||||||
End If
|
|
||||||
Dim oOutputFilePath = Path.Combine(oOutputDirectoryPath, $"{oEnvelope.Uuid}.pdf")
|
|
||||||
Logger.Info("Writing finalized Pdf to disk..")
|
|
||||||
Logger.Info("Output path is [{0}]", oOutputFilePath)
|
|
||||||
|
|
||||||
Try
|
Try
|
||||||
File.WriteAllBytes(oOutputFilePath, oMergedDocument)
|
Dim oEnvelope = EnvelopeModel.GetById(oId)
|
||||||
Catch ex As Exception
|
If oEnvelope Is Nothing Then
|
||||||
Logger.Warn("Could not export final document to disk!")
|
Logger.Warn("Envelope could not be loaded for Id [{0}]!", oId)
|
||||||
Throw New ExportDocumentException("Could not export final document to disk!", ex)
|
Throw New ArgumentNullException("EnvelopeData")
|
||||||
End Try
|
End If
|
||||||
|
Logger.Debug("Loading Envelope Data..")
|
||||||
|
Dim oEnvelopeData = GetEnvelopeData(oId)
|
||||||
|
|
||||||
|
If oEnvelopeData Is Nothing Then
|
||||||
|
Logger.Warn("EnvelopeData could not be loaded for Id [{0}]!", oId)
|
||||||
|
Throw New ArgumentNullException("EnvelopeData")
|
||||||
|
End If
|
||||||
|
If Config.DOCUMENT_PATH_MOVE_AFTSEND <> String.Empty Then
|
||||||
|
oEnvelopeData.DocumentPath.Replace(Config.DocumentPathOrigin, Config.DOCUMENT_PATH_MOVE_AFTSEND)
|
||||||
|
Logger.Debug("Replaced Path in oEnvelopeData.DocumentPath!")
|
||||||
|
End If
|
||||||
|
Logger.Debug("Burning Annotations to pdf ...")
|
||||||
|
Dim oBurnedDocument As Byte() = BurnAnnotationsToPdf(oEnvelopeData)
|
||||||
|
If oBurnedDocument Is Nothing Then
|
||||||
|
Logger.Warn("Document could not be finalized!")
|
||||||
|
Throw New ApplicationException("Document could not be finalized")
|
||||||
|
End If
|
||||||
|
|
||||||
|
If ActionService.CreateReport(oEnvelope) = False Then
|
||||||
|
Logger.Warn("Document Report could not be created!")
|
||||||
|
Throw New ApplicationException("Document Report could not be created")
|
||||||
|
End If
|
||||||
|
|
||||||
If Config.NetUse_Finish = True Then
|
Logger.Debug("Creating report..")
|
||||||
If Config.FINISHED_PATH_EX_DMZ <> String.Empty Then
|
Dim oReport As Byte() = ReportCreator.CreateReport(oEnvelope)
|
||||||
If My.Settings.NetUse_PW <> String.Empty And My.Settings.NetUse_Usr <> String.Empty Then
|
Logger.Debug("Report created!")
|
||||||
Clean_DNZ_PAth(Config.FINISHED_PATH_EX_DMZ)
|
|
||||||
'Dim oReturnPath = MoveFileWithNetUse(Config.FINISHED_PATH_EX_DMZ, oOutputFilePath, My.Settings.NetUse_Usr, My.Settings.NetUse_PW)
|
Logger.Debug("Merging documents ...")
|
||||||
'If oReturnPath <> String.Empty Then
|
Dim oMergedDocument As Byte() = PDFMerger.MergeDocuments(oBurnedDocument, oReport)
|
||||||
' oOutputFilePath = oReturnPath
|
Logger.Debug("Documents merged!")
|
||||||
' If Config.EML_PATH_EX_DMZ <> String.Empty Then
|
|
||||||
' Logger.Debug($"Now replacing [{Config.FINISHED_PATH_EX_DMZ}] with ")
|
Dim oOutputDirectoryPath = Path.Combine(Config.ExportPath, ParentFolderUID)
|
||||||
' Logger.Debug($"............. [{Config.EML_PATH_EX_DMZ}] ")
|
If Not Directory.Exists(oOutputDirectoryPath) Then
|
||||||
' oOutputFilePath = oOutputFilePath.Replace(Config.FINISHED_PATH_EX_DMZ, Config.EML_PATH_EX_DMZ)
|
Directory.CreateDirectory(oOutputDirectoryPath)
|
||||||
' Logger.Debug($"oOutputFilePath [{oOutputFilePath}] ")
|
End If
|
||||||
' End If
|
Dim oOutputFilePath = Path.Combine(oOutputDirectoryPath, $"{oEnvelope.Uuid}.pdf")
|
||||||
'Else
|
Logger.Info("Writing finalized Pdf to disk..")
|
||||||
' Logger.Info($"Exiting/Aborting FinalizeDocuments!")
|
Logger.Info("Output path is [{0}]", oOutputFilePath)
|
||||||
' Return Task.FromResult(False)
|
|
||||||
'End If
|
Try
|
||||||
|
File.WriteAllBytes(oOutputFilePath, oMergedDocument)
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn("Could not export final document to disk!")
|
||||||
|
Throw New ExportDocumentException("Could not export final document to disk!", ex)
|
||||||
|
End Try
|
||||||
|
|
||||||
|
If Config.NetUse_Finish = True Then
|
||||||
|
If Config.FINISHED_PATH_EX_DMZ <> String.Empty Then
|
||||||
|
If My.Settings.NetUse_PW <> String.Empty And My.Settings.NetUse_Usr <> String.Empty Then
|
||||||
|
Clean_DNZ_PAth(Config.FINISHED_PATH_EX_DMZ)
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
Logger.Info("Writing EB-bytes to database...")
|
||||||
|
Update_File_DB(oOutputFilePath, oEnvelope.Id)
|
||||||
|
|
||||||
Logger.Info("Sending finalized report-mails..")
|
Logger.Info("Sending finalized report-mails..")
|
||||||
|
If SendFinalEmails(oEnvelope) = False Then ', oOutputFilePath
|
||||||
|
Throw New ApplicationException("Final emails could not be sent!")
|
||||||
|
End If
|
||||||
|
Logger.Debug("Setting envelope status..")
|
||||||
|
If ActionService.FinalizeEnvelope(oEnvelope) = False Then
|
||||||
|
Logger.Warn("Envelope could not be finalized!")
|
||||||
|
Throw New ApplicationException("Envelope could not be finalized")
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn($"Unhandled exception while working envelope [{oId}] - [{ex.Message}]")
|
||||||
|
End Try
|
||||||
|
|
||||||
If SendFinalEmails(oEnvelope, oOutputFilePath) = False Then
|
|
||||||
Throw New ApplicationException("Final emails could not be sent!")
|
|
||||||
End If
|
|
||||||
|
|
||||||
Logger.Debug("Setting envelope status..")
|
|
||||||
If ActionService.FinalizeEnvelope(oEnvelope) = False Then
|
|
||||||
Logger.Warn("Envelope could not be finalized!")
|
|
||||||
Throw New ApplicationException("Envelope could not be finalized")
|
|
||||||
End If
|
|
||||||
|
|
||||||
oCurrent += 1
|
oCurrent += 1
|
||||||
Logger.Info("Envelope finalized!")
|
Logger.Info("Envelope finalized!")
|
||||||
|
|
||||||
Next
|
Next
|
||||||
|
|
||||||
Logger.Info("Completed job {0} successfully!", JobId)
|
Logger.Debug("Completed job {0} successfully!", JobId)
|
||||||
Catch ex As MergeDocumentException
|
Catch ex As MergeDocumentException
|
||||||
Logger.Warn("Certificate Document job failed at step: Merging documents!")
|
Logger.Warn("Certificate Document job failed at step: Merging documents!")
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
@@ -260,6 +243,50 @@ Namespace Jobs
|
|||||||
|
|
||||||
Return Task.FromResult(True)
|
Return Task.FromResult(True)
|
||||||
End Function
|
End Function
|
||||||
|
Private Sub Update_File_DB(pFilePath As String, pEnvelopeID As Long)
|
||||||
|
Dim SqlCom As SqlCommand
|
||||||
|
Dim imageData As Byte()
|
||||||
|
Dim sFileName As String
|
||||||
|
Dim qry As String
|
||||||
|
|
||||||
|
Try
|
||||||
|
'Read Image Bytes into a byte array
|
||||||
|
'Initialize SQL Server Connection
|
||||||
|
|
||||||
|
'Convert File to bytes Array
|
||||||
|
imageData = ReadFile(pFilePath)
|
||||||
|
If Not IsNothing(imageData) Then
|
||||||
|
sFileName = System.IO.Path.GetFileName(pFilePath)
|
||||||
|
'Set insert query
|
||||||
|
qry = $"UPDATE TBSIG_ENVELOPE SET DOC_RESULT = @ImageData WHERE GUID = {pEnvelopeID}"
|
||||||
|
'Initialize SqlCommand object for insert.
|
||||||
|
SqlCom = New SqlCommand(qry, Database.GetConnection)
|
||||||
|
'We are passing File Name and Image byte data as sql parameters.
|
||||||
|
SqlCom.Parameters.Add(New SqlParameter("@ImageData", DirectCast(imageData, Object)))
|
||||||
|
'Execute the Query
|
||||||
|
SqlCom.ExecuteNonQuery()
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
'Open file in to a filestream and read data in a byte array.
|
||||||
|
Private Function ReadFile(ByVal sPath As String) As Byte()
|
||||||
|
'Initialize byte array with a null value initially.
|
||||||
|
Dim data As Byte() = Nothing
|
||||||
|
'Use FileInfo object to get file size.
|
||||||
|
Dim fInfo As New FileInfo(sPath)
|
||||||
|
Dim numBytes As Long = fInfo.Length
|
||||||
|
'Open FileStream to read file
|
||||||
|
Dim fStream As New FileStream(sPath, FileMode.Open, FileAccess.Read)
|
||||||
|
'Use BinaryReader to read file stream into byte array.
|
||||||
|
Dim br As New BinaryReader(fStream)
|
||||||
|
'When you use BinaryReader, you need to supply number of bytes to read from file.
|
||||||
|
'In this case we want to read entire file. So supplying total number of bytes.
|
||||||
|
data = br.ReadBytes(CInt(numBytes))
|
||||||
|
Return data
|
||||||
|
End Function
|
||||||
Private Function NetUse_Command(pDestinationPath As String, pUsername As String, pPassword As String)
|
Private Function NetUse_Command(pDestinationPath As String, pUsername As String, pPassword As String)
|
||||||
Dim oDectryptedPW = Helpers.Decrypt(My.Settings.NetUse_PW)
|
Dim oDectryptedPW = Helpers.Decrypt(My.Settings.NetUse_PW)
|
||||||
Dim netUseCommand As String = $"net use {pDestinationPath} /user:{pUsername} {oDectryptedPW}"
|
Dim netUseCommand As String = $"net use {pDestinationPath} /user:{pUsername} {oDectryptedPW}"
|
||||||
@@ -302,35 +329,33 @@ Namespace Jobs
|
|||||||
|
|
||||||
|
|
||||||
End Function
|
End Function
|
||||||
Private Function SendFinalEmails(pEnvelope As Envelope, pAttachment As String) As Boolean
|
Private Function SendFinalEmails(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
Dim oMailToCreator = pEnvelope.FinalEmailToCreator
|
Dim oMailToCreator = pEnvelope.FinalEmailToCreator
|
||||||
Dim oMailToReceivers = pEnvelope.FinalEmailToReceivers
|
Dim oMailToReceivers = pEnvelope.FinalEmailToReceivers
|
||||||
|
|
||||||
If oMailToCreator <> FinalEmailType.No Then
|
If oMailToCreator <> FinalEmailType.No Then
|
||||||
Logger.Debug("Sending email to creator ...")
|
Logger.Debug("Sending email to creator ...")
|
||||||
SendFinalEmailToCreator(pEnvelope, pAttachment)
|
SendFinalEmailToCreator(pEnvelope) ', pAttachment
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If oMailToReceivers <> FinalEmailType.No Then
|
If oMailToReceivers <> FinalEmailType.No Then
|
||||||
Logger.Debug("Sending emails to receivers..")
|
Logger.Debug("Sending emails to receivers..")
|
||||||
|
SendFinalEmailToReceivers(pEnvelope) ', pAttachment
|
||||||
|
|
||||||
SendFinalEmailToReceivers(pEnvelope, pAttachment)
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function SendFinalEmailToCreator(pEnvelope As Envelope, pAttachment As String) As Boolean
|
Private Function SendFinalEmailToCreator(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
Dim oIncludeAttachment = SendFinalEmailWithAttachment(pEnvelope.FinalEmailToCreator)
|
Dim oIncludeAttachment = SendFinalEmailWithAttachment(pEnvelope.FinalEmailToCreator)
|
||||||
Dim oAttachment = String.Empty
|
' Dim oAttachment = String.Empty
|
||||||
|
|
||||||
Logger.Debug("Attachment included: [{0}]", oIncludeAttachment)
|
Logger.Debug("Attachment included: [{0}]", oIncludeAttachment)
|
||||||
If oIncludeAttachment Then
|
If oIncludeAttachment Then
|
||||||
oAttachment = pAttachment
|
'oAttachment = pAttachment
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If ActionService.CompleteEnvelope(pEnvelope, oAttachment) = False Then
|
If ActionService.CompleteEnvelope(pEnvelope) = False Then ', oAttachment
|
||||||
Logger.Error("Envelope could not be completed for receiver [{0}]", pEnvelope.User.Email)
|
Logger.Error("Envelope could not be completed for receiver [{0}]", pEnvelope.User.Email)
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
@@ -338,18 +363,18 @@ Namespace Jobs
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function SendFinalEmailToReceivers(pEnvelope As Envelope, pAttachment As String) As Boolean
|
Private Function SendFinalEmailToReceivers(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
Dim oIncludeAttachment = SendFinalEmailWithAttachment(pEnvelope.FinalEmailToReceivers)
|
Dim oIncludeAttachment = SendFinalEmailWithAttachment(pEnvelope.FinalEmailToReceivers)
|
||||||
Dim oAttachment = String.Empty
|
'Dim oAttachment = String.Empty
|
||||||
|
|
||||||
Logger.Debug("Attachment included: [{0}]", oIncludeAttachment)
|
Logger.Debug("Attachment included: [{0}]", oIncludeAttachment)
|
||||||
If oIncludeAttachment Then
|
If oIncludeAttachment Then
|
||||||
|
|
||||||
oAttachment = pAttachment
|
' oAttachment = pAttachment
|
||||||
End If
|
End If
|
||||||
|
|
||||||
For Each oReceiver In pEnvelope.Receivers
|
For Each oReceiver In pEnvelope.Receivers
|
||||||
If ActionService.CompleteEnvelope(pEnvelope, oReceiver, oAttachment) = False Then
|
If ActionService.CompleteEnvelope(pEnvelope, oReceiver) = False Then ', oAttachment
|
||||||
Logger.Error("Envelope could not be completed for receiver [{0}]", oReceiver.Email)
|
Logger.Error("Envelope could not be completed for receiver [{0}]", oReceiver.Email)
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
@@ -366,40 +391,58 @@ Namespace Jobs
|
|||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function BurnAnnotationsToPdf(pData As EnvelopeData) As Byte()
|
Private Function BurnAnnotationsToPdf(pEnvelopeData As EnvelopeData) As Byte()
|
||||||
Dim pEnvelopeId = pData.EnvelopeId
|
Dim pEnvelopeId = pEnvelopeData.EnvelopeId
|
||||||
|
|
||||||
Logger.Info("Burning [{0}] signatures", pData.AnnotationData.Count)
|
Logger.Info($"Burning [{pEnvelopeData.AnnotationData.Count}] signatures")
|
||||||
Dim oAnnotations = pData.AnnotationData
|
Dim oAnnotations = pEnvelopeData.AnnotationData
|
||||||
Dim oInputPath = ""
|
Dim oInputPath = ""
|
||||||
|
If IsNothing(pEnvelopeData.DocAsByte) Then
|
||||||
If My.Settings.RuninDMZ Then
|
If My.Settings.RuninDMZ Then
|
||||||
oInputPath = pData.DocumentPath.Replace(Config.DocumentPathOrigin, Config.DocumentPath)
|
Logger.Debug("Replacing Path in pData.DocumentPath ...")
|
||||||
Logger.Debug("Replaced Path in pData.DocumentPath!")
|
oInputPath = pEnvelopeData.DocumentPath.Replace(Config.DocumentPathOrigin, Config.DocumentPath)
|
||||||
ElseIf Config.DOCUMENT_PATH_MOVE_AFTSEND <> String.Empty Then
|
ElseIf Config.DOCUMENT_PATH_MOVE_AFTSEND <> String.Empty Then
|
||||||
oInputPath = pData.DocumentPath.Replace(Config.DocumentPathOrigin, Config.DOCUMENT_PATH_MOVE_AFTSEND)
|
Logger.Debug("Replacing Path in pData.DocumentPath ...")
|
||||||
Logger.Debug("Replaced Path in pData.DocumentPath!")
|
oInputPath = pEnvelopeData.DocumentPath.Replace(Config.DocumentPathOrigin, Config.DOCUMENT_PATH_MOVE_AFTSEND)
|
||||||
|
Else
|
||||||
|
oInputPath = pEnvelopeData.DocumentPath
|
||||||
|
End If
|
||||||
|
Logger.Info($"Input path: [{oInputPath}]")
|
||||||
|
Else
|
||||||
|
Logger.Info($"we got bytes..")
|
||||||
|
oInputPath = Config.DocumentPathOrigin
|
||||||
|
Logger.Info($"oInputPath: {Config.DocumentPathOrigin}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
If IsNothing(pEnvelopeData.DocAsByte) Then
|
||||||
|
Dim oDirectorySource As String = Path.GetDirectoryName(oInputPath)
|
||||||
|
Dim split As String() = oDirectorySource.Split("\")
|
||||||
|
ParentFolderUID = split(split.Length - 1)
|
||||||
|
Else
|
||||||
|
ParentFolderUID = pEnvelopeData.EnvelopeUUID
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Logger.Info("Input path: [{0}]", oInputPath)
|
|
||||||
Dim oDirectorySource As String = Path.GetDirectoryName(oInputPath)
|
|
||||||
Dim split As String() = oDirectorySource.Split("\")
|
|
||||||
ParentFolderUID = split(split.Length - 1)
|
|
||||||
|
|
||||||
Logger.Info("ParentFolderUID: [{0}]", ParentFolderUID)
|
Logger.Info("ParentFolderUID: [{0}]", ParentFolderUID)
|
||||||
Dim oInputDocumentBuffer As Byte()
|
Dim oInputDocumentBuffer As Byte()
|
||||||
Try
|
If Not IsNothing(pEnvelopeData.DocAsByte) Then
|
||||||
oInputDocumentBuffer = File.ReadAllBytes(oInputPath)
|
oInputDocumentBuffer = pEnvelopeData.DocAsByte
|
||||||
Catch ex As Exception
|
Else
|
||||||
Logger.Error(ex)
|
Try
|
||||||
Throw New BurnAnnotationException("Source document could not be read from disk!", ex)
|
oInputDocumentBuffer = File.ReadAllBytes(oInputPath)
|
||||||
End Try
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Throw New BurnAnnotationException("Source document could not be read from disk!", ex)
|
||||||
|
End Try
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
Return PDFBurner.BurnInstantJSONAnnotationsToPDF(oInputDocumentBuffer, oAnnotations)
|
Return PDFBurner.BurnInstantJSONAnnotationsToPDF(oInputDocumentBuffer, oAnnotations)
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function GetEnvelopeData(pEnvelopeId As Integer) As EnvelopeData
|
Private Function GetEnvelopeData(pEnvelopeId As Integer) As EnvelopeData
|
||||||
Dim oSql = $"SELECT T.GUID, T2.FILEPATH FROM [dbo].[TBSIG_ENVELOPE] T
|
Dim oSql = $"SELECT T.GUID, T.ENVELOPE_UUID,T2.FILEPATH, T2.BYTE_DATA FROM [dbo].[TBSIG_ENVELOPE] T
|
||||||
JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.GUID = T2.ENVELOPE_ID
|
JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.GUID = T2.ENVELOPE_ID
|
||||||
WHERE T.GUID = {pEnvelopeId}"
|
WHERE T.GUID = {pEnvelopeId}"
|
||||||
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
@@ -412,7 +455,9 @@ Namespace Jobs
|
|||||||
Dim oData As New EnvelopeData With {
|
Dim oData As New EnvelopeData With {
|
||||||
.EnvelopeId = pEnvelopeId,
|
.EnvelopeId = pEnvelopeId,
|
||||||
.DocumentPath = oRow.ItemEx("FILEPATH", ""),
|
.DocumentPath = oRow.ItemEx("FILEPATH", ""),
|
||||||
.AnnotationData = oAnnotationData
|
.AnnotationData = oAnnotationData,
|
||||||
|
.DocAsByte = DirectCast(oRow.Item("BYTE_DATA"), Byte()),
|
||||||
|
.EnvelopeUUID = oRow.ItemEx("ENVELOPE_UUID", "")
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Debug("Document path: [{0}]", oData.DocumentPath)
|
Logger.Debug("Document path: [{0}]", oData.DocumentPath)
|
||||||
|
|||||||
@@ -15,14 +15,18 @@ Namespace Jobs.FinalizeDocument
|
|||||||
|
|
||||||
Private Const ANNOTATION_TYPE_IMAGE = "pspdfkit/image"
|
Private Const ANNOTATION_TYPE_IMAGE = "pspdfkit/image"
|
||||||
Private Const ANNOTATION_TYPE_INK = "pspdfkit/ink"
|
Private Const ANNOTATION_TYPE_INK = "pspdfkit/ink"
|
||||||
|
Private Const ANNOTATION_TYPE_WIDGET = "pspdfkit/widget"
|
||||||
|
Private Property _ignoredLabels As List(Of String)
|
||||||
|
|
||||||
Public Sub New(pLogConfig As LogConfig, pGDPictureLicenseKey As String)
|
Public Sub New(pLogConfig As LogConfig, pGDPictureLicenseKey As String, ignoredLabels As List(Of String))
|
||||||
MyBase.New(pLogConfig)
|
MyBase.New(pLogConfig)
|
||||||
|
|
||||||
LicenseManager = New LicenseManager()
|
LicenseManager = New LicenseManager()
|
||||||
LicenseManager.RegisterKEY(pGDPictureLicenseKey)
|
LicenseManager.RegisterKEY(pGDPictureLicenseKey)
|
||||||
|
|
||||||
Manager = New AnnotationManager()
|
Manager = New AnnotationManager()
|
||||||
|
|
||||||
|
_ignoredLabels = ignoredLabels
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Function BurnInstantJSONAnnotationsToPDF(pSourceBuffer As Byte(), pInstantJSONList As List(Of String)) As Byte()
|
Public Function BurnInstantJSONAnnotationsToPDF(pSourceBuffer As Byte(), pInstantJSONList As List(Of String)) As Byte()
|
||||||
@@ -37,11 +41,11 @@ Namespace Jobs.FinalizeDocument
|
|||||||
|
|
||||||
For Each oJSON In pInstantJSONList
|
For Each oJSON In pInstantJSONList
|
||||||
If AddInstantJSONAnnotationToPDF(oJSON) = False Then
|
If AddInstantJSONAnnotationToPDF(oJSON) = False Then
|
||||||
|
Logger.Warn($"Error in AddInstantJSONAnnotationToPDF - oJson: ")
|
||||||
|
Logger.Warn(oJSON)
|
||||||
Throw New BurnAnnotationException($"Adding Annotation failed")
|
Throw New BurnAnnotationException($"Adding Annotation failed")
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
|
|
||||||
|
|
||||||
oResult = Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True)
|
oResult = Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True)
|
||||||
If oResult <> GdPictureStatus.OK Then
|
If oResult <> GdPictureStatus.OK Then
|
||||||
Throw New BurnAnnotationException($"Could not burn annotations to file: [{oResult}]")
|
Throw New BurnAnnotationException($"Could not burn annotations to file: [{oResult}]")
|
||||||
@@ -70,6 +74,7 @@ Namespace Jobs.FinalizeDocument
|
|||||||
Dim oAnnotationData = JsonConvert.DeserializeObject(Of AnnotationData)(pInstantJSON)
|
Dim oAnnotationData = JsonConvert.DeserializeObject(Of AnnotationData)(pInstantJSON)
|
||||||
|
|
||||||
For Each oAnnotation In oAnnotationData.annotations
|
For Each oAnnotation In oAnnotationData.annotations
|
||||||
|
Logger.Debug("Adding AnnotationID: " + oAnnotation.id)
|
||||||
Select Case oAnnotation.type
|
Select Case oAnnotation.type
|
||||||
Case ANNOTATION_TYPE_IMAGE
|
Case ANNOTATION_TYPE_IMAGE
|
||||||
AddImageAnnotation(oAnnotation, oAnnotationData.attachments)
|
AddImageAnnotation(oAnnotation, oAnnotationData.attachments)
|
||||||
@@ -77,6 +82,12 @@ Namespace Jobs.FinalizeDocument
|
|||||||
Case ANNOTATION_TYPE_INK
|
Case ANNOTATION_TYPE_INK
|
||||||
AddInkAnnotation(oAnnotation)
|
AddInkAnnotation(oAnnotation)
|
||||||
|
|
||||||
|
Case ANNOTATION_TYPE_WIDGET
|
||||||
|
'Add form field values
|
||||||
|
Dim formFieldValue = oAnnotationData.formFieldValues.FirstOrDefault(Function(fv) fv.name = oAnnotation.id)
|
||||||
|
If formFieldValue IsNot Nothing AndAlso Not _ignoredLabels.Contains(formFieldValue.value) Then
|
||||||
|
AddFormFieldValue(oAnnotation, formFieldValue)
|
||||||
|
End If
|
||||||
End Select
|
End Select
|
||||||
Next
|
Next
|
||||||
|
|
||||||
@@ -137,6 +148,33 @@ Namespace Jobs.FinalizeDocument
|
|||||||
|
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Private Function AddFormFieldValue(pAnnotation As Annotation, formFieldValue As FormFieldValue) As Boolean
|
||||||
|
Try
|
||||||
|
' Convert pixels to Inches
|
||||||
|
Dim oBounds = pAnnotation.bbox.Select(AddressOf ToInches).ToList()
|
||||||
|
|
||||||
|
Dim oX = oBounds.Item(0)
|
||||||
|
Dim oY = oBounds.Item(1)
|
||||||
|
Dim oWidth = oBounds.Item(2)
|
||||||
|
Dim oHeight = oBounds.Item(3)
|
||||||
|
|
||||||
|
Manager.SelectPage(pAnnotation.pageIndex + 1)
|
||||||
|
' Add the text annotation
|
||||||
|
Dim ant = Manager.AddTextAnnot(oX, oY, oWidth, oHeight, formFieldValue.value)
|
||||||
|
|
||||||
|
' Set the font properties
|
||||||
|
ant.FontName = "Arial"
|
||||||
|
ant.FontSize = 8
|
||||||
|
ant.FontStyle = FontStyle.Italic
|
||||||
|
Manager.SaveAnnotationsToPage()
|
||||||
|
Return True
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn("Could not add image annotation!")
|
||||||
|
Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
Private Function ToPointF(pPoints As List(Of Single)) As PointF
|
Private Function ToPointF(pPoints As List(Of Single)) As PointF
|
||||||
Dim oPoints = pPoints.Select(AddressOf ToInches).ToList()
|
Dim oPoints = pPoints.Select(AddressOf ToInches).ToList()
|
||||||
Return New PointF(oPoints.Item(0), oPoints.Item(1))
|
Return New PointF(oPoints.Item(0), oPoints.Item(1))
|
||||||
@@ -153,6 +191,7 @@ Namespace Jobs.FinalizeDocument
|
|||||||
Friend Class AnnotationData
|
Friend Class AnnotationData
|
||||||
Public Property annotations As List(Of Annotation)
|
Public Property annotations As List(Of Annotation)
|
||||||
Public Property attachments As Dictionary(Of String, Attachment)
|
Public Property attachments As Dictionary(Of String, Attachment)
|
||||||
|
Public Property formFieldValues As List(Of FormFieldValue)
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
Friend Class Annotation
|
Friend Class Annotation
|
||||||
@@ -174,5 +213,10 @@ Namespace Jobs.FinalizeDocument
|
|||||||
Public Property binary As String
|
Public Property binary As String
|
||||||
Public Property contentType As String
|
Public Property contentType As String
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
|
Friend Class FormFieldValue
|
||||||
|
Public Property name As String
|
||||||
|
Public Property value As String
|
||||||
|
End Class
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ Public Class DocumentModel
|
|||||||
.Filepath = pRow.ItemEx("FILEPATH", ""),
|
.Filepath = pRow.ItemEx("FILEPATH", ""),
|
||||||
.FileNameOriginal = pRow.ItemEx("FILENAME_ORIGINAL", ""),
|
.FileNameOriginal = pRow.ItemEx("FILENAME_ORIGINAL", ""),
|
||||||
.IsTempFile = False,
|
.IsTempFile = False,
|
||||||
.Elements = ElementModel.List(oDocumentId, pReceiverId)
|
.Elements = ElementModel.List(oDocumentId, pReceiverId),
|
||||||
|
.Byte_Data = DirectCast(pRow.Item("BYTE_DATA"), Byte())
|
||||||
}
|
}
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
@@ -79,18 +80,21 @@ Public Class DocumentModel
|
|||||||
([FILENAME]
|
([FILENAME]
|
||||||
,[FILENAME_ORIGINAL]
|
,[FILENAME_ORIGINAL]
|
||||||
,[FILEPATH]
|
,[FILEPATH]
|
||||||
,[ENVELOPE_ID])
|
,[ENVELOPE_ID]
|
||||||
|
,[BYTE_DATA])
|
||||||
VALUES
|
VALUES
|
||||||
(@FILENAME
|
(@FILENAME
|
||||||
,@FILENAME_ORIGINAL
|
,@FILENAME_ORIGINAL
|
||||||
,@FILEPATH
|
,@FILEPATH
|
||||||
,@ENVELOPE_ID)"
|
,@ENVELOPE_ID
|
||||||
|
,@BYTE_DATA)"
|
||||||
|
|
||||||
Dim oCommand As New SqlCommand(oSql)
|
Dim oCommand As New SqlCommand(oSql)
|
||||||
oCommand.Parameters.Add("FILENAME", SqlDbType.NVarChar).Value = pDocument.Filename
|
oCommand.Parameters.Add("FILENAME", SqlDbType.NVarChar).Value = pDocument.Filename
|
||||||
oCommand.Parameters.Add("FILENAME_ORIGINAL", SqlDbType.NVarChar).Value = pDocument.FileNameOriginal
|
oCommand.Parameters.Add("FILENAME_ORIGINAL", SqlDbType.NVarChar).Value = pDocument.FileNameOriginal
|
||||||
oCommand.Parameters.Add("FILEPATH", SqlDbType.NVarChar).Value = pDocument.Filepath
|
oCommand.Parameters.Add("FILEPATH", SqlDbType.NVarChar).Value = pDocument.Filepath
|
||||||
oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.Int).Value = pEnvelope.Id
|
oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.Int).Value = pEnvelope.Id
|
||||||
|
oCommand.Parameters.Add(New SqlParameter("@BYTE_DATA", DirectCast(pDocument.Byte_Data, Object)))
|
||||||
|
|
||||||
If Database.ExecuteNonQuery(oCommand, pTransaction) Then
|
If Database.ExecuteNonQuery(oCommand, pTransaction) Then
|
||||||
pDocument.EnvelopeId = pEnvelope.Id
|
pDocument.EnvelopeId = pEnvelope.Id
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ Public Class EmailModel
|
|||||||
Public Function Insert(pEmail As EmailData) As Boolean
|
Public Function Insert(pEmail As EmailData) As Boolean
|
||||||
Try
|
Try
|
||||||
Dim oSql = "INSERT INTO [dbo].[TBEMLP_EMAIL_OUT] "
|
Dim oSql = "INSERT INTO [dbo].[TBEMLP_EMAIL_OUT] "
|
||||||
oSql += " (EMAIL_ADRESS, EMAIL_SUBJ, EMAIL_BODY, ADDED_WHO, SENDING_PROFILE, REFERENCE_ID, REFERENCE_STRING, REMINDER_TYPE_ID, EMAIL_ATTMT1, WF_ID) "
|
oSql += " (EMAIL_ADRESS, EMAIL_SUBJ, EMAIL_BODY, ADDED_WHO, SENDING_PROFILE, REFERENCE_ID, REFERENCE_STRING, REMINDER_TYPE_ID, WF_ID,ATT1_RELATED_ID,ATT1_REL_TYPE) "
|
||||||
oSql += " VALUES (@EMAIL_ADRESS, @EMAIL_SUBJ, @EMAIL_BODY, @ADDED_WHO, @SENDING_PROFILE, @REFERENCE_ID, @REFERENCE_STRING, @REMINDER_TYPE_ID, @EMAIL_ATTMT1, @WF_ID)"
|
oSql += " VALUES (@EMAIL_ADRESS, @EMAIL_SUBJ, @EMAIL_BODY, @ADDED_WHO, @SENDING_PROFILE, @REFERENCE_ID, @REFERENCE_STRING, @REMINDER_TYPE_ID, @WF_ID,@ATT1_RELATED_ID,@ATT1_REL_TYPE)"
|
||||||
Dim oCommand As New SqlCommand(oSql)
|
Dim oCommand As New SqlCommand(oSql)
|
||||||
oCommand.Parameters.Add("EMAIL_ADRESS", SqlDbType.NVarChar).Value = pEmail.EmailAdress
|
oCommand.Parameters.Add("EMAIL_ADRESS", SqlDbType.NVarChar).Value = pEmail.EmailAdress
|
||||||
oCommand.Parameters.Add("EMAIL_SUBJ", SqlDbType.NVarChar).Value = pEmail.EmailSubject
|
oCommand.Parameters.Add("EMAIL_SUBJ", SqlDbType.NVarChar).Value = pEmail.EmailSubject
|
||||||
@@ -23,8 +23,10 @@ Public Class EmailModel
|
|||||||
oCommand.Parameters.Add("REFERENCE_ID", SqlDbType.Int).Value = pEmail.ReferenceID
|
oCommand.Parameters.Add("REFERENCE_ID", SqlDbType.Int).Value = pEmail.ReferenceID
|
||||||
oCommand.Parameters.Add("REFERENCE_STRING", SqlDbType.NVarChar).Value = pEmail.ReferenceString
|
oCommand.Parameters.Add("REFERENCE_STRING", SqlDbType.NVarChar).Value = pEmail.ReferenceString
|
||||||
oCommand.Parameters.Add("REMINDER_TYPE_ID", SqlDbType.Int).Value = 202377
|
oCommand.Parameters.Add("REMINDER_TYPE_ID", SqlDbType.Int).Value = 202377
|
||||||
oCommand.Parameters.Add("EMAIL_ATTMT1", SqlDbType.NVarChar).Value = pEmail.EmailAttachment
|
'oCommand.Parameters.Add("EMAIL_ATTMT1", SqlDbType.NVarChar).Value = pEmail.EmailAttachment
|
||||||
oCommand.Parameters.Add("WF_ID", SqlDbType.Int).Value = pEmail.EmailType ' Wegen DB-Trigger MUSS dieser Wert gesetzt werden
|
oCommand.Parameters.Add("WF_ID", SqlDbType.Int).Value = pEmail.EmailType ' Wegen DB-Trigger MUSS dieser Wert gesetzt werden
|
||||||
|
oCommand.Parameters.Add("ATT1_RELATED_ID", SqlDbType.Int).Value = pEmail.ATT1_RELATED_ID
|
||||||
|
oCommand.Parameters.Add("ATT1_REL_TYPE", SqlDbType.NVarChar).Value = pEmail.ATT1_REL_TYPE
|
||||||
|
|
||||||
If Database.ExecuteNonQuery(oCommand) Then
|
If Database.ExecuteNonQuery(oCommand) Then
|
||||||
Return True
|
Return True
|
||||||
|
|||||||
@@ -47,7 +47,15 @@ Public Class EnvelopeModel
|
|||||||
.FinalEmailToCreator = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_CREATOR", Constants.FinalEmailType.No.ToString())),
|
.FinalEmailToCreator = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_CREATOR", Constants.FinalEmailType.No.ToString())),
|
||||||
.FinalEmailToReceivers = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_RECEIVERS", Constants.FinalEmailType.No.ToString()))
|
.FinalEmailToReceivers = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_RECEIVERS", Constants.FinalEmailType.No.ToString()))
|
||||||
}
|
}
|
||||||
|
Dim oDOC_RESULT = pRow.Item("DOC_RESULT")
|
||||||
|
If Not IsDBNull(oDOC_RESULT) Then
|
||||||
|
Dim oByte As Byte() = DirectCast(pRow.Item("DOC_RESULT"), Byte())
|
||||||
|
If Not IsNothing(oByte) Then
|
||||||
|
oEnvelope.DOC_RESULT = oByte
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
oEnvelope.DOC_RESULT = Nothing
|
||||||
|
End If
|
||||||
oEnvelope.User = UserModel.SelectUser(oEnvelope.UserId)
|
oEnvelope.User = UserModel.SelectUser(oEnvelope.UserId)
|
||||||
oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id)
|
oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id)
|
||||||
oEnvelope.Documents = DocumentModel.List(oEnvelope.Id)
|
oEnvelope.Documents = DocumentModel.List(oEnvelope.Id)
|
||||||
@@ -185,6 +193,9 @@ Public Class EnvelopeModel
|
|||||||
oCommand.Parameters.Add("TITLE", SqlDbType.NVarChar).Value = pEnvelope.Title
|
oCommand.Parameters.Add("TITLE", SqlDbType.NVarChar).Value = pEnvelope.Title
|
||||||
oCommand.Parameters.Add("ENVELOPE_TYPE", SqlDbType.Int).Value = pEnvelope.EnvelopeTypeId
|
oCommand.Parameters.Add("ENVELOPE_TYPE", SqlDbType.Int).Value = pEnvelope.EnvelopeTypeId
|
||||||
oCommand.Parameters.Add("CONTRACT_TYPE", SqlDbType.Int).Value = pEnvelope.ContractType
|
oCommand.Parameters.Add("CONTRACT_TYPE", SqlDbType.Int).Value = pEnvelope.ContractType
|
||||||
|
If IsNothing(pEnvelope.Language) Then
|
||||||
|
pEnvelope.Language = "de-DE"
|
||||||
|
End If
|
||||||
oCommand.Parameters.Add("LANGUAGE", SqlDbType.NVarChar).Value = pEnvelope.Language
|
oCommand.Parameters.Add("LANGUAGE", SqlDbType.NVarChar).Value = pEnvelope.Language
|
||||||
oCommand.Parameters.Add("CERTIFICATION_TYPE", SqlDbType.Int).Value = pEnvelope.CertificationType
|
oCommand.Parameters.Add("CERTIFICATION_TYPE", SqlDbType.Int).Value = pEnvelope.CertificationType
|
||||||
oCommand.Parameters.Add("EXPIRES_WHEN_DAYS", SqlDbType.Int).Value = pEnvelope.ExpiresWhenDays
|
oCommand.Parameters.Add("EXPIRES_WHEN_DAYS", SqlDbType.Int).Value = pEnvelope.ExpiresWhenDays
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Public Class HistoryModel
|
|||||||
|
|
||||||
Private Function ToEnvelopeHistoryEntry(pRow As DataRow) As EnvelopeHistoryEntry
|
Private Function ToEnvelopeHistoryEntry(pRow As DataRow) As EnvelopeHistoryEntry
|
||||||
Return New EnvelopeHistoryEntry() With {
|
Return New EnvelopeHistoryEntry() With {
|
||||||
.ActionDate = pRow.Item("ACTION_DATE"),
|
.ActionDate = pRow.ItemEx(Of Date)("ACTION_DATE", Nothing),
|
||||||
.EnvelopeId = pRow.Item("ENVELOPE_ID"),
|
.EnvelopeId = pRow.Item("ENVELOPE_ID"),
|
||||||
.Status = pRow.Item("STATUS"),
|
.Status = pRow.Item("STATUS"),
|
||||||
.UserReference = pRow.ItemEx("USER_REFERENCE", "")
|
.UserReference = pRow.ItemEx("USER_REFERENCE", "")
|
||||||
@@ -18,7 +18,7 @@ Public Class HistoryModel
|
|||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function List(pEnvelopeId As Integer) As List(Of EnvelopeHistoryEntry)
|
Public Function List(pEnvelopeId As Integer) As List(Of EnvelopeHistoryEntry)
|
||||||
Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE_HISTORY WHERE ENVELOPE_ID = {pEnvelopeId} ORDER BY GUID DESC"
|
Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE_HISTORY WHERE ENVELOPE_ID = {pEnvelopeId} AND ACTION_DATE IS NOT NULL ORDER BY GUID DESC"
|
||||||
Dim oTable = Database.GetDatatable(oSql)
|
Dim oTable = Database.GetDatatable(oSql)
|
||||||
Return oTable?.Rows.
|
Return oTable?.Rows.
|
||||||
Cast(Of DataRow).
|
Cast(Of DataRow).
|
||||||
|
|||||||
@@ -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("1.5.0.0")>
|
<Assembly: AssemblyVersion("1.9.1.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.5.0.0")>
|
<Assembly: AssemblyFileVersion("1.9.1.0")>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
Imports DevExpress.DataAccess.Native.Web
|
Imports DevExpress.DataAccess.Native.Web
|
||||||
Imports DigitalData.Modules.Base
|
Imports DigitalData.Modules.Base
|
||||||
|
Imports EnvelopeGenerator.Common.My.Resources
|
||||||
|
|
||||||
Public Class ActionService
|
Public Class ActionService
|
||||||
Inherits BaseService
|
Inherits BaseService
|
||||||
@@ -33,14 +34,18 @@ Public Class ActionService
|
|||||||
|
|
||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
Public Function ResendReceiver(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
|
EmailService.SendDocumentReceivedEmail(pEnvelope, pReceiver)
|
||||||
|
End Function
|
||||||
|
|
||||||
Public Function DeleteEnvelope(pEnvelope As Envelope) As Boolean
|
|
||||||
|
Public Function DeleteEnvelope(pEnvelope As Envelope, pReason As String) As Boolean
|
||||||
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.EnvelopeDeleted, pEnvelope.User.Email) = False Then
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.EnvelopeDeleted, pEnvelope.User.Email) = False Then
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Dim oSendResult = pEnvelope.Receivers.
|
Dim oSendResult = pEnvelope.Receivers.
|
||||||
Select(Function(r) EmailService.SendEnvelopeDeletedEmail(pEnvelope, r)).
|
Select(Function(r) EmailService.SendEnvelopeDeletedEmail(pEnvelope, r, pReason)).
|
||||||
All(Function(r) r = True)
|
All(Function(r) r = True)
|
||||||
|
|
||||||
If oSendResult = False Then
|
If oSendResult = False Then
|
||||||
@@ -108,20 +113,20 @@ Public Class ActionService
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function CompleteEnvelope(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pAttachment As String) As Boolean
|
Public Function CompleteEnvelope(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean ', pAttachment As String
|
||||||
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent, pReceiver.Email) = False Then
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent, pReceiver.Email) = False Then
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return EmailService.SendDocumentCompletedEmailToReceiver(pEnvelope, pReceiver, pAttachment)
|
Return EmailService.SendDocumentCompletedEmailToReceiver(pEnvelope, pReceiver) ', pAttachment
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function CompleteEnvelope(pEnvelope As Envelope, pAttachment As String) As Boolean
|
Public Function CompleteEnvelope(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent, pEnvelope.User.Email) = False Then
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent, pEnvelope.User.Email) = False Then
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return EmailService.SendDocumentCompletedEmailToCreator(pEnvelope, pAttachment)
|
Return EmailService.SendDocumentCompletedEmailToCreator(pEnvelope) ', pAttachment
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function CreateReport(pEnvelope As Envelope) As Boolean
|
Public Function CreateReport(pEnvelope As Envelope) As Boolean
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
Imports DigitalData.Modules.Base
|
Imports DigitalData.Modules.Base
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
|
Imports EnvelopeGenerator.Common.My.Resources
|
||||||
|
|
||||||
Public Class EmailService
|
Public Class EmailService
|
||||||
Inherits BaseService
|
Inherits BaseService
|
||||||
@@ -15,14 +16,14 @@ Public Class EmailService
|
|||||||
EmailTemplate = New TemplateService(pState)
|
EmailTemplate = New TemplateService(pState)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Function SendEnvelopeDeletedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
Public Function SendEnvelopeDeletedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pReason As String) As Boolean
|
||||||
Logger.Debug("Creating email data object.")
|
Logger.Debug("Creating email data object.")
|
||||||
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageDeletionSent) With
|
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageDeletionSent) With
|
||||||
{
|
{
|
||||||
.SignatureLink = ""
|
.SignatureLink = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
EmailTemplate.FillEnvelopeDeletedEmailBody(oEmailData)
|
EmailTemplate.FillEnvelopeDeletedEmailBody(oEmailData, pReason)
|
||||||
|
|
||||||
If EmailModel.Insert(oEmailData) = False Then
|
If EmailModel.Insert(oEmailData) = False Then
|
||||||
Logger.Error("EMail data could not be inserted.")
|
Logger.Error("EMail data could not be inserted.")
|
||||||
@@ -49,6 +50,15 @@ Public Class EmailService
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function GetReceiverUrl(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As String
|
||||||
|
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageInvitationSent) With
|
||||||
|
{
|
||||||
|
.SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature)
|
||||||
|
}
|
||||||
|
Return oEmailData.SignatureLink
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
Public Function SendDocumentAccessCodeReceivedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
Public Function SendDocumentAccessCodeReceivedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
Logger.Debug("Creating email data object.")
|
Logger.Debug("Creating email data object.")
|
||||||
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageAccessCodeSent) With
|
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageAccessCodeSent) With
|
||||||
@@ -83,14 +93,15 @@ Public Class EmailService
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function SendDocumentCompletedEmailToReceiver(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pAttachment As String) As Boolean
|
Public Function SendDocumentCompletedEmailToReceiver(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean ', pAttachment As String
|
||||||
Logger.Debug("Creating email data object.")
|
Logger.Debug("Creating email data object.")
|
||||||
Dim oEmailData = New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageCompletionSent) With
|
Dim oEmailData = New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageCompletionSent) With
|
||||||
{
|
{
|
||||||
.SignatureLink = "",
|
.SignatureLink = "",
|
||||||
.EmailAttachment = pAttachment
|
.ATT1_RELATED_ID = pEnvelope.Id,
|
||||||
|
.ATT1_REL_TYPE = "EnvelopeResult"
|
||||||
}
|
}
|
||||||
|
' .EmailAttachment = pAttachment,
|
||||||
Logger.Debug("Sending mail to receiver: [{0}]", oEmailData.EmailAdress)
|
Logger.Debug("Sending mail to receiver: [{0}]", oEmailData.EmailAdress)
|
||||||
|
|
||||||
EmailTemplate.FillDocumentCompletedEmailBody(oEmailData)
|
EmailTemplate.FillDocumentCompletedEmailBody(oEmailData)
|
||||||
@@ -103,14 +114,15 @@ Public Class EmailService
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function SendDocumentCompletedEmailToCreator(pEnvelope As Envelope, pAttachment As String) As Boolean
|
Public Function SendDocumentCompletedEmailToCreator(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
Logger.Debug("Creating email data object.")
|
Logger.Debug("Creating email data object.")
|
||||||
Dim oEmailData = New EmailData(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent) With
|
Dim oEmailData = New EmailData(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent) With
|
||||||
{
|
{
|
||||||
.SignatureLink = "",
|
.SignatureLink = "",
|
||||||
.EmailAttachment = pAttachment
|
.ATT1_RELATED_ID = pEnvelope.Id,
|
||||||
|
.ATT1_REL_TYPE = "EnvelopeResult"
|
||||||
}
|
}
|
||||||
|
'.EmailAttachment = pAttachment,
|
||||||
EmailTemplate.FillDocumentCompletedEmailBody(oEmailData)
|
EmailTemplate.FillDocumentCompletedEmailBody(oEmailData)
|
||||||
|
|
||||||
If EmailModel.Insert(oEmailData) = False Then
|
If EmailModel.Insert(oEmailData) = False Then
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ Public Class TemplateService
|
|||||||
EmailHtmlTemplateModel = New EmailTemplateModel(pState)
|
EmailHtmlTemplateModel = New EmailTemplateModel(pState)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub InitDictionary(pEmailData As EmailData)
|
Private Sub InitDictionary(pEmailData As EmailData, Optional pReason As String = "")
|
||||||
Logger.Debug("Initializing dictionary..")
|
Logger.Debug("Initializing dictionary..")
|
||||||
|
|
||||||
_replaceDictionary = New Dictionary(Of String, String) From {
|
_replaceDictionary = New Dictionary(Of String, String) From {
|
||||||
@@ -28,7 +28,8 @@ Public Class TemplateService
|
|||||||
{"[LINK_TO_DOCUMENT_TEXT]", $"{pEmailData.SignatureLink.Truncate(40)}.."},
|
{"[LINK_TO_DOCUMENT_TEXT]", $"{pEmailData.SignatureLink.Truncate(40)}.."},
|
||||||
{"[DOCUMENT_TITLE]", pEmailData.EnvelopeTitle},
|
{"[DOCUMENT_TITLE]", pEmailData.EnvelopeTitle},
|
||||||
{"[MESSAGE]", pEmailData.Message},
|
{"[MESSAGE]", pEmailData.Message},
|
||||||
{"[DOCUMENT_ACCESS_CODE]", pEmailData.ReceiverAccessCode}
|
{"[DOCUMENT_ACCESS_CODE]", pEmailData.ReceiverAccessCode},
|
||||||
|
{"[REASON]", pReason}
|
||||||
}
|
}
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -40,11 +41,11 @@ Public Class TemplateService
|
|||||||
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Sub FillEnvelopeDeletedEmailBody(pEmailData As EmailData)
|
Public Sub FillEnvelopeDeletedEmailBody(pEmailData As EmailData, pReason As String)
|
||||||
InitDictionary(pEmailData)
|
InitDictionary(pEmailData, pReason)
|
||||||
Dim oTemplate = EmailHtmlTemplateModel.GetById(Constants.EmailTemplateType.DocumentDeleted)
|
Dim oTemplate = EmailHtmlTemplateModel.GetById(Constants.EmailTemplateType.DocumentDeleted)
|
||||||
|
|
||||||
pEmailData.EmailBody = FillTemplate(oTemplate.Body)
|
pEmailData.EmailBody = FillTemplate(oTemplate.Body, pReason)
|
||||||
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -72,11 +73,12 @@ Public Class TemplateService
|
|||||||
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Function FillTemplate(pTemplate As String) As String
|
Private Function FillTemplate(pTemplate As String, Optional pReason As String = "") As String
|
||||||
Dim oText As String = pTemplate
|
Dim oText As String = pTemplate
|
||||||
|
|
||||||
For Each dictItem As KeyValuePair(Of String, String) In _replaceDictionary
|
For Each dictItem As KeyValuePair(Of String, String) In _replaceDictionary
|
||||||
If oText.Contains(dictItem.Key) Then
|
If oText.Contains(dictItem.Key) Then
|
||||||
|
|
||||||
oText = oText.Replace(dictItem.Key, dictItem.Value)
|
oText = oText.Replace(dictItem.Key, dictItem.Value)
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -154,7 +154,7 @@
|
|||||||
<value>Envelope could not be sent!</value>
|
<value>Envelope could not be sent!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Envelope Invitations Sent" xml:space="preserve">
|
<data name="Envelope Invitations Sent" xml:space="preserve">
|
||||||
<value>Envelope Invitations Sent</value>
|
<value>The invitations have been scheduled for dispatch.s</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Envelope Overview" xml:space="preserve">
|
<data name="Envelope Overview" xml:space="preserve">
|
||||||
<value>Overview</value>
|
<value>Overview</value>
|
||||||
|
|||||||
@@ -154,7 +154,7 @@
|
|||||||
<value>Umschlag konnte nicht gesendet werden!</value>
|
<value>Umschlag konnte nicht gesendet werden!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Envelope Invitations Sent" xml:space="preserve">
|
<data name="Envelope Invitations Sent" xml:space="preserve">
|
||||||
<value>Die Einladungen wurden versendet</value>
|
<value>Die Einladungen zum Signieren wurden zum Versand eingereiht.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Envelope Overview" xml:space="preserve">
|
<data name="Envelope Overview" xml:space="preserve">
|
||||||
<value>Übersicht</value>
|
<value>Übersicht</value>
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ Namespace My.Resources
|
|||||||
End Property
|
End Property
|
||||||
|
|
||||||
'''<summary>
|
'''<summary>
|
||||||
''' Sucht eine lokalisierte Zeichenfolge, die Die Einladungen wurden versendet ähnelt.
|
''' Sucht eine lokalisierte Zeichenfolge, die Die Einladungen zum Signieren wurden zum Versand eingereiht. ähnelt.
|
||||||
'''</summary>
|
'''</summary>
|
||||||
Public Shared ReadOnly Property Envelope_Invitations_Sent() As String
|
Public Shared ReadOnly Property Envelope_Invitations_Sent() As String
|
||||||
Get
|
Get
|
||||||
|
|||||||
3
EnvelopeGenerator.Common/Strings/Model.vb
Normal file
3
EnvelopeGenerator.Common/Strings/Model.vb
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Public Class Model
|
||||||
|
|
||||||
|
End Class
|
||||||
60
EnvelopeGenerator.Common/TempFiles.vb
Normal file
60
EnvelopeGenerator.Common/TempFiles.vb
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
Imports System.IO
|
||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
|
Public Class TempFiles
|
||||||
|
Inherits BaseClass
|
||||||
|
|
||||||
|
Public Property TempPath As String
|
||||||
|
|
||||||
|
Public Sub New(pLogConfig As LogConfig)
|
||||||
|
MyBase.New(pLogConfig)
|
||||||
|
|
||||||
|
Dim oTempDirectoryPath = Path.GetTempPath()
|
||||||
|
TempPath = Path.Combine(oTempDirectoryPath, "EnvelopeGenerator")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function Create() As Boolean
|
||||||
|
Try
|
||||||
|
If Directory.Exists(TempPath) = False Then
|
||||||
|
Directory.CreateDirectory(TempPath)
|
||||||
|
Else
|
||||||
|
CleanUpFiles()
|
||||||
|
End If
|
||||||
|
Return True
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function CleanUpFiles() As Boolean
|
||||||
|
Try
|
||||||
|
For Each fileItem As String In Directory.GetFiles(TempPath)
|
||||||
|
Logger.Debug("Deleting tempPath-file: {0} ...", fileItem)
|
||||||
|
File.Delete(fileItem)
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return True
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CleanUp() As Boolean
|
||||||
|
Try
|
||||||
|
Logger.Debug("Deleting tempPath-Data: {0} ...", TempPath)
|
||||||
|
Directory.Delete(TempPath, True)
|
||||||
|
Return True
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
End Class
|
||||||
@@ -10,7 +10,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("DOCUMENT_ID")]
|
[Column("DOCUMENT_ID")]
|
||||||
@@ -28,12 +28,12 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Required]
|
[Required]
|
||||||
[Column("POSITION_X")]
|
[Column("POSITION_X")]
|
||||||
[DefaultValue(0)]
|
[DefaultValue(0)]
|
||||||
public double PositionX { get; set; }
|
public double X { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("POSITION_Y")]
|
[Column("POSITION_Y")]
|
||||||
[DefaultValue(0)]
|
[DefaultValue(0)]
|
||||||
public double PositionY { get; set; }
|
public double Y { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("WIDTH")]
|
[Column("WIDTH")]
|
||||||
@@ -81,5 +81,11 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
|
|
||||||
[ForeignKey("ReceiverId")]
|
[ForeignKey("ReceiverId")]
|
||||||
public virtual Receiver? Receiver { get; set; }
|
public virtual Receiver? Receiver { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public double Top => Math.Round(Y, 5);
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public double Left => Math.Round(X, 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ENVELOPE_ID")]
|
[Column("ENVELOPE_ID")]
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Column("NAME", TypeName = "nvarchar(64)")]
|
[Column("NAME", TypeName = "nvarchar(64)")]
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using EnvelopeGenerator.Common;
|
||||||
|
using EnvelopeGenerator.Common.My.Resources;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Domain.Entities
|
namespace EnvelopeGenerator.Domain.Entities
|
||||||
@@ -9,7 +11,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("USER_ID")]
|
[Column("USER_ID")]
|
||||||
@@ -19,9 +21,12 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Column("STATUS")]
|
[Column("STATUS")]
|
||||||
public int Status { get; set; }
|
public int Status { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public string StatusName => ((Constants.EnvelopeStatus)Status).ToString();
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ENVELOPE_UUID", TypeName = "nvarchar(36)")]
|
[Column("ENVELOPE_UUID", TypeName = "nvarchar(36)")]
|
||||||
public string EnvelopeUuid { get; set; }
|
public string Uuid { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("MESSAGE", TypeName = "nvarchar(max)")]
|
[Column("MESSAGE", TypeName = "nvarchar(max)")]
|
||||||
@@ -59,7 +64,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
public int? ReminderIntervalDays { get; set; }
|
public int? ReminderIntervalDays { get; set; }
|
||||||
|
|
||||||
[Column("ENVELOPE_TYPE")]
|
[Column("ENVELOPE_TYPE")]
|
||||||
public int? EnvelopeType { get; set; }
|
public int? EnvelopeTypeId { get; set; }
|
||||||
|
|
||||||
[Column("CERTIFICATION_TYPE")]
|
[Column("CERTIFICATION_TYPE")]
|
||||||
public int? CertificationType { get; set; }
|
public int? CertificationType { get; set; }
|
||||||
@@ -82,5 +87,24 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Required]
|
[Required]
|
||||||
[Column("DMZ_MOVED")]
|
[Column("DMZ_MOVED")]
|
||||||
public bool DmzMoved { get; set; }
|
public bool DmzMoved { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The sender of envelope
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("UserId")]
|
||||||
|
public DigitalData.UserManager.Domain.Entities.User? User { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("EnvelopeTypeId")]
|
||||||
|
public EnvelopeType? EnvelopeType { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public string? EnvelopeTypeTitle => EnvelopeType?.Title;
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public bool IsAlreadySent => Status > (int) Constants.EnvelopeStatus.EnvelopeSaved;
|
||||||
|
|
||||||
|
public IEnumerable<EnvelopeDocument>? Documents { get; set; }
|
||||||
|
|
||||||
|
public IEnumerable<EnvelopeHistory>? History { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ENVELOPE_ID")]
|
[Column("ENVELOPE_ID")]
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ENVELOPE_ID")]
|
[Column("ENVELOPE_ID")]
|
||||||
@@ -29,5 +29,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
|
|
||||||
[Column("FILENAME_ORIGINAL", TypeName = "nvarchar(256)")]
|
[Column("FILENAME_ORIGINAL", TypeName = "nvarchar(256)")]
|
||||||
public string FilenameOriginal { get; set; }
|
public string FilenameOriginal { get; set; }
|
||||||
|
|
||||||
|
public IEnumerable<DocumentReceiverElement>? Elements { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using DigitalData.UserManager.Domain.Entities;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Domain.Entities
|
namespace EnvelopeGenerator.Domain.Entities
|
||||||
{
|
{
|
||||||
@@ -9,7 +11,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public long Guid { get; set; }
|
public long Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ENVELOPE_ID")]
|
[Column("ENVELOPE_ID")]
|
||||||
@@ -25,9 +27,27 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ADDED_WHEN", TypeName = "datetime")]
|
[Column("ADDED_WHEN", TypeName = "datetime")]
|
||||||
|
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
|
||||||
public DateTime AddedWhen { get; set; }
|
public DateTime AddedWhen { get; set; }
|
||||||
|
|
||||||
[Column("ACTION_DATE", TypeName = "datetime")]
|
[Column("ACTION_DATE", TypeName = "datetime")]
|
||||||
public DateTime? ActionDate { get; set; }
|
public DateTime? ActionDate { get; set; }
|
||||||
|
|
||||||
|
[Column("COMMENT", TypeName = "nvarchar(max)")]
|
||||||
|
public string? Comment { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("UserReference")]
|
||||||
|
public virtual User? Sender { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("UserReference")]
|
||||||
|
public virtual Receiver? Receiver { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public ReferenceType ReferenceType => (Status / 3) switch
|
||||||
|
{
|
||||||
|
1 => ReferenceType.Sender,
|
||||||
|
2 or 3 => ReferenceType.Receiver,
|
||||||
|
_ => ReferenceType.Unknown,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,10 +6,11 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Table("TBSIG_ENVELOPE_RECEIVER", Schema = "dbo")]
|
[Table("TBSIG_ENVELOPE_RECEIVER", Schema = "dbo")]
|
||||||
public class EnvelopeReceiver
|
public class EnvelopeReceiver
|
||||||
{
|
{
|
||||||
|
[Key]
|
||||||
[Column("ENVELOPE_ID")]
|
[Column("ENVELOPE_ID")]
|
||||||
public int EnvelopeId { get; set; }
|
public int EnvelopeId { get; set; }
|
||||||
|
|
||||||
|
[Key]
|
||||||
[Column("RECEIVER_ID")]
|
[Column("RECEIVER_ID")]
|
||||||
public int ReceiverId { get; set; }
|
public int ReceiverId { get; set; }
|
||||||
|
|
||||||
@@ -18,19 +19,19 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
public int Sequence { get; set; }
|
public int Sequence { get; set; }
|
||||||
|
|
||||||
[Column("NAME", TypeName = "nvarchar(128)")]
|
[Column("NAME", TypeName = "nvarchar(128)")]
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
[Column("JOB_TITLE", TypeName = "nvarchar(128)")]
|
[Column("JOB_TITLE", TypeName = "nvarchar(128)")]
|
||||||
public string JobTitle { get; set; }
|
public string? JobTitle { get; set; }
|
||||||
|
|
||||||
[Column("COMPANY_NAME", TypeName = "nvarchar(128)")]
|
[Column("COMPANY_NAME", TypeName = "nvarchar(128)")]
|
||||||
public string CompanyName { get; set; }
|
public string? CompanyName { get; set; }
|
||||||
|
|
||||||
[Column("PRIVATE_MESSAGE", TypeName = "nvarchar(max)")]
|
[Column("PRIVATE_MESSAGE", TypeName = "nvarchar(max)")]
|
||||||
public string PrivateMessage { get; set; }
|
public string? PrivateMessage { get; set; }
|
||||||
|
|
||||||
[Column("ACCESS_CODE", TypeName = "nvarchar(64)")]
|
[Column("ACCESS_CODE", TypeName = "nvarchar(64)")]
|
||||||
public string AccessCode { get; set; }
|
public string? AccessCode { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ADDED_WHEN", TypeName = "datetime")]
|
[Column("ADDED_WHEN", TypeName = "datetime")]
|
||||||
@@ -38,5 +39,11 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
|
|
||||||
[Column("CHANGED_WHEN", TypeName = "datetime")]
|
[Column("CHANGED_WHEN", TypeName = "datetime")]
|
||||||
public DateTime? ChangedWhen { get; set; }
|
public DateTime? ChangedWhen { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("EnvelopeId")]
|
||||||
|
public Envelope? Envelope { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("ReceiverId")]
|
||||||
|
public Receiver? Receiver { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("TITLE", TypeName = "nvarchar(128)")]
|
[Column("TITLE", TypeName = "nvarchar(128)")]
|
||||||
|
|||||||
@@ -9,15 +9,15 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required, EmailAddress]
|
||||||
[Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")]
|
[Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")]
|
||||||
public string EmailAddress { get; set; }
|
public required string EmailAddress { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("SIGNATURE", TypeName = "nvarchar(64)")]
|
[Column("SIGNATURE", TypeName = "nvarchar(64)")]
|
||||||
public string Signature { get; set; }
|
public required string Signature { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("ADDED_WHEN", TypeName = "datetime")]
|
[Column("ADDED_WHEN", TypeName = "datetime")]
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
using System;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Domain.Entities
|
namespace EnvelopeGenerator.Domain.Entities
|
||||||
{
|
{
|
||||||
@@ -11,7 +9,7 @@ namespace EnvelopeGenerator.Domain.Entities
|
|||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column("GUID")]
|
[Column("GUID")]
|
||||||
public int Guid { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
[Column("USER_ID")]
|
[Column("USER_ID")]
|
||||||
|
|||||||
@@ -6,4 +6,13 @@
|
|||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="DigitalData.EmailProfilerDispatcher.Abstraction" Version="1.0.0" />
|
||||||
|
<PackageReference Include="UserManager.Domain" Version="1.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\EnvelopeGenerator.Common\EnvelopeGenerator.Common.vbproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ Public MustInherit Class BaseController
|
|||||||
ChartModel = New ChartModel(pState)
|
ChartModel = New ChartModel(pState)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Function DeleteEnvelope(pEnvelope As Envelope) As Boolean
|
Public Function DeleteEnvelope(pEnvelope As Envelope, pReason As String) As Boolean
|
||||||
If pEnvelope Is Nothing Then
|
If pEnvelope Is Nothing Then
|
||||||
Return True
|
Return True
|
||||||
End If
|
End If
|
||||||
@@ -52,7 +52,7 @@ Public MustInherit Class BaseController
|
|||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return ActionService.DeleteEnvelope(pEnvelope)
|
Return ActionService.DeleteEnvelope(pEnvelope, pReason)
|
||||||
Else
|
Else
|
||||||
Return DeleteEnvelopeFromDisk(pEnvelope)
|
Return DeleteEnvelopeFromDisk(pEnvelope)
|
||||||
End If
|
End If
|
||||||
@@ -145,7 +145,10 @@ Public MustInherit Class BaseController
|
|||||||
IO.File.Delete(pDocument.Filepath)
|
IO.File.Delete(pDocument.Filepath)
|
||||||
End If
|
End If
|
||||||
Dim oFolder As String = Path.GetDirectoryName(pDocument.Filepath)
|
Dim oFolder As String = Path.GetDirectoryName(pDocument.Filepath)
|
||||||
Directory.Delete(oFolder)
|
If Directory.Exists(oFolder) Then
|
||||||
|
Directory.Delete(oFolder)
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
Return True
|
Return True
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ Public Class EnvelopeEditorController
|
|||||||
Public Function SendEnvelope() As Boolean
|
Public Function SendEnvelope() As Boolean
|
||||||
Return ActionService.SendEnvelope(Envelope)
|
Return ActionService.SendEnvelope(Envelope)
|
||||||
End Function
|
End Function
|
||||||
|
Public Function ResendReceiverInvitation(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
|
Return ActionService.ResendReceiver(pEnvelope, pReceiver)
|
||||||
|
End Function
|
||||||
|
|
||||||
Public Function ValidateEnvelopeForSending(pErrors As List(Of String)) As List(Of String)
|
Public Function ValidateEnvelopeForSending(pErrors As List(Of String)) As List(Of String)
|
||||||
Dim oEnvelopeErrors = pErrors
|
Dim oEnvelopeErrors = pErrors
|
||||||
@@ -164,7 +167,8 @@ Public Class EnvelopeEditorController
|
|||||||
.Filepath = oFileInfoTemp.FullName,
|
.Filepath = oFileInfoTemp.FullName,
|
||||||
.FileNameOriginal = oFileInfo.Name,
|
.FileNameOriginal = oFileInfo.Name,
|
||||||
.Thumbnail = Thumbnail.GetThumbnailFromPDFFile(oTempFilePath),
|
.Thumbnail = Thumbnail.GetThumbnailFromPDFFile(oTempFilePath),
|
||||||
.PageCount = Thumbnail.GetPageCount(oTempFilePath)
|
.PageCount = Thumbnail.GetPageCount(oTempFilePath),
|
||||||
|
.Byte_Data = ReadFile(pDocumentFilePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
Return oDocument
|
Return oDocument
|
||||||
@@ -174,7 +178,22 @@ Public Class EnvelopeEditorController
|
|||||||
Return Nothing
|
Return Nothing
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
'Open file in to a filestream and read data in a byte array.
|
||||||
|
Private Function ReadFile(ByVal sPath As String) As Byte()
|
||||||
|
'Initialize byte array with a null value initially.
|
||||||
|
Dim data As Byte() = Nothing
|
||||||
|
'Use FileInfo object to get file size.
|
||||||
|
Dim fInfo As New FileInfo(sPath)
|
||||||
|
Dim numBytes As Long = fInfo.Length
|
||||||
|
'Open FileStream to read file
|
||||||
|
Dim fStream As New FileStream(sPath, FileMode.Open, FileAccess.Read)
|
||||||
|
'Use BinaryReader to read file stream into byte array.
|
||||||
|
Dim br As New BinaryReader(fStream)
|
||||||
|
'When you use BinaryReader, you need to supply number of bytes to read from file.
|
||||||
|
'In this case we want to read entire file. So supplying total number of bytes.
|
||||||
|
data = br.ReadBytes(CInt(numBytes))
|
||||||
|
Return data
|
||||||
|
End Function
|
||||||
Public Function CreateThumbnail(pDocumentPath As String) As Bitmap
|
Public Function CreateThumbnail(pDocumentPath As String) As Bitmap
|
||||||
Try
|
Try
|
||||||
Dim oThumbNail As Bitmap = Thumbnail.GetThumbnailFromPDFFile(pDocumentPath)
|
Dim oThumbNail As Bitmap = Thumbnail.GetThumbnailFromPDFFile(pDocumentPath)
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ Public Class EnvelopeListController
|
|||||||
Return EnvelopeModel.ListCompleted()
|
Return EnvelopeModel.ListCompleted()
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Overloads Function DeleteEnvelope(pEnvelope As Envelope) As Boolean
|
Public Overloads Function DeleteEnvelope(pEnvelope As Envelope, pReason As String) As Boolean
|
||||||
Return MyBase.DeleteEnvelope(pEnvelope)
|
Return MyBase.DeleteEnvelope(pEnvelope, pReason)
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function GetPieChart() As ChartControl
|
Public Function GetPieChart() As ChartControl
|
||||||
|
|||||||
@@ -84,6 +84,10 @@
|
|||||||
<Reference Include="DigitalData.Modules.Logging">
|
<Reference Include="DigitalData.Modules.Logging">
|
||||||
<HintPath>..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
<HintPath>..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="EnvelopeGenerator.Common, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\EnvelopeGenerator.Common\bin\Debug\EnvelopeGenerator.Common.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="GdPicture.NET.14">
|
<Reference Include="GdPicture.NET.14">
|
||||||
<HintPath>D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll</HintPath>
|
<HintPath>D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -150,6 +154,12 @@
|
|||||||
<Compile Include="frmMain.vb">
|
<Compile Include="frmMain.vb">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="frmRueckruf.Designer.vb">
|
||||||
|
<DependentUpon>frmRueckruf.vb</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="frmRueckruf.vb">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="frmSplashScreen.Designer.vb">
|
<Compile Include="frmSplashScreen.Designer.vb">
|
||||||
<DependentUpon>frmSplashScreen.vb</DependentUpon>
|
<DependentUpon>frmSplashScreen.vb</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -173,9 +183,11 @@
|
|||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="frmEnvelopeEditor.resx">
|
<EmbeddedResource Include="frmEnvelopeEditor.resx">
|
||||||
<DependentUpon>frmEnvelopeEditor.vb</DependentUpon>
|
<DependentUpon>frmEnvelopeEditor.vb</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="frmEnvelopeMainData.en.resx">
|
<EmbeddedResource Include="frmEnvelopeMainData.en.resx">
|
||||||
<DependentUpon>frmEnvelopeMainData.vb</DependentUpon>
|
<DependentUpon>frmEnvelopeMainData.vb</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="frmEnvelopeMainData.resx">
|
<EmbeddedResource Include="frmEnvelopeMainData.resx">
|
||||||
<DependentUpon>frmEnvelopeMainData.vb</DependentUpon>
|
<DependentUpon>frmEnvelopeMainData.vb</DependentUpon>
|
||||||
@@ -194,6 +206,9 @@
|
|||||||
<DependentUpon>frmMain.vb</DependentUpon>
|
<DependentUpon>frmMain.vb</DependentUpon>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="frmRueckruf.resx">
|
||||||
|
<DependentUpon>frmRueckruf.vb</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="frmSplashScreen.resx">
|
<EmbeddedResource Include="frmSplashScreen.resx">
|
||||||
<DependentUpon>frmSplashScreen.vb</DependentUpon>
|
<DependentUpon>frmSplashScreen.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
@@ -237,7 +252,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\EnvelopeGenerator.Common\EnvelopeGenerator.Common.vbproj">
|
<ProjectReference Include="..\EnvelopeGenerator.Common\EnvelopeGenerator.Common.vbproj">
|
||||||
<Project>{6ea0c51f-c2b1-4462-8198-3de0b32b74f8}</Project>
|
<Project>{6EA0C51F-C2B1-4462-8198-3DE0B32B74F8}</Project>
|
||||||
<Name>EnvelopeGenerator.Common</Name>
|
<Name>EnvelopeGenerator.Common</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Public Class Thumbnail
|
|||||||
MyBase.New(pLogConfig)
|
MyBase.New(pLogConfig)
|
||||||
|
|
||||||
GDViewer = New GdViewer()
|
GDViewer = New GdViewer()
|
||||||
Dim oGDPictureKey As String = "21182889975216572111813147150675976632"
|
Dim oGDPictureKey As String = MS_GDPICTUREKEY
|
||||||
|
|
||||||
Dim licenseManager As GdPicture14.LicenseManager = New GdPicture14.LicenseManager()
|
Dim licenseManager As GdPicture14.LicenseManager = New GdPicture14.LicenseManager()
|
||||||
licenseManager.RegisterKEY(oGDPictureKey)
|
licenseManager.RegisterKEY(oGDPictureKey)
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Database
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
Module ModuleSettings
|
Module ModuleSettings
|
||||||
Public DOCUMENT_PATH_MOVE_AFTSEND As String = ""
|
Public DOCUMENT_PATH_MOVE_AFTSEND As String = ""
|
||||||
Public CurrLogConfig As LogConfig
|
Public CurrLogConfig As LogConfig
|
||||||
Public Directory2Delete As String = ""
|
Public Directory2Delete As String = ""
|
||||||
|
Public MS_GDPICTUREKEY As String = ""
|
||||||
|
Public DB_DD_ECM As MSSQLServer = Nothing
|
||||||
End Module
|
End Module
|
||||||
|
|||||||
@@ -34,5 +34,11 @@ Namespace My
|
|||||||
Protected Overrides Sub OnCreateMainForm()
|
Protected Overrides Sub OnCreateMainForm()
|
||||||
Me.MainForm = Global.EnvelopeGenerator.Form.frmSplashScreen
|
Me.MainForm = Global.EnvelopeGenerator.Form.frmSplashScreen
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
|
||||||
|
Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean
|
||||||
|
Me.MinimumSplashScreenDisplayTime = 0
|
||||||
|
Return MyBase.OnInitialize(commandLineArgs)
|
||||||
|
End Function
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|||||||
@@ -6,5 +6,7 @@
|
|||||||
<ShutdownMode>0</ShutdownMode>
|
<ShutdownMode>0</ShutdownMode>
|
||||||
<EnableVisualStyles>true</EnableVisualStyles>
|
<EnableVisualStyles>true</EnableVisualStyles>
|
||||||
<AuthenticationMode>0</AuthenticationMode>
|
<AuthenticationMode>0</AuthenticationMode>
|
||||||
|
<MinimumSplashScreenDisplayTime>0</MinimumSplashScreenDisplayTime>
|
||||||
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
|
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
|
||||||
|
<HighDpiMpde>false</HighDpiMpde>
|
||||||
</MyApplicationData>
|
</MyApplicationData>
|
||||||
@@ -32,5 +32,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' You can specify all the values or you can default the Build and Revision Numbers
|
' You can specify all the values or you can default the Build and Revision Numbers
|
||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' [assembly: AssemblyVersion("1.0.*")]
|
' [assembly: AssemblyVersion("1.0.*")]
|
||||||
<Assembly: AssemblyVersion("2.5.0.0")>
|
<Assembly: AssemblyVersion("2.7.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.0.0.0")>
|
<Assembly: AssemblyFileVersion("1.0.0.0")>
|
||||||
|
|||||||
@@ -52,24 +52,6 @@ Partial Friend NotInheritable Class Settings
|
|||||||
Return defaultInstance
|
Return defaultInstance
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
|
|
||||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
|
||||||
Global.System.Configuration.DefaultSettingValueAttribute("dd-san01\Administrator")> _
|
|
||||||
Public ReadOnly Property NetUse_Usr() As String
|
|
||||||
Get
|
|
||||||
Return CType(Me("NetUse_Usr"),String)
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
|
|
||||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
|
||||||
Global.System.Configuration.DefaultSettingValueAttribute("sY4vnATDXwosbTJGip6SqA==")> _
|
|
||||||
Public ReadOnly Property NetUse_PW() As String
|
|
||||||
Get
|
|
||||||
Return CType(Me("NetUse_PW"),String)
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
Namespace My
|
Namespace My
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="Settings">
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
<Profiles />
|
<Profiles />
|
||||||
<Settings>
|
<Settings />
|
||||||
<Setting Name="NetUse_Usr" Type="System.String" Scope="Application">
|
|
||||||
<Value Profile="(Default)">dd-san01\Administrator</Value>
|
|
||||||
</Setting>
|
|
||||||
<Setting Name="NetUse_PW" Type="System.String" Scope="Application">
|
|
||||||
<Value Profile="(Default)">sY4vnATDXwosbTJGip6SqA==</Value>
|
|
||||||
</Setting>
|
|
||||||
</Settings>
|
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
@@ -2,19 +2,10 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<configSections>
|
<configSections>
|
||||||
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
|
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
|
||||||
<section name="EnvelopeGenerator.Form.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
|
||||||
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
</sectionGroup>
|
</sectionGroup>
|
||||||
</configSections>
|
</configSections>
|
||||||
<applicationSettings>
|
<applicationSettings>
|
||||||
<EnvelopeGenerator.Form.Settings>
|
|
||||||
<setting name="NetUse_Usr" serializeAs="String">
|
|
||||||
<value>dd-san01\Administrator</value>
|
|
||||||
</setting>
|
|
||||||
<setting name="NetUse_PW" serializeAs="String">
|
|
||||||
<value>sY4vnATDXwosbTJGip6SqA==</value>
|
|
||||||
</setting>
|
|
||||||
</EnvelopeGenerator.Form.Settings>
|
|
||||||
<DevExpress.LookAndFeel.Design.AppSettings>
|
<DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
<setting name="DPIAwarenessMode" serializeAs="String">
|
<setting name="DPIAwarenessMode" serializeAs="String">
|
||||||
<value>System</value>
|
<value>System</value>
|
||||||
@@ -23,10 +14,10 @@
|
|||||||
<value>True</value>
|
<value>True</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="DefaultAppSkin" serializeAs="String">
|
<setting name="DefaultAppSkin" serializeAs="String">
|
||||||
<value>Skin/Office 2019 White</value>
|
<value>Skin/The Bezier</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="DefaultPalette" serializeAs="String">
|
<setting name="DefaultPalette" serializeAs="String">
|
||||||
<value></value>
|
<value>VS 2019 Blue</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="TouchUI" serializeAs="String">
|
<setting name="TouchUI" serializeAs="String">
|
||||||
<value></value>
|
<value></value>
|
||||||
|
|||||||
26
EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb
generated
26
EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb
generated
@@ -57,6 +57,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.txtEnvelopeIdLabel2 = New DevExpress.XtraBars.BarStaticItem()
|
Me.txtEnvelopeIdLabel2 = New DevExpress.XtraBars.BarStaticItem()
|
||||||
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
|
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
|
||||||
Me.BarStaticItem1 = New DevExpress.XtraBars.BarStaticItem()
|
Me.BarStaticItem1 = New DevExpress.XtraBars.BarStaticItem()
|
||||||
|
Me.BarButtonItem2 = 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()
|
||||||
@@ -239,9 +240,9 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
'RibbonControl1
|
'RibbonControl1
|
||||||
'
|
'
|
||||||
Me.RibbonControl1.ExpandCollapseItem.Id = 0
|
Me.RibbonControl1.ExpandCollapseItem.Id = 0
|
||||||
Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.btnSave, Me.btnCancel, Me.btnNewFile, Me.btnDeleteFile, Me.btnSendEnvelope, Me.btnEditFields, Me.btnDeleteReceiver, Me.btnEditData, Me.txtCreatorEmailLabel, Me.txtEnvelopeIdLabel2, Me.BarButtonItem1, Me.BarStaticItem1})
|
Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.btnSave, Me.btnCancel, Me.btnNewFile, Me.btnDeleteFile, Me.btnSendEnvelope, Me.btnEditFields, Me.btnDeleteReceiver, Me.btnEditData, Me.txtCreatorEmailLabel, Me.txtEnvelopeIdLabel2, Me.BarButtonItem1, Me.BarStaticItem1, Me.BarButtonItem2})
|
||||||
resources.ApplyResources(Me.RibbonControl1, "RibbonControl1")
|
resources.ApplyResources(Me.RibbonControl1, "RibbonControl1")
|
||||||
Me.RibbonControl1.MaxItemId = 14
|
Me.RibbonControl1.MaxItemId = 15
|
||||||
Me.RibbonControl1.Name = "RibbonControl1"
|
Me.RibbonControl1.Name = "RibbonControl1"
|
||||||
Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
|
Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
|
||||||
Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
|
Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
|
||||||
@@ -335,6 +336,12 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.BarStaticItem1.Id = 13
|
Me.BarStaticItem1.Id = 13
|
||||||
Me.BarStaticItem1.Name = "BarStaticItem1"
|
Me.BarStaticItem1.Name = "BarStaticItem1"
|
||||||
'
|
'
|
||||||
|
'BarButtonItem2
|
||||||
|
'
|
||||||
|
resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2")
|
||||||
|
Me.BarButtonItem2.Id = 14
|
||||||
|
Me.BarButtonItem2.Name = "BarButtonItem2"
|
||||||
|
'
|
||||||
'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})
|
||||||
@@ -391,7 +398,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.LayoutControlGroup4.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlGroup5})
|
Me.LayoutControlGroup4.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlGroup5})
|
||||||
Me.LayoutControlGroup4.Name = "LayoutControlGroup4"
|
Me.LayoutControlGroup4.Name = "LayoutControlGroup4"
|
||||||
Me.LayoutControlGroup4.Padding = New DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0)
|
Me.LayoutControlGroup4.Padding = New DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0)
|
||||||
Me.LayoutControlGroup4.Size = New System.Drawing.Size(251, 530)
|
Me.LayoutControlGroup4.Size = New System.Drawing.Size(251, 526)
|
||||||
Me.LayoutControlGroup4.TextVisible = False
|
Me.LayoutControlGroup4.TextVisible = False
|
||||||
'
|
'
|
||||||
'LayoutControlGroup5
|
'LayoutControlGroup5
|
||||||
@@ -399,7 +406,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.LayoutControlGroup5.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem5})
|
Me.LayoutControlGroup5.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem5})
|
||||||
Me.LayoutControlGroup5.Location = New System.Drawing.Point(0, 0)
|
Me.LayoutControlGroup5.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.LayoutControlGroup5.Name = "LayoutControlGroup5"
|
Me.LayoutControlGroup5.Name = "LayoutControlGroup5"
|
||||||
Me.LayoutControlGroup5.Size = New System.Drawing.Size(251, 530)
|
Me.LayoutControlGroup5.Size = New System.Drawing.Size(251, 526)
|
||||||
resources.ApplyResources(Me.LayoutControlGroup5, "LayoutControlGroup5")
|
resources.ApplyResources(Me.LayoutControlGroup5, "LayoutControlGroup5")
|
||||||
'
|
'
|
||||||
'LayoutControlItem5
|
'LayoutControlItem5
|
||||||
@@ -407,7 +414,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.LayoutControlItem5.Control = Me.GridDocuments
|
Me.LayoutControlItem5.Control = Me.GridDocuments
|
||||||
Me.LayoutControlItem5.Location = New System.Drawing.Point(0, 0)
|
Me.LayoutControlItem5.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.LayoutControlItem5.Name = "LayoutControlItem5"
|
Me.LayoutControlItem5.Name = "LayoutControlItem5"
|
||||||
Me.LayoutControlItem5.Size = New System.Drawing.Size(227, 485)
|
Me.LayoutControlItem5.Size = New System.Drawing.Size(227, 477)
|
||||||
Me.LayoutControlItem5.TextSize = New System.Drawing.Size(0, 0)
|
Me.LayoutControlItem5.TextSize = New System.Drawing.Size(0, 0)
|
||||||
Me.LayoutControlItem5.TextVisible = False
|
Me.LayoutControlItem5.TextVisible = False
|
||||||
'
|
'
|
||||||
@@ -571,7 +578,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.LayoutControlItem2.Control = Me.GridReceivers
|
Me.LayoutControlItem2.Control = Me.GridReceivers
|
||||||
Me.LayoutControlItem2.Location = New System.Drawing.Point(0, 0)
|
Me.LayoutControlItem2.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.LayoutControlItem2.Name = "LayoutControlItem2"
|
Me.LayoutControlItem2.Name = "LayoutControlItem2"
|
||||||
Me.LayoutControlItem2.Size = New System.Drawing.Size(875, 204)
|
Me.LayoutControlItem2.Size = New System.Drawing.Size(875, 200)
|
||||||
Me.LayoutControlItem2.TextSize = New System.Drawing.Size(0, 0)
|
Me.LayoutControlItem2.TextSize = New System.Drawing.Size(0, 0)
|
||||||
Me.LayoutControlItem2.TextVisible = False
|
Me.LayoutControlItem2.TextVisible = False
|
||||||
'
|
'
|
||||||
@@ -604,7 +611,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.Root.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlGroup1})
|
Me.Root.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlGroup1})
|
||||||
Me.Root.Name = "Root"
|
Me.Root.Name = "Root"
|
||||||
Me.Root.Padding = New DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0)
|
Me.Root.Padding = New DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0)
|
||||||
Me.Root.Size = New System.Drawing.Size(899, 263)
|
Me.Root.Size = New System.Drawing.Size(899, 259)
|
||||||
Me.Root.TextVisible = False
|
Me.Root.TextVisible = False
|
||||||
'
|
'
|
||||||
'LayoutControlGroup1
|
'LayoutControlGroup1
|
||||||
@@ -613,7 +620,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.LayoutControlGroup1.Location = New System.Drawing.Point(0, 0)
|
Me.LayoutControlGroup1.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.LayoutControlGroup1.Name = "LayoutControlGroup1"
|
Me.LayoutControlGroup1.Name = "LayoutControlGroup1"
|
||||||
Me.LayoutControlGroup1.Padding = New DevExpress.XtraLayout.Utils.Padding(10, 10, 10, 10)
|
Me.LayoutControlGroup1.Padding = New DevExpress.XtraLayout.Utils.Padding(10, 10, 10, 10)
|
||||||
Me.LayoutControlGroup1.Size = New System.Drawing.Size(899, 263)
|
Me.LayoutControlGroup1.Size = New System.Drawing.Size(899, 259)
|
||||||
resources.ApplyResources(Me.LayoutControlGroup1, "LayoutControlGroup1")
|
resources.ApplyResources(Me.LayoutControlGroup1, "LayoutControlGroup1")
|
||||||
'
|
'
|
||||||
'LayoutControlItem3
|
'LayoutControlItem3
|
||||||
@@ -622,7 +629,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Me.LayoutControlItem3.Location = New System.Drawing.Point(0, 0)
|
Me.LayoutControlItem3.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.LayoutControlItem3.Name = "LayoutControlItem3"
|
Me.LayoutControlItem3.Name = "LayoutControlItem3"
|
||||||
Me.LayoutControlItem3.Padding = New DevExpress.XtraLayout.Utils.Padding(10, 10, 10, 10)
|
Me.LayoutControlItem3.Padding = New DevExpress.XtraLayout.Utils.Padding(10, 10, 10, 10)
|
||||||
Me.LayoutControlItem3.Size = New System.Drawing.Size(873, 216)
|
Me.LayoutControlItem3.Size = New System.Drawing.Size(873, 208)
|
||||||
resources.ApplyResources(Me.LayoutControlItem3, "LayoutControlItem3")
|
resources.ApplyResources(Me.LayoutControlItem3, "LayoutControlItem3")
|
||||||
Me.LayoutControlItem3.TextLocation = DevExpress.Utils.Locations.Top
|
Me.LayoutControlItem3.TextLocation = DevExpress.Utils.Locations.Top
|
||||||
Me.LayoutControlItem3.TextSize = New System.Drawing.Size(49, 13)
|
Me.LayoutControlItem3.TextSize = New System.Drawing.Size(49, 13)
|
||||||
@@ -775,6 +782,7 @@ Partial Public Class frmEnvelopeEditor
|
|||||||
Friend WithEvents colPageCount As DevExpress.XtraGrid.Columns.TileViewColumn
|
Friend WithEvents colPageCount As DevExpress.XtraGrid.Columns.TileViewColumn
|
||||||
Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
|
Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
|
||||||
Friend WithEvents BarStaticItem1 As DevExpress.XtraBars.BarStaticItem
|
Friend WithEvents BarStaticItem1 As DevExpress.XtraBars.BarStaticItem
|
||||||
|
Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
|
||||||
|
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
<value>0, 132</value>
|
<value>0, 132</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GridDocuments.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="GridDocuments.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>14, 35</value>
|
<value>14, 39</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="colFilename.Caption" xml:space="preserve">
|
<data name="colFilename.Caption" xml:space="preserve">
|
||||||
<value>Dateiname</value>
|
<value>Dateiname</value>
|
||||||
@@ -322,7 +322,7 @@
|
|||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnEditData.Caption" xml:space="preserve">
|
<data name="btnEditData.Caption" xml:space="preserve">
|
||||||
<value>Bearbeite Daten</value>
|
<value>Titel und Typ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnEditData.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="btnEditData.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
@@ -411,6 +411,9 @@
|
|||||||
<data name="BarButtonItem1.Caption" xml:space="preserve">
|
<data name="BarButtonItem1.Caption" xml:space="preserve">
|
||||||
<value>BarButtonItem1</value>
|
<value>BarButtonItem1</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="BarButtonItem2.Caption" xml:space="preserve">
|
||||||
|
<value>Öffnen</value>
|
||||||
|
</data>
|
||||||
<data name="RibbonControl1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="RibbonControl1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -436,10 +439,10 @@
|
|||||||
<value>1164, 132</value>
|
<value>1164, 132</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RibbonStatusBar1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="RibbonStatusBar1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 662</value>
|
<value>0, 658</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RibbonStatusBar1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="RibbonStatusBar1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>1164, 22</value>
|
<value>1164, 26</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>RibbonStatusBar1.Name" xml:space="preserve">
|
<data name=">>RibbonStatusBar1.Name" xml:space="preserve">
|
||||||
<value>RibbonStatusBar1</value>
|
<value>RibbonStatusBar1</value>
|
||||||
@@ -466,7 +469,7 @@
|
|||||||
<value>2</value>
|
<value>2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GridDocuments.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="GridDocuments.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>223, 481</value>
|
<value>223, 473</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GridDocuments.TabIndex" type="System.Int32, mscorlib">
|
<data name="GridDocuments.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
@@ -493,7 +496,7 @@
|
|||||||
<value>Ihre Dokumente</value>
|
<value>Ihre Dokumente</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LayoutControl3.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="LayoutControl3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>251, 530</value>
|
<value>251, 526</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LayoutControl3.TabIndex" type="System.Int32, mscorlib">
|
<data name="LayoutControl3.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
@@ -535,10 +538,10 @@
|
|||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="EnvelopeReceiverBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="EnvelopeReceiverBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>338, 17</value>
|
<value>334, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="GridReceivers.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="GridReceivers.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>14, 35</value>
|
<value>14, 39</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="colColor.Caption" xml:space="preserve">
|
<data name="colColor.Caption" xml:space="preserve">
|
||||||
<value> </value>
|
<value> </value>
|
||||||
@@ -632,7 +635,7 @@
|
|||||||
<value>Combo</value>
|
<value>Combo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GridReceivers.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="GridReceivers.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>871, 200</value>
|
<value>871, 196</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GridReceivers.TabIndex" type="System.Int32, mscorlib">
|
<data name="GridReceivers.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
@@ -725,13 +728,13 @@
|
|||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtMessage.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="txtMessage.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>23, 60</value>
|
<value>23, 64</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtMessage.Properties.Appearance.Font" type="System.Drawing.Font, System.Drawing">
|
<data name="txtMessage.Properties.Appearance.Font" type="System.Drawing.Font, System.Drawing">
|
||||||
<value>Segoe UI, 9.75pt</value>
|
<value>Segoe UI, 9.75pt</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtMessage.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="txtMessage.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>853, 180</value>
|
<value>853, 172</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtMessage.TabIndex" type="System.Int32, mscorlib">
|
<data name="txtMessage.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
@@ -761,7 +764,7 @@
|
|||||||
<value>Ihre Nachricht</value>
|
<value>Ihre Nachricht</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LayoutControl1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="LayoutControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>899, 263</value>
|
<value>899, 259</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LayoutControl1.TabIndex" type="System.Int32, mscorlib">
|
<data name="LayoutControl1.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
@@ -791,7 +794,7 @@
|
|||||||
<value>0, 0, 0, 0</value>
|
<value>0, 0, 0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PanelControl2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="PanelControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>903, 267</value>
|
<value>903, 263</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PanelControl2.TabIndex" type="System.Int32, mscorlib">
|
<data name="PanelControl2.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
@@ -824,7 +827,7 @@
|
|||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SplitContainerControl2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="SplitContainerControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>903, 530</value>
|
<value>903, 526</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SplitContainerControl2.TabIndex" type="System.Int32, mscorlib">
|
<data name="SplitContainerControl2.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
@@ -857,7 +860,7 @@
|
|||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SplitContainerControl1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="SplitContainerControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>1164, 530</value>
|
<value>1164, 526</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SplitContainerControl1.TabIndex" type="System.Int32, mscorlib">
|
<data name="SplitContainerControl1.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
@@ -875,13 +878,13 @@
|
|||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="FrmEditorBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="FrmEditorBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>801, 17</value>
|
<value>792, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="EnvelopeDocumentBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="EnvelopeDocumentBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>564, 17</value>
|
<value>557, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>196, 17</value>
|
<value>193, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="OpenFileDialog1.Filter" xml:space="preserve">
|
<data name="OpenFileDialog1.Filter" xml:space="preserve">
|
||||||
<value>PDF Files|*.pdf</value>
|
<value>PDF Files|*.pdf</value>
|
||||||
@@ -1049,6 +1052,12 @@
|
|||||||
<data name=">>BarStaticItem1.Type" xml:space="preserve">
|
<data name=">>BarStaticItem1.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=">>BarButtonItem2.Name" xml:space="preserve">
|
||||||
|
<value>BarButtonItem2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>BarButtonItem2.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>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user