Compare commits
517 Commits
d47f75133d
...
feat/envel
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
891f6368f1 | ||
|
|
e6011b6201 | ||
|
|
8b86114998 | ||
|
|
c20b115faf | ||
|
|
2c8ccd3e7c | ||
|
|
b1f771c320 | ||
|
|
425645a610 | ||
|
|
24e6ffc5ef | ||
|
|
1dd9ce6bbc | ||
|
|
e528fa6409 | ||
|
|
6440dd09d1 | ||
|
|
869493bd97 | ||
|
|
1cb9042736 | ||
|
|
c9410a1e2e | ||
|
|
c4f0ce7d4b | ||
|
|
dc83486032 | ||
|
|
2a64091c87 | ||
|
|
f65f749208 | ||
|
|
0b6ed00062 | ||
|
|
e87c976e19 | ||
|
|
f31ece3a59 | ||
|
|
cfd08602ab | ||
|
|
4b7152b272 | ||
|
|
5117a66c81 | ||
|
|
83794d4bbc | ||
|
|
76f74778b4 | ||
|
|
ded3425e31 | ||
|
|
738b379fe5 | ||
|
|
cf8b28441f | ||
|
|
0eb5897185 | ||
|
|
25cd1601a6 | ||
|
|
42e4d110ad | ||
|
|
2538f34892 | ||
|
|
3ce11f4cc7 | ||
|
|
f2cd34a79e | ||
|
|
5f923ad485 | ||
|
|
8f70f085d3 | ||
|
|
d6c09ed31a | ||
|
|
7d3ee1331d | ||
|
|
cd5b90a1e2 | ||
|
|
ac861f5fa0 | ||
|
|
c1d8f817bb | ||
|
|
da28a7332b | ||
|
|
bfd4e6a8ed | ||
|
|
b4e0e4b6b2 | ||
|
|
e37caf5c8f | ||
|
|
e95cf24af7 | ||
|
|
524a72caa0 | ||
|
|
1919c562cc | ||
|
|
62b54d6e75 | ||
|
|
efa9160c04 | ||
|
|
bc6955055a | ||
|
|
dc997d5ff2 | ||
|
|
a32f495038 | ||
|
|
210466883c | ||
|
|
728385b70a | ||
|
|
792aa0b922 | ||
|
|
6847b74095 | ||
|
|
54e86b421c | ||
|
|
370666cb0e | ||
|
|
e17f7df930 | ||
|
|
0e91df7acc | ||
|
|
ad26230da5 | ||
|
|
a103f34230 | ||
|
|
806bd3b248 | ||
|
|
c69c39fa44 | ||
|
|
b6badb44af | ||
|
|
b2195ce13f | ||
|
|
f3cb9b8510 | ||
|
|
8edfecb9dc | ||
|
|
c123d103bb | ||
|
|
b92d9da387 | ||
|
|
8841698aab | ||
|
|
6f140f16cd | ||
|
|
8bfd31997b | ||
|
|
4a1459d708 | ||
|
|
361bdeb2b2 | ||
|
|
9ce5af7cd0 | ||
|
|
84fa9e6e7c | ||
|
|
36916ed5c8 | ||
|
|
fb366d3e0b | ||
|
|
e82be8b6a5 | ||
|
|
07320af4ee | ||
|
|
73eb270237 | ||
|
|
222684cfc8 | ||
|
|
3974d2123e | ||
|
|
b837a63b34 | ||
|
|
461316713a | ||
|
|
185af3210b | ||
|
|
e4620b5469 | ||
|
|
5c4acd17a0 | ||
|
|
fc171e5b89 | ||
|
|
662faf2512 | ||
|
|
2fb8af9a4f | ||
|
|
017d03713b | ||
|
|
5f5180d937 | ||
|
|
6b3e6cd6f5 | ||
|
|
f95f3c7b1b | ||
|
|
316b62083c | ||
|
|
530b63f299 | ||
|
|
2f228de163 | ||
|
|
e5e64b25fe | ||
|
|
2d5dde177c | ||
|
|
ce0ad4ba61 | ||
|
|
ebd7c5d6a4 | ||
|
|
341da273c9 | ||
|
|
73d2a43a95 | ||
|
|
eee18889d6 | ||
|
|
590d7fb717 | ||
|
|
dd28ef7ab6 | ||
|
|
36fb033adc | ||
|
|
4275f25f4a | ||
|
|
30b5633498 | ||
|
|
00545fdc50 | ||
|
|
d80e511b08 | ||
|
|
7313355a83 | ||
|
|
66466dc865 | ||
|
|
8cd8df4b02 | ||
|
|
dd7454d38e | ||
|
|
f7c3ed280a | ||
|
|
9ffeb7afe8 | ||
|
|
a83994af43 | ||
|
|
8345034fcd | ||
|
|
a763d3c353 | ||
|
|
5ba5d2755b | ||
|
|
d6bcb8c43d | ||
|
|
2aa2064a67 | ||
|
|
f403d12073 | ||
|
|
b66c2f67da | ||
|
|
d084a4cd81 | ||
|
|
5d2bf56493 | ||
|
|
cd88f5c833 | ||
|
|
ab41e25071 | ||
|
|
eb775da7d4 | ||
|
|
7bc2695da4 | ||
|
|
75fff426bc | ||
|
|
4172df4d78 | ||
|
|
01856b61ef | ||
|
|
2e32559132 | ||
|
|
9adb49df78 | ||
|
|
18e21b0a8e | ||
|
|
e1d7d0e141 | ||
|
|
cfa40e640b | ||
|
|
cb0a45bc17 | ||
|
|
c7b6e5bf24 | ||
|
|
a9ca1b71eb | ||
|
|
97f07bc72d | ||
|
|
8753875d93 | ||
|
|
3692aa80a4 | ||
|
|
b8b09ded5d | ||
|
|
5b8d8b9e55 | ||
|
|
e3fbf4fc77 | ||
|
|
8d680992b7 | ||
|
|
01247f73f4 | ||
|
|
6a7a3dcb90 | ||
|
|
2fbfbb4eb6 | ||
|
|
f88b5d2733 | ||
|
|
363358aaa1 | ||
|
|
7444eeba2a | ||
|
|
e9d686a4c1 | ||
|
|
939ba1bb47 | ||
|
|
d5de868eb9 | ||
|
|
6e3bb6c3a0 | ||
|
|
d347ec420c | ||
|
|
a011b677ea | ||
|
|
8831436809 | ||
|
|
1ededc1f64 | ||
|
|
183c94fd0a | ||
|
|
8629599f86 | ||
|
|
a0a5568d93 | ||
|
|
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 | ||
|
|
8de0d70e7b | ||
|
|
b43b1ef866 | ||
|
|
b8d4abb7b2 | ||
|
|
b65766ce24 | ||
| 83746abb1b | |||
| c14ed86181 | |||
| 56eb385312 | |||
| 5abc1d9779 | |||
|
|
6fc210132d | ||
| a3c66ecd19 | |||
| a25b517445 | |||
|
|
181ee67bab | ||
|
|
c459828706 | ||
|
|
6f59906a7e | ||
| 21baf0bad0 | |||
| 47f924ad7e | |||
| a2b0682a77 | |||
| 86d9bd185a | |||
| 0064eee9d5 | |||
| d4aa3ec82e | |||
| 55f2a6a775 | |||
| 4cd39c6c5c | |||
| 51741be5de | |||
| 31ca8b8b9e | |||
| dd55e2a2d9 | |||
|
|
02a197e535 | ||
|
|
ddd0808f41 | ||
|
|
c504567c41 | ||
|
|
6131948f2a | ||
|
|
0a01bf59ef | ||
|
|
a4ed41419d | ||
|
|
6460c2b4ea | ||
|
|
91930c94e9 | ||
|
|
e0bbdf8c0e | ||
|
|
c8106f4fb0 | ||
|
|
9f568e357e | ||
|
|
52ffcc21cc | ||
|
|
32a965800e | ||
|
|
c7dba51ec9 | ||
| 8657c0b212 | |||
| 54debebd05 | |||
| c77772aa7c | |||
|
|
37908b6a1b | ||
|
|
277f5d3f0d | ||
| 2723b10a45 | |||
|
|
b7fbb21076 | ||
|
|
b849a8d87b | ||
|
|
26fe798a68 | ||
|
|
119f54e8aa | ||
|
|
73cb1d8963 | ||
|
|
9b39f0b4ae | ||
|
|
f54532a4b1 | ||
|
|
13b9003186 | ||
|
|
bdf7bdd37a | ||
|
|
0ad1d214ba | ||
|
|
eea1bd2177 | ||
|
|
d8742332ec | ||
|
|
27a611e8dc | ||
|
|
f50a19d537 | ||
|
|
0dfc9b4f09 | ||
|
|
8581cb555a | ||
|
|
97987aa22f | ||
|
|
f8b30e1a06 | ||
|
|
788d7fac9f | ||
|
|
c4e9f5aa2b | ||
|
|
d8ba020bb9 | ||
|
|
fd4dd8b457 | ||
|
|
bc178caec1 | ||
|
|
49e6da3d79 | ||
|
|
feb429f8f8 | ||
|
|
d1fc258f19 | ||
|
|
681583b3f0 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -360,4 +360,6 @@ MigrationBackup/
|
|||||||
.ionide/
|
.ionide/
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Configurations
|
||||||
|
{
|
||||||
|
public class DispatcherConfig
|
||||||
|
{
|
||||||
|
public int SendingProfile { get; init; } = 1;
|
||||||
|
|
||||||
|
public string AddedWho { get; init; } = "DDEnvelopGenerator";
|
||||||
|
|
||||||
|
public int ReminderTypeId { get; init; } = 202377;
|
||||||
|
|
||||||
|
public string EmailAttmt1 { get; init; } = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Configurations
|
||||||
|
{
|
||||||
|
public class MailConfig
|
||||||
|
{
|
||||||
|
public required Dictionary<string, string> Placeholders { get; init; }
|
||||||
|
}
|
||||||
|
}
|
||||||
17
EnvelopeGenerator.Application/Contracts/IConfigService.cs
Normal file
17
EnvelopeGenerator.Application/Contracts/IConfigService.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IConfigService : IReadService<ConfigDto, Config, int>
|
||||||
|
{
|
||||||
|
Task<DataResult<ConfigDto>> ReadFirstAsync();
|
||||||
|
|
||||||
|
Task<ConfigDto> ReadDefaultAsync();
|
||||||
|
|
||||||
|
Task<string> ReadDefaultSignatureHost();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IDocumentReceiverElementService : IBasicCRUDService<DocumentReceiverElementDto, DocumentReceiverElement, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IDocumentStatusService : IBasicCRUDService<DocumentStatusDto, DocumentStatus, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEmailTemplateService : IBasicCRUDService<EmailTemplateDto, EmailTemplate, int>
|
||||||
|
{
|
||||||
|
Task<DataResult<EmailTemplateDto>> ReadByNameAsync(EmailTemplateType type);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeCertificateService : IBasicCRUDService<EnvelopeCertificateDto, EnvelopeCertificate, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeDocumentService : IBasicCRUDService<EnvelopeDocumentDto, EnvelopeDocument, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeHistoryService : ICRUDService<EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>
|
||||||
|
{
|
||||||
|
Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null);
|
||||||
|
|
||||||
|
Task<bool> AccessCodeAlreadyRequested(int envelopeId, string userReference);
|
||||||
|
|
||||||
|
Task<bool> IsSigned(int envelopeId, string userReference);
|
||||||
|
|
||||||
|
Task<bool> IsRejected(int envelopeId, string? userReference = null);
|
||||||
|
|
||||||
|
Task<IEnumerable<EnvelopeHistoryDto>> ReadAsync(int? envelopeId = null, string? userReference = null, ReferenceType? referenceType = null, int? status = null, bool withSender = false, bool withReceiver = false);
|
||||||
|
|
||||||
|
Task<IEnumerable<EnvelopeHistoryDto>> ReadRejectedAsync(int envelopeId, string? userReference = null);
|
||||||
|
|
||||||
|
Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId);
|
||||||
|
|
||||||
|
Task<DataResult<long>> RecordAsync(int envelopeId, string userReference, EnvelopeStatus status, string? comment = null);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
|
using EnvelopeGenerator.Common;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeMailService : IEmailOutService
|
||||||
|
{
|
||||||
|
Task<DataResult<int>> SendAsync(EnvelopeReceiverDto envelopeReceiverDto, Constants.EmailTemplateType tempType);
|
||||||
|
|
||||||
|
Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto);
|
||||||
|
|
||||||
|
Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeReceiverReadOnlyService : ICRUDService<EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnlyDto, EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly, long>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeReceiverService : IBasicCRUDService<EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>
|
||||||
|
{
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false);
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeReceiverSecretDto>>> ReadSecretByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs
Normal file
16
EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IEnvelopeService : IBasicCRUDService<EnvelopeDto, Envelope, int>
|
||||||
|
{
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeDto>>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false);
|
||||||
|
|
||||||
|
Task<DataResult<EnvelopeDto>> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false);
|
||||||
|
|
||||||
|
Task<DataResult<IEnumerable<EnvelopeDto>>> ReadByUserAsync(int userId, int? min_status = null, int? max_status = null, params int[]ignore_statuses);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
14
EnvelopeGenerator.Application/Contracts/IReceiverService.cs
Normal file
14
EnvelopeGenerator.Application/Contracts/IReceiverService.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IReceiverService : ICRUDService<ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
|
||||||
|
{
|
||||||
|
public Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null);
|
||||||
|
|
||||||
|
public Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions.Application;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface IUserReceiverService : IBasicCRUDService<UserReceiverDto, UserReceiver, int>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
63
EnvelopeGenerator.Application/DIExtensions.cs
Normal file
63
EnvelopeGenerator.Application/DIExtensions.cs
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
using DigitalData.UserManager.Application.MappingProfiles;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.MappingProfiles;
|
||||||
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
|
using EnvelopeGenerator.Application.Services;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Repositories;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application
|
||||||
|
{
|
||||||
|
public static class DIExtensions
|
||||||
|
{
|
||||||
|
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfiguration dispatcherConfigSection, IConfiguration mailConfigSection)
|
||||||
|
{
|
||||||
|
//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<IEnvelopeReceiverReadOnlyRepository, EnvelopeReceiverReadOnlyRepository>();
|
||||||
|
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>();
|
||||||
|
services.AddScoped<IEnvelopeReceiverReadOnlyService, EnvelopeReceiverReadOnlyService>();
|
||||||
|
|
||||||
|
//Auto mapping profiles
|
||||||
|
services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly);
|
||||||
|
services.AddAutoMapper(typeof(UserMappingProfile).Assembly);
|
||||||
|
|
||||||
|
services.Configure<DispatcherConfig>(dispatcherConfigSection);
|
||||||
|
services.Configure<MailConfig>(mailConfigSection);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfiguration config) => services.AddEnvelopeGenerator(
|
||||||
|
dispatcherConfigSection: config.GetSection("DispatcherConfig"),
|
||||||
|
mailConfigSection: config.GetSection("MailConfig"));
|
||||||
|
}
|
||||||
|
}
|
||||||
20
EnvelopeGenerator.Application/DTOs/ConfigDto.cs
Normal file
20
EnvelopeGenerator.Application/DTOs/ConfigDto.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record ConfigDto(
|
||||||
|
string DocumentPath,
|
||||||
|
int SendingProfile,
|
||||||
|
string SignatureHost,
|
||||||
|
string ExternalProgramName,
|
||||||
|
string ExportPath,
|
||||||
|
string DocumentPathDmz,
|
||||||
|
string ExportPathDmz,
|
||||||
|
string DocumentPathMoveAftsend) : IUnique<int>
|
||||||
|
{
|
||||||
|
[JsonIgnore]
|
||||||
|
[Obsolete("Configuration does not have an ID; it represents a single table in the database.")]
|
||||||
|
public int Id => throw new InvalidOperationException("This configuration does not support an ID as it represents a single row in the database.");
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record DocumentReceiverElementDto(
|
||||||
|
int Id,
|
||||||
|
int DocumentId,
|
||||||
|
int ReceiverId,
|
||||||
|
int ElementType,
|
||||||
|
double X,
|
||||||
|
double Y,
|
||||||
|
double Width,
|
||||||
|
double Height,
|
||||||
|
int Page,
|
||||||
|
bool Required,
|
||||||
|
string? Tooltip,
|
||||||
|
bool ReadOnly,
|
||||||
|
int AnnotationIndex,
|
||||||
|
DateTime AddedWhen,
|
||||||
|
DateTime? ChangedWhen,
|
||||||
|
double Top,
|
||||||
|
double Left
|
||||||
|
): IUnique<int>;
|
||||||
|
}
|
||||||
14
EnvelopeGenerator.Application/DTOs/DocumentStatusDto.cs
Normal file
14
EnvelopeGenerator.Application/DTOs/DocumentStatusDto.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record DocumentStatusDto(
|
||||||
|
int Id,
|
||||||
|
int EnvelopeId,
|
||||||
|
int ReceiverId,
|
||||||
|
int Status,
|
||||||
|
DateTime? StatusChangedWhen,
|
||||||
|
string Value,
|
||||||
|
DateTime AddedWhen,
|
||||||
|
DateTime? ChangedWhen) : IUnique<int>;
|
||||||
|
}
|
||||||
10
EnvelopeGenerator.Application/DTOs/EmailTemplateDto.cs
Normal file
10
EnvelopeGenerator.Application/DTOs/EmailTemplateDto.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record EmailTemplateDto(
|
||||||
|
int Id,
|
||||||
|
string Name,
|
||||||
|
string Body,
|
||||||
|
string Subject) : IUnique<int>;
|
||||||
|
}
|
||||||
14
EnvelopeGenerator.Application/DTOs/EnvelopeCertificateDto.cs
Normal file
14
EnvelopeGenerator.Application/DTOs/EnvelopeCertificateDto.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record EnvelopeCertificateDto(
|
||||||
|
int Id,
|
||||||
|
int EnvelopeId,
|
||||||
|
string EnvelopeUuid,
|
||||||
|
string EnvelopeSubject,
|
||||||
|
int CreatorId,
|
||||||
|
string CreatorName,
|
||||||
|
string CreatorEmail,
|
||||||
|
int EnvelopeStatus) : IUnique<int>;
|
||||||
|
}
|
||||||
12
EnvelopeGenerator.Application/DTOs/EnvelopeDocumentDto.cs
Normal file
12
EnvelopeGenerator.Application/DTOs/EnvelopeDocumentDto.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record EnvelopeDocumentDto
|
||||||
|
(
|
||||||
|
int Id,
|
||||||
|
int EnvelopeId,
|
||||||
|
DateTime AddedWhen,
|
||||||
|
IEnumerable<DocumentReceiverElementDto>? Elements
|
||||||
|
) : IUnique<int>;
|
||||||
|
}
|
||||||
67
EnvelopeGenerator.Application/DTOs/EnvelopeDto.cs
Normal file
67
EnvelopeGenerator.Application/DTOs/EnvelopeDto.cs
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
|
||||||
|
using DigitalData.UserManager.Application.DTOs.User;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record EnvelopeDto() : IUnique<int>
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public int UserId { get; set; }
|
||||||
|
|
||||||
|
public int Status { get; set; }
|
||||||
|
|
||||||
|
public string StatusName { get; set; }
|
||||||
|
|
||||||
|
public string Uuid { get; set; }
|
||||||
|
|
||||||
|
[TemplatePlaceholder("[MESSAGE]")]
|
||||||
|
public string Message { get; set; }
|
||||||
|
public DateTime? ExpiresWhen { get; set; }
|
||||||
|
public DateTime? ExpiresWarningWhen { get; set; }
|
||||||
|
public DateTime AddedWhen { get; set; }
|
||||||
|
public DateTime? ChangedWhen { get; set; }
|
||||||
|
|
||||||
|
[TemplatePlaceholder("[DOCUMENT_TITLE]")]
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
public int? ContractType { get; set; }
|
||||||
|
|
||||||
|
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,21 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
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,
|
||||||
|
string? StatusName,
|
||||||
|
DateTime AddedWhen,
|
||||||
|
DateTime? ActionDate,
|
||||||
|
UserCreateDto? Sender,
|
||||||
|
ReceiverReadDto? Receiver,
|
||||||
|
ReferenceType ReferenceType,
|
||||||
|
string? Comment = null) : BaseDTO<long>(Id), IUnique<long>;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiver
|
||||||
|
{
|
||||||
|
public record EnvelopeReceiverBasicDto() : IUnique<(int Envelope, int Receiver)>
|
||||||
|
{
|
||||||
|
public (int Envelope, int Receiver) Id => (Envelope: EnvelopeId, Receiver: ReceiverId);
|
||||||
|
|
||||||
|
public int EnvelopeId { get; init; }
|
||||||
|
|
||||||
|
public int ReceiverId { get; init; }
|
||||||
|
|
||||||
|
public int Sequence { get; init; }
|
||||||
|
|
||||||
|
[TemplatePlaceholder("[NAME_RECEIVER]")]
|
||||||
|
public string? Name { get; init; }
|
||||||
|
|
||||||
|
public string? JobTitle { get; init; }
|
||||||
|
|
||||||
|
public string? CompanyName { get; init; }
|
||||||
|
|
||||||
|
public string? PrivateMessage { get; init; }
|
||||||
|
|
||||||
|
public DateTime AddedWhen { get; init; }
|
||||||
|
|
||||||
|
public DateTime? ChangedWhen { get; init; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiver
|
||||||
|
{
|
||||||
|
public record EnvelopeReceiverDto() : EnvelopeReceiverBasicDto()
|
||||||
|
{
|
||||||
|
public EnvelopeDto? Envelope { get; set; }
|
||||||
|
|
||||||
|
public ReceiverReadDto? Receiver { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiver
|
||||||
|
{
|
||||||
|
public record EnvelopeReceiverSecretDto(string? AccessCode) : EnvelopeReceiverDto;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly
|
||||||
|
{
|
||||||
|
public record EnvelopeReceiverReadOnlyCreateDto(
|
||||||
|
DateTime DateValid)
|
||||||
|
{
|
||||||
|
[EmailAddress]
|
||||||
|
[Required]
|
||||||
|
public required string ReceiverMail { get; init; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public long? EnvelopeId { get; set; } = null;
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public string? AddedWho { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public DateTime AddedWhen { get; } = DateTime.Now;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly
|
||||||
|
{
|
||||||
|
public record EnvelopeReceiverReadOnlyDto(
|
||||||
|
long Id,
|
||||||
|
long EnvelopeId,
|
||||||
|
string ReceiverMail,
|
||||||
|
DateTime DateValid,
|
||||||
|
DateTime AddedWhen,
|
||||||
|
string AddedWho,
|
||||||
|
EnvelopeDto? Envelope = null,
|
||||||
|
string? ChangedWho = null,
|
||||||
|
DateTime? ChangedWhen = null,
|
||||||
|
ReceiverReadDto? Receiver = null);
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly
|
||||||
|
{
|
||||||
|
public record EnvelopeReceiverReadOnlyUpdateDto(
|
||||||
|
long Id,
|
||||||
|
DateTime DateValid,
|
||||||
|
string ChangedWho) : IUnique<long>
|
||||||
|
{
|
||||||
|
public DateTime ChangedWhen { get; } = DateTime.Now;
|
||||||
|
};
|
||||||
|
}
|
||||||
21
EnvelopeGenerator.Application/DTOs/EnvelopeTypeDto.cs
Normal file
21
EnvelopeGenerator.Application/DTOs/EnvelopeTypeDto.cs
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record EnvelopeTypeDto(
|
||||||
|
int Id,
|
||||||
|
string Title,
|
||||||
|
string Language,
|
||||||
|
int? ExpiresDays,
|
||||||
|
int? CertificationType,
|
||||||
|
bool? UseAccessCode,
|
||||||
|
int? FinalEmailToCreator,
|
||||||
|
int? FinalEmailToReceivers,
|
||||||
|
DateTime AddedWhen,
|
||||||
|
DateTime? ChangedWhen,
|
||||||
|
int? ExpiresWarningDays,
|
||||||
|
bool? SendReminderEmails,
|
||||||
|
int? FirstReminderDays,
|
||||||
|
int? ReminderIntervalDays,
|
||||||
|
int? ContractType) : IUnique<int>;
|
||||||
|
}
|
||||||
@@ -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,19 @@
|
|||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
||||||
|
{
|
||||||
|
public record ReceiverReadDto(
|
||||||
|
int Id,
|
||||||
|
string EmailAddress,
|
||||||
|
string Signature,
|
||||||
|
DateTime AddedWhen
|
||||||
|
) : BaseDTO<int>(Id)
|
||||||
|
{
|
||||||
|
[JsonIgnore]
|
||||||
|
public IEnumerable<EnvelopeReceiverBasicDto>? EnvelopeReceivers { get; init; }
|
||||||
|
|
||||||
|
public string? LastUsedName => EnvelopeReceivers?.LastOrDefault()?.Name;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs.Receiver
|
||||||
|
{
|
||||||
|
public record ReceiverUpdateDto(int Id) : IUnique<int>;
|
||||||
|
}
|
||||||
13
EnvelopeGenerator.Application/DTOs/UserReceiverDto.cs
Normal file
13
EnvelopeGenerator.Application/DTOs/UserReceiverDto.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using DigitalData.Core.Abstractions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.DTOs
|
||||||
|
{
|
||||||
|
public record UserReceiverDto(
|
||||||
|
int Id,
|
||||||
|
int UserId,
|
||||||
|
int ReceiverId,
|
||||||
|
string Name,
|
||||||
|
string CompanyName,
|
||||||
|
string JobTitle,
|
||||||
|
DateTime AddedWhen) : IUnique<int>;
|
||||||
|
}
|
||||||
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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="Resources\Model.Designer.vb" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||||
|
<PackageReference Include="DigitalData.Core.Abstractions" Version="2.0.0" />
|
||||||
|
<PackageReference Include="DigitalData.Core.Application" Version="2.0.0" />
|
||||||
|
<PackageReference Include="DigitalData.Core.DTO" Version="2.0.0" />
|
||||||
|
<PackageReference Include="DigitalData.EmailProfilerDispatcher" Version="2.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.18" />
|
||||||
|
<PackageReference Include="UserManager.Application" Version="2.0.0" />
|
||||||
|
<PackageReference Include="UserManager.Infrastructure" Version="2.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\EnvelopeGenerator.Extensions\EnvelopeGenerator.Extensions.csproj" />
|
||||||
|
<ProjectReference Include="..\EnvelopeGenerator.Infrastructure\EnvelopeGenerator.Infrastructure.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Resources\Model.Designer.cs">
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Model.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</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>
|
||||||
|
|
||||||
|
</Project>
|
||||||
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.MappingProfiles
|
||||||
|
{
|
||||||
|
public class BasicDtoMappingProfile : Profile
|
||||||
|
{
|
||||||
|
public BasicDtoMappingProfile()
|
||||||
|
{
|
||||||
|
// Entity to DTO mappings
|
||||||
|
CreateMap<Config, ConfigDto>();
|
||||||
|
CreateMap<DocumentReceiverElement, DocumentReceiverElementDto>();
|
||||||
|
CreateMap<DocumentStatus, DocumentStatusDto>();
|
||||||
|
CreateMap<EmailTemplate, EmailTemplateDto>();
|
||||||
|
CreateMap<Envelope, EnvelopeDto>();
|
||||||
|
CreateMap<EnvelopeCertificate, EnvelopeCertificateDto>();
|
||||||
|
CreateMap<EnvelopeDocument, EnvelopeDocumentDto>();
|
||||||
|
CreateMap<EnvelopeHistory, EnvelopeHistoryDto>();
|
||||||
|
CreateMap<EnvelopeHistory, EnvelopeHistoryCreateDto>();
|
||||||
|
CreateMap<EnvelopeReceiver, EnvelopeReceiverDto>();
|
||||||
|
CreateMap<EnvelopeReceiver, EnvelopeReceiverSecretDto>();
|
||||||
|
CreateMap<EnvelopeType, EnvelopeTypeDto>();
|
||||||
|
CreateMap<Receiver, ReceiverReadDto>();
|
||||||
|
CreateMap<Receiver, ReceiverCreateDto>();
|
||||||
|
CreateMap<Receiver, ReceiverUpdateDto>();
|
||||||
|
CreateMap<UserReceiver, UserReceiverDto>();
|
||||||
|
CreateMap<EnvelopeReceiverReadOnly, EnvelopeReceiverReadOnlyDto>();
|
||||||
|
|
||||||
|
// DTO to Entity mappings
|
||||||
|
CreateMap<ConfigDto, Config>();
|
||||||
|
CreateMap<DocumentReceiverElementDto, DocumentReceiverElement>();
|
||||||
|
CreateMap<DocumentStatusDto, DocumentStatus>();
|
||||||
|
CreateMap<EmailTemplateDto, EmailTemplate>();
|
||||||
|
CreateMap<EnvelopeDto, Envelope>();
|
||||||
|
CreateMap<EnvelopeCertificateDto, EnvelopeCertificate>();
|
||||||
|
CreateMap<EnvelopeDocumentDto, EnvelopeDocument>();
|
||||||
|
CreateMap<EnvelopeHistoryDto, EnvelopeHistory>();
|
||||||
|
CreateMap<EnvelopeHistoryCreateDto, EnvelopeHistory>();
|
||||||
|
CreateMap<EnvelopeReceiverDto, EnvelopeReceiver>();
|
||||||
|
CreateMap<EnvelopeTypeDto, EnvelopeType>();
|
||||||
|
CreateMap<ReceiverReadDto, Receiver>();
|
||||||
|
CreateMap<ReceiverCreateDto, Receiver>();
|
||||||
|
CreateMap<ReceiverUpdateDto, Receiver>();
|
||||||
|
CreateMap<UserReceiverDto, UserReceiver>();
|
||||||
|
CreateMap<EnvelopeReceiverBase, EnvelopeReceiverBasicDto>();
|
||||||
|
CreateMap<EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnly>();
|
||||||
|
CreateMap<EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
222
EnvelopeGenerator.Application/Resources/Resource.de-DE.resx
Normal file
222
EnvelopeGenerator.Application/Resources/Resource.de-DE.resx
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
<?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="ReadOnlyMessage" xml:space="preserve">
|
||||||
|
<value>Weitergeleitet von {0}. Gültig bis {1}.</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>
|
||||||
222
EnvelopeGenerator.Application/Resources/Resource.en-US.resx
Normal file
222
EnvelopeGenerator.Application/Resources/Resource.en-US.resx
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
<?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="ReadOnlyMessage" xml:space="preserve">
|
||||||
|
<value>Forwarded by {0}. Valid until {1}.</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>
|
||||||
60
EnvelopeGenerator.Application/Services/ConfigService.cs
Normal file
60
EnvelopeGenerator.Application/Services/ConfigService.cs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class ConfigService : ReadService<IConfigRepository, ConfigDto, Config, int>, IConfigService
|
||||||
|
{
|
||||||
|
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<DataResult<ConfigDto>> ReadFirstAsync()
|
||||||
|
{
|
||||||
|
var config = await _repository.ReadFirstAsync();
|
||||||
|
return config is null
|
||||||
|
? Result.Fail<ConfigDto>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, "There is no configuration in DB.")
|
||||||
|
: Result.Success(_mapper.Map<ConfigDto>(config));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class DocumentReceiverElementService : BasicCRUDService<IDocumentReceiverElementRepository, DocumentReceiverElementDto, DocumentReceiverElement, int>, IDocumentReceiverElementService
|
||||||
|
{
|
||||||
|
public DocumentReceiverElementService(IDocumentReceiverElementRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class DocumentStatusService : BasicCRUDService<IDocumentStatusRepository, DocumentStatusDto, DocumentStatus, int>, IDocumentStatusService
|
||||||
|
{
|
||||||
|
public DocumentStatusService(IDocumentStatusRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EmailTemplateService : BasicCRUDService<IEmailTemplateRepository, EmailTemplateDto, EmailTemplate, int>, IEmailTemplateService
|
||||||
|
{
|
||||||
|
public EmailTemplateService(IEmailTemplateRepository repository, IMapper 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.Map<EmailTemplateDto>(temp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeCertificateService : BasicCRUDService<IEnvelopeCertificateRepository, EnvelopeCertificateDto, EnvelopeCertificate, int>, IEnvelopeCertificateService
|
||||||
|
{
|
||||||
|
public EnvelopeCertificateService(IEnvelopeCertificateRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeDocumentService : BasicCRUDService<IEnvelopeDocumentRepository, EnvelopeDocumentDto, EnvelopeDocument, int>, IEnvelopeDocumentService
|
||||||
|
{
|
||||||
|
public EnvelopeDocumentService(IEnvelopeDocumentRepository repository, IMapper mapper) : base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeHistoryService : CRUDService<IEnvelopeHistoryRepository, EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>, IEnvelopeHistoryService
|
||||||
|
{
|
||||||
|
public EnvelopeHistoryService(IEnvelopeHistoryRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null) => await _repository.CountAsync(envelopeId: envelopeId, userReference: userReference, status: status);
|
||||||
|
|
||||||
|
public async Task<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.Map<IEnumerable<EnvelopeHistoryDto>>(
|
||||||
|
await _repository.ReadAsync(
|
||||||
|
envelopeId: envelopeId,
|
||||||
|
userReference: userReference,
|
||||||
|
status: status,
|
||||||
|
withSender: withSender,
|
||||||
|
withReceiver: withReceiver));
|
||||||
|
return referenceType is null ? histDTOs : histDTOs.Where(h => h.ReferenceType == referenceType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IEnumerable<EnvelopeHistoryDto>> ReadRejectedAsync(int envelopeId, string? userReference = null) =>
|
||||||
|
await ReadAsync(envelopeId: envelopeId, userReference: userReference, status: (int)EnvelopeStatus.DocumentRejected, withReceiver:true);
|
||||||
|
|
||||||
|
//TODO: use IQueryable in repository to incerease the performance
|
||||||
|
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)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
146
EnvelopeGenerator.Application/Services/EnvelopeMailService.cs
Normal file
146
EnvelopeGenerator.Application/Services/EnvelopeMailService.cs
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.DTOs.EmailOut;
|
||||||
|
using DigitalData.EmailProfilerDispatcher.Abstraction.Services;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Common;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
using EnvelopeGenerator.Extensions;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
|
|
||||||
|
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;
|
||||||
|
private readonly Dictionary<string, string> _placeholders;
|
||||||
|
|
||||||
|
public EnvelopeMailService(IEmailOutRepository repository, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions<DispatcherConfig> dispatcherConfigOptions, IConfigService configService, IOptions<MailConfig> mailConfig) : base(repository, mapper)
|
||||||
|
{
|
||||||
|
_tempService = tempService;
|
||||||
|
_envRcvService = envelopeReceiverService;
|
||||||
|
_dConfig = dispatcherConfigOptions.Value;
|
||||||
|
_configService = configService;
|
||||||
|
_placeholders = mailConfig.Value.Placeholders;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<Dictionary<string, string>> CreatePlaceholders(string? accessCode = null, EnvelopeReceiverDto? envelopeReceiverDto = null, EnvelopeReceiverReadOnlyDto? readOnlyDto = null)
|
||||||
|
{
|
||||||
|
if (accessCode is not null)
|
||||||
|
_placeholders["[DOCUMENT_ACCESS_CODE]"] = accessCode;
|
||||||
|
|
||||||
|
if(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}/EnvelopeKey/{erId}";
|
||||||
|
_placeholders["[LINK_TO_DOCUMENT]"] = linkToDoc;
|
||||||
|
_placeholders["[LINK_TO_DOCUMENT_TEXT]"] = linkToDoc[..Math.Min(40, linkToDoc.Length)] + "..";
|
||||||
|
}
|
||||||
|
|
||||||
|
return _placeholders;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<Dictionary<string, string>> CreatePlaceholders(EnvelopeReceiverReadOnlyDto? readOnlyDto = null)
|
||||||
|
{
|
||||||
|
if (readOnlyDto?.Envelope is not null && readOnlyDto.Receiver is not null)
|
||||||
|
{
|
||||||
|
_placeholders["[NAME_RECEIVER]"] = await _envRcvService.ReadLastUsedReceiverNameByMail(readOnlyDto.AddedWho).ThenAsync(res => res, (msg, ntc) => string.Empty) ?? string.Empty;
|
||||||
|
var erReadOnlyId = (readOnlyDto.Id).EncodeEnvelopeReceiverId();
|
||||||
|
var sigHost = await _configService.ReadDefaultSignatureHost();
|
||||||
|
var linkToDoc = $"{sigHost}/EnvelopeKey/{erReadOnlyId}";
|
||||||
|
_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);
|
||||||
|
|
||||||
|
//TODO: remove the requirement to add the models using reflections
|
||||||
|
return await CreateWithTemplateAsync(createDto: mail,placeholders: placeholders,
|
||||||
|
dto, dto.Envelope.User!, dto.Envelope);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto)
|
||||||
|
{
|
||||||
|
var tempSerResult = await _tempService.ReadByNameAsync(Constants.EmailTemplateType.DocumentShared);
|
||||||
|
if (tempSerResult.IsFailed)
|
||||||
|
return tempSerResult.ToFail<int>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"The email cannot send because '{Constants.EmailTemplateType.DocumentShared}' template cannot found.");
|
||||||
|
var temp = tempSerResult.Data;
|
||||||
|
|
||||||
|
var mail = new EmailOutCreateDto()
|
||||||
|
{
|
||||||
|
EmailAddress = dto.ReceiverMail,
|
||||||
|
EmailSubj = temp.Subject,
|
||||||
|
EmailBody = temp.Body,
|
||||||
|
//TODO: remove int casting when all
|
||||||
|
ReferenceId = (int) 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.EnvelopeShared,
|
||||||
|
WfReference = null,
|
||||||
|
AddedWho = _dConfig.AddedWho,
|
||||||
|
EmailAttmt1 = _dConfig.EmailAttmt1
|
||||||
|
};
|
||||||
|
|
||||||
|
var placeholders = await CreatePlaceholders(readOnlyDto: dto);
|
||||||
|
|
||||||
|
return await CreateWithTemplateAsync(createDto: mail, placeholders: placeholders, dto.Envelope);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeReceiverReadOnlyService : CRUDService<IEnvelopeReceiverReadOnlyRepository, EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnlyDto, EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly, long>, IEnvelopeReceiverReadOnlyService
|
||||||
|
{
|
||||||
|
public EnvelopeReceiverReadOnlyService(IEnvelopeReceiverReadOnlyRepository repository, IMapper mapper) : base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
|
||||||
|
using EnvelopeGenerator.Application.Resources;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using EnvelopeGenerator.Extensions;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeReceiverService : BasicCRUDService<IEnvelopeReceiverRepository, EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>, IEnvelopeReceiverService
|
||||||
|
{
|
||||||
|
private readonly IStringLocalizer<Resource> _localizer;
|
||||||
|
|
||||||
|
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.Map<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.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<IEnumerable<EnvelopeReceiverSecretDto>>> ReadSecretByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true)
|
||||||
|
{
|
||||||
|
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver);
|
||||||
|
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverSecretDto>>(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.Map<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.Map<IEnumerable<EnvelopeReceiverDto>>(er_list);
|
||||||
|
return Result.Success(dto_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail)
|
||||||
|
{
|
||||||
|
var er = await _repository.ReadLastByReceiver(mail);
|
||||||
|
return er is null ? Result.Fail<string?>().Notice(LogLevel.None, Flag.NotFound) : Result.Success(er.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
43
EnvelopeGenerator.Application/Services/EnvelopeService.cs
Normal file
43
EnvelopeGenerator.Application/Services/EnvelopeService.cs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeService : BasicCRUDService<IEnvelopeRepository, EnvelopeDto, Envelope, int>, IEnvelopeService
|
||||||
|
{
|
||||||
|
public EnvelopeService(IEnvelopeRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<IEnumerable<EnvelopeDto>>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false)
|
||||||
|
{
|
||||||
|
var envelopes = await _repository.ReadAllWithAsync(documents: documents, history: history, documentReceiverElement: documentReceiverElement);
|
||||||
|
var readDto = _mapper.Map<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.Map<EnvelopeDto>(envelope);
|
||||||
|
return Result.Success(readDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<IEnumerable<EnvelopeDto>>> ReadByUserAsync(int userId, int? min_status = null, int? max_status = null, params int[] ignore_statuses)
|
||||||
|
{
|
||||||
|
var users = await _repository.ReadByUserAsync(userId: userId, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses);
|
||||||
|
var readDto = _mapper.Map<IEnumerable<EnvelopeDto>>(users);
|
||||||
|
return Result.Success(readDto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class EnvelopeTypeService : BasicCRUDService<IEnvelopeTypeRepository, EnvelopeTypeDto, EnvelopeType, int>, IEnvelopeTypeService
|
||||||
|
{
|
||||||
|
private static readonly Guid CacheKey = Guid.NewGuid();
|
||||||
|
|
||||||
|
private readonly IMemoryCache _cache;
|
||||||
|
|
||||||
|
public EnvelopeTypeService(IEnvelopeTypeRepository repository, IMapper mapper, IMemoryCache cache)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
_cache = cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<DataResult<IEnumerable<EnvelopeTypeDto>>> ReadAllAsync()
|
||||||
|
=> await _cache.GetOrCreateAsync(CacheKey, async entry => await base.ReadAllAsync())
|
||||||
|
?? Result.Fail<IEnumerable<EnvelopeTypeDto>>().Notice(LogLevel.Error, Flag.NotFound, "No cached envelope types are available in the database. If you have added any envelope types after the server started, please restart the server.");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
38
EnvelopeGenerator.Application/Services/ReceiverService.cs
Normal file
38
EnvelopeGenerator.Application/Services/ReceiverService.cs
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
||||||
|
using DigitalData.Core.DTO;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class ReceiverService : CRUDService<IReceiverRepository, ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>, IReceiverService
|
||||||
|
{
|
||||||
|
public ReceiverService(IReceiverRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null)
|
||||||
|
{
|
||||||
|
var rcv = await _repository.ReadByAsync(emailAddress: emailAddress, signature: signature);
|
||||||
|
|
||||||
|
if (rcv is null)
|
||||||
|
return Result.Fail<ReceiverReadDto>();
|
||||||
|
|
||||||
|
return Result.Success(_mapper.Map<ReceiverReadDto>(rcv));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null)
|
||||||
|
{
|
||||||
|
var rcv = await _repository.ReadByAsync(emailAddress: emailAddress, signature: signature);
|
||||||
|
|
||||||
|
if (rcv is null)
|
||||||
|
return Result.Fail();
|
||||||
|
|
||||||
|
return await _repository.DeleteAsync(rcv) ? Result.Success() : Result.Fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Application;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using EnvelopeGenerator.Application.DTOs;
|
||||||
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
using EnvelopeGenerator.Infrastructure.Contracts;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class UserReceiverService : BasicCRUDService<IUserReceiverRepository, UserReceiverDto, UserReceiver, int>, IUserReceiverService
|
||||||
|
{
|
||||||
|
public UserReceiverService(IUserReceiverRepository repository, IMapper mapper)
|
||||||
|
: base(repository, mapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,23 +1,40 @@
|
|||||||
Public Class Constants
|
Public Class Constants
|
||||||
|
|
||||||
#Region "Status Fields"
|
#Region "Status Fields"
|
||||||
|
'http://wiki.dd/xwiki13/bin/view/Anwendungen/Produkt-Handbuch/Sonstiges/SignFlow/Envelope%20Status/
|
||||||
Public Enum EnvelopeStatus
|
Public Enum EnvelopeStatus
|
||||||
Invalid = 0
|
Invalid = 0
|
||||||
EnvelopeCreated = 1001
|
EnvelopeCreated = 1001
|
||||||
EnvelopeSaved = 1002
|
EnvelopeSaved = 1002
|
||||||
EnvelopeQueued = 1003
|
EnvelopeQueued = 1003
|
||||||
EnvelopeSent = 1004
|
EnvelopeSent = 1004 ' Nicht verwendet
|
||||||
EnvelopePartlySigned = 1005
|
EnvelopePartlySigned = 1005
|
||||||
EnvelopeCompletelySigned = 1006
|
EnvelopeCompletelySigned = 1006
|
||||||
EnvelopeArchived = 1007
|
EnvelopeReportCreated = 1007
|
||||||
EnvelopeTransmittedDMS = 1008
|
EnvelopeArchived = 1008
|
||||||
EnvelopeDeleted = 1009
|
EnvelopeDeleted = 1009
|
||||||
DocumentOpened = 2001
|
AccessCodeRequested = 2001
|
||||||
DocumentSigned = 2002
|
AccessCodeCorrect = 2002
|
||||||
SignatureConfirmed = 2003
|
AccessCodeIncorrect = 2003
|
||||||
|
DocumentOpened = 2004
|
||||||
|
DocumentSigned = 2005
|
||||||
|
SignatureConfirmed = 2006
|
||||||
|
DocumentRejected = 2007
|
||||||
|
EnvelopeShared = 2008
|
||||||
|
EnvelopeViewed = 2009
|
||||||
MessageInvitationSent = 3001 ' Wird von Trigger verwendet
|
MessageInvitationSent = 3001 ' Wird von Trigger verwendet
|
||||||
MessageConfirmationSent = 3002
|
MessageAccessCodeSent = 3002
|
||||||
MessageDeletionSent = 3003
|
MessageConfirmationSent = 3003
|
||||||
|
MessageDeletionSent = 3004
|
||||||
|
MessageCompletionSent = 3005
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
'TODO: standardize in xwiki
|
||||||
|
Public Enum ReferenceType
|
||||||
|
Receiver
|
||||||
|
Sender
|
||||||
|
System
|
||||||
|
Unknown
|
||||||
End Enum
|
End Enum
|
||||||
|
|
||||||
Public Enum ElementStatus
|
Public Enum ElementStatus
|
||||||
@@ -58,18 +75,45 @@
|
|||||||
ReceiverColor10 = 10
|
ReceiverColor10 = 10
|
||||||
End Enum
|
End Enum
|
||||||
|
|
||||||
|
Public Enum CertificationType
|
||||||
|
ElectronicSignature = 1
|
||||||
|
QualifiedSignature = 2
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
Public Enum FinalEmailType
|
||||||
|
No = 0
|
||||||
|
Yes = 1
|
||||||
|
YesWithAttachment = 2
|
||||||
|
End Enum
|
||||||
|
|
||||||
Public Enum PageOrientation
|
Public Enum PageOrientation
|
||||||
Portrait = 0
|
Portrait = 0
|
||||||
Landscape = 1
|
Landscape = 1
|
||||||
End Enum
|
End Enum
|
||||||
#End Region
|
|
||||||
|
|
||||||
|
Public Enum EmailTemplateType
|
||||||
|
DocumentReceived
|
||||||
|
DocumentSigned
|
||||||
|
DocumentDeleted
|
||||||
|
DocumentCompleted
|
||||||
|
DocumentAccessCodeReceived
|
||||||
|
DocumentShared
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
Public Enum EncodeType
|
||||||
|
EnvelopeReceiver
|
||||||
|
EnvelopeReceiverReadOnly
|
||||||
|
Undefined
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
#End Region
|
||||||
|
|
||||||
#Region "Constants"
|
#Region "Constants"
|
||||||
|
|
||||||
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"
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
Public Class DbConfig
|
Public Class DbConfig
|
||||||
Public Property ExternalProgramName As String = "Sign Flow"
|
Public Property ExternalProgramName As String = "Sign Flow"
|
||||||
|
Public Property DocumentPathOrigin As String = ""
|
||||||
Public Property DocumentPath As String = ""
|
Public Property DocumentPath As String = ""
|
||||||
Public Property ExportPath As String = ""
|
Public Property ExportPath As String = ""
|
||||||
|
Public Property DocumentPath_DMZ As String = ""
|
||||||
|
Public Property ExportPath_DMZ As String = ""
|
||||||
|
Public Property DOCUMENT_PATH_MOVE_AFTSEND As String = ""
|
||||||
|
Public Property FINISHED_PATH_EX_DMZ As String = ""
|
||||||
|
Public Property EML_PATH_EX_DMZ As String = ""
|
||||||
Public Property SendingProfile As Integer = 0
|
Public Property SendingProfile As Integer = 0
|
||||||
Public Property SignatureHost As String = ""
|
Public Property SignatureHost As String = ""
|
||||||
|
Public Property NetUse_necessary As Boolean = False
|
||||||
|
Public Property NetUse_Finish As Boolean = False
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -1,36 +1,64 @@
|
|||||||
|
|
||||||
Public Class EmailData
|
Public Class EmailData
|
||||||
Public Property EmailAdress As String
|
Public Property EmailAdress As String = ""
|
||||||
Public Property EmailSubject As String
|
Public Property EmailSubject As String = ""
|
||||||
Public Property EmailBody As String
|
Public Property EmailBody As String = ""
|
||||||
Public Property EmailType As Constants.EnvelopeStatus
|
Public Property EmailType As Constants.EnvelopeStatus = Constants.EnvelopeStatus.Invalid
|
||||||
Public Property ReferenceID As Integer
|
Public Property ReferenceID As Integer = 0
|
||||||
Public Property ReferenceString As String
|
Public Property ReferenceString As String = ""
|
||||||
|
|
||||||
|
Public Property ReceiverAccessCode As String = ""
|
||||||
|
Public Property ReceiverName As String = ""
|
||||||
|
Public Property SenderName As String = ""
|
||||||
|
Public Property SenderAdress As String = ""
|
||||||
|
|
||||||
Public Property ReceiverName As String
|
Public Property SignatureLink As String = ""
|
||||||
Public Property SenderName As String
|
Public Property Message As String = ""
|
||||||
Public Property SenderAdress As String
|
Public Property EnvelopeTitle As String = ""
|
||||||
Public Property SignatureLink As String
|
|
||||||
Public Property Message As String
|
|
||||||
Public Property EnvelopeTitle As String
|
|
||||||
|
|
||||||
|
Public Property EmailAttachment As String = ""
|
||||||
|
Public Property ATT1_RELATED_ID As Long
|
||||||
|
Public Property ATT1_REL_TYPE As String = ""
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Constructor for sending email to receiver
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="pEnvelope"></param>
|
||||||
|
''' <param name="pReceiver"></param>
|
||||||
|
''' <param name="pStatus"></param>
|
||||||
Public Sub New(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pStatus As Constants.EnvelopeStatus)
|
Public Sub New(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pStatus As Constants.EnvelopeStatus)
|
||||||
EmailAdress = pReceiver.Email
|
EmailAdress = pReceiver.Email
|
||||||
EmailSubject = String.Empty
|
EmailSubject = String.Empty
|
||||||
EmailType = pStatus
|
EmailType = pStatus
|
||||||
|
|
||||||
Message = pEnvelope.Message
|
Message = pEnvelope.Message
|
||||||
ReferenceID = pEnvelope.Id
|
ReferenceID = pEnvelope.Id
|
||||||
ReferenceString = pEnvelope.Uuid
|
ReferenceString = pEnvelope.Uuid
|
||||||
ReceiverName = pReceiver.Name
|
ReceiverName = pReceiver.Name
|
||||||
|
ReceiverAccessCode = pReceiver.AccessCode
|
||||||
SenderAdress = pEnvelope.User.Email
|
SenderAdress = pEnvelope.User.Email
|
||||||
SenderName = pEnvelope.User.FullName
|
SenderName = pEnvelope.User.FullName
|
||||||
EnvelopeTitle = pEnvelope.Title
|
EnvelopeTitle = pEnvelope.Title
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Sub New()
|
''' <summary>
|
||||||
|
''' Constructor for sending email to creator
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="pEnvelope"></param>
|
||||||
|
''' <param name="pStatus"></param>
|
||||||
|
Public Sub New(pEnvelope As Envelope, pStatus As Constants.EnvelopeStatus)
|
||||||
|
EmailAdress = pEnvelope.User.Email
|
||||||
|
EmailSubject = String.Empty
|
||||||
|
EmailType = pStatus
|
||||||
|
|
||||||
|
Message = pEnvelope.Message
|
||||||
|
ReferenceID = pEnvelope.Id
|
||||||
|
ReferenceString = pEnvelope.Uuid
|
||||||
|
ReceiverName = pEnvelope.User.FullName
|
||||||
|
ReceiverAccessCode = String.Empty
|
||||||
|
SenderAdress = pEnvelope.User.Email
|
||||||
|
SenderName = pEnvelope.User.FullName
|
||||||
|
EnvelopeTitle = pEnvelope.Title
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -1,141 +1,8 @@
|
|||||||
Imports DigitalData.Modules.Base
|
Public Class EmailTemplate
|
||||||
|
|
||||||
Public Class EmailTemplate
|
Public Property Id As Integer
|
||||||
Private _DocumentReceivedBodyTemplate As List(Of String)
|
Public Property Name As String
|
||||||
Private _DocumentSignedBodyTemplate As List(Of String)
|
Public Property Body As String
|
||||||
Private _DocumentCompletedBodyTemplate As List(Of String)
|
Public Property Subject As String
|
||||||
Private _DocumentDeletedBodyTemplate As List(Of String)
|
|
||||||
|
|
||||||
Private _DocumentReceivedSubjectTemplate As String
|
|
||||||
Private _DocumentSignedSubjectTemplate As String
|
|
||||||
Private _DocumentDeletedSubjectTemplate As String
|
|
||||||
Private _DocumentCompletedSubjectTemplate As String
|
|
||||||
|
|
||||||
Private _replaceDictionary As Dictionary(Of String, String)
|
|
||||||
|
|
||||||
Private DbConfig As DbConfig
|
|
||||||
|
|
||||||
Public Sub New(pState As State)
|
|
||||||
InitBodyTemplates()
|
|
||||||
InitSubjectTemplates()
|
|
||||||
|
|
||||||
DbConfig = pState.DbConfig
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub InitSubjectTemplates()
|
|
||||||
_DocumentReceivedSubjectTemplate = "Dokument erhalten: '<DOCUMENT_TITLE>'"
|
|
||||||
_DocumentSignedSubjectTemplate = "Dokument unterschrieben: '<DOCUMENT_TITLE>'"
|
|
||||||
_DocumentDeletedSubjectTemplate = "Vorgang zurückgezogen: '<DOCUMENT_TITLE>'"
|
|
||||||
_DocumentCompletedSubjectTemplate = "Vorgang abgeschlossen: '<DOCUMENT_TITLE>'"
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub InitBodyTemplates()
|
|
||||||
_DocumentReceivedBodyTemplate = New List(Of String) From {
|
|
||||||
"Guten Tag <NAME_RECEIVER>,",
|
|
||||||
"",
|
|
||||||
"<NAME_SENDER> hat Ihnen ein Dokument zum <SIGNATURE_TYPE> gesendet.",
|
|
||||||
"",
|
|
||||||
"Über den folgenden Link können Sie das Dokument einsehen: <a href=""<LINK_TO_DOCUMENT>""><LINK_TO_DOCUMENT_TEXT></a>",
|
|
||||||
"",
|
|
||||||
"<MESSAGE>",
|
|
||||||
"",
|
|
||||||
"Mit freundlichen Grüßen",
|
|
||||||
"<NAME_PORTAL>"
|
|
||||||
}
|
|
||||||
|
|
||||||
_DocumentSignedBodyTemplate = New List(Of String) From {
|
|
||||||
"Guten Tag <NAME_RECEIVER>",
|
|
||||||
"",
|
|
||||||
"hiermit bestätigen wir Ihnen die erfolgreiche Signatur für den Vorgang <DOCUMENT_TITLE>.",
|
|
||||||
"",
|
|
||||||
"Mit freundlichen Grüßen",
|
|
||||||
"<NAME_PORTAL>"
|
|
||||||
}
|
|
||||||
|
|
||||||
_DocumentDeletedBodyTemplate = New List(Of String) From {
|
|
||||||
"Guten Tag <NAME_RECEIVER>",
|
|
||||||
"",
|
|
||||||
"Der User <NAME_SENDER> hat den Umschlag <DOCUMENT_TITLE> gelöscht.",
|
|
||||||
"",
|
|
||||||
"Mit freundlichen Grüßen",
|
|
||||||
"<NAME_PORTAL>"
|
|
||||||
}
|
|
||||||
|
|
||||||
_DocumentCompletedBodyTemplate = New List(Of String) From {
|
|
||||||
"Guten Tag <NAME_RECEIVER>",
|
|
||||||
"",
|
|
||||||
"Der Signaturvorgang <DOCUMENT_TITLE> wurde erfolgreich abgeschlossen.",
|
|
||||||
"Sie erhalten das Dokument mit einem detaillierten Ergebnisbericht als Anhang zu dieser Email.",
|
|
||||||
"",
|
|
||||||
"Vielen Dank für die Nutzung von",
|
|
||||||
"<NAME_PORTAL>"
|
|
||||||
}
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub InitDictionary(pEmailData As EmailData)
|
|
||||||
_replaceDictionary = New Dictionary(Of String, String) From {
|
|
||||||
{"<NAME_RECEIVER>", pEmailData.ReceiverName},
|
|
||||||
{"<NAME_SENDER>", pEmailData.SenderName},
|
|
||||||
{"<NAME_PORTAL>", DbConfig.ExternalProgramName},
|
|
||||||
{"<SIGNATURE_TYPE>", "signieren"},
|
|
||||||
{"<LINK_TO_DOCUMENT>", pEmailData.SignatureLink},
|
|
||||||
{"<LINK_TO_DOCUMENT_TEXT>", $"{pEmailData.SignatureLink.Truncate(40)}.."},
|
|
||||||
{"<DOCUMENT_TITLE>", pEmailData.EnvelopeTitle},
|
|
||||||
{"<MESSAGE>", pEmailData.Message}
|
|
||||||
}
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub FillDocumentReceivedEmailBody(pEmailData As EmailData)
|
|
||||||
FillEmailBody(pEmailData, _DocumentReceivedBodyTemplate)
|
|
||||||
FillEmailSubject(pEmailData, _DocumentReceivedSubjectTemplate)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub FillEnvelopeDeletedEmailBody(pEmailData As EmailData)
|
|
||||||
FillEmailBody(pEmailData, _DocumentDeletedBodyTemplate)
|
|
||||||
FillEmailSubject(pEmailData, _DocumentDeletedSubjectTemplate)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub FillDocumentSignedEmailBody(pEmailData As EmailData)
|
|
||||||
FillEmailBody(pEmailData, _DocumentSignedBodyTemplate)
|
|
||||||
FillEmailSubject(pEmailData, _DocumentSignedSubjectTemplate)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub FillDocumentCompletedEmailBody(pEmailData As EmailData)
|
|
||||||
FillEmailBody(pEmailData, _DocumentCompletedBodyTemplate)
|
|
||||||
FillEmailSubject(pEmailData, _DocumentCompletedSubjectTemplate)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub FillEmailSubject(pEmailData As EmailData, pTemplate As String)
|
|
||||||
InitDictionary(pEmailData)
|
|
||||||
|
|
||||||
Dim oSubject As String = pTemplate
|
|
||||||
|
|
||||||
For Each dictItem As KeyValuePair(Of String, String) In _replaceDictionary
|
|
||||||
If oSubject.Contains(dictItem.Key) Then
|
|
||||||
oSubject = oSubject.Replace(dictItem.Key, dictItem.Value)
|
|
||||||
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
|
|
||||||
pEmailData.EmailSubject = oSubject
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Sub FillEmailBody(pEmailData As EmailData, pTemplate As List(Of String))
|
|
||||||
InitDictionary(pEmailData)
|
|
||||||
|
|
||||||
Dim oBody As String = ""
|
|
||||||
|
|
||||||
For Each lineItem As String In pTemplate
|
|
||||||
Dim oLineValue As String = lineItem
|
|
||||||
For Each dictItem As KeyValuePair(Of String, String) In _replaceDictionary
|
|
||||||
If oLineValue.Contains(dictItem.Key) Then
|
|
||||||
oLineValue = oLineValue.Replace(dictItem.Key, dictItem.Value)
|
|
||||||
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
oBody += oLineValue + "<br/>"
|
|
||||||
Next
|
|
||||||
|
|
||||||
pEmailData.EmailBody = oBody
|
|
||||||
End Sub
|
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -2,9 +2,25 @@
|
|||||||
Public Property Id As Integer = 0
|
Public Property Id As Integer = 0
|
||||||
Public Property UserId As Integer
|
Public Property UserId As Integer
|
||||||
Public Property Title As String = ""
|
Public Property Title As String = ""
|
||||||
Public Property ContractType As Constants.ContractType
|
Public Property EnvelopeTypeId As Integer
|
||||||
|
Public Property ContractType As Integer
|
||||||
Public Property Status As Constants.EnvelopeStatus = Constants.EnvelopeStatus.EnvelopeCreated
|
Public Property Status As Constants.EnvelopeStatus = Constants.EnvelopeStatus.EnvelopeCreated
|
||||||
Public Property Uuid As String = Guid.NewGuid.ToString()
|
Public Property Uuid As String = Guid.NewGuid.ToString()
|
||||||
|
Public Property UseAccessCode As Boolean = False
|
||||||
|
Public Property Language As String = "de-DE"
|
||||||
|
Public Property CertificationType As Constants.CertificationType = Constants.CertificationType.ElectronicSignature
|
||||||
|
|
||||||
|
Public Property SendReminderEmails As Boolean = False
|
||||||
|
Public Property FirstReminderDays As Integer = 0
|
||||||
|
Public Property ReminderIntervalDays As Integer = 0
|
||||||
|
|
||||||
|
Public Property ExpiresWhen As Date
|
||||||
|
Public Property ExpiresWarningWhen As Date
|
||||||
|
Public Property ExpiresWhenDays As Integer
|
||||||
|
Public Property ExpiresWarningWhenDays As Integer
|
||||||
|
|
||||||
|
Public Property FinalEmailToCreator As Constants.FinalEmailType
|
||||||
|
Public Property FinalEmailToReceivers As Constants.FinalEmailType
|
||||||
|
|
||||||
Public Property Message As String = My.Resources.Envelope.Please_read_and_sign_this_document
|
Public Property Message As String = My.Resources.Envelope.Please_read_and_sign_this_document
|
||||||
|
|
||||||
@@ -14,6 +30,13 @@
|
|||||||
Public Property Documents As New List(Of EnvelopeDocument)
|
Public Property Documents As New List(Of EnvelopeDocument)
|
||||||
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 DOC_RESULT As Byte()
|
||||||
|
Public ReadOnly Property EnvelopeTypeTitle As String
|
||||||
|
Get
|
||||||
|
Return EnvelopeType?.Title
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
Public ReadOnly Property IsAlreadySent As Boolean
|
Public ReadOnly Property IsAlreadySent As Boolean
|
||||||
Get
|
Get
|
||||||
|
|||||||
@@ -17,4 +17,7 @@ Public Class EnvelopeDocument
|
|||||||
Public Property Filename As String
|
Public Property Filename As String
|
||||||
|
|
||||||
Public Property Filepath As String
|
Public Property Filepath As String
|
||||||
End Class
|
|
||||||
|
Public Property PageCount As Integer
|
||||||
|
Public Property Byte_Data As Byte()
|
||||||
|
End Class
|
||||||
26
EnvelopeGenerator.Common/Entities/EnvelopeType.vb
Normal file
26
EnvelopeGenerator.Common/Entities/EnvelopeType.vb
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
Public Class EnvelopeType
|
||||||
|
|
||||||
|
Public Property Id As Integer = 0
|
||||||
|
Public Property Title As String
|
||||||
|
Public Property UseAccessCode As Boolean
|
||||||
|
Public Property ContractType As Integer ' Unbenutzt
|
||||||
|
|
||||||
|
Public Property Language As String
|
||||||
|
Public Property CertificationType As Constants.CertificationType = Constants.CertificationType.ElectronicSignature
|
||||||
|
Public Property SendReminderEmails As Boolean = False
|
||||||
|
Public Property FirstReminderDays As Integer = 0
|
||||||
|
Public Property ReminderIntervalDays As Integer = 0
|
||||||
|
|
||||||
|
Public Property ExpiresWhen As Date
|
||||||
|
Public Property ExpiresWarningWhen As Date
|
||||||
|
Public Property ExpiresWhenDays As Integer
|
||||||
|
Public Property ExpiresWarningWhenDays As Integer
|
||||||
|
|
||||||
|
Public Property FinalEmailToCreator As Constants.FinalEmailType
|
||||||
|
Public Property FinalEmailToReceivers As Constants.FinalEmailType
|
||||||
|
|
||||||
|
Public Overrides Function ToString() As String
|
||||||
|
Return Title
|
||||||
|
End Function
|
||||||
|
|
||||||
|
End Class
|
||||||
@@ -3,6 +3,7 @@ Imports DigitalData.Modules.Logging
|
|||||||
|
|
||||||
Public Class State
|
Public Class State
|
||||||
Public Property UserId As Integer
|
Public Property UserId As Integer
|
||||||
|
Public Property User As User
|
||||||
Public Property Config As Config
|
Public Property Config As Config
|
||||||
Public Property DbConfig As DbConfig
|
Public Property DbConfig As DbConfig
|
||||||
Public Property LogConfig As LogConfig
|
Public Property LogConfig As LogConfig
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@@ -56,26 +58,27 @@
|
|||||||
<Reference Include="DevExpress.RichEdit.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.RichEdit.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DevExpress.RichEdit.v21.2.Export, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.RichEdit.v21.2.Export, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DevExpress.Sparkline.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.Sparkline.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="DevExpress.Utils.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
<Reference Include="DevExpress.Xpo.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
<Reference Include="DevExpress.Xpo.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
|
<Reference Include="DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DevExpress.XtraCharts.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.XtraCharts.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
<Reference Include="DevExpress.XtraGauges.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.XtraGauges.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DevExpress.XtraReports.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
<Reference Include="DevExpress.XtraReports.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="DigitalData.Modules.Base, Version=1.3.4.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="DigitalData.Modules.Base">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\..\2_DLL Projekte\DDModules\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath>
|
||||||
<HintPath>..\..\DDModules\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="DigitalData.Modules.Config">
|
<Reference Include="DigitalData.Modules.Config">
|
||||||
<HintPath>..\..\DDModules\Config\bin\Debug\DigitalData.Modules.Config.dll</HintPath>
|
<HintPath>..\..\2_DLL Projekte\DDModules\Config\bin\Debug\DigitalData.Modules.Config.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="DigitalData.Modules.Database">
|
<Reference Include="DigitalData.Modules.Database">
|
||||||
<HintPath>..\..\DDModules\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
|
<HintPath>..\..\2_DLL Projekte\DDModules\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.2.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="DigitalData.Modules.Logging">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\..\2_DLL Projekte\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
<HintPath>..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="GdPicture.NET.14">
|
<Reference Include="GdPicture.NET.14, Version=14.2.89.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
|
||||||
<HintPath>D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll</HintPath>
|
<HintPath>..\packages\GdPicture.14.2.89\lib\net462\GdPicture.NET.14.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||||
@@ -127,17 +130,21 @@
|
|||||||
<Compile Include="Entities\ElementStatus.vb" />
|
<Compile Include="Entities\ElementStatus.vb" />
|
||||||
<Compile Include="Entities\EmailData.vb" />
|
<Compile Include="Entities\EmailData.vb" />
|
||||||
<Compile Include="Entities\EmailTemplate.vb" />
|
<Compile Include="Entities\EmailTemplate.vb" />
|
||||||
|
<Compile Include="Services\TemplateService.vb" />
|
||||||
<Compile Include="Entities\Envelope.vb" />
|
<Compile Include="Entities\Envelope.vb" />
|
||||||
<Compile Include="Entities\EnvelopeDocument.vb" />
|
<Compile Include="Entities\EnvelopeDocument.vb" />
|
||||||
<Compile Include="Entities\EnvelopeDocumentElement.vb" />
|
<Compile Include="Entities\EnvelopeDocumentElement.vb" />
|
||||||
<Compile Include="Entities\EnvelopeHistoryEntry.vb" />
|
<Compile Include="Entities\EnvelopeHistoryEntry.vb" />
|
||||||
<Compile Include="Entities\EnvelopeReceiver.vb" />
|
<Compile Include="Entities\EnvelopeReceiver.vb" />
|
||||||
<Compile Include="Entities\EnvelopeResponse.vb" />
|
<Compile Include="Entities\EnvelopeResponse.vb" />
|
||||||
|
<Compile Include="Entities\EnvelopeType.vb" />
|
||||||
<Compile Include="Entities\State.vb" />
|
<Compile Include="Entities\State.vb" />
|
||||||
<Compile Include="Entities\User.vb" />
|
<Compile Include="Entities\User.vb" />
|
||||||
<Compile Include="Helpers.vb" />
|
<Compile Include="Helpers.vb" />
|
||||||
<Compile Include="Jobs\CertificateDocumentJob.vb" />
|
<Compile Include="Jobs\FinalizeDocument\FinalizeDocumentExceptions.vb" />
|
||||||
<Compile Include="Jobs\PDFBurner.vb" />
|
<Compile Include="Jobs\FinalizeDocument\FinalizeDocumentJob.vb" />
|
||||||
|
<Compile Include="Jobs\FinalizeDocument\PDFBurner.vb" />
|
||||||
|
<Compile Include="Jobs\FinalizeDocument\PDFMerger.vb" />
|
||||||
<Compile Include="Models\BaseModel.vb" />
|
<Compile Include="Models\BaseModel.vb" />
|
||||||
<Compile Include="Models\CertificateModel.vb" />
|
<Compile Include="Models\CertificateModel.vb" />
|
||||||
<Compile Include="Models\ChartModel.vb" />
|
<Compile Include="Models\ChartModel.vb" />
|
||||||
@@ -147,9 +154,12 @@
|
|||||||
<Compile Include="Models\DocumentStatusModel.vb" />
|
<Compile Include="Models\DocumentStatusModel.vb" />
|
||||||
<Compile Include="Models\ElementStatusModel.vb" />
|
<Compile Include="Models\ElementStatusModel.vb" />
|
||||||
<Compile Include="Models\EmailModel.vb" />
|
<Compile Include="Models\EmailModel.vb" />
|
||||||
|
<Compile Include="Models\EmailTemplateModel.vb" />
|
||||||
<Compile Include="Models\EnvelopeModel.vb" />
|
<Compile Include="Models\EnvelopeModel.vb" />
|
||||||
<Compile Include="Models\HistoryModel.vb" />
|
<Compile Include="Models\HistoryModel.vb" />
|
||||||
<Compile Include="Models\ReceiverModel.vb" />
|
<Compile Include="Models\ReceiverModel.vb" />
|
||||||
|
<Compile Include="Models\EnvelopeTypeModel.vb" />
|
||||||
|
<Compile Include="Models\ReportModel.vb" />
|
||||||
<Compile Include="Models\UserModel.vb" />
|
<Compile Include="Models\UserModel.vb" />
|
||||||
<Compile Include="My Project\AssemblyInfo.vb" />
|
<Compile Include="My Project\AssemblyInfo.vb" />
|
||||||
<Compile Include="My Project\Application.Designer.vb">
|
<Compile Include="My Project\Application.Designer.vb">
|
||||||
@@ -167,9 +177,9 @@
|
|||||||
<DependentUpon>Settings.settings</DependentUpon>
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Reports\ReportCreator.vb" />
|
<Compile Include="Jobs\FinalizeDocument\ReportCreator.vb" />
|
||||||
<Compile Include="Reports\ReportItem.vb" />
|
<Compile Include="Jobs\FinalizeDocument\ReportItem.vb" />
|
||||||
<Compile Include="Reports\ReportSource.vb" />
|
<Compile Include="Jobs\FinalizeDocument\ReportSource.vb" />
|
||||||
<Compile Include="Reports\rptEnvelopeHistory.Designer.vb">
|
<Compile Include="Reports\rptEnvelopeHistory.Designer.vb">
|
||||||
<DependentUpon>rptEnvelopeHistory.vb</DependentUpon>
|
<DependentUpon>rptEnvelopeHistory.vb</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -177,6 +187,7 @@
|
|||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Services\ActionService.vb" />
|
<Compile Include="Services\ActionService.vb" />
|
||||||
|
<Compile Include="Services\BaseService.vb" />
|
||||||
<Compile Include="Services\EmailService.vb" />
|
<Compile Include="Services\EmailService.vb" />
|
||||||
<Compile Include="Services\HistoryService.vb" />
|
<Compile Include="Services\HistoryService.vb" />
|
||||||
<Compile Include="Strings\Email.en.Designer.vb">
|
<Compile Include="Strings\Email.en.Designer.vb">
|
||||||
@@ -209,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" />
|
||||||
@@ -222,7 +235,7 @@
|
|||||||
<DependentUpon>rptEnvelopeHistory.vb</DependentUpon>
|
<DependentUpon>rptEnvelopeHistory.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Strings\Email.en.resx">
|
<EmbeddedResource Include="Strings\Email.en.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Email.en.Designer.vb</LastGenOutput>
|
<LastGenOutput>Email.en.Designer.vb</LastGenOutput>
|
||||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
@@ -230,29 +243,32 @@
|
|||||||
<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>ResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Email.Designer.vb</LastGenOutput>
|
<LastGenOutput>Email.Designer.vb</LastGenOutput>
|
||||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Strings\Model.en.resx">
|
<EmbeddedResource Include="Strings\Model.en.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Model.en.Designer.vb</LastGenOutput>
|
<LastGenOutput>Model.en.Designer.vb</LastGenOutput>
|
||||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Strings\Model.resx">
|
<EmbeddedResource Include="Strings\Model.resx">
|
||||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Model.Designer.vb</LastGenOutput>
|
<LastGenOutput>Model.Designer.vb</LastGenOutput>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="My Project\Application.myapp">
|
<None Include="My Project\Application.myapp">
|
||||||
<Generator>MyApplicationCodeGenerator</Generator>
|
<Generator>MyApplicationCodeGenerator</Generator>
|
||||||
<LastGenOutput>Application.Designer.vb</LastGenOutput>
|
<LastGenOutput>Application.Designer.vb</LastGenOutput>
|
||||||
@@ -268,7 +284,16 @@
|
|||||||
<Content Include="Images\circle.svg">
|
<Content Include="Images\circle.svg">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<EmbeddedResource Include="Templates\document_access_code_de.html" />
|
||||||
|
<EmbeddedResource Include="Templates\email_de.html" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
|
<Import Project="..\packages\GdPicture.runtimes.windows.14.2.89\build\net462\GdPicture.runtimes.windows.targets" Condition="Exists('..\packages\GdPicture.runtimes.windows.14.2.89\build\net462\GdPicture.runtimes.windows.targets')" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\GdPicture.runtimes.windows.14.2.89\build\net462\GdPicture.runtimes.windows.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\GdPicture.runtimes.windows.14.2.89\build\net462\GdPicture.runtimes.windows.targets'))" />
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,8 +1,28 @@
|
|||||||
Imports System.Drawing
|
Imports System.Drawing
|
||||||
|
Imports System.IO
|
||||||
|
Imports System.Security.Cryptography
|
||||||
|
Imports System.Text
|
||||||
Imports DevExpress.Utils.Svg
|
Imports DevExpress.Utils.Svg
|
||||||
Imports EnvelopeGenerator.Common.Constants
|
Imports EnvelopeGenerator.Common.Constants
|
||||||
|
|
||||||
Public Class Helpers
|
Public Class Helpers
|
||||||
|
Private Shared key As String = "$xzBvyPETUS&amm8)D8x#)f;4%;?[BPd" ' Passwort-Schlüssel (16, 24, or 32 bytes)
|
||||||
|
Private Shared iv As String = "1wN&e[zrQ6_B7X/0" ' Initialisierungsvektor (16 bytes)
|
||||||
|
|
||||||
|
' Entschlüsselungsfunktion
|
||||||
|
Public Shared Function Decrypt(cipherText As String) As String
|
||||||
|
Dim aesAlg As Aes = Aes.Create()
|
||||||
|
aesAlg.Key = Encoding.UTF8.GetBytes(key)
|
||||||
|
aesAlg.IV = Encoding.UTF8.GetBytes(iv)
|
||||||
|
Dim decryptor As ICryptoTransform = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV)
|
||||||
|
Dim cipherBytes As Byte() = Convert.FromBase64String(cipherText)
|
||||||
|
Dim msDecrypt As New IO.MemoryStream(cipherBytes)
|
||||||
|
Using csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
|
||||||
|
Using srDecrypt As New IO.StreamReader(csDecrypt)
|
||||||
|
Return srDecrypt.ReadToEnd()
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
|
End Function
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' Encodes the EnvelopeUUID and the ReceiverSignature into an EnvelopeKey
|
''' Encodes the EnvelopeUUID and the ReceiverSignature into an EnvelopeKey
|
||||||
@@ -38,6 +58,11 @@ Public Class Helpers
|
|||||||
|
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Shared Function GetAccessCode() As String
|
||||||
|
Return Guid.NewGuid().ToString("d").Substring(1, 6).ToUpper()
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
Public Shared Function ColorTypeToColor(pColorType As ColorType) As Color
|
Public Shared Function ColorTypeToColor(pColorType As ColorType) As Color
|
||||||
Select Case pColorType
|
Select Case pColorType
|
||||||
Case ColorType.ReceiverColor1
|
Case ColorType.ReceiverColor1
|
||||||
@@ -94,4 +119,16 @@ Public Class Helpers
|
|||||||
Return False
|
Return False
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Shared Async Function CopyFileAsync(sourceFile As String, destinationFile As String) As Task
|
||||||
|
Dim fileOptions = IO.FileOptions.Asynchronous Or IO.FileOptions.SequentialScan
|
||||||
|
Dim bufferSize = 4096
|
||||||
|
|
||||||
|
Using sourceStream = New FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, fileOptions)
|
||||||
|
|
||||||
|
Using destinationStream = New FileStream(destinationFile, FileMode.CreateNew, FileAccess.Write, FileShare.None, bufferSize, fileOptions)
|
||||||
|
Await sourceStream.CopyToAsync(destinationStream, bufferSize).ConfigureAwait(False)
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
|
End Function
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -1,254 +0,0 @@
|
|||||||
Imports DigitalData.Modules.Database
|
|
||||||
Imports DigitalData.Modules.Logging
|
|
||||||
Imports DigitalData.Modules.Base
|
|
||||||
Imports GdPicture14
|
|
||||||
Imports Quartz
|
|
||||||
Imports System.Security.Cryptography
|
|
||||||
Imports System.IO
|
|
||||||
|
|
||||||
Namespace Jobs
|
|
||||||
Public Class CertificateDocumentJob
|
|
||||||
Implements IJob
|
|
||||||
|
|
||||||
Private LicenseManager As New LicenseManager()
|
|
||||||
Private GdViewer As GdViewer
|
|
||||||
|
|
||||||
Private ConfigModel As ConfigModel
|
|
||||||
Private EnvelopeModel As EnvelopeModel
|
|
||||||
|
|
||||||
Private LogConfig As LogConfig
|
|
||||||
Private Logger As Logger
|
|
||||||
Private Database As MSSQLServer
|
|
||||||
Private Config As DbConfig
|
|
||||||
|
|
||||||
Private ActionService As ActionService
|
|
||||||
|
|
||||||
Private PDFBurner As PDFBurner
|
|
||||||
|
|
||||||
Private Class EnvelopeData
|
|
||||||
Public EnvelopeId As Integer
|
|
||||||
Public DocumentPath As String
|
|
||||||
Public AnnotationData As List(Of String)
|
|
||||||
|
|
||||||
End Class
|
|
||||||
|
|
||||||
Public Function Execute(pContext As IJobExecutionContext) As Task Implements IJob.Execute
|
|
||||||
Dim oGdPictureKey As String = pContext.MergedJobDataMap.Item(Constants.GDPICTURE)
|
|
||||||
LogConfig = pContext.MergedJobDataMap.Item(Constants.LOGCONFIG)
|
|
||||||
Logger = LogConfig.GetLogger()
|
|
||||||
|
|
||||||
Dim JobId = pContext.JobDetail.Key
|
|
||||||
Logger.Info("Starting job {0}", JobId)
|
|
||||||
|
|
||||||
Try
|
|
||||||
InitializeModels()
|
|
||||||
InitializeServices()
|
|
||||||
|
|
||||||
Logger.Debug("Loading GdViewer..")
|
|
||||||
GdViewer = New GdViewer()
|
|
||||||
LicenseManager.RegisterKEY(oGdPictureKey)
|
|
||||||
|
|
||||||
Logger.Debug("Loading PDFBurner..")
|
|
||||||
PDFBurner = New PDFBurner(LogConfig, oGdPictureKey)
|
|
||||||
|
|
||||||
Logger.Debug("Loading Database..")
|
|
||||||
Database = GetDatabase(pContext, LogConfig)
|
|
||||||
|
|
||||||
Logger.Debug("Loading Configuration..")
|
|
||||||
Config = ConfigModel.LoadConfiguration()
|
|
||||||
|
|
||||||
Dim oCompleteStatus As Integer = Constants.EnvelopeStatus.EnvelopeCompletelySigned
|
|
||||||
Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE WHERE STATUS = {oCompleteStatus}"
|
|
||||||
Dim oTable = Database.GetDatatable(oSql)
|
|
||||||
|
|
||||||
|
|
||||||
Dim oEnvelopeIds As List(Of Integer) = oTable.Rows.Cast(Of DataRow).
|
|
||||||
Select(Function(r) r.Item("GUID")).
|
|
||||||
Cast(Of Integer).
|
|
||||||
ToList()
|
|
||||||
|
|
||||||
Logger.Info("Found [{0}] completed envelopes.", oEnvelopeIds.Count)
|
|
||||||
|
|
||||||
For Each oId In oEnvelopeIds
|
|
||||||
|
|
||||||
Logger.Info("Finalizing Envelope [{0}]", oId)
|
|
||||||
Dim oEnvelopeData = GetEnvelopeData(oId)
|
|
||||||
|
|
||||||
If oEnvelopeData Is Nothing Then
|
|
||||||
Logger.Warn("EnvelopeData could not be loaded for Envelope [{0}]!", oId)
|
|
||||||
Throw New ArgumentNullException("EnvelopeData")
|
|
||||||
End If
|
|
||||||
|
|
||||||
If GenerateFinalPDF(oEnvelopeData) = False Then
|
|
||||||
Logger.Warn("Document could not be finalized!")
|
|
||||||
Throw New ApplicationException("Document could not be finalized")
|
|
||||||
End If
|
|
||||||
|
|
||||||
' Dim oReport As Byte() = Await GenerateReportPdf(oId)
|
|
||||||
' MergeDocuments()
|
|
||||||
|
|
||||||
Dim oEnvelope = EnvelopeModel.GetById(oId)
|
|
||||||
If oEnvelope Is Nothing Then
|
|
||||||
Logger.Warn("Envelope could not loaded!")
|
|
||||||
Throw New ApplicationException("Envelope could not loaded!")
|
|
||||||
End If
|
|
||||||
|
|
||||||
If ActionService.FinalizeEnvelope(oEnvelope) = False Then
|
|
||||||
Logger.Warn("Envelope could not be finalized!")
|
|
||||||
Throw New ApplicationException("Envelope could not be finalized")
|
|
||||||
End If
|
|
||||||
|
|
||||||
Logger.Info("Envelope finalized!")
|
|
||||||
|
|
||||||
Next
|
|
||||||
|
|
||||||
Logger.Info("Completed job {0} successfully!", JobId)
|
|
||||||
|
|
||||||
Catch ex As Exception
|
|
||||||
Logger.Warn("Certificate Document job failed!")
|
|
||||||
Logger.Error(ex)
|
|
||||||
End Try
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function MergeDocuments(pDocumentPath As String, pReport As Byte())
|
|
||||||
|
|
||||||
Using oGdPicturePDF As New GdPicturePDF()
|
|
||||||
Using oGdPicturePDFReport As New GdPicturePDF()
|
|
||||||
Using oStream As New MemoryStream(pReport)
|
|
||||||
|
|
||||||
' Load the source file into memory
|
|
||||||
If oGdPicturePDF.LoadFromFile(pDocumentPath, True) <> GdPictureStatus.OK Then
|
|
||||||
Throw New ApplicationException("Document could not be loaded!")
|
|
||||||
End If
|
|
||||||
|
|
||||||
' Load the report file into memory
|
|
||||||
If oGdPicturePDFReport.LoadFromStream(oStream, True) <> GdPictureStatus.OK Then
|
|
||||||
Throw New ApplicationException("Report could not be loaded!")
|
|
||||||
End If
|
|
||||||
|
|
||||||
If oGdPicturePDF.ClonePages(oGdPicturePDFReport, "*") = GdPictureStatus.OK Then
|
|
||||||
Throw New ApplicationException("Report could not be loaded!")
|
|
||||||
End If
|
|
||||||
|
|
||||||
End Using
|
|
||||||
End Using
|
|
||||||
End Using
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function GenerateFinalPDF(pData As EnvelopeData) As Boolean
|
|
||||||
Dim pEnvelopeId = pData.EnvelopeId
|
|
||||||
|
|
||||||
Logger.Info("Burning [{0}] signatures", pData.AnnotationData.Count)
|
|
||||||
Dim oAnnotations = pData.AnnotationData
|
|
||||||
Dim oInputPath = pData.DocumentPath
|
|
||||||
Dim oOutputPath = Config.ExportPath
|
|
||||||
Logger.Info("Input path: [{0}]", oInputPath)
|
|
||||||
Logger.Info("Output path: [{0}]", oOutputPath)
|
|
||||||
|
|
||||||
Dim oBurnResult = PDFBurner.BurnInstantJSONAnnotationsToPDF(oInputPath, oAnnotations, oOutputPath)
|
|
||||||
|
|
||||||
If oBurnResult = False Then
|
|
||||||
Logger.Warn("PDF Could not be burned for Envelope [{0}]!", pEnvelopeId)
|
|
||||||
Return False
|
|
||||||
End If
|
|
||||||
|
|
||||||
Return True
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Async Function GenerateReportPdf(pEnvelopeId As Integer) As Task(Of Byte())
|
|
||||||
Dim oSql As String = $"SELECT * FROM VWSIG_ENVELOPE_REPORT WHERE ENVELOPE_ID = {pEnvelopeId}"
|
|
||||||
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
|
||||||
Dim oItems = GetReportSource(oTable)
|
|
||||||
|
|
||||||
If oItems.Count = 0 Then
|
|
||||||
Return Nothing
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim oState As New State() With {
|
|
||||||
.Database = Database,
|
|
||||||
.LogConfig = LogConfig
|
|
||||||
}
|
|
||||||
EnvelopeModel = New EnvelopeModel(oState)
|
|
||||||
Dim oEnvelope = EnvelopeModel.GetById(pEnvelopeId)
|
|
||||||
|
|
||||||
Dim oCreator As New ReportCreator(oEnvelope)
|
|
||||||
Dim oBuffer = Await oCreator.CreateReport(oItems)
|
|
||||||
|
|
||||||
Return oBuffer
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function GetReportSource(pDataTable As DataTable) As List(Of ReportItem)
|
|
||||||
Return pDataTable.Rows.
|
|
||||||
Cast(Of DataRow).
|
|
||||||
Select(AddressOf ToReportItem).
|
|
||||||
OrderByDescending(Function(r) r.ItemDate).
|
|
||||||
ToList()
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function GetEnvelopeData(pEnvelopeId As Integer) As EnvelopeData
|
|
||||||
Dim oSql = $"SELECT T.GUID, T2.FILEPATH FROM [dbo].[TBSIG_ENVELOPE] T
|
|
||||||
JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.GUID = T2.ENVELOPE_ID
|
|
||||||
WHERE T.GUID = {pEnvelopeId}"
|
|
||||||
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
|
||||||
Dim oRow As DataRow = oTable.Rows.Cast(Of DataRow).SingleOrDefault()
|
|
||||||
If oRow Is Nothing Then
|
|
||||||
Return Nothing
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim oAnnotationData = GetAnnotationData(pEnvelopeId)
|
|
||||||
Dim oData As New EnvelopeData With {
|
|
||||||
.EnvelopeId = pEnvelopeId,
|
|
||||||
.DocumentPath = oRow.ItemEx("FILEPATH", ""),
|
|
||||||
.AnnotationData = oAnnotationData
|
|
||||||
}
|
|
||||||
|
|
||||||
Return oData
|
|
||||||
End Function
|
|
||||||
Private Function GetAnnotationData(pEnvelopeId As Integer) As List(Of String)
|
|
||||||
Dim oSql = $"SELECT VALUE FROM TBSIG_DOCUMENT_STATUS WHERE ENVELOPE_ID = {pEnvelopeId}"
|
|
||||||
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
|
||||||
|
|
||||||
Return oTable.Rows.Cast(Of DataRow).
|
|
||||||
Select(Function(r) r.ItemEx("VALUE", String.Empty)).
|
|
||||||
Cast(Of String).
|
|
||||||
ToList()
|
|
||||||
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function ToReportItem(pRow As DataRow) As ReportItem
|
|
||||||
Return New ReportItem() With {
|
|
||||||
.EnvelopeId = pRow.Item("ENVELOPE_ID"),
|
|
||||||
.EnvelopeTitle = pRow.ItemEx("HEAD_TITLE", String.Empty),
|
|
||||||
.EnvelopeSubject = pRow.ItemEx("HEAD_SUBJECT", String.Empty),
|
|
||||||
.ItemDate = pRow.ItemEx(Of Date)("POS_WHEN", Nothing),
|
|
||||||
.ItemStatus = pRow.ItemEx("POS_STATUS", 0),
|
|
||||||
.ItemUserReference = pRow.ItemEx("POS_WHO", "")
|
|
||||||
}
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Sub InitializeServices()
|
|
||||||
Dim oState = GetState()
|
|
||||||
ActionService = New ActionService(oState)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub InitializeModels()
|
|
||||||
Dim oState = GetState()
|
|
||||||
ConfigModel = New ConfigModel(oState)
|
|
||||||
EnvelopeModel = New EnvelopeModel(oState)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Function GetDatabase(pContext As IJobExecutionContext, pLogConfig As LogConfig) As MSSQLServer
|
|
||||||
Dim oConnectionString As String = pContext.MergedJobDataMap.Item(Constants.DATABASE)
|
|
||||||
Dim Database = New MSSQLServer(pLogConfig, MSSQLServer.DecryptConnectionString(oConnectionString))
|
|
||||||
|
|
||||||
Return Database
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function GetState() As State
|
|
||||||
Return New State() With {
|
|
||||||
.LogConfig = LogConfig,
|
|
||||||
.Database = Database
|
|
||||||
}
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
End Namespace
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
Namespace Jobs.FinalizeDocument
|
||||||
|
Public Class FinalizeDocumentExceptions
|
||||||
|
|
||||||
|
Public Class MergeDocumentException
|
||||||
|
Inherits ApplicationException
|
||||||
|
|
||||||
|
Public Sub New(message As String)
|
||||||
|
MyBase.New(message)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub New(message As String, innerException As Exception)
|
||||||
|
MyBase.New(message, innerException)
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
|
||||||
|
Public Class BurnAnnotationException
|
||||||
|
Inherits ApplicationException
|
||||||
|
|
||||||
|
Public Sub New(message As String)
|
||||||
|
MyBase.New(message)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub New(message As String, innerException As Exception)
|
||||||
|
MyBase.New(message, innerException)
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
|
||||||
|
Public Class CreateReportException
|
||||||
|
Inherits ApplicationException
|
||||||
|
|
||||||
|
Public Sub New(message As String)
|
||||||
|
MyBase.New(message)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub New(message As String, innerException As Exception)
|
||||||
|
MyBase.New(message, innerException)
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
Public Class ExportDocumentException
|
||||||
|
Inherits ApplicationException
|
||||||
|
|
||||||
|
Public Sub New(message As String)
|
||||||
|
MyBase.New(message)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub New(message As String, innerException As Exception)
|
||||||
|
MyBase.New(message, innerException)
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -0,0 +1,506 @@
|
|||||||
|
Imports DigitalData.Modules.Database
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
Imports GdPicture14
|
||||||
|
Imports Quartz
|
||||||
|
Imports System.Security.Cryptography
|
||||||
|
Imports System.IO
|
||||||
|
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions
|
||||||
|
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument
|
||||||
|
Imports EnvelopeGenerator.Common.Constants
|
||||||
|
Imports DevExpress.DataProcessing
|
||||||
|
Imports System.Data.SqlClient
|
||||||
|
|
||||||
|
Namespace Jobs
|
||||||
|
Public Class FinalizeDocumentJob
|
||||||
|
Implements IJob
|
||||||
|
|
||||||
|
Private ReadOnly LicenseManager As New LicenseManager()
|
||||||
|
Private GdViewer As GdViewer
|
||||||
|
|
||||||
|
Private LogConfig As LogConfig
|
||||||
|
Private Logger As Logger
|
||||||
|
Private Database As MSSQLServer
|
||||||
|
Private Config As DbConfig
|
||||||
|
|
||||||
|
Private ConfigModel As ConfigModel
|
||||||
|
Private EnvelopeModel As EnvelopeModel
|
||||||
|
Private ReportModel As ReportModel
|
||||||
|
|
||||||
|
Private ActionService As ActionService
|
||||||
|
|
||||||
|
Private PDFBurner As PDFBurner
|
||||||
|
Private PDFMerger As PDFMerger
|
||||||
|
Private ReportCreator As ReportCreator
|
||||||
|
|
||||||
|
Private ReadOnly CompleteWaitTime As Integer = 1
|
||||||
|
Private ParentFolderUID As String = ""
|
||||||
|
Private myTempFiles As TempFiles
|
||||||
|
|
||||||
|
Private Class EnvelopeData
|
||||||
|
Public EnvelopeId As Integer
|
||||||
|
Public EnvelopeUUID As String
|
||||||
|
Public DocumentPath As String
|
||||||
|
Public AnnotationData As List(Of String)
|
||||||
|
Public DocAsByte As Byte()
|
||||||
|
|
||||||
|
End Class
|
||||||
|
|
||||||
|
Public Function Execute(pContext As IJobExecutionContext) As Task Implements IJob.Execute
|
||||||
|
Dim oGdPictureKey As String = pContext.MergedJobDataMap.Item(Constants.GDPICTURE)
|
||||||
|
LogConfig = pContext.MergedJobDataMap.Item(Constants.LOGCONFIG)
|
||||||
|
Logger = LogConfig.GetLogger()
|
||||||
|
myTempFiles = New TempFiles(LogConfig)
|
||||||
|
myTempFiles.Create()
|
||||||
|
Dim JobId = pContext.JobDetail.Key
|
||||||
|
Logger.Info("Starting job {0}", JobId)
|
||||||
|
|
||||||
|
Try
|
||||||
|
Logger.Debug("Loading GdViewer..")
|
||||||
|
GdViewer = New GdViewer()
|
||||||
|
LicenseManager.RegisterKEY(oGdPictureKey)
|
||||||
|
|
||||||
|
Logger.Debug("Loading Database..")
|
||||||
|
Database = GetDatabase(pContext, LogConfig)
|
||||||
|
|
||||||
|
Logger.Debug("Loading Models & Services")
|
||||||
|
Dim oState = GetState()
|
||||||
|
InitializeModels(oState)
|
||||||
|
|
||||||
|
Logger.Debug("Loading Configuration..")
|
||||||
|
Config = ConfigModel.LoadConfiguration()
|
||||||
|
oState.DbConfig = Config
|
||||||
|
|
||||||
|
InitializeServices(oState)
|
||||||
|
|
||||||
|
Logger.Debug("Loading PDFBurner..")
|
||||||
|
Dim ignoredLabels As List(Of String) = pContext.MergedJobDataMap.Item(Constants.IGNORED_LABELS)
|
||||||
|
PDFBurner = New PDFBurner(LogConfig, oGdPictureKey, ignoredLabels)
|
||||||
|
|
||||||
|
Logger.Debug("Loading PDFMerger..")
|
||||||
|
PDFMerger = New PDFMerger(LogConfig, oGdPictureKey)
|
||||||
|
|
||||||
|
Logger.Debug("Loading ReportCreator..")
|
||||||
|
ReportCreator = New ReportCreator(LogConfig, oState)
|
||||||
|
Logger.Debug("My.Settings.RuninDMZ: [{0}]", My.Settings.RuninDMZ.ToString)
|
||||||
|
Logger.Debug("My.Settings.NetUse_Usr: [{0}]", My.Settings.NetUse_Usr)
|
||||||
|
|
||||||
|
|
||||||
|
If My.Settings.RuninDMZ = True Then
|
||||||
|
If Config.DocumentPath_DMZ <> String.Empty Then
|
||||||
|
Logger.Debug("RuninDMZ - Using DocumentPath_DMZ: [{0}] - Overwrite Document-Path", Config.DocumentPath_DMZ)
|
||||||
|
Config.DocumentPath = Config.DocumentPath_DMZ
|
||||||
|
Config.NetUse_necessary = True
|
||||||
|
Else
|
||||||
|
Config.DocumentPath = Config.DocumentPath
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
If Config.DOCUMENT_PATH_MOVE_AFTSEND <> String.Empty Then
|
||||||
|
Logger.Debug("Using DMZRemotePath: [{0}] - Overwrite Document-Path ...", Config.DOCUMENT_PATH_MOVE_AFTSEND)
|
||||||
|
Config.DocumentPath = Config.DOCUMENT_PATH_MOVE_AFTSEND
|
||||||
|
Config.NetUse_Finish = True
|
||||||
|
|
||||||
|
Else
|
||||||
|
Config.DocumentPath = Config.DocumentPath
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Logger.Debug("DocumentPath: [{0}]", Config.DocumentPath)
|
||||||
|
|
||||||
|
If My.Settings.RuninDMZ = True Then
|
||||||
|
If Config.FINISHED_PATH_EX_DMZ <> String.Empty Then
|
||||||
|
Logger.Debug("RuninDMZ - FINISHED_PATH_EX_DMZ configured: [{0}]", Config.FINISHED_PATH_EX_DMZ)
|
||||||
|
Config.NetUse_Finish = True
|
||||||
|
End If
|
||||||
|
If Config.ExportPath_DMZ <> String.Empty Then
|
||||||
|
Logger.Debug("RuninDMZ - Using ExportPath_DMZ: [{0}] - Overwrite ExportPath", Config.ExportPath_DMZ)
|
||||||
|
Config.ExportPath = Config.ExportPath_DMZ
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
Logger.Debug("ExportPath: [{0}]", Config.ExportPath)
|
||||||
|
|
||||||
|
If Config.NetUse_Finish = True Then
|
||||||
|
If NetUse_Command(Config.DocumentPath, My.Settings.NetUse_Usr, My.Settings.NetUse_PW) = True Then
|
||||||
|
Logger.Debug("NetUse_Finish = successful!")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim oCompleteStatus As Integer = Constants.EnvelopeStatus.EnvelopeCompletelySigned
|
||||||
|
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 oEnvelopeIds As List(Of Integer) = oTable.Rows.Cast(Of DataRow).
|
||||||
|
Select(Function(r) r.Item("GUID")).
|
||||||
|
Cast(Of Integer).
|
||||||
|
ToList()
|
||||||
|
|
||||||
|
If oEnvelopeIds.Count > 0 Then
|
||||||
|
Logger.Info("Found [{0}] completed envelopes.", oEnvelopeIds.Count)
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim oTotal As Integer = oEnvelopeIds.Count
|
||||||
|
Dim oCurrent As Integer = 1
|
||||||
|
|
||||||
|
For Each oId In oEnvelopeIds
|
||||||
|
Logger.Info("Finalizing Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal)
|
||||||
|
Logger.Debug("Loading Envelope..")
|
||||||
|
Try
|
||||||
|
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 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
|
||||||
|
|
||||||
|
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
|
||||||
|
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
|
||||||
|
Logger.Info("Writing EB-bytes to database...")
|
||||||
|
Update_File_DB(oOutputFilePath, oEnvelope.Id)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
oCurrent += 1
|
||||||
|
Logger.Info("Envelope finalized!")
|
||||||
|
|
||||||
|
Next
|
||||||
|
|
||||||
|
Logger.Debug("Completed job {0} successfully!", JobId)
|
||||||
|
Catch ex As MergeDocumentException
|
||||||
|
Logger.Warn("Certificate Document job failed at step: Merging documents!")
|
||||||
|
Logger.Error(ex)
|
||||||
|
|
||||||
|
Catch ex As ExportDocumentException
|
||||||
|
Logger.Warn("Certificate Document job failed at step: Exporting document!")
|
||||||
|
Logger.Error(ex)
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn("Certificate Document job failed!")
|
||||||
|
Logger.Error(ex)
|
||||||
|
Finally
|
||||||
|
Logger.Info("Job execution for [{0}] ended", JobId)
|
||||||
|
End Try
|
||||||
|
|
||||||
|
Return Task.FromResult(True)
|
||||||
|
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)
|
||||||
|
Dim oDectryptedPW = Helpers.Decrypt(My.Settings.NetUse_PW)
|
||||||
|
Dim netUseCommand As String = $"net use {pDestinationPath} /user:{pUsername} {oDectryptedPW}"
|
||||||
|
Logger.Debug("EXECUTING NetUse_Command for " & pDestinationPath)
|
||||||
|
Dim processInfo As New ProcessStartInfo("cmd.exe", $"/C {netUseCommand}")
|
||||||
|
processInfo.RedirectStandardOutput = True
|
||||||
|
processInfo.UseShellExecute = False
|
||||||
|
processInfo.CreateNoWindow = True
|
||||||
|
|
||||||
|
Using process As Process = Process.Start(processInfo)
|
||||||
|
process.WaitForExit()
|
||||||
|
|
||||||
|
' Prüfe den Rückgabewert des net use Befehls
|
||||||
|
If process.ExitCode = 0 Then
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function Clean_DNZ_PAth(pSourcePath As String) As Boolean
|
||||||
|
Dim oFilename = System.IO.Path.GetFileName(pSourcePath)
|
||||||
|
|
||||||
|
Logger.Debug("## Starting Clean_DNZ_PAth ...")
|
||||||
|
Logger.Debug("## pSourcePath {0}", pSourcePath)
|
||||||
|
|
||||||
|
Dim oDirectorySource = Path.Combine(pSourcePath, ParentFolderUID)
|
||||||
|
|
||||||
|
Try
|
||||||
|
Logger.Debug($"Deleting oDirectorySource {oDirectorySource} ...")
|
||||||
|
Directory.Delete(oDirectorySource, True)
|
||||||
|
Console.WriteLine($"Folder successfully deleted!")
|
||||||
|
Logger.Debug($"...Deleted!")
|
||||||
|
Return True
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
|
||||||
|
|
||||||
|
End Function
|
||||||
|
Private Function SendFinalEmails(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
|
Dim oMailToCreator = pEnvelope.FinalEmailToCreator
|
||||||
|
Dim oMailToReceivers = pEnvelope.FinalEmailToReceivers
|
||||||
|
|
||||||
|
If oMailToCreator <> FinalEmailType.No Then
|
||||||
|
Logger.Debug("Sending email to creator ...")
|
||||||
|
SendFinalEmailToCreator(pEnvelope) ', pAttachment
|
||||||
|
End If
|
||||||
|
|
||||||
|
If oMailToReceivers <> FinalEmailType.No Then
|
||||||
|
Logger.Debug("Sending emails to receivers..")
|
||||||
|
SendFinalEmailToReceivers(pEnvelope) ', pAttachment
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function SendFinalEmailToCreator(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
|
Dim oIncludeAttachment = SendFinalEmailWithAttachment(pEnvelope.FinalEmailToCreator)
|
||||||
|
' Dim oAttachment = String.Empty
|
||||||
|
|
||||||
|
Logger.Debug("Attachment included: [{0}]", oIncludeAttachment)
|
||||||
|
If oIncludeAttachment Then
|
||||||
|
'oAttachment = pAttachment
|
||||||
|
End If
|
||||||
|
|
||||||
|
If ActionService.CompleteEnvelope(pEnvelope) = False Then ', oAttachment
|
||||||
|
Logger.Error("Envelope could not be completed for receiver [{0}]", pEnvelope.User.Email)
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function SendFinalEmailToReceivers(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
|
Dim oIncludeAttachment = SendFinalEmailWithAttachment(pEnvelope.FinalEmailToReceivers)
|
||||||
|
'Dim oAttachment = String.Empty
|
||||||
|
|
||||||
|
Logger.Debug("Attachment included: [{0}]", oIncludeAttachment)
|
||||||
|
If oIncludeAttachment Then
|
||||||
|
|
||||||
|
' oAttachment = pAttachment
|
||||||
|
End If
|
||||||
|
|
||||||
|
For Each oReceiver In pEnvelope.Receivers
|
||||||
|
If ActionService.CompleteEnvelope(pEnvelope, oReceiver) = False Then ', oAttachment
|
||||||
|
Logger.Error("Envelope could not be completed for receiver [{0}]", oReceiver.Email)
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function SendFinalEmailWithAttachment(pType As FinalEmailType)
|
||||||
|
If pType = FinalEmailType.YesWithAttachment Then
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function BurnAnnotationsToPdf(pEnvelopeData As EnvelopeData) As Byte()
|
||||||
|
Dim pEnvelopeId = pEnvelopeData.EnvelopeId
|
||||||
|
|
||||||
|
Logger.Info($"Burning [{pEnvelopeData.AnnotationData.Count}] signatures")
|
||||||
|
Dim oAnnotations = pEnvelopeData.AnnotationData
|
||||||
|
Dim oInputPath = ""
|
||||||
|
If IsNothing(pEnvelopeData.DocAsByte) Then
|
||||||
|
If My.Settings.RuninDMZ Then
|
||||||
|
Logger.Debug("Replacing Path in pData.DocumentPath ...")
|
||||||
|
oInputPath = pEnvelopeData.DocumentPath.Replace(Config.DocumentPathOrigin, Config.DocumentPath)
|
||||||
|
ElseIf Config.DOCUMENT_PATH_MOVE_AFTSEND <> String.Empty Then
|
||||||
|
Logger.Debug("Replacing 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
|
||||||
|
|
||||||
|
|
||||||
|
Logger.Info("ParentFolderUID: [{0}]", ParentFolderUID)
|
||||||
|
Dim oInputDocumentBuffer As Byte()
|
||||||
|
If Not IsNothing(pEnvelopeData.DocAsByte) Then
|
||||||
|
oInputDocumentBuffer = pEnvelopeData.DocAsByte
|
||||||
|
Else
|
||||||
|
Try
|
||||||
|
oInputDocumentBuffer = File.ReadAllBytes(oInputPath)
|
||||||
|
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)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function GetEnvelopeData(pEnvelopeId As Integer) As EnvelopeData
|
||||||
|
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
|
||||||
|
WHERE T.GUID = {pEnvelopeId}"
|
||||||
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
|
Dim oRow As DataRow = oTable.Rows.Cast(Of DataRow).SingleOrDefault()
|
||||||
|
If oRow Is Nothing Then
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim oAnnotationData = GetAnnotationData(pEnvelopeId)
|
||||||
|
Dim oData As New EnvelopeData With {
|
||||||
|
.EnvelopeId = pEnvelopeId,
|
||||||
|
.DocumentPath = oRow.ItemEx("FILEPATH", ""),
|
||||||
|
.AnnotationData = oAnnotationData,
|
||||||
|
.DocAsByte = DirectCast(oRow.Item("BYTE_DATA"), Byte()),
|
||||||
|
.EnvelopeUUID = oRow.ItemEx("ENVELOPE_UUID", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.Debug("Document path: [{0}]", oData.DocumentPath)
|
||||||
|
|
||||||
|
Return oData
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function GetAnnotationData(pEnvelopeId As Integer) As List(Of String)
|
||||||
|
Dim oSql = $"SELECT VALUE FROM TBSIG_DOCUMENT_STATUS WHERE ENVELOPE_ID = {pEnvelopeId}"
|
||||||
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
|
|
||||||
|
Return oTable.Rows.Cast(Of DataRow).
|
||||||
|
Select(Function(r) r.ItemEx("VALUE", String.Empty)).
|
||||||
|
Cast(Of String).
|
||||||
|
ToList()
|
||||||
|
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Sub InitializeServices(pState As State)
|
||||||
|
ActionService = New ActionService(pState)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub InitializeModels(pState As State)
|
||||||
|
ConfigModel = New ConfigModel(pState)
|
||||||
|
EnvelopeModel = New EnvelopeModel(pState)
|
||||||
|
ReportModel = New ReportModel(pState)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Function GetDatabase(pContext As IJobExecutionContext, pLogConfig As LogConfig) As MSSQLServer
|
||||||
|
Dim oConnectionString As String = pContext.MergedJobDataMap.Item(Constants.DATABASE)
|
||||||
|
Dim Database = New MSSQLServer(pLogConfig, MSSQLServer.DecryptConnectionString(oConnectionString))
|
||||||
|
|
||||||
|
Return Database
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function GetState() As State
|
||||||
|
Return New State With {
|
||||||
|
.LogConfig = LogConfig,
|
||||||
|
.Database = Database,
|
||||||
|
.UserId = 0,
|
||||||
|
.Config = Nothing,
|
||||||
|
.DbConfig = Nothing
|
||||||
|
}
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -4,55 +4,68 @@ Imports DigitalData.Modules.Base
|
|||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
Imports GdPicture14
|
Imports GdPicture14
|
||||||
Imports Newtonsoft.Json
|
Imports Newtonsoft.Json
|
||||||
|
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions
|
||||||
|
|
||||||
Namespace Jobs
|
Namespace Jobs.FinalizeDocument
|
||||||
Public Class PDFBurner
|
Public Class PDFBurner
|
||||||
Inherits BaseClass
|
Inherits BaseClass
|
||||||
|
|
||||||
Private ReadOnly LicenseKey As String
|
|
||||||
Private ReadOnly Manager As AnnotationManager
|
Private ReadOnly Manager As AnnotationManager
|
||||||
Private ReadOnly LicenseManager As LicenseManager
|
Private ReadOnly LicenseManager As LicenseManager
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
LicenseKey = pGDPictureLicenseKey
|
|
||||||
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(pSourceFilePath As String, pInstantJSONList As List(Of String), pDestinationDirectoryPath As String) As Boolean
|
Public Function BurnInstantJSONAnnotationsToPDF(pSourceBuffer As Byte(), pInstantJSONList As List(Of String)) As Byte()
|
||||||
If Manager.InitFromFile(pSourceFilePath) <> GdPictureStatus.OK Then
|
Dim oResult As GdPictureStatus
|
||||||
Logger.Warn("Could not open file [{0}] for burning.", pSourceFilePath)
|
|
||||||
Return False
|
|
||||||
End If
|
|
||||||
|
|
||||||
For Each oJSON In pInstantJSONList
|
|
||||||
If AddInstantJSONAnnotationToPDF(oJSON) = False Then
|
|
||||||
Logger.Warn("Adding Annotation failed. Exiting")
|
|
||||||
Return False
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
|
|
||||||
Dim oFileInfo As New FileInfo(pSourceFilePath)
|
|
||||||
Dim oDestinationFilePath As String = Path.Combine(pDestinationDirectoryPath, oFileInfo.Name)
|
|
||||||
Try
|
Try
|
||||||
|
Using oSourceStream As New MemoryStream(pSourceBuffer)
|
||||||
|
oResult = Manager.InitFromStream(oSourceStream)
|
||||||
|
If oResult <> GdPictureStatus.OK Then
|
||||||
|
Throw New BurnAnnotationException($"Could not open document for burning: [{oResult}]")
|
||||||
|
End If
|
||||||
|
|
||||||
Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True)
|
For Each oJSON In pInstantJSONList
|
||||||
Manager.SaveDocumentToPDF(oDestinationFilePath)
|
If AddInstantJSONAnnotationToPDF(oJSON) = False Then
|
||||||
Manager.Close()
|
Logger.Warn($"Error in AddInstantJSONAnnotationToPDF - oJson: ")
|
||||||
|
Logger.Warn(oJSON)
|
||||||
|
Throw New BurnAnnotationException($"Adding Annotation failed")
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
oResult = Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True)
|
||||||
|
If oResult <> GdPictureStatus.OK Then
|
||||||
|
Throw New BurnAnnotationException($"Could not burn annotations to file: [{oResult}]")
|
||||||
|
End If
|
||||||
|
|
||||||
Return True
|
Using oNewStream As New MemoryStream()
|
||||||
|
oResult = Manager.SaveDocumentToPDF(oNewStream)
|
||||||
|
If oResult <> GdPictureStatus.OK Then
|
||||||
|
Throw New BurnAnnotationException($"Could not save document to stream: [{oResult}]")
|
||||||
|
End If
|
||||||
|
|
||||||
|
Manager.Close()
|
||||||
|
|
||||||
|
Return oNewStream.ToArray()
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Logger.Warn("Could not burn and save annotations to file [{0}]!", oDestinationFilePath)
|
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
|
|
||||||
Return False
|
Return Nothing
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
@@ -61,11 +74,20 @@ Namespace Jobs
|
|||||||
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)
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
@@ -90,6 +112,7 @@ Namespace Jobs
|
|||||||
Dim oWidth = oBounds.Item(2)
|
Dim oWidth = oBounds.Item(2)
|
||||||
Dim oHeight = oBounds.Item(3)
|
Dim oHeight = oBounds.Item(3)
|
||||||
|
|
||||||
|
Manager.SelectPage(pAnnotation.pageIndex + 1)
|
||||||
Manager.AddEmbeddedImageAnnotFromBase64(oAttachment.Value.binary, oX, oY, oWidth, oHeight)
|
Manager.AddEmbeddedImageAnnotFromBase64(oAttachment.Value.binary, oX, oY, oWidth, oHeight)
|
||||||
|
|
||||||
Return True
|
Return True
|
||||||
@@ -105,14 +128,13 @@ Namespace Jobs
|
|||||||
Try
|
Try
|
||||||
Dim oSegments = pAnnotation.lines.points
|
Dim oSegments = pAnnotation.lines.points
|
||||||
Dim oColor = ColorTranslator.FromHtml(pAnnotation.strokeColor)
|
Dim oColor = ColorTranslator.FromHtml(pAnnotation.strokeColor)
|
||||||
Manager.SelectPage(pAnnotation.pageIndex)
|
Manager.SelectPage(pAnnotation.pageIndex + 1)
|
||||||
|
|
||||||
For Each oSegment As List(Of List(Of Single)) In oSegments
|
For Each oSegment As List(Of List(Of Single)) In oSegments
|
||||||
Dim oPoints = oSegment.
|
Dim oPoints = oSegment.
|
||||||
Select(AddressOf ToPointF).
|
Select(AddressOf ToPointF).
|
||||||
ToArray()
|
ToArray()
|
||||||
|
|
||||||
|
|
||||||
Manager.AddFreeHandAnnot(oColor, oPoints)
|
Manager.AddFreeHandAnnot(oColor, oPoints)
|
||||||
Next
|
Next
|
||||||
|
|
||||||
@@ -126,6 +148,33 @@ Namespace Jobs
|
|||||||
|
|
||||||
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))
|
||||||
@@ -142,6 +191,7 @@ Namespace Jobs
|
|||||||
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
|
||||||
@@ -163,5 +213,10 @@ Namespace Jobs
|
|||||||
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
|
||||||
71
EnvelopeGenerator.Common/Jobs/FinalizeDocument/PDFMerger.vb
Normal file
71
EnvelopeGenerator.Common/Jobs/FinalizeDocument/PDFMerger.vb
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions
|
||||||
|
Imports GdPicture14
|
||||||
|
Imports System.IO
|
||||||
|
|
||||||
|
Public Class PDFMerger
|
||||||
|
Inherits BaseClass
|
||||||
|
|
||||||
|
Private ReadOnly Manager As AnnotationManager
|
||||||
|
Private ReadOnly LicenseManager As LicenseManager
|
||||||
|
|
||||||
|
Private Const ALLOW_RASTERIZATION = True
|
||||||
|
Private Const ALLOW_VECTORIZATION = True
|
||||||
|
|
||||||
|
Private ReadOnly PDFAConformanceLevel As PdfConversionConformance = PdfConversionConformance.PDF_A_1b
|
||||||
|
|
||||||
|
Public Sub New(pLogConfig As LogConfig, pGDPictureLicenseKey As String)
|
||||||
|
MyBase.New(pLogConfig)
|
||||||
|
|
||||||
|
LicenseManager = New LicenseManager()
|
||||||
|
LicenseManager.RegisterKEY(pGDPictureLicenseKey)
|
||||||
|
|
||||||
|
Manager = New AnnotationManager()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function MergeDocuments(pDocument As Byte(), pReport As Byte()) As Byte()
|
||||||
|
Using oDocumentStream As New MemoryStream(pDocument)
|
||||||
|
Using oReportStream As New MemoryStream(pReport)
|
||||||
|
Using oFinalStream As New MemoryStream()
|
||||||
|
Using oDocumentPDF As New GdPicturePDF()
|
||||||
|
Using oReportPDF As New GdPicturePDF()
|
||||||
|
Dim oStatus As GdPictureStatus = GdPictureStatus.OK
|
||||||
|
|
||||||
|
' Load the source file into memory
|
||||||
|
oDocumentPDF.LoadFromStream(oDocumentStream, True)
|
||||||
|
|
||||||
|
oStatus = oDocumentPDF.GetStat()
|
||||||
|
If oStatus <> GdPictureStatus.OK Then
|
||||||
|
Throw New MergeDocumentException($"Document could not be loaded: {oStatus}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Load the report file into memory
|
||||||
|
oReportPDF.LoadFromStream(oReportStream, True)
|
||||||
|
oStatus = oReportPDF.GetStat()
|
||||||
|
If oStatus <> GdPictureStatus.OK Then
|
||||||
|
Throw New MergeDocumentException($"Report could not be loaded: {oStatus}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Merge the documents
|
||||||
|
Dim oMergedPDF = oDocumentPDF.Merge2Documents(oDocumentPDF, oReportPDF)
|
||||||
|
oStatus = oMergedPDF.GetStat()
|
||||||
|
If oStatus <> GdPictureStatus.OK Then
|
||||||
|
Throw New MergeDocumentException($"Documents could not be merged: {oStatus}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Convert to PDF/A
|
||||||
|
oMergedPDF.ConvertToPDFA(oFinalStream, PDFAConformanceLevel, ALLOW_VECTORIZATION, ALLOW_RASTERIZATION)
|
||||||
|
oStatus = oDocumentPDF.GetStat()
|
||||||
|
If oStatus <> GdPictureStatus.OK Then
|
||||||
|
Throw New MergeDocumentException($"Document could not be converted to PDF/A: {oStatus}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return oFinalStream.ToArray()
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
Imports System.IO
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions
|
||||||
|
|
||||||
|
Public Class ReportCreator
|
||||||
|
Inherits BaseClass
|
||||||
|
|
||||||
|
Private Envelope As Envelope
|
||||||
|
Private ReadOnly ReportModel As ReportModel
|
||||||
|
Private ReadOnly EnvelopeModel As EnvelopeModel
|
||||||
|
|
||||||
|
Public Sub New(pLogConfig As LogConfig, pState As State)
|
||||||
|
MyBase.New(pLogConfig)
|
||||||
|
|
||||||
|
ReportModel = New ReportModel(pState)
|
||||||
|
EnvelopeModel = New EnvelopeModel(pState)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function CreateReport(pEnvelope As Envelope) As Byte()
|
||||||
|
Try
|
||||||
|
Logger.Debug("Loading report data..")
|
||||||
|
Dim oTable = ReportModel.List(pEnvelope.Id)
|
||||||
|
Dim oItems = GetReportSource(oTable)
|
||||||
|
|
||||||
|
Envelope = pEnvelope
|
||||||
|
|
||||||
|
If oItems.Count = 0 Then
|
||||||
|
Throw New CreateReportException("No report data found!")
|
||||||
|
End If
|
||||||
|
|
||||||
|
Logger.Debug("Creating report with [{0}] items..", oItems.Count)
|
||||||
|
Dim oBuffer = DoCreateReport(oItems)
|
||||||
|
Logger.Debug("Report created!")
|
||||||
|
|
||||||
|
Return oBuffer
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Throw New CreateReportException("Could not prepare report data!", ex)
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function GetReportSource(pDataTable As DataTable) As List(Of ReportItem)
|
||||||
|
Logger.Debug("Preparing report data")
|
||||||
|
Return pDataTable.Rows.
|
||||||
|
Cast(Of DataRow).
|
||||||
|
Select(AddressOf ToReportItem).
|
||||||
|
OrderByDescending(Function(r) r.ItemDate).
|
||||||
|
ToList()
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function DoCreateReport(pReportItems As List(Of ReportItem)) As Byte()
|
||||||
|
Dim oItems = pReportItems.Select(AddressOf MergeEnvelope).ToList()
|
||||||
|
Dim oSource As New ReportSource With {.Items = oItems}
|
||||||
|
Dim oReport As New rptEnvelopeHistory() With {.DataSource = oSource, .DataMember = "Items"}
|
||||||
|
|
||||||
|
Logger.Debug("Creating report in memory..")
|
||||||
|
oReport.CreateDocument()
|
||||||
|
|
||||||
|
Logger.Debug("Exporting report to stream..")
|
||||||
|
Using oStream As New MemoryStream()
|
||||||
|
oReport.ExportToPdf(oStream)
|
||||||
|
|
||||||
|
Logger.Debug("Writing report to buffer..")
|
||||||
|
Return oStream.ToArray()
|
||||||
|
End Using
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function MergeEnvelope(pItem As ReportItem) As ReportItem
|
||||||
|
If pItem.Envelope Is Nothing Then
|
||||||
|
pItem.Envelope = Envelope
|
||||||
|
End If
|
||||||
|
Return pItem
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ToReportItem(pRow As DataRow) As ReportItem
|
||||||
|
Try
|
||||||
|
Return New ReportItem() With {
|
||||||
|
.EnvelopeId = pRow.Item("ENVELOPE_ID"),
|
||||||
|
.EnvelopeTitle = pRow.ItemEx("HEAD_TITLE", String.Empty),
|
||||||
|
.EnvelopeSubject = pRow.ItemEx("HEAD_SUBJECT", String.Empty),
|
||||||
|
.ItemDate = pRow.ItemEx(Of Date)("POS_WHEN", Nothing),
|
||||||
|
.ItemStatus = pRow.ItemEx("POS_STATUS", 0),
|
||||||
|
.ItemUserReference = pRow.ItemEx("POS_WHO", "")
|
||||||
|
}
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Throw New CreateReportException("Could not read data from database!", ex)
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
Public Class ReportItem
|
Imports System.Windows.Forms.VisualStyles.VisualStyleElement
|
||||||
|
|
||||||
|
Public Class ReportItem
|
||||||
|
|
||||||
Public Property Envelope As Envelope
|
Public Property Envelope As Envelope
|
||||||
Public Property EnvelopeId As Integer
|
Public Property EnvelopeId As Integer
|
||||||
@@ -6,6 +8,13 @@
|
|||||||
Public Property EnvelopeSubject As String
|
Public Property EnvelopeSubject As String
|
||||||
|
|
||||||
Public Property ItemStatus As Constants.EnvelopeStatus
|
Public Property ItemStatus As Constants.EnvelopeStatus
|
||||||
|
Public ReadOnly Property ItemStatusTranslated As String
|
||||||
|
Get
|
||||||
|
Dim oStatus = ItemStatus.ToString()
|
||||||
|
Return My.Resources.Model.ResourceManager.GetString(oStatus)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
Public Property ItemUserReference As String
|
Public Property ItemUserReference As String
|
||||||
Public Property ItemDate As Date
|
Public Property ItemDate As Date
|
||||||
|
|
||||||
@@ -13,16 +13,23 @@ Public Class ConfigModel
|
|||||||
Try
|
Try
|
||||||
Dim oSql As String = "SELECT TOP 1 * FROM TBSIG_CONFIG"
|
Dim oSql As String = "SELECT TOP 1 * FROM TBSIG_CONFIG"
|
||||||
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
Dim oRow = oTable.Rows.Item(0)
|
Dim oRow As DataRow = oTable.Rows.Item(0)
|
||||||
|
|
||||||
Return New DbConfig() With {
|
Return New DbConfig() With {
|
||||||
.DocumentPath = oRow.ItemEx("DOCUMENT_PATH", ""),
|
.DocumentPath = oRow.ItemEx("DOCUMENT_PATH", ""),
|
||||||
|
.DocumentPathOrigin = oRow.ItemEx("DOCUMENT_PATH", ""),
|
||||||
|
.DocumentPath_DMZ = oRow.ItemEx("DOCUMENT_PATH_DMZ", ""),
|
||||||
.ExportPath = oRow.ItemEx("EXPORT_PATH", ""),
|
.ExportPath = oRow.ItemEx("EXPORT_PATH", ""),
|
||||||
|
.ExportPath_DMZ = oRow.ItemEx("EXPORT_PATH_DMZ", ""),
|
||||||
.SendingProfile = oRow.ItemEx("SENDING_PROFILE", 0),
|
.SendingProfile = oRow.ItemEx("SENDING_PROFILE", 0),
|
||||||
.SignatureHost = oRow.ItemEx("SIGNATURE_HOST", ""),
|
.SignatureHost = oRow.ItemEx("SIGNATURE_HOST", ""),
|
||||||
.ExternalProgramName = oRow.ItemEx("EXTERNAL_PROGRAM_NAME", "")
|
.ExternalProgramName = oRow.ItemEx("EXTERNAL_PROGRAM_NAME", ""),
|
||||||
|
.DOCUMENT_PATH_MOVE_AFTSEND = oRow.ItemEx("DOCUMENT_PATH_MOVE_AFTSEND", ""),
|
||||||
|
.FINISHED_PATH_EX_DMZ = oRow.ItemEx("FINISHED_PATH_EX_DMZ", ""),
|
||||||
|
.EML_PATH_EX_DMZ = oRow.ItemEx("EML_PATH_EX_DMZ", "")
|
||||||
}
|
}
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
Return New DbConfig()
|
Return New DbConfig()
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -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, 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, @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,7 +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("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
|
||||||
|
|||||||
31
EnvelopeGenerator.Common/Models/EmailTemplateModel.vb
Normal file
31
EnvelopeGenerator.Common/Models/EmailTemplateModel.vb
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
Imports EnvelopeGenerator.Common.Constants
|
||||||
|
|
||||||
|
Public Class EmailTemplateModel
|
||||||
|
Inherits BaseModel
|
||||||
|
|
||||||
|
Public Sub New(pState As State)
|
||||||
|
MyBase.New(pState)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Function ToEmailTemplate(pRow As DataRow) As EmailTemplate
|
||||||
|
Return New EmailTemplate() With {
|
||||||
|
.Id = pRow.ItemEx("GUID", 0),
|
||||||
|
.Name = pRow.ItemEx("NAME", ""),
|
||||||
|
.Body = pRow.ItemEx("BODY", ""),
|
||||||
|
.Subject = pRow.ItemEx("SUBJECT", "")
|
||||||
|
}
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function GetById(pEmailTemplateName As EmailTemplateType) As EmailTemplate
|
||||||
|
Dim oSql As String = $"SELECT * FROM TBSIG_EMAIL_TEMPLATE WHERE NAME = '{pEmailTemplateName}'"
|
||||||
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
|
|
||||||
|
If oTable.Rows.Count = 0 Then
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim oRow = oTable.Rows.Item(0)
|
||||||
|
Return ToEmailTemplate(oRow)
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
@@ -10,7 +10,7 @@ Public Class EnvelopeModel
|
|||||||
Private ReadOnly ReceiverModel As ReceiverModel
|
Private ReadOnly ReceiverModel As ReceiverModel
|
||||||
Private ReadOnly HistoryModel As HistoryModel
|
Private ReadOnly HistoryModel As HistoryModel
|
||||||
Private ReadOnly DocumentModel As DocumentModel
|
Private ReadOnly DocumentModel As DocumentModel
|
||||||
|
Private ReadOnly EnvelopeTypeModel As EnvelopeTypeModel
|
||||||
|
|
||||||
Public Sub New(pState As State)
|
Public Sub New(pState As State)
|
||||||
MyBase.New(pState)
|
MyBase.New(pState)
|
||||||
@@ -19,25 +19,48 @@ Public Class EnvelopeModel
|
|||||||
ReceiverModel = New ReceiverModel(pState)
|
ReceiverModel = New ReceiverModel(pState)
|
||||||
DocumentModel = New DocumentModel(pState)
|
DocumentModel = New DocumentModel(pState)
|
||||||
HistoryModel = New HistoryModel(pState)
|
HistoryModel = New HistoryModel(pState)
|
||||||
|
EnvelopeTypeModel = New EnvelopeTypeModel(pState)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Function ToEnvelope(pRow As DataRow) As Envelope
|
Private Function ToEnvelope(pRow As DataRow) As Envelope
|
||||||
Dim oEnvelope = New Envelope() With {
|
Dim oEnvelope = New Envelope() With {
|
||||||
.Id = pRow.ItemEx("GUID", 0),
|
.Id = pRow.ItemEx("GUID", 0),
|
||||||
.Title = pRow.ItemEx("TITLE", ""),
|
.Title = pRow.ItemEx("TITLE", ""),
|
||||||
.ContractType = ObjectEx.ToEnum(Of Constants.ContractType)(pRow.ItemEx("CONTRACT_TYPE", Constants.ContractType.Contract.ToString())),
|
.EnvelopeTypeId = pRow.ItemEx("ENVELOPE_TYPE", 0),
|
||||||
|
.ContractType = pRow.ItemEx("CONTRACT_TYPE", 0),
|
||||||
.Uuid = pRow.ItemEx("ENVELOPE_UUID", ""),
|
.Uuid = pRow.ItemEx("ENVELOPE_UUID", ""),
|
||||||
.Message = pRow.ItemEx("MESSAGE", ""),
|
.Message = pRow.ItemEx("MESSAGE", ""),
|
||||||
.UserId = pRow.ItemEx("USER_ID", 0),
|
.UserId = pRow.ItemEx("USER_ID", 0),
|
||||||
|
.Language = pRow.ItemEx("LANGUAGE", "de-DE"),
|
||||||
.Status = ObjectEx.ToEnum(Of Constants.EnvelopeStatus)(pRow.ItemEx("STATUS", Constants.EnvelopeStatus.EnvelopeCreated.ToString())),
|
.Status = ObjectEx.ToEnum(Of Constants.EnvelopeStatus)(pRow.ItemEx("STATUS", Constants.EnvelopeStatus.EnvelopeCreated.ToString())),
|
||||||
.AddedWhen = pRow.Item("ADDED_WHEN"),
|
.AddedWhen = pRow.Item("ADDED_WHEN"),
|
||||||
.User = New User()
|
.CertificationType = ObjectEx.ToEnum(Of Constants.CertificationType)(pRow.ItemEx("CERTIFICATION_TYPE", Constants.CertificationType.ElectronicSignature.ToString())),
|
||||||
|
.User = New User(),
|
||||||
|
.ExpiresWhen = pRow.ItemEx(Of Date)("EXPIRES_WHEN", Nothing),
|
||||||
|
.ExpiresWarningWhen = pRow.ItemEx(Of Date)("EXPIRES_WARNING_WHEN", Nothing),
|
||||||
|
.ExpiresWhenDays = pRow.ItemEx("EXPIRES_WHEN_DAYS", 0),
|
||||||
|
.ExpiresWarningWhenDays = pRow.ItemEx("EXPIRES_WARNING_WHEN_DAYS", 0),
|
||||||
|
.SendReminderEmails = pRow.ItemEx("SEND_REMINDER_EMAILS", False),
|
||||||
|
.FirstReminderDays = pRow.ItemEx("FIRST_REMINDER_DAYS", 0),
|
||||||
|
.ReminderIntervalDays = pRow.ItemEx("REMINDER_INTERVAL_DAYS", 0),
|
||||||
|
.UseAccessCode = pRow.ItemEx("USE_ACCESS_CODE", False),
|
||||||
|
.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()))
|
||||||
}
|
}
|
||||||
|
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)
|
||||||
oEnvelope.History = HistoryModel.List(oEnvelope.Id)
|
oEnvelope.History = HistoryModel.List(oEnvelope.Id)
|
||||||
|
oEnvelope.EnvelopeType = EnvelopeTypeModel.GetById(oEnvelope.EnvelopeTypeId)
|
||||||
|
|
||||||
Return oEnvelope
|
Return oEnvelope
|
||||||
End Function
|
End Function
|
||||||
@@ -119,15 +142,13 @@ Public Class EnvelopeModel
|
|||||||
|
|
||||||
Public Function Insert(pEnvelope As Envelope) As Boolean
|
Public Function Insert(pEnvelope As Envelope) As Boolean
|
||||||
Try
|
Try
|
||||||
Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE] (MESSAGE, ENVELOPE_UUID, STATUS, USER_ID, TITLE, CONTRACT_TYPE) "
|
Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE] (MESSAGE, ENVELOPE_UUID, STATUS, USER_ID) "
|
||||||
oSql += " VALUES (@MESSAGE, @UUID, @STATUS, @USER_ID, @TITLE, @CONTRACT_TYPE)"
|
oSql += " VALUES (@MESSAGE, @UUID, @STATUS, @USER_ID)"
|
||||||
Dim oCommand As New SqlCommand(oSql)
|
Dim oCommand As New SqlCommand(oSql)
|
||||||
oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = String.Empty
|
oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = String.Empty
|
||||||
oCommand.Parameters.Add("UUID", SqlDbType.NVarChar).Value = pEnvelope.Uuid
|
oCommand.Parameters.Add("UUID", SqlDbType.NVarChar).Value = pEnvelope.Uuid
|
||||||
oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = Constants.EnvelopeStatus.EnvelopeCreated
|
oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = Constants.EnvelopeStatus.EnvelopeCreated
|
||||||
oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
|
oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
|
||||||
oCommand.Parameters.Add("TITLE", SqlDbType.NVarChar).Value = pEnvelope.Title
|
|
||||||
oCommand.Parameters.Add("CONTRACT_TYPE", SqlDbType.Int).Value = pEnvelope.ContractType
|
|
||||||
|
|
||||||
If Database.ExecuteNonQuery(oCommand) Then
|
If Database.ExecuteNonQuery(oCommand) Then
|
||||||
pEnvelope.Id = GetEnvelopeId(pEnvelope)
|
pEnvelope.Id = GetEnvelopeId(pEnvelope)
|
||||||
@@ -149,17 +170,42 @@ Public Class EnvelopeModel
|
|||||||
oSql += " [MESSAGE] = @MESSAGE, "
|
oSql += " [MESSAGE] = @MESSAGE, "
|
||||||
oSql += " [STATUS] = @STATUS, "
|
oSql += " [STATUS] = @STATUS, "
|
||||||
oSql += " [TITLE] = @TITLE, "
|
oSql += " [TITLE] = @TITLE, "
|
||||||
|
oSql += " [ENVELOPE_TYPE] = @ENVELOPE_TYPE, "
|
||||||
oSql += " [CONTRACT_TYPE] = @CONTRACT_TYPE, "
|
oSql += " [CONTRACT_TYPE] = @CONTRACT_TYPE, "
|
||||||
|
oSql += " [LANGUAGE] = @LANGUAGE, "
|
||||||
|
oSql += " [CERTIFICATION_TYPE] = @CERTIFICATION_TYPE, "
|
||||||
|
oSql += " [EXPIRES_WHEN_DAYS] = @EXPIRES_WHEN_DAYS, "
|
||||||
|
oSql += " [EXPIRES_WARNING_WHEN_DAYS] = @EXPIRES_WARNING_WHEN_DAYS, "
|
||||||
|
oSql += " [FIRST_REMINDER_DAYS] = @FIRST_REMINDER_DAYS, "
|
||||||
|
oSql += " [FINAL_EMAIL_TO_CREATOR] = @FINAL_EMAIL_TO_CREATOR, "
|
||||||
|
oSql += " [FINAL_EMAIL_TO_RECEIVERS] = @FINAL_EMAIL_TO_RECEIVERS, "
|
||||||
|
oSql += " [REMINDER_INTERVAL_DAYS] = @REMINDER_INTERVAL_DAYS, "
|
||||||
|
oSql += " [SEND_REMINDER_EMAILS] = @SEND_REMINDER_EMAILS, "
|
||||||
|
oSql += " [USE_ACCESS_CODE] = @USE_ACCESS_CODE, "
|
||||||
oSql += " [CHANGED_WHEN] = GETDATE() "
|
oSql += " [CHANGED_WHEN] = GETDATE() "
|
||||||
oSql += " WHERE GUID = @ID AND USER_ID = @USER_ID"
|
oSql += " WHERE GUID = @ID AND USER_ID = @USER_ID"
|
||||||
|
|
||||||
Dim oCommand As New SqlCommand(oSql)
|
Dim oCommand As New SqlCommand(oSql)
|
||||||
|
oCommand.Parameters.Add("ID", SqlDbType.Int).Value = pEnvelope.Id
|
||||||
|
oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
|
||||||
oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pEnvelope.Message
|
oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pEnvelope.Message
|
||||||
oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = pEnvelope.Status
|
oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = pEnvelope.Status
|
||||||
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("CONTRACT_TYPE", SqlDbType.Int).Value = pEnvelope.ContractType
|
oCommand.Parameters.Add("CONTRACT_TYPE", SqlDbType.Int).Value = pEnvelope.ContractType
|
||||||
|
If IsNothing(pEnvelope.Language) Then
|
||||||
oCommand.Parameters.Add("ID", SqlDbType.Int).Value = pEnvelope.Id
|
pEnvelope.Language = "de-DE"
|
||||||
oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
|
End If
|
||||||
|
oCommand.Parameters.Add("LANGUAGE", SqlDbType.NVarChar).Value = pEnvelope.Language
|
||||||
|
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_WARNING_WHEN_DAYS", SqlDbType.Int).Value = pEnvelope.ExpiresWarningWhenDays
|
||||||
|
oCommand.Parameters.Add("FIRST_REMINDER_DAYS", SqlDbType.Int).Value = pEnvelope.FirstReminderDays
|
||||||
|
oCommand.Parameters.Add("FINAL_EMAIL_TO_CREATOR", SqlDbType.Int).Value = pEnvelope.FinalEmailToCreator
|
||||||
|
oCommand.Parameters.Add("FINAL_EMAIL_TO_RECEIVERS", SqlDbType.Int).Value = pEnvelope.FinalEmailToReceivers
|
||||||
|
oCommand.Parameters.Add("REMINDER_INTERVAL_DAYS", SqlDbType.Int).Value = pEnvelope.ReminderIntervalDays
|
||||||
|
oCommand.Parameters.Add("SEND_REMINDER_EMAILS", SqlDbType.Bit).Value = pEnvelope.SendReminderEmails
|
||||||
|
oCommand.Parameters.Add("USE_ACCESS_CODE", SqlDbType.Bit).Value = pEnvelope.UseAccessCode
|
||||||
|
|
||||||
Return Database.ExecuteNonQuery(oCommand, pTransaction)
|
Return Database.ExecuteNonQuery(oCommand, pTransaction)
|
||||||
|
|
||||||
|
|||||||
49
EnvelopeGenerator.Common/Models/EnvelopeTypeModel.vb
Normal file
49
EnvelopeGenerator.Common/Models/EnvelopeTypeModel.vb
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
|
||||||
|
Public Class EnvelopeTypeModel
|
||||||
|
Inherits BaseModel
|
||||||
|
|
||||||
|
Public Sub New(pState As State)
|
||||||
|
MyBase.New(pState)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Function ToEnvelopeType(pRow As DataRow) As EnvelopeType
|
||||||
|
Return New EnvelopeType() With {
|
||||||
|
.Id = pRow.ItemEx("GUID", 0),
|
||||||
|
.Title = pRow.ItemEx("TITLE", ""),
|
||||||
|
.UseAccessCode = pRow.ItemEx("USE_ACCESS_CODE", False),
|
||||||
|
.Language = pRow.ItemEx("LANGUAGE", "de"),
|
||||||
|
.ExpiresWhenDays = pRow.ItemEx("EXPIRES_DAYS", 0),
|
||||||
|
.ExpiresWarningWhenDays = pRow.ItemEx("EXPIRES_WARNING_DAYS", 0),
|
||||||
|
.SendReminderEmails = pRow.ItemEx("SEND_REMINDER_EMAILS", 0),
|
||||||
|
.FirstReminderDays = pRow.ItemEx("FIRST_REMINDER_DAYS", 0),
|
||||||
|
.ReminderIntervalDays = pRow.ItemEx("REMINDER_INTERVAL_DAYS", 0),
|
||||||
|
.FinalEmailToCreator = pRow.ItemEx("FINAL_EMAIL_TO_CREATOR", 0),
|
||||||
|
.FinalEmailToReceivers = pRow.ItemEx("FINAL_EMAIL_TO_RECEIVERS", 0),
|
||||||
|
.ContractType = pRow.ItemEx("CONTRACT_TYPE", 0),
|
||||||
|
.CertificationType = pRow.ItemEx("CERTIFICATION_TYPE", 0)
|
||||||
|
}
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function GetById(pEnvelopeTypeId As Integer) As EnvelopeType
|
||||||
|
Dim oSql As String = $"SELECT * FROM TBSIG_ENVELOPE_TYPE WHERE GUID = {pEnvelopeTypeId}"
|
||||||
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
|
|
||||||
|
If oTable.Rows.Count = 0 Then
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim oRow = oTable.Rows.Item(0)
|
||||||
|
Return ToEnvelopeType(oRow)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function List() As IEnumerable(Of EnvelopeType)
|
||||||
|
Dim oSql As String = $"SELECT * FROM TBSIG_ENVELOPE_TYPE"
|
||||||
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
|
|
||||||
|
Return oTable.Rows.
|
||||||
|
Cast(Of DataRow).
|
||||||
|
Select(AddressOf ToEnvelopeType).
|
||||||
|
ToList()
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
@@ -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).
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ Public Class ReceiverModel
|
|||||||
.Signature = pRow.ItemEx("SIGNATURE", ""),
|
.Signature = pRow.ItemEx("SIGNATURE", ""),
|
||||||
.Status = ReceiverSignedStatus,
|
.Status = ReceiverSignedStatus,
|
||||||
.ColorType = DirectCast(pColorIndex + 1, ColorType),
|
.ColorType = DirectCast(pColorIndex + 1, ColorType),
|
||||||
|
.AccessCode = pRow.ItemEx("ACCESS_CODE", ""),
|
||||||
.SignedDate = SignedDate
|
.SignedDate = SignedDate
|
||||||
}
|
}
|
||||||
End Function
|
End Function
|
||||||
@@ -178,6 +179,21 @@ Public Class ReceiverModel
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function ListReceivers() As IEnumerable(Of EnvelopeReceiver)
|
||||||
|
Try
|
||||||
|
Dim oSql = $"SELECT * FROM [dbo].[TBSIG_RECEIVER]"
|
||||||
|
Dim oTable = Database.GetDatatable(oSql)
|
||||||
|
|
||||||
|
Return oTable?.Rows.Cast(Of DataRow).
|
||||||
|
Select(AddressOf ToReceiver).
|
||||||
|
ToList()
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Return Nothing
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
Public Function ListReceivers(pReceiversFromGrid As List(Of EnvelopeReceiver)) As IEnumerable(Of EnvelopeReceiver)
|
Public Function ListReceivers(pReceiversFromGrid As List(Of EnvelopeReceiver)) As IEnumerable(Of EnvelopeReceiver)
|
||||||
Try
|
Try
|
||||||
If pReceiversFromGrid.Count = 0 Then
|
If pReceiversFromGrid.Count = 0 Then
|
||||||
@@ -261,10 +277,11 @@ Public Class ReceiverModel
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function GetSignedDate(pEmailAdress As String, pEnvleopeId As Integer) As Date
|
Private Function GetSignedDate(pEmailAddress As String, pEnvelopeId As Integer) As Date
|
||||||
Try
|
Try
|
||||||
Return Database.GetScalarValue($"SELECT ACTION_DATE FROM [DD_ECM].[dbo].[TBSIG_ENVELOPE_HISTORY] WHERE ENVELOPE_ID = {pEnvleopeId}
|
Dim oStatusInt As Integer = EnvelopeStatus.DocumentSigned
|
||||||
AND USER_REFERENCE = '{pEmailAdress}' AND [STATUS] = 2002")
|
Return Database.GetScalarValue($"SELECT ACTION_DATE FROM [DD_ECM].[dbo].[TBSIG_ENVELOPE_HISTORY] WHERE ENVELOPE_ID = {pEnvelopeId}
|
||||||
|
And USER_REFERENCE = '{pEmailAddress}' AND [STATUS] = {oStatusInt}")
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
@@ -272,4 +289,17 @@ Public Class ReceiverModel
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function AccessCodeAlreadyRequested(pEmailAddress As String, pEnvelopeId As Integer) As Boolean
|
||||||
|
Try
|
||||||
|
Dim oStatusInt As Integer = EnvelopeStatus.AccessCodeRequested
|
||||||
|
Dim oResult As Integer = Database.GetScalarValue($"SELECT COUNT(*) FROM [DD_ECM].[dbo].[TBSIG_ENVELOPE_HISTORY]
|
||||||
|
WHERE ENVELOPE_ID = {pEnvelopeId} And USER_REFERENCE = '{pEmailAddress}' AND [STATUS] = {oStatusInt}")
|
||||||
|
|
||||||
|
Return oResult > 0
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
14
EnvelopeGenerator.Common/Models/ReportModel.vb
Normal file
14
EnvelopeGenerator.Common/Models/ReportModel.vb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
Public Class ReportModel
|
||||||
|
Inherits BaseModel
|
||||||
|
|
||||||
|
Public Sub New(pState As State)
|
||||||
|
MyBase.New(pState)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function List(pEnvelopeId As Integer) As DataTable
|
||||||
|
Dim oSql As String = $"SELECT * FROM VWSIG_ENVELOPE_REPORT WHERE ENVELOPE_ID = {pEnvelopeId}"
|
||||||
|
Dim oTable As DataTable = Database.GetDatatable(oSql)
|
||||||
|
|
||||||
|
Return oTable
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
@@ -8,12 +8,12 @@ Imports System.Runtime.InteropServices
|
|||||||
|
|
||||||
' Werte der Assemblyattribute überprüfen
|
' Werte der Assemblyattribute überprüfen
|
||||||
|
|
||||||
<Assembly: AssemblyTitle("Base")>
|
<Assembly: AssemblyTitle("EnvelopeGenerator.Common")>
|
||||||
<Assembly: AssemblyDescription("")>
|
<Assembly: AssemblyDescription("")>
|
||||||
<Assembly: AssemblyCompany("")>
|
<Assembly: AssemblyCompany("")>
|
||||||
<Assembly: AssemblyProduct("Base")>
|
<Assembly: AssemblyProduct("EnvelopeGenerator.Common")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2023")>
|
<Assembly: AssemblyCopyright("Copyright © 2024")>
|
||||||
<Assembly: AssemblyTrademark("1.3.4.0")>
|
<Assembly: AssemblyTrademark("1.3.6.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -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.3.5.0")>
|
<Assembly: AssemblyVersion("1.9.3.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.3.5.0")>
|
<Assembly: AssemblyFileVersion("1.9.3.0")>
|
||||||
|
|||||||
@@ -59,5 +59,21 @@ Namespace My.Resources
|
|||||||
resourceCulture = value
|
resourceCulture = value
|
||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Sucht eine lokalisierte Zeichenfolge, die <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office" lang="und" style="padding:0;Margin:0">
|
||||||
|
'''<head>
|
||||||
|
''' <meta http-equiv="Content-Security-Policy" content="script-src 'none'; connect-src 'none'; object-src 'none'; form-action 'none';">
|
||||||
|
''' <meta charset="UTF-8">
|
||||||
|
''' <meta content="width=device-width, initial-scale=1" name="viewport">
|
||||||
|
''' <meta name="x-apple-disable-message-reformatting">
|
||||||
|
''' <meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
''' <meta cont [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt.
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property email_de() As String
|
||||||
|
Get
|
||||||
|
Return ResourceManager.GetString("email_de", resourceCulture)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
value : The object must be serialized with
|
value : The object must be serialized with
|
||||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
: and then encoded with base64 encoding.
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
@@ -60,6 +60,7 @@
|
|||||||
: and then encoded with base64 encoding.
|
: 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: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:element name="root" msdata:IsDataSet="true">
|
||||||
<xsd:complexType>
|
<xsd:complexType>
|
||||||
<xsd:choice maxOccurs="unbounded">
|
<xsd:choice maxOccurs="unbounded">
|
||||||
@@ -68,9 +69,10 @@
|
|||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
<xsd:element name="assembly">
|
<xsd:element name="assembly">
|
||||||
@@ -85,9 +87,10 @@
|
|||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
<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:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
<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="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
<xsd:element name="resheader">
|
<xsd:element name="resheader">
|
||||||
@@ -109,9 +112,13 @@
|
|||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="email_de" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Templates\email_de.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -15,7 +15,7 @@ Option Explicit On
|
|||||||
Namespace My
|
Namespace My
|
||||||
|
|
||||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0"), _
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0"), _
|
||||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
Partial Friend NotInheritable Class MySettings
|
Partial Friend NotInheritable Class MySettings
|
||||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
@@ -53,6 +53,33 @@ Namespace My
|
|||||||
Return defaultInstance
|
Return defaultInstance
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
|
||||||
|
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||||
|
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
|
||||||
|
Public ReadOnly Property RuninDMZ() As Boolean
|
||||||
|
Get
|
||||||
|
Return CType(Me("RuninDMZ"),Boolean)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
|
||||||
|
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||||
|
Global.System.Configuration.DefaultSettingValueAttribute("dd-gan\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
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
<?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)" UseMySettingsClassName="true">
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
|
||||||
<Profiles>
|
<Profiles />
|
||||||
<Profile Name="(Default)" />
|
<Settings>
|
||||||
</Profiles>
|
<Setting Name="RuninDMZ" Type="System.Boolean" Scope="Application">
|
||||||
<Settings />
|
<Value Profile="(Default)">False</Value>
|
||||||
</SettingsFile>
|
</Setting>
|
||||||
|
<Setting Name="NetUse_Usr" Type="System.String" Scope="Application">
|
||||||
|
<Value Profile="(Default)">dd-gan\Administrator</Value>
|
||||||
|
</Setting>
|
||||||
|
<Setting Name="NetUse_PW" Type="System.String" Scope="Application">
|
||||||
|
<Value Profile="(Default)">sY4vnATDXwosbTJGip6SqA==</Value>
|
||||||
|
</Setting>
|
||||||
|
</Settings>
|
||||||
|
</SettingsFile>
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
Imports System.IO
|
|
||||||
Imports DevExpress.XtraPrinting
|
|
||||||
|
|
||||||
Public Class ReportCreator
|
|
||||||
Private Envelope As Envelope
|
|
||||||
|
|
||||||
Public Sub New(pEnvelope As Envelope)
|
|
||||||
Envelope = pEnvelope
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Async Function CreateReport(pReportItems As List(Of ReportItem)) As Task(Of Byte())
|
|
||||||
Dim oItems = pReportItems.Select(AddressOf MergeEnvelope).ToList()
|
|
||||||
Dim oSource As New ReportSource With {.Items = oItems}
|
|
||||||
Dim oReport As New rptEnvelopeHistory() With {.DataSource = oSource, .DataMember = "Items"}
|
|
||||||
|
|
||||||
Await oReport.CreateDocumentAsync()
|
|
||||||
|
|
||||||
Using oStream As New MemoryStream()
|
|
||||||
Await oReport.ExportToPdfAsync(oStream, New PdfExportOptions)
|
|
||||||
Return oStream.ToArray()
|
|
||||||
End Using
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Private Function MergeEnvelope(pItem As ReportItem) As ReportItem
|
|
||||||
If pItem.Envelope Is Nothing Then
|
|
||||||
pItem.Envelope = Envelope
|
|
||||||
End If
|
|
||||||
Return pItem
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
@@ -20,12 +20,33 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
<System.Diagnostics.DebuggerStepThrough()> _
|
<System.Diagnostics.DebuggerStepThrough()> _
|
||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Me.components = New System.ComponentModel.Container()
|
Me.components = New System.ComponentModel.Container()
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(rptEnvelopeHistory))
|
||||||
Me.TopMargin = New DevExpress.XtraReports.UI.TopMarginBand()
|
Me.TopMargin = New DevExpress.XtraReports.UI.TopMarginBand()
|
||||||
Me.BottomMargin = New DevExpress.XtraReports.UI.BottomMarginBand()
|
Me.BottomMargin = New DevExpress.XtraReports.UI.BottomMarginBand()
|
||||||
|
Me.XrLabel1 = New DevExpress.XtraReports.UI.XRLabel()
|
||||||
Me.pageInfo1 = New DevExpress.XtraReports.UI.XRPageInfo()
|
Me.pageInfo1 = New DevExpress.XtraReports.UI.XRPageInfo()
|
||||||
Me.pageInfo2 = New DevExpress.XtraReports.UI.XRPageInfo()
|
Me.pageInfo2 = New DevExpress.XtraReports.UI.XRPageInfo()
|
||||||
Me.ReportHeader = New DevExpress.XtraReports.UI.ReportHeaderBand()
|
Me.ReportHeader = New DevExpress.XtraReports.UI.ReportHeaderBand()
|
||||||
Me.label1 = New DevExpress.XtraReports.UI.XRLabel()
|
Me.label1 = New DevExpress.XtraReports.UI.XRLabel()
|
||||||
|
Me.XrTable3 = New DevExpress.XtraReports.UI.XRTable()
|
||||||
|
Me.XrTableRow8 = New DevExpress.XtraReports.UI.XRTableRow()
|
||||||
|
Me.XrTableCell13 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell15 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableRow9 = New DevExpress.XtraReports.UI.XRTableRow()
|
||||||
|
Me.XrTableCell14 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell17 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell16 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell18 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableRow10 = New DevExpress.XtraReports.UI.XRTableRow()
|
||||||
|
Me.XrTableCell19 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell20 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell21 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell22 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableRow11 = New DevExpress.XtraReports.UI.XRTableRow()
|
||||||
|
Me.XrTableCell23 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell24 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell25 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
|
Me.XrTableCell26 = New DevExpress.XtraReports.UI.XRTableCell()
|
||||||
Me.GroupHeader1 = New DevExpress.XtraReports.UI.GroupHeaderBand()
|
Me.GroupHeader1 = New DevExpress.XtraReports.UI.GroupHeaderBand()
|
||||||
Me.table1 = New DevExpress.XtraReports.UI.XRTable()
|
Me.table1 = New DevExpress.XtraReports.UI.XRTable()
|
||||||
Me.tableRow1 = New DevExpress.XtraReports.UI.XRTableRow()
|
Me.tableRow1 = New DevExpress.XtraReports.UI.XRTableRow()
|
||||||
@@ -43,19 +64,19 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.DetailData1 = New DevExpress.XtraReports.UI.XRControlStyle()
|
Me.DetailData1 = New DevExpress.XtraReports.UI.XRControlStyle()
|
||||||
Me.DetailData3_Odd = New DevExpress.XtraReports.UI.XRControlStyle()
|
Me.DetailData3_Odd = New DevExpress.XtraReports.UI.XRControlStyle()
|
||||||
Me.PageInfo = New DevExpress.XtraReports.UI.XRControlStyle()
|
Me.PageInfo = New DevExpress.XtraReports.UI.XRControlStyle()
|
||||||
Me.XrLabel2 = New DevExpress.XtraReports.UI.XRLabel()
|
Me.GalleryDropDown1 = New DevExpress.XtraBars.Ribbon.GalleryDropDown(Me.components)
|
||||||
Me.XrLabel3 = New DevExpress.XtraReports.UI.XRLabel()
|
|
||||||
Me.ObjectDataSource1 = New DevExpress.DataAccess.ObjectBinding.ObjectDataSource(Me.components)
|
Me.ObjectDataSource1 = New DevExpress.DataAccess.ObjectBinding.ObjectDataSource(Me.components)
|
||||||
Me.XrLabel4 = New DevExpress.XtraReports.UI.XRLabel()
|
CType(Me.XrTable3, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.XrLabel1 = New DevExpress.XtraReports.UI.XRLabel()
|
|
||||||
CType(Me.table1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.table1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.table2, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.table2, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.GalleryDropDown1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.ObjectDataSource1, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.ObjectDataSource1, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
'
|
'
|
||||||
'TopMargin
|
'TopMargin
|
||||||
'
|
'
|
||||||
Me.TopMargin.Dpi = 254.0!
|
Me.TopMargin.Dpi = 254.0!
|
||||||
|
Me.TopMargin.HeightF = 190.6042!
|
||||||
Me.TopMargin.Name = "TopMargin"
|
Me.TopMargin.Name = "TopMargin"
|
||||||
'
|
'
|
||||||
'BottomMargin
|
'BottomMargin
|
||||||
@@ -64,42 +85,384 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.BottomMargin.Dpi = 254.0!
|
Me.BottomMargin.Dpi = 254.0!
|
||||||
Me.BottomMargin.Name = "BottomMargin"
|
Me.BottomMargin.Name = "BottomMargin"
|
||||||
'
|
'
|
||||||
|
'XrLabel1
|
||||||
|
'
|
||||||
|
Me.XrLabel1.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.XrLabel1.Borders = DevExpress.XtraPrinting.BorderSide.Top
|
||||||
|
Me.XrLabel1.Dpi = 254.0!
|
||||||
|
Me.XrLabel1.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold)
|
||||||
|
Me.XrLabel1.LocationFloat = New DevExpress.Utils.PointFloat(896.5417!, 0!)
|
||||||
|
Me.XrLabel1.Name = "XrLabel1"
|
||||||
|
Me.XrLabel1.Padding = New DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 254.0!)
|
||||||
|
Me.XrLabel1.SizeF = New System.Drawing.SizeF(645.5836!, 58.0!)
|
||||||
|
Me.XrLabel1.StyleName = "Title"
|
||||||
|
Me.XrLabel1.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrLabel1.StylePriority.UseBorders = False
|
||||||
|
Me.XrLabel1.StylePriority.UseFont = False
|
||||||
|
Me.XrLabel1.StylePriority.UsePadding = False
|
||||||
|
Me.XrLabel1.Text = "Erstellt mit SignFlow"
|
||||||
|
'
|
||||||
'pageInfo1
|
'pageInfo1
|
||||||
'
|
'
|
||||||
|
Me.pageInfo1.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.pageInfo1.Borders = DevExpress.XtraPrinting.BorderSide.Top
|
||||||
Me.pageInfo1.Dpi = 254.0!
|
Me.pageInfo1.Dpi = 254.0!
|
||||||
Me.pageInfo1.LocationFloat = New DevExpress.Utils.PointFloat(0!, 0!)
|
Me.pageInfo1.LocationFloat = New DevExpress.Utils.PointFloat(0!, 0!)
|
||||||
Me.pageInfo1.Name = "pageInfo1"
|
Me.pageInfo1.Name = "pageInfo1"
|
||||||
Me.pageInfo1.PageInfo = DevExpress.XtraPrinting.PageInfo.DateTime
|
Me.pageInfo1.PageInfo = DevExpress.XtraPrinting.PageInfo.DateTime
|
||||||
Me.pageInfo1.SizeF = New System.Drawing.SizeF(470.5625!, 58.0!)
|
Me.pageInfo1.SizeF = New System.Drawing.SizeF(896.5417!, 58.0!)
|
||||||
Me.pageInfo1.StyleName = "PageInfo"
|
Me.pageInfo1.StyleName = "PageInfo"
|
||||||
|
Me.pageInfo1.StylePriority.UseBorderColor = False
|
||||||
|
Me.pageInfo1.StylePriority.UseBorders = False
|
||||||
|
Me.pageInfo1.TextFormatString = "{0:dddd, d. MMMM yyyy HH:mm}"
|
||||||
'
|
'
|
||||||
'pageInfo2
|
'pageInfo2
|
||||||
'
|
'
|
||||||
|
Me.pageInfo2.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.pageInfo2.Borders = DevExpress.XtraPrinting.BorderSide.Top
|
||||||
Me.pageInfo2.Dpi = 254.0!
|
Me.pageInfo2.Dpi = 254.0!
|
||||||
Me.pageInfo2.LocationFloat = New DevExpress.Utils.PointFloat(1166.417!, 0!)
|
Me.pageInfo2.LocationFloat = New DevExpress.Utils.PointFloat(1542.125!, 0!)
|
||||||
Me.pageInfo2.Name = "pageInfo2"
|
Me.pageInfo2.Name = "pageInfo2"
|
||||||
Me.pageInfo2.SizeF = New System.Drawing.SizeF(733.5833!, 58.0!)
|
Me.pageInfo2.SizeF = New System.Drawing.SizeF(357.875!, 58.0!)
|
||||||
Me.pageInfo2.StyleName = "PageInfo"
|
Me.pageInfo2.StyleName = "PageInfo"
|
||||||
|
Me.pageInfo2.StylePriority.UseBorderColor = False
|
||||||
|
Me.pageInfo2.StylePriority.UseBorders = False
|
||||||
Me.pageInfo2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight
|
Me.pageInfo2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight
|
||||||
Me.pageInfo2.TextFormatString = "Seite {0} von {1}"
|
Me.pageInfo2.TextFormatString = "Seite {0} von {1}"
|
||||||
'
|
'
|
||||||
'ReportHeader
|
'ReportHeader
|
||||||
'
|
'
|
||||||
Me.ReportHeader.Controls.AddRange(New DevExpress.XtraReports.UI.XRControl() {Me.XrLabel4, Me.XrLabel3, Me.XrLabel2, Me.label1})
|
Me.ReportHeader.Controls.AddRange(New DevExpress.XtraReports.UI.XRControl() {Me.label1, Me.XrTable3})
|
||||||
Me.ReportHeader.Dpi = 254.0!
|
Me.ReportHeader.Dpi = 254.0!
|
||||||
Me.ReportHeader.HeightF = 293.2334!
|
Me.ReportHeader.HeightF = 406.0843!
|
||||||
Me.ReportHeader.Name = "ReportHeader"
|
Me.ReportHeader.Name = "ReportHeader"
|
||||||
'
|
'
|
||||||
'label1
|
'label1
|
||||||
'
|
'
|
||||||
|
Me.label1.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
|
||||||
|
Me.label1.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.label1.Borders = DevExpress.XtraPrinting.BorderSide.Bottom
|
||||||
|
Me.label1.BorderWidth = 2.0!
|
||||||
Me.label1.Dpi = 254.0!
|
Me.label1.Dpi = 254.0!
|
||||||
Me.label1.LocationFloat = New DevExpress.Utils.PointFloat(0!, 0!)
|
Me.label1.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.label1.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.label1.LocationFloat = New DevExpress.Utils.PointFloat(0.0002422333!, 0!)
|
||||||
Me.label1.Name = "label1"
|
Me.label1.Name = "label1"
|
||||||
Me.label1.Padding = New DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 254.0!)
|
Me.label1.Padding = New DevExpress.XtraPrinting.PaddingInfo(10, 10, 5, 5, 254.0!)
|
||||||
Me.label1.SizeF = New System.Drawing.SizeF(1900.0!, 61.4536!)
|
Me.label1.SizeF = New System.Drawing.SizeF(1900.0!, 77.32857!)
|
||||||
Me.label1.StyleName = "Title"
|
Me.label1.StyleName = "Title"
|
||||||
|
Me.label1.StylePriority.UseBackColor = False
|
||||||
|
Me.label1.StylePriority.UseBorderColor = False
|
||||||
|
Me.label1.StylePriority.UseBorders = False
|
||||||
|
Me.label1.StylePriority.UseBorderWidth = False
|
||||||
|
Me.label1.StylePriority.UseFont = False
|
||||||
|
Me.label1.StylePriority.UseForeColor = False
|
||||||
Me.label1.StylePriority.UsePadding = False
|
Me.label1.StylePriority.UsePadding = False
|
||||||
Me.label1.Text = "Signierungs Zertifikat"
|
Me.label1.Text = "Signierungszertifikat"
|
||||||
|
'
|
||||||
|
'XrTable3
|
||||||
|
'
|
||||||
|
Me.XrTable3.Dpi = 254.0!
|
||||||
|
Me.XrTable3.LocationFloat = New DevExpress.Utils.PointFloat(0.0002422333!, 96.60422!)
|
||||||
|
Me.XrTable3.Name = "XrTable3"
|
||||||
|
Me.XrTable3.OddStyleName = "DetailData3_Odd"
|
||||||
|
Me.XrTable3.Rows.AddRange(New DevExpress.XtraReports.UI.XRTableRow() {Me.XrTableRow8, Me.XrTableRow9, Me.XrTableRow10, Me.XrTableRow11})
|
||||||
|
Me.XrTable3.SizeF = New System.Drawing.SizeF(1900.0!, 284.4801!)
|
||||||
|
'
|
||||||
|
'XrTableRow8
|
||||||
|
'
|
||||||
|
Me.XrTableRow8.Cells.AddRange(New DevExpress.XtraReports.UI.XRTableCell() {Me.XrTableCell13, Me.XrTableCell15})
|
||||||
|
Me.XrTableRow8.Dpi = 254.0!
|
||||||
|
Me.XrTableRow8.Name = "XrTableRow8"
|
||||||
|
Me.XrTableRow8.Weight = 1.0R
|
||||||
|
'
|
||||||
|
'XrTableCell13
|
||||||
|
'
|
||||||
|
Me.XrTableCell13.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
|
||||||
|
Me.XrTableCell13.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.XrTableCell13.Borders = DevExpress.XtraPrinting.BorderSide.Bottom
|
||||||
|
Me.XrTableCell13.BorderWidth = 1.0!
|
||||||
|
Me.XrTableCell13.Dpi = 254.0!
|
||||||
|
Me.XrTableCell13.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell13.Name = "XrTableCell13"
|
||||||
|
Me.XrTableCell13.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell13.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell13.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell13.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell13.StylePriority.UseBorderWidth = False
|
||||||
|
Me.XrTableCell13.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell13.Text = "Ersteller"
|
||||||
|
Me.XrTableCell13.Weight = 0.38139956730411484R
|
||||||
|
'
|
||||||
|
'XrTableCell15
|
||||||
|
'
|
||||||
|
Me.XrTableCell15.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
|
||||||
|
Me.XrTableCell15.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.XrTableCell15.Borders = DevExpress.XtraPrinting.BorderSide.Bottom
|
||||||
|
Me.XrTableCell15.BorderWidth = 1.0!
|
||||||
|
Me.XrTableCell15.Dpi = 254.0!
|
||||||
|
Me.XrTableCell15.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell15.Name = "XrTableCell15"
|
||||||
|
Me.XrTableCell15.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell15.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell15.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell15.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell15.StylePriority.UseBorderWidth = False
|
||||||
|
Me.XrTableCell15.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell15.Text = "Umschlag"
|
||||||
|
Me.XrTableCell15.Weight = 0.49859081604996847R
|
||||||
|
'
|
||||||
|
'XrTableRow9
|
||||||
|
'
|
||||||
|
Me.XrTableRow9.Cells.AddRange(New DevExpress.XtraReports.UI.XRTableCell() {Me.XrTableCell14, Me.XrTableCell17, Me.XrTableCell16, Me.XrTableCell18})
|
||||||
|
Me.XrTableRow9.Dpi = 254.0!
|
||||||
|
Me.XrTableRow9.Name = "XrTableRow9"
|
||||||
|
Me.XrTableRow9.Weight = 1.0R
|
||||||
|
'
|
||||||
|
'XrTableCell14
|
||||||
|
'
|
||||||
|
Me.XrTableCell14.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell14.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell14.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell14.Dpi = 254.0!
|
||||||
|
Me.XrTableCell14.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell14.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell14.Multiline = True
|
||||||
|
Me.XrTableCell14.Name = "XrTableCell14"
|
||||||
|
Me.XrTableCell14.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell14.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell14.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell14.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell14.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell14.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell14.Text = "Name"
|
||||||
|
Me.XrTableCell14.Weight = 0.11578820509129036R
|
||||||
|
'
|
||||||
|
'XrTableCell17
|
||||||
|
'
|
||||||
|
Me.XrTableCell17.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell17.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell17.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell17.Dpi = 254.0!
|
||||||
|
Me.XrTableCell17.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Envelope].[User].[FullName]")})
|
||||||
|
Me.XrTableCell17.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell17.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell17.Multiline = True
|
||||||
|
Me.XrTableCell17.Name = "XrTableCell17"
|
||||||
|
Me.XrTableCell17.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell17.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell17.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell17.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell17.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell17.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell17.Text = "XrTableCell17"
|
||||||
|
Me.XrTableCell17.Weight = 0.2656113622128245R
|
||||||
|
'
|
||||||
|
'XrTableCell16
|
||||||
|
'
|
||||||
|
Me.XrTableCell16.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell16.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell16.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell16.Dpi = 254.0!
|
||||||
|
Me.XrTableCell16.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell16.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell16.Multiline = True
|
||||||
|
Me.XrTableCell16.Name = "XrTableCell16"
|
||||||
|
Me.XrTableCell16.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell16.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell16.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell16.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell16.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell16.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell16.Text = "Titel"
|
||||||
|
Me.XrTableCell16.Weight = 0.11578821158083684R
|
||||||
|
'
|
||||||
|
'XrTableCell18
|
||||||
|
'
|
||||||
|
Me.XrTableCell18.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell18.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell18.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell18.Dpi = 254.0!
|
||||||
|
Me.XrTableCell18.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Envelope].[Title]")})
|
||||||
|
Me.XrTableCell18.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell18.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell18.Multiline = True
|
||||||
|
Me.XrTableCell18.Name = "XrTableCell18"
|
||||||
|
Me.XrTableCell18.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell18.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell18.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell18.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell18.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell18.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell18.Text = "XrTableCell18"
|
||||||
|
Me.XrTableCell18.Weight = 0.38280260446913167R
|
||||||
|
'
|
||||||
|
'XrTableRow10
|
||||||
|
'
|
||||||
|
Me.XrTableRow10.Cells.AddRange(New DevExpress.XtraReports.UI.XRTableCell() {Me.XrTableCell19, Me.XrTableCell20, Me.XrTableCell21, Me.XrTableCell22})
|
||||||
|
Me.XrTableRow10.Dpi = 254.0!
|
||||||
|
Me.XrTableRow10.Name = "XrTableRow10"
|
||||||
|
Me.XrTableRow10.Weight = 1.0R
|
||||||
|
'
|
||||||
|
'XrTableCell19
|
||||||
|
'
|
||||||
|
Me.XrTableCell19.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell19.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell19.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell19.Dpi = 254.0!
|
||||||
|
Me.XrTableCell19.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell19.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell19.Multiline = True
|
||||||
|
Me.XrTableCell19.Name = "XrTableCell19"
|
||||||
|
Me.XrTableCell19.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell19.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell19.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell19.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell19.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell19.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell19.Text = "Email"
|
||||||
|
Me.XrTableCell19.Weight = 0.11578820509129036R
|
||||||
|
'
|
||||||
|
'XrTableCell20
|
||||||
|
'
|
||||||
|
Me.XrTableCell20.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell20.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell20.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell20.Dpi = 254.0!
|
||||||
|
Me.XrTableCell20.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Envelope].[User].[Email]")})
|
||||||
|
Me.XrTableCell20.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell20.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell20.Multiline = True
|
||||||
|
Me.XrTableCell20.Name = "XrTableCell20"
|
||||||
|
Me.XrTableCell20.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell20.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell20.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell20.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell20.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell20.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell20.Text = "XrTableCell20"
|
||||||
|
Me.XrTableCell20.Weight = 0.2656113622128245R
|
||||||
|
'
|
||||||
|
'XrTableCell21
|
||||||
|
'
|
||||||
|
Me.XrTableCell21.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell21.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell21.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell21.Dpi = 254.0!
|
||||||
|
Me.XrTableCell21.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell21.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell21.Multiline = True
|
||||||
|
Me.XrTableCell21.Name = "XrTableCell21"
|
||||||
|
Me.XrTableCell21.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell21.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell21.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell21.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell21.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell21.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell21.Text = "Umschlag-ID"
|
||||||
|
Me.XrTableCell21.Weight = 0.11578821158083684R
|
||||||
|
'
|
||||||
|
'XrTableCell22
|
||||||
|
'
|
||||||
|
Me.XrTableCell22.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell22.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell22.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell22.Dpi = 254.0!
|
||||||
|
Me.XrTableCell22.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Envelope].[Uuid]")})
|
||||||
|
Me.XrTableCell22.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell22.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell22.Multiline = True
|
||||||
|
Me.XrTableCell22.Name = "XrTableCell22"
|
||||||
|
Me.XrTableCell22.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell22.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell22.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell22.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell22.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell22.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell22.Text = "XrTableCell22"
|
||||||
|
Me.XrTableCell22.Weight = 0.38280260446913167R
|
||||||
|
'
|
||||||
|
'XrTableRow11
|
||||||
|
'
|
||||||
|
Me.XrTableRow11.Cells.AddRange(New DevExpress.XtraReports.UI.XRTableCell() {Me.XrTableCell23, Me.XrTableCell24, Me.XrTableCell25, Me.XrTableCell26})
|
||||||
|
Me.XrTableRow11.Dpi = 254.0!
|
||||||
|
Me.XrTableRow11.Name = "XrTableRow11"
|
||||||
|
Me.XrTableRow11.Weight = 1.0R
|
||||||
|
'
|
||||||
|
'XrTableCell23
|
||||||
|
'
|
||||||
|
Me.XrTableCell23.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell23.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell23.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell23.Dpi = 254.0!
|
||||||
|
Me.XrTableCell23.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell23.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell23.Multiline = True
|
||||||
|
Me.XrTableCell23.Name = "XrTableCell23"
|
||||||
|
Me.XrTableCell23.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell23.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell23.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell23.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell23.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell23.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell23.Weight = 0.11578820509129036R
|
||||||
|
'
|
||||||
|
'XrTableCell24
|
||||||
|
'
|
||||||
|
Me.XrTableCell24.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell24.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell24.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell24.Dpi = 254.0!
|
||||||
|
Me.XrTableCell24.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell24.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell24.Multiline = True
|
||||||
|
Me.XrTableCell24.Name = "XrTableCell24"
|
||||||
|
Me.XrTableCell24.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell24.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell24.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell24.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell24.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell24.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell24.Weight = 0.2656113622128245R
|
||||||
|
'
|
||||||
|
'XrTableCell25
|
||||||
|
'
|
||||||
|
Me.XrTableCell25.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell25.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell25.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell25.Dpi = 254.0!
|
||||||
|
Me.XrTableCell25.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell25.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell25.Multiline = True
|
||||||
|
Me.XrTableCell25.Name = "XrTableCell25"
|
||||||
|
Me.XrTableCell25.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell25.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell25.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell25.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell25.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell25.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell25.Text = "Zertifizierung"
|
||||||
|
Me.XrTableCell25.Weight = 0.11578821158083684R
|
||||||
|
'
|
||||||
|
'XrTableCell26
|
||||||
|
'
|
||||||
|
Me.XrTableCell26.BackColor = System.Drawing.Color.White
|
||||||
|
Me.XrTableCell26.BorderColor = System.Drawing.Color.Empty
|
||||||
|
Me.XrTableCell26.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
|
Me.XrTableCell26.Dpi = 254.0!
|
||||||
|
Me.XrTableCell26.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Envelope].[CertificationType]")})
|
||||||
|
Me.XrTableCell26.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||||
|
Me.XrTableCell26.ForeColor = System.Drawing.Color.Black
|
||||||
|
Me.XrTableCell26.Multiline = True
|
||||||
|
Me.XrTableCell26.Name = "XrTableCell26"
|
||||||
|
Me.XrTableCell26.StyleName = "DetailCaption1"
|
||||||
|
Me.XrTableCell26.StylePriority.UseBackColor = False
|
||||||
|
Me.XrTableCell26.StylePriority.UseBorderColor = False
|
||||||
|
Me.XrTableCell26.StylePriority.UseBorders = False
|
||||||
|
Me.XrTableCell26.StylePriority.UseFont = False
|
||||||
|
Me.XrTableCell26.StylePriority.UseForeColor = False
|
||||||
|
Me.XrTableCell26.Text = "XrTableCell26"
|
||||||
|
Me.XrTableCell26.Weight = 0.38280260446913161R
|
||||||
'
|
'
|
||||||
'GroupHeader1
|
'GroupHeader1
|
||||||
'
|
'
|
||||||
@@ -126,35 +489,63 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
'
|
'
|
||||||
'tableCell1
|
'tableCell1
|
||||||
'
|
'
|
||||||
Me.tableCell1.Borders = DevExpress.XtraPrinting.BorderSide.None
|
Me.tableCell1.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
|
||||||
|
Me.tableCell1.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.tableCell1.Borders = DevExpress.XtraPrinting.BorderSide.Bottom
|
||||||
|
Me.tableCell1.BorderWidth = 1.0!
|
||||||
Me.tableCell1.Dpi = 254.0!
|
Me.tableCell1.Dpi = 254.0!
|
||||||
|
Me.tableCell1.ForeColor = System.Drawing.Color.Black
|
||||||
Me.tableCell1.Name = "tableCell1"
|
Me.tableCell1.Name = "tableCell1"
|
||||||
Me.tableCell1.StyleName = "DetailCaption1"
|
Me.tableCell1.StyleName = "DetailCaption1"
|
||||||
|
Me.tableCell1.StylePriority.UseBackColor = False
|
||||||
|
Me.tableCell1.StylePriority.UseBorderColor = False
|
||||||
Me.tableCell1.StylePriority.UseBorders = False
|
Me.tableCell1.StylePriority.UseBorders = False
|
||||||
Me.tableCell1.Text = "Aktion"
|
Me.tableCell1.StylePriority.UseBorderWidth = False
|
||||||
Me.tableCell1.Weight = 0.626953898336187R
|
Me.tableCell1.StylePriority.UseForeColor = False
|
||||||
|
Me.tableCell1.Text = "Ereignis"
|
||||||
|
Me.tableCell1.Weight = 0.51726482588176181R
|
||||||
'
|
'
|
||||||
'tableCell2
|
'tableCell2
|
||||||
'
|
'
|
||||||
|
Me.tableCell2.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
|
||||||
|
Me.tableCell2.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.tableCell2.Borders = DevExpress.XtraPrinting.BorderSide.Bottom
|
||||||
|
Me.tableCell2.BorderWidth = 1.0!
|
||||||
Me.tableCell2.Dpi = 254.0!
|
Me.tableCell2.Dpi = 254.0!
|
||||||
|
Me.tableCell2.ForeColor = System.Drawing.Color.Black
|
||||||
Me.tableCell2.Name = "tableCell2"
|
Me.tableCell2.Name = "tableCell2"
|
||||||
Me.tableCell2.StyleName = "DetailCaption1"
|
Me.tableCell2.StyleName = "DetailCaption1"
|
||||||
|
Me.tableCell2.StylePriority.UseBackColor = False
|
||||||
|
Me.tableCell2.StylePriority.UseBorderColor = False
|
||||||
|
Me.tableCell2.StylePriority.UseBorders = False
|
||||||
|
Me.tableCell2.StylePriority.UseBorderWidth = False
|
||||||
|
Me.tableCell2.StylePriority.UseForeColor = False
|
||||||
Me.tableCell2.Text = "Benutzer"
|
Me.tableCell2.Text = "Benutzer"
|
||||||
Me.tableCell2.Weight = 0.30791185539648991R
|
Me.tableCell2.Weight = 0.45140669898958585R
|
||||||
'
|
'
|
||||||
'tableCell3
|
'tableCell3
|
||||||
'
|
'
|
||||||
|
Me.tableCell3.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
|
||||||
|
Me.tableCell3.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
|
||||||
|
Me.tableCell3.Borders = DevExpress.XtraPrinting.BorderSide.Bottom
|
||||||
|
Me.tableCell3.BorderWidth = 1.0!
|
||||||
Me.tableCell3.Dpi = 254.0!
|
Me.tableCell3.Dpi = 254.0!
|
||||||
|
Me.tableCell3.ForeColor = System.Drawing.Color.Black
|
||||||
Me.tableCell3.Name = "tableCell3"
|
Me.tableCell3.Name = "tableCell3"
|
||||||
Me.tableCell3.StyleName = "DetailCaption1"
|
Me.tableCell3.StyleName = "DetailCaption1"
|
||||||
Me.tableCell3.Text = "Datum"
|
Me.tableCell3.StylePriority.UseBackColor = False
|
||||||
Me.tableCell3.Weight = 0.25860160582871317R
|
Me.tableCell3.StylePriority.UseBorderColor = False
|
||||||
|
Me.tableCell3.StylePriority.UseBorders = False
|
||||||
|
Me.tableCell3.StylePriority.UseBorderWidth = False
|
||||||
|
Me.tableCell3.StylePriority.UseForeColor = False
|
||||||
|
Me.tableCell3.Text = "Zeitstempel"
|
||||||
|
Me.tableCell3.Weight = 0.22479583469004233R
|
||||||
'
|
'
|
||||||
'Detail
|
'Detail
|
||||||
'
|
'
|
||||||
Me.Detail.Controls.AddRange(New DevExpress.XtraReports.UI.XRControl() {Me.table2})
|
Me.Detail.Controls.AddRange(New DevExpress.XtraReports.UI.XRControl() {Me.table2})
|
||||||
Me.Detail.Dpi = 254.0!
|
Me.Detail.Dpi = 254.0!
|
||||||
Me.Detail.HeightF = 63.42!
|
Me.Detail.HeightF = 86.174!
|
||||||
Me.Detail.HierarchyPrintOptions.Indent = 50.8!
|
Me.Detail.HierarchyPrintOptions.Indent = 50.8!
|
||||||
Me.Detail.Name = "Detail"
|
Me.Detail.Name = "Detail"
|
||||||
'
|
'
|
||||||
@@ -163,7 +554,6 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.table2.Dpi = 254.0!
|
Me.table2.Dpi = 254.0!
|
||||||
Me.table2.LocationFloat = New DevExpress.Utils.PointFloat(0!, 0!)
|
Me.table2.LocationFloat = New DevExpress.Utils.PointFloat(0!, 0!)
|
||||||
Me.table2.Name = "table2"
|
Me.table2.Name = "table2"
|
||||||
Me.table2.OddStyleName = "DetailData3_Odd"
|
|
||||||
Me.table2.Rows.AddRange(New DevExpress.XtraReports.UI.XRTableRow() {Me.tableRow2})
|
Me.table2.Rows.AddRange(New DevExpress.XtraReports.UI.XRTableRow() {Me.tableRow2})
|
||||||
Me.table2.SizeF = New System.Drawing.SizeF(1900.0!, 63.42!)
|
Me.table2.SizeF = New System.Drawing.SizeF(1900.0!, 63.42!)
|
||||||
'
|
'
|
||||||
@@ -178,11 +568,11 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
'
|
'
|
||||||
Me.tableCell4.Borders = DevExpress.XtraPrinting.BorderSide.None
|
Me.tableCell4.Borders = DevExpress.XtraPrinting.BorderSide.None
|
||||||
Me.tableCell4.Dpi = 254.0!
|
Me.tableCell4.Dpi = 254.0!
|
||||||
Me.tableCell4.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ItemStatus]")})
|
Me.tableCell4.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ItemStatusTranslated]")})
|
||||||
Me.tableCell4.Name = "tableCell4"
|
Me.tableCell4.Name = "tableCell4"
|
||||||
Me.tableCell4.StyleName = "DetailData1"
|
Me.tableCell4.StyleName = "DetailData1"
|
||||||
Me.tableCell4.StylePriority.UseBorders = False
|
Me.tableCell4.StylePriority.UseBorders = False
|
||||||
Me.tableCell4.Weight = 0.62695389177331973R
|
Me.tableCell4.Weight = 0.51726482142156094R
|
||||||
'
|
'
|
||||||
'tableCell5
|
'tableCell5
|
||||||
'
|
'
|
||||||
@@ -190,7 +580,7 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.tableCell5.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ItemUserReference]")})
|
Me.tableCell5.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ItemUserReference]")})
|
||||||
Me.tableCell5.Name = "tableCell5"
|
Me.tableCell5.Name = "tableCell5"
|
||||||
Me.tableCell5.StyleName = "DetailData1"
|
Me.tableCell5.StyleName = "DetailData1"
|
||||||
Me.tableCell5.Weight = 0.30791178180943785R
|
Me.tableCell5.Weight = 0.45140669932916544R
|
||||||
'
|
'
|
||||||
'tableCell6
|
'tableCell6
|
||||||
'
|
'
|
||||||
@@ -198,7 +588,9 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.tableCell6.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ItemDate]")})
|
Me.tableCell6.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ItemDate]")})
|
||||||
Me.tableCell6.Name = "tableCell6"
|
Me.tableCell6.Name = "tableCell6"
|
||||||
Me.tableCell6.StyleName = "DetailData1"
|
Me.tableCell6.StyleName = "DetailData1"
|
||||||
Me.tableCell6.Weight = 0.25860166310065952R
|
Me.tableCell6.StylePriority.UseTextAlignment = False
|
||||||
|
Me.tableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight
|
||||||
|
Me.tableCell6.Weight = 0.22479581593269077R
|
||||||
'
|
'
|
||||||
'Title
|
'Title
|
||||||
'
|
'
|
||||||
@@ -253,29 +645,10 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.PageInfo.Name = "PageInfo"
|
Me.PageInfo.Name = "PageInfo"
|
||||||
Me.PageInfo.Padding = New DevExpress.XtraPrinting.PaddingInfo(15, 15, 0, 0, 254.0!)
|
Me.PageInfo.Padding = New DevExpress.XtraPrinting.PaddingInfo(15, 15, 0, 0, 254.0!)
|
||||||
'
|
'
|
||||||
'XrLabel2
|
'GalleryDropDown1
|
||||||
'
|
'
|
||||||
Me.XrLabel2.Dpi = 254.0!
|
Me.GalleryDropDown1.Manager = Nothing
|
||||||
Me.XrLabel2.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Envelope].[User].[FullName]")})
|
Me.GalleryDropDown1.Name = "GalleryDropDown1"
|
||||||
Me.XrLabel2.LocationFloat = New DevExpress.Utils.PointFloat(0!, 139.8528!)
|
|
||||||
Me.XrLabel2.Multiline = True
|
|
||||||
Me.XrLabel2.Name = "XrLabel2"
|
|
||||||
Me.XrLabel2.Padding = New DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 254.0!)
|
|
||||||
Me.XrLabel2.SizeF = New System.Drawing.SizeF(857.2501!, 51.94089!)
|
|
||||||
Me.XrLabel2.StylePriority.UsePadding = False
|
|
||||||
Me.XrLabel2.Text = "XrLabel1"
|
|
||||||
'
|
|
||||||
'XrLabel3
|
|
||||||
'
|
|
||||||
Me.XrLabel3.Dpi = 254.0!
|
|
||||||
Me.XrLabel3.ExpressionBindings.AddRange(New DevExpress.XtraReports.UI.ExpressionBinding() {New DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Envelope].[User].[Email]")})
|
|
||||||
Me.XrLabel3.LocationFloat = New DevExpress.Utils.PointFloat(0!, 191.7937!)
|
|
||||||
Me.XrLabel3.Multiline = True
|
|
||||||
Me.XrLabel3.Name = "XrLabel3"
|
|
||||||
Me.XrLabel3.Padding = New DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 254.0!)
|
|
||||||
Me.XrLabel3.SizeF = New System.Drawing.SizeF(857.2501!, 51.94089!)
|
|
||||||
Me.XrLabel3.StylePriority.UsePadding = False
|
|
||||||
Me.XrLabel3.Text = "XrLabel1"
|
|
||||||
'
|
'
|
||||||
'ObjectDataSource1
|
'ObjectDataSource1
|
||||||
'
|
'
|
||||||
@@ -283,32 +656,6 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.ObjectDataSource1.DataSource = GetType(EnvelopeGenerator.Common.ReportSource)
|
Me.ObjectDataSource1.DataSource = GetType(EnvelopeGenerator.Common.ReportSource)
|
||||||
Me.ObjectDataSource1.Name = "ObjectDataSource1"
|
Me.ObjectDataSource1.Name = "ObjectDataSource1"
|
||||||
'
|
'
|
||||||
'XrLabel4
|
|
||||||
'
|
|
||||||
Me.XrLabel4.Dpi = 254.0!
|
|
||||||
Me.XrLabel4.Font = New System.Drawing.Font("Arial", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
|
||||||
Me.XrLabel4.LocationFloat = New DevExpress.Utils.PointFloat(0!, 87.9119!)
|
|
||||||
Me.XrLabel4.Name = "XrLabel4"
|
|
||||||
Me.XrLabel4.Padding = New DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 254.0!)
|
|
||||||
Me.XrLabel4.SizeF = New System.Drawing.SizeF(426.2708!, 51.94094!)
|
|
||||||
Me.XrLabel4.StyleName = "Title"
|
|
||||||
Me.XrLabel4.StylePriority.UseFont = False
|
|
||||||
Me.XrLabel4.StylePriority.UsePadding = False
|
|
||||||
Me.XrLabel4.Text = "Ersteller:"
|
|
||||||
'
|
|
||||||
'XrLabel1
|
|
||||||
'
|
|
||||||
Me.XrLabel1.Dpi = 254.0!
|
|
||||||
Me.XrLabel1.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold)
|
|
||||||
Me.XrLabel1.LocationFloat = New DevExpress.Utils.PointFloat(470.5626!, 0!)
|
|
||||||
Me.XrLabel1.Name = "XrLabel1"
|
|
||||||
Me.XrLabel1.Padding = New DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 254.0!)
|
|
||||||
Me.XrLabel1.SizeF = New System.Drawing.SizeF(695.8539!, 58.0!)
|
|
||||||
Me.XrLabel1.StyleName = "Title"
|
|
||||||
Me.XrLabel1.StylePriority.UseFont = False
|
|
||||||
Me.XrLabel1.StylePriority.UsePadding = False
|
|
||||||
Me.XrLabel1.Text = "Erstellt mit SignFlow"
|
|
||||||
'
|
|
||||||
'rptEnvelopeHistory
|
'rptEnvelopeHistory
|
||||||
'
|
'
|
||||||
Me.Bands.AddRange(New DevExpress.XtraReports.UI.Band() {Me.TopMargin, Me.BottomMargin, Me.ReportHeader, Me.GroupHeader1, Me.Detail})
|
Me.Bands.AddRange(New DevExpress.XtraReports.UI.Band() {Me.TopMargin, Me.BottomMargin, Me.ReportHeader, Me.GroupHeader1, Me.Detail})
|
||||||
@@ -316,7 +663,7 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.DataSource = Me.ObjectDataSource1
|
Me.DataSource = Me.ObjectDataSource1
|
||||||
Me.Dpi = 254.0!
|
Me.Dpi = 254.0!
|
||||||
Me.Font = New System.Drawing.Font("Arial", 9.75!)
|
Me.Font = New System.Drawing.Font("Arial", 9.75!)
|
||||||
Me.Margins = New System.Drawing.Printing.Margins(100, 100, 100, 100)
|
Me.Margins = New System.Drawing.Printing.Margins(100, 100, 191, 100)
|
||||||
Me.PageHeight = 2970
|
Me.PageHeight = 2970
|
||||||
Me.PageWidth = 2100
|
Me.PageWidth = 2100
|
||||||
Me.PaperKind = System.Drawing.Printing.PaperKind.A4
|
Me.PaperKind = System.Drawing.Printing.PaperKind.A4
|
||||||
@@ -324,8 +671,12 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Me.SnapGridSize = 25.0!
|
Me.SnapGridSize = 25.0!
|
||||||
Me.StyleSheet.AddRange(New DevExpress.XtraReports.UI.XRControlStyle() {Me.Title, Me.DetailCaption1, Me.DetailData1, Me.DetailData3_Odd, Me.PageInfo})
|
Me.StyleSheet.AddRange(New DevExpress.XtraReports.UI.XRControlStyle() {Me.Title, Me.DetailCaption1, Me.DetailData1, Me.DetailData3_Odd, Me.PageInfo})
|
||||||
Me.Version = "21.2"
|
Me.Version = "21.2"
|
||||||
|
Me.Watermark.ImageSource = New DevExpress.XtraPrinting.Drawing.ImageSource("img", resources.GetString("rptEnvelopeHistory.Watermark.ImageSource"))
|
||||||
|
Me.Watermark.ImageTransparency = 220
|
||||||
|
CType(Me.XrTable3, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.table1, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.table1, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.table2, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.table2, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.GalleryDropDown1, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.ObjectDataSource1, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.ObjectDataSource1, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
|
||||||
@@ -355,8 +706,25 @@ Partial Public Class rptEnvelopeHistory
|
|||||||
Friend WithEvents DetailData1 As DevExpress.XtraReports.UI.XRControlStyle
|
Friend WithEvents DetailData1 As DevExpress.XtraReports.UI.XRControlStyle
|
||||||
Friend WithEvents DetailData3_Odd As DevExpress.XtraReports.UI.XRControlStyle
|
Friend WithEvents DetailData3_Odd As DevExpress.XtraReports.UI.XRControlStyle
|
||||||
Friend WithEvents PageInfo As DevExpress.XtraReports.UI.XRControlStyle
|
Friend WithEvents PageInfo As DevExpress.XtraReports.UI.XRControlStyle
|
||||||
Friend WithEvents XrLabel3 As DevExpress.XtraReports.UI.XRLabel
|
|
||||||
Friend WithEvents XrLabel2 As DevExpress.XtraReports.UI.XRLabel
|
|
||||||
Friend WithEvents XrLabel4 As DevExpress.XtraReports.UI.XRLabel
|
|
||||||
Friend WithEvents XrLabel1 As DevExpress.XtraReports.UI.XRLabel
|
Friend WithEvents XrLabel1 As DevExpress.XtraReports.UI.XRLabel
|
||||||
|
Friend WithEvents XrTable3 As DevExpress.XtraReports.UI.XRTable
|
||||||
|
Friend WithEvents XrTableRow8 As DevExpress.XtraReports.UI.XRTableRow
|
||||||
|
Friend WithEvents XrTableCell13 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell15 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableRow9 As DevExpress.XtraReports.UI.XRTableRow
|
||||||
|
Friend WithEvents XrTableCell14 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell17 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell16 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell18 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableRow10 As DevExpress.XtraReports.UI.XRTableRow
|
||||||
|
Friend WithEvents XrTableCell19 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell20 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell21 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell22 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableRow11 As DevExpress.XtraReports.UI.XRTableRow
|
||||||
|
Friend WithEvents XrTableCell23 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell24 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell25 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents XrTableCell26 As DevExpress.XtraReports.UI.XRTableCell
|
||||||
|
Friend WithEvents GalleryDropDown1 As DevExpress.XtraBars.Ribbon.GalleryDropDown
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,8 +1,9 @@
|
|||||||
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 BaseClass
|
Inherits BaseService
|
||||||
|
|
||||||
Private ReadOnly EmailService As EmailService
|
Private ReadOnly EmailService As EmailService
|
||||||
Private ReadOnly HistoryService As HistoryService
|
Private ReadOnly HistoryService As HistoryService
|
||||||
@@ -11,7 +12,7 @@ Public Class ActionService
|
|||||||
|
|
||||||
|
|
||||||
Public Sub New(pState As State)
|
Public Sub New(pState As State)
|
||||||
MyBase.New(pState.LogConfig)
|
MyBase.New(pState)
|
||||||
|
|
||||||
EmailService = New EmailService(pState)
|
EmailService = New EmailService(pState)
|
||||||
HistoryService = New HistoryService(pState)
|
HistoryService = New HistoryService(pState)
|
||||||
@@ -33,14 +34,28 @@ Public Class ActionService
|
|||||||
|
|
||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
Public Function Resend_Receiver(pEnvelope As Envelope, pmail As String) As Boolean
|
||||||
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.EnvelopeQueued, pEnvelope.User.Email) = False Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
Dim oSendResult As Boolean = False
|
||||||
|
For Each oReceiver In pEnvelope.Receivers
|
||||||
|
EmailService.SendDocumentReceivedEmail(pEnvelope, oReceiver)
|
||||||
|
Next
|
||||||
|
Return oSendResult
|
||||||
|
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
|
||||||
@@ -60,6 +75,36 @@ Public Class ActionService
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function RequestAccessCode(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
|
Dim oUserReference = pReceiver.Email
|
||||||
|
|
||||||
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.AccessCodeRequested, oUserReference) = False Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function EnterCorrectAccessCode(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
|
Dim oUserReference = pReceiver.Email
|
||||||
|
|
||||||
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.AccessCodeCorrect, oUserReference) = False Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function EnterIncorrectAccessCode(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
|
Dim oUserReference = pReceiver.Email
|
||||||
|
|
||||||
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.AccessCodeIncorrect, oUserReference) = False Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
Public Function SignEnvelope(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
Public Function SignEnvelope(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
Dim oUserReference = pReceiver.Email
|
Dim oUserReference = pReceiver.Email
|
||||||
|
|
||||||
@@ -78,4 +123,28 @@ Public Class ActionService
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
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
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return EmailService.SendDocumentCompletedEmailToReceiver(pEnvelope, pReceiver) ', pAttachment
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CompleteEnvelope(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent, pEnvelope.User.Email) = False Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return EmailService.SendDocumentCompletedEmailToCreator(pEnvelope) ', pAttachment
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CreateReport(pEnvelope As Envelope) As Boolean
|
||||||
|
If HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.EnvelopeReportCreated, "System") = False Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
13
EnvelopeGenerator.Common/Services/BaseService.vb
Normal file
13
EnvelopeGenerator.Common/Services/BaseService.vb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
|
||||||
|
Public Class BaseService
|
||||||
|
Inherits BaseClass
|
||||||
|
|
||||||
|
Friend Property State As State
|
||||||
|
|
||||||
|
Public Sub New(pState As State)
|
||||||
|
MyBase.New(pState.LogConfig)
|
||||||
|
|
||||||
|
State = pState
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
@@ -1,35 +1,29 @@
|
|||||||
|
|
||||||
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 BaseClass
|
Inherits BaseService
|
||||||
|
|
||||||
Private ReadOnly State As State
|
|
||||||
|
|
||||||
Private ReadOnly EnvelopeModel As EnvelopeModel
|
|
||||||
Private ReadOnly ReceiverModel As ReceiverModel
|
|
||||||
Private ReadOnly EmailModel As EmailModel
|
Private ReadOnly EmailModel As EmailModel
|
||||||
|
Private ReadOnly EmailTemplate As TemplateService
|
||||||
Private ReadOnly EmailTemplate As EmailTemplate
|
|
||||||
|
|
||||||
Public Sub New(pState As State)
|
Public Sub New(pState As State)
|
||||||
MyBase.New(pState.LogConfig)
|
MyBase.New(pState)
|
||||||
|
|
||||||
State = pState
|
|
||||||
EnvelopeModel = New EnvelopeModel(pState)
|
|
||||||
ReceiverModel = New ReceiverModel(pState)
|
|
||||||
EmailModel = New EmailModel(pState)
|
EmailModel = New EmailModel(pState)
|
||||||
EmailTemplate = New EmailTemplate(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.")
|
||||||
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.")
|
||||||
@@ -40,6 +34,7 @@ Public Class EmailService
|
|||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function SendDocumentReceivedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
Public Function SendDocumentReceivedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
|
Logger.Debug("Creating email data object.")
|
||||||
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageInvitationSent) With
|
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageInvitationSent) With
|
||||||
{
|
{
|
||||||
.SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature)
|
.SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature)
|
||||||
@@ -55,7 +50,34 @@ 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
|
||||||
|
Logger.Debug("Creating email data object.")
|
||||||
|
Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageAccessCodeSent) With
|
||||||
|
{
|
||||||
|
.SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature)
|
||||||
|
}
|
||||||
|
|
||||||
|
EmailTemplate.FillDocumentAccessCodeReceivedEmailBody(oEmailData)
|
||||||
|
|
||||||
|
If EmailModel.Insert(oEmailData) = False Then
|
||||||
|
Logger.Error("EMail data could not be inserted.")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
Public Function SendSignedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
Public Function SendSignedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
|
||||||
|
Logger.Debug("Creating email data object.")
|
||||||
Dim oEmailData = New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageConfirmationSent) With
|
Dim oEmailData = New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageConfirmationSent) With
|
||||||
{
|
{
|
||||||
.SignatureLink = ""
|
.SignatureLink = ""
|
||||||
@@ -71,5 +93,45 @@ Public Class EmailService
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function SendDocumentCompletedEmailToReceiver(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean ', pAttachment As String
|
||||||
|
Logger.Debug("Creating email data object.")
|
||||||
|
Dim oEmailData = New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageCompletionSent) With
|
||||||
|
{
|
||||||
|
.SignatureLink = "",
|
||||||
|
.ATT1_RELATED_ID = pEnvelope.Id,
|
||||||
|
.ATT1_REL_TYPE = "EnvelopeResult"
|
||||||
|
}
|
||||||
|
' .EmailAttachment = pAttachment,
|
||||||
|
Logger.Debug("Sending mail to receiver: [{0}]", oEmailData.EmailAdress)
|
||||||
|
|
||||||
|
EmailTemplate.FillDocumentCompletedEmailBody(oEmailData)
|
||||||
|
|
||||||
|
If EmailModel.Insert(oEmailData) = False Then
|
||||||
|
Logger.Error("EMail data could not be inserted.")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function SendDocumentCompletedEmailToCreator(pEnvelope As Envelope) As Boolean ', pAttachment As String
|
||||||
|
Logger.Debug("Creating email data object.")
|
||||||
|
Dim oEmailData = New EmailData(pEnvelope, Constants.EnvelopeStatus.MessageCompletionSent) With
|
||||||
|
{
|
||||||
|
.SignatureLink = "",
|
||||||
|
.ATT1_RELATED_ID = pEnvelope.Id,
|
||||||
|
.ATT1_REL_TYPE = "EnvelopeResult"
|
||||||
|
}
|
||||||
|
'.EmailAttachment = pAttachment,
|
||||||
|
EmailTemplate.FillDocumentCompletedEmailBody(oEmailData)
|
||||||
|
|
||||||
|
If EmailModel.Insert(oEmailData) = False Then
|
||||||
|
Logger.Error("EMail data could not be inserted.")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -4,18 +4,15 @@ Imports DigitalData.Modules.Logging
|
|||||||
Imports EnvelopeGenerator.Common.Constants
|
Imports EnvelopeGenerator.Common.Constants
|
||||||
|
|
||||||
Public Class HistoryService
|
Public Class HistoryService
|
||||||
Inherits BaseClass
|
Inherits BaseService
|
||||||
|
|
||||||
Private ReadOnly State As State
|
|
||||||
|
|
||||||
Private ReadOnly EnvelopeModel As EnvelopeModel
|
Private ReadOnly EnvelopeModel As EnvelopeModel
|
||||||
Private ReadOnly ReceiverModel As ReceiverModel
|
Private ReadOnly ReceiverModel As ReceiverModel
|
||||||
Private ReadOnly HistoryModel As HistoryModel
|
Private ReadOnly HistoryModel As HistoryModel
|
||||||
|
|
||||||
Public Sub New(pState As State)
|
Public Sub New(pState As State)
|
||||||
MyBase.New(pState.LogConfig)
|
MyBase.New(pState)
|
||||||
|
|
||||||
State = pState
|
|
||||||
EnvelopeModel = New EnvelopeModel(pState)
|
EnvelopeModel = New EnvelopeModel(pState)
|
||||||
ReceiverModel = New ReceiverModel(pState)
|
ReceiverModel = New ReceiverModel(pState)
|
||||||
HistoryModel = New HistoryModel(pState)
|
HistoryModel = New HistoryModel(pState)
|
||||||
|
|||||||
89
EnvelopeGenerator.Common/Services/TemplateService.vb
Normal file
89
EnvelopeGenerator.Common/Services/TemplateService.vb
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
Imports DigitalData.Modules.Base
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
|
Public Class TemplateService
|
||||||
|
Inherits BaseService
|
||||||
|
|
||||||
|
Private _replaceDictionary As Dictionary(Of String, String)
|
||||||
|
|
||||||
|
Private ReadOnly DbConfig As DbConfig
|
||||||
|
Private ReadOnly EmailHtmlTemplateModel As EmailTemplateModel
|
||||||
|
|
||||||
|
Public Sub New(pState As State)
|
||||||
|
MyBase.New(pState)
|
||||||
|
|
||||||
|
DbConfig = pState.DbConfig
|
||||||
|
EmailHtmlTemplateModel = New EmailTemplateModel(pState)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub InitDictionary(pEmailData As EmailData, Optional pReason As String = "")
|
||||||
|
Logger.Debug("Initializing dictionary..")
|
||||||
|
|
||||||
|
_replaceDictionary = New Dictionary(Of String, String) From {
|
||||||
|
{"[NAME_RECEIVER]", pEmailData.ReceiverName},
|
||||||
|
{"[NAME_SENDER]", pEmailData.SenderName},
|
||||||
|
{"[NAME_PORTAL]", DbConfig.ExternalProgramName},
|
||||||
|
{"[SIGNATURE_TYPE]", "signieren"},
|
||||||
|
{"[LINK_TO_DOCUMENT]", pEmailData.SignatureLink},
|
||||||
|
{"[LINK_TO_DOCUMENT_TEXT]", $"{pEmailData.SignatureLink.Truncate(40)}.."},
|
||||||
|
{"[DOCUMENT_TITLE]", pEmailData.EnvelopeTitle},
|
||||||
|
{"[MESSAGE]", pEmailData.Message},
|
||||||
|
{"[DOCUMENT_ACCESS_CODE]", pEmailData.ReceiverAccessCode},
|
||||||
|
{"[REASON]", pReason}
|
||||||
|
}
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub FillDocumentReceivedEmailBody(pEmailData As EmailData)
|
||||||
|
InitDictionary(pEmailData)
|
||||||
|
Dim oTemplate = EmailHtmlTemplateModel.GetById(Constants.EmailTemplateType.DocumentReceived)
|
||||||
|
|
||||||
|
pEmailData.EmailBody = FillTemplate(oTemplate.Body)
|
||||||
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub FillEnvelopeDeletedEmailBody(pEmailData As EmailData, pReason As String)
|
||||||
|
InitDictionary(pEmailData, pReason)
|
||||||
|
Dim oTemplate = EmailHtmlTemplateModel.GetById(Constants.EmailTemplateType.DocumentDeleted)
|
||||||
|
|
||||||
|
pEmailData.EmailBody = FillTemplate(oTemplate.Body, pReason)
|
||||||
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub FillDocumentSignedEmailBody(pEmailData As EmailData)
|
||||||
|
InitDictionary(pEmailData)
|
||||||
|
Dim oTemplate = EmailHtmlTemplateModel.GetById(Constants.EmailTemplateType.DocumentSigned)
|
||||||
|
|
||||||
|
pEmailData.EmailBody = FillTemplate(oTemplate.Body)
|
||||||
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub FillDocumentCompletedEmailBody(pEmailData As EmailData)
|
||||||
|
InitDictionary(pEmailData)
|
||||||
|
Dim oTemplate = EmailHtmlTemplateModel.GetById(Constants.EmailTemplateType.DocumentCompleted)
|
||||||
|
|
||||||
|
pEmailData.EmailBody = FillTemplate(oTemplate.Body)
|
||||||
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub FillDocumentAccessCodeReceivedEmailBody(pEmailData As EmailData)
|
||||||
|
InitDictionary(pEmailData)
|
||||||
|
Dim oTemplate = EmailHtmlTemplateModel.GetById(Constants.EmailTemplateType.DocumentAccessCodeReceived)
|
||||||
|
|
||||||
|
pEmailData.EmailBody = FillTemplate(oTemplate.Body)
|
||||||
|
pEmailData.EmailSubject = FillTemplate(oTemplate.Subject)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Function FillTemplate(pTemplate As String, Optional pReason As String = "") As String
|
||||||
|
Dim oText As String = pTemplate
|
||||||
|
|
||||||
|
For Each dictItem As KeyValuePair(Of String, String) In _replaceDictionary
|
||||||
|
If oText.Contains(dictItem.Key) Then
|
||||||
|
|
||||||
|
oText = oText.Replace(dictItem.Key, dictItem.Value)
|
||||||
|
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return oText
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user