Compare commits

215 Commits

Author SHA1 Message Date
Developer 02
255843d760 chore: Hochgestuft auf 2.11 2025-02-11 16:44:51 +01:00
Developer 02
121f0568ad feat(network.js): Aktualisiertes Logout, um bei erfolgreicher Logout-Anfrage auf die Startseite umzuleiten 2025-02-11 16:44:06 +01:00
Developer 02
5d95f2f221 feat(network.js): Logout-Anforderungsmethode hinzugefügt.
- Logout-Methode zum LOGOUT-Ereignis hinzugefügt
2025-02-11 16:28:50 +01:00
Developer 02
3d5053d177 feat(TFARegController): Logout-Methode hinzugefügt 2025-02-11 16:13:24 +01:00
Developer 02
b79bc2e418 feat(ui.js): Schaltfläche zum Abmelden mit Icon hinzugefügt.
- Mock-Button auf der rechten Seite hinzugefügt, um ein Padding auf die rechte Seite zu setzen
 - Mock-Aktion zur Abmelde-Schaltfläche hinzugefügt
2025-02-11 16:07:38 +01:00
Developer 02
b4154b60a7 feat(HomeController): LogInEnvelope-Methode aktualisiert, um show-envelope-view zu senden, wenn der Client die FullyAuth-Rolle hat 2025-02-11 15:47:27 +01:00
Developer 02
0090fc0dfa fix(EnvelopeReceiverBase): HasPhoneNumber getter Methode aktualisiert, um false nicht nur für null, sondern auch für Leerzeichen zurückzugeben. 2025-02-11 15:42:00 +01:00
Developer 02
6eac92b7cb refactor(HomeController): renamed TryShowEnvelope as CreateShowEnvelopeView 2025-02-11 15:18:09 +01:00
Developer 02
1b1edca23c feat(HomeController): TryShowEnvelope-Methode erstellt, um die Generierung der Show-Envelope-Ansicht zu zentrieren
- TryShowEnvelope-Methode zum EnvelopeLocked-Endpunkt hinzugefügt, um den Umschlag anzuzeigen, wenn der Benutzer bereits autorisiert wurde.
2025-02-11 15:02:10 +01:00
Developer01
57ea9e01f8 Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2025-02-11 14:04:11 +01:00
Developer01
1a99041c60 MS Changes OrderFiles, TFA without OPhone 2025-02-11 14:03:58 +01:00
Developer 02
56c735890d Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2025-02-11 13:52:39 +01:00
Developer 02
3688373481 fix(_Layout): sanitzer entfernt, um Json-Deserilisationsfehler zu vermeiden. 2025-02-11 13:43:01 +01:00
Developer 02
b8fbeee322 fix(HomeController): Zugehörige Datenbindungen hinzugefügt 2025-02-10 17:17:11 +01:00
Developer 02
57e4dfb3fb feat(EnvelopeLocked): Link zum Senden von E-Mails zu LockedFooterBodyAccess hinzugefügt.
- Gebunden mit Modell.
2025-02-10 16:58:57 +01:00
Developer 02
afc8d3baf0 chore: Upgegradet auf 2.10.4
- Resx-Felder aktualisiert.
2025-02-10 15:23:51 +01:00
Developer 02
51d77367ca fix(DIExtensions): aktualisiert, um den richtigen Abschnittsnamen einzugeben.
- ConfigureByTypeName entfernt
2025-02-10 15:05:46 +01:00
Developer 02
614f3768d9 chore(EnvelopeGenerator): Hochgestuft auf 2.10.3 2025-02-10 13:08:57 +01:00
Developer 02
5f780f8d1e fix(EnvelopeSmsHandler): Korrekte Ablaufprüfung und Cache-Aktualisierung in SendTotpAsync
- Die Bedingung für die Überprüfung des Ablaufs wurde korrigiert, so dass sie korrekt null zurückgibt, wenn der gespeicherte Ablauf in der Zukunft liegt.
- Fehlende Cache-Aktualisierung zur Speicherung des neuen Verfallsdatums nach dem Versand der TOTP-SMS hinzugefügt.
2025-02-10 11:48:36 +01:00
Developer 02
20825aa3ea feat(HomeController): Rollenprüfung für 2FA hinzugefügt
- wenn der Benutzer keine PreAuth Rolle hat, wird Status401Unauthorized zurückgegeben
2025-02-10 11:18:54 +01:00
Developer 02
c5b508d274 chore(EnvelopeGenerator): Hochgestuft auf 2.10.2 2025-02-07 14:49:39 +01:00
Developer 02
4eec4451b2 feat(TFARegController): Authentifizierungsbedingung zum Registrierungsendpunkt hinzugefügt 2025-02-07 13:31:54 +01:00
Developer 02
ca4718e159 feat(ControllerBaseExtensions): Erstellte Erweiterungsmethode zum Login über HttpContext mit Umschlag Empfänger und Rolle.
- Implementiert in HomeController
2025-02-07 13:12:27 +01:00
Developer 02
33fcb5b70e refactor(Controllers): FullyAuth-Rollenbedingung für jedes bestehende Auth-Attribut hinzugefügt, um die Autorisierung in Stufen aufzuteilen. 2025-02-07 10:53:17 +01:00
Developer 02
82d8521a25 feat(Constants): Erstellen von Konstanten für die Empfängerrolle, um die Authentifizierungsschritte des Empfängers zu trennen 2025-02-07 09:47:32 +01:00
Developer 02
2f9d07312b chore(Web): Hochgestuft auf 2.10.0 2025-02-06 19:41:47 +01:00
Developer 02
fa36593b26 refactor(Receiver): Entfernt TotpExpiration aus allen DTOs und Entitäten. 2025-02-06 19:41:11 +01:00
Developer 02
9cdb1409c0 feat(TFARegController): Try-Catch zur Methode reg'e hinzugefügt.
- Ausnahme ist so eingestellt, dass sie protokolliert wird.
2025-02-06 19:31:50 +01:00
Developer 02
95785e8c8b chore(Web): Hochgestuft auf 2.10.0 2025-02-06 18:40:37 +01:00
Developer 02
6d6e62c8d0 feat(EnvelopeLocked): Unterstützung für TFA-Registrierungsfrist auf der gesperrten Seite hinzufügen
- Einführung der TFA-Registrierungsfrist, um einen Link zur Einrichtung der Authenticator-App innerhalb eines gültigen Zeitfensters anzuzeigen.
- Aktualisierung der Ansicht, um die Registrierungsfrist anzuzeigen, falls zutreffend, und den Benutzer zur Einrichtung von TFA zu leiten.
2025-02-06 18:39:32 +01:00
Developer 02
1720e137f9 feat(Reg.cshtml): Zeitüberschreitung hinzugefügt.
- TFARegController.Reg aktualisiert, um die Seite _Expired view zu senden, wenn receiver.TfaRegDeadline abläuft.
 - TFARegParams Klasse für TimeLimit Configuration erstellt und mit appsettings konfiguriert.
2025-02-06 17:59:19 +01:00
Developer 02
3e6e2078bb feat(auth): Unterstützung für Authenticator-App-Setup-Link hinzugefügt
- Es wurde ein neuer Abschnitt eingeführt, der einen Link für Benutzer anzeigt, um ihre Authenticator-App einzurichten, wenn viaAuthenticator aktiviert ist.
 - Abruf von envelopeKey aus ViewData hinzugefügt, um den Einrichtungslink zu erstellen.
 - Refactored codeKeyName Initialisierung für saubereren Code.
2025-02-06 15:49:05 +01:00
Developer 02
6b0ec9386c chore: Bootstrap-icons-Bibliothek hinzufügen 2025-02-06 11:55:15 +01:00
Developer 02
ee49538f1e feat(Receiver): EnvelopeReceiver-Eigenschaft zu Entität, ReadDto und Updated Dto hinzugefügt. 2025-02-05 17:17:44 +01:00
Developer 02
311009bc97 feat(Reg): CSS zu .tfaQrCode hinzugefügt 2025-02-05 16:48:11 +01:00
Developer 02
f5028a82fa feat(Reg View): TFA-Registrierungsschritt erstellt 2025-02-05 16:12:42 +01:00
Developer 02
07d70dbd22 feat(TFARegController): QR-Code zu RegView hinzugefügt. 2025-02-05 13:42:55 +01:00
Developer 02
152050ebf4 feat(ViewControllerBase): Erstellt, um allgemeine Eigenschaften von ViewControllern zu behandeln.
- Implementiert in TFARegController.
 - Implementiert in HomeController.
2025-02-05 12:58:30 +01:00
Developer 02
e27daa4b90 feat(TFARegController): Initialisiert den MVC-Controller und den View zur Bearbeitung der TFA-Registrierung. 2025-02-05 11:32:34 +01:00
Developer01
c63f369bd6 Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2025-02-04 15:08:07 +01:00
Developer01
c50e16d74f MS Überarbeitung 2025-02-04 15:07:53 +01:00
Developer 02
808a02968b refactor(CodeGenerator): umbenannt in Authenticator 2025-02-03 09:58:57 +01:00
Developer 02
bbd03615e1 feat(EnvelopeSmsHandler): Methode VerifyTotp hinzugefügt, um Totp mit TotpVerificationWindow von TotpSmsParams zu verifizieren. 2025-02-03 09:52:46 +01:00
Developer 02
772d510705 feat(EnvelopeSmsService): SendTotpAsync-Methode hinzufügen, um totp unter Berücksichtigung der Ablaufzeit zu senden. 2025-01-31 14:59:39 +01:00
Developer 02
aa918d875d refactor(JWT): Ungenutzte Schnittstelle und Controller entfernt 2025-01-31 13:10:55 +01:00
Developer 02
28fdf0a115 renamed(SmsParams): umbenannt in GtxMessagingParams 2025-01-31 13:06:11 +01:00
Developer 02
120c8623dd refactor(Application.Configurations): Config-Suffix in Params umbenannt. 2025-01-31 12:51:44 +01:00
Developer 02
363329ca18 refaktor: Vereinfachung der DI-Konfiguration und Verbesserung der Wiederverwendbarkeit
- Entfernte redundante `AddEnvelopeGenerator`-Überladung.
- Einführung der Erweiterungsmethode `ConfigureByTypeName<TOptions>` für eine sauberere Konfiguration.
- Ersetzte explizite Konfigurationsaufrufe durch `ConfigureByTypeName<TOptions>`.
- Verbesserte Wartbarkeit durch Reduzierung von redundantem Code.
- Markierte `ConfigureByTypeName<TOptions>` zur zukünftigen Verlagerung nach `DigitalData.Core`.
2025-01-31 11:54:49 +01:00
Developer 02
eb0c6dabf4 Revert "refactor(EnvelopeSmsService): Initialisiert mit Schnittstelle, DI-Injektion und Konfigurationen."
This reverts commit cd88af6807.
2025-01-31 11:20:43 +01:00
Developer 02
cd88af6807 refactor(EnvelopeSmsService): Initialisiert mit Schnittstelle, DI-Injektion und Konfigurationen. 2025-01-31 11:20:24 +01:00
Developer 02
1941de1928 refactor(EnvelopeSmsService): Initialisiert mit Schnittstelle, DI-Injektion und Konfigurationen. 2025-01-31 11:15:53 +01:00
Developer 02
22347a0202 refactor(MessagingService): umbenannt in SmsSender 2025-01-31 10:37:59 +01:00
Developer 02
e54d9d2da8 feat(TotpSmsParams): Erstellt, um die Konfiguration von Totp zu handhaben 2025-01-31 10:22:37 +01:00
Developer 02
06b1aa9560 refactor(appsetings): Unnötige Konfigurations-Parameter entfernt. 2025-01-30 16:43:14 +01:00
Developer 02
4f35fe54be fix(HomeController): Berechnungsmethode new_expiration aktualisiert, um AddSeconds zu verwenden 2025-01-30 16:37:01 +01:00
Developer 02
84e3e4e18d refactor(HomeController): renamed authentication methods with Handle prefix for clarity 2025-01-30 16:27:09 +01:00
Developer 02
7f26bb4766 refactor(HomeController): Aufteilung in Sub-TFAView-Methoden, um die Lesbarkeit zu verbessern. 2025-01-30 16:12:42 +01:00
Developer 02
f674be5200 chore: Projekt wurde auf 2.9.0 aktualisiert 2025-01-28 10:21:47 +01:00
Developer 02
0718f24339 feat(HomeController): TFAView wurde als separate Methode geschrieben, um Verwirrung zu vermeiden 2025-01-27 17:12:19 +01:00
Developer 02
6abc17c3bf feat(HomeController): Aktualisiert, um SMS über zu senden.
- Unnötige Parameter in SmsParams entfernt.
 - Code-Sendefunktion von IMessagingService entfernt.
 - GetTotpExpirationTime Methode im CodeGenerator entfernt.
2025-01-27 17:09:23 +01:00
Developer 02
cf300d3ade Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2025-01-27 16:50:44 +01:00
Developer 02
be44f9f436 refactor(HomeController): Statische Eigenschaften SmsTotpStep und SmsFormat hinzugefügt. 2025-01-27 15:01:34 +01:00
Developer 02
80f9107e4e feat(cache): Unterstützung für GetOrSetAsync mit DateTime-Typ hinzugefügt
- GetOrSetAsync für DateTime mit synchronen und asynchronen Fabrikmethoden implementiert.
- Bestehende GetOrSetAsync-Methoden für Zeichenfolgen und asynchrone Zeichenfolgen refaktoriert, um Klarheit und Struktur zu verbessern.
- Code mit Regionen organisiert, um ähnliche Methoden für bessere Lesbarkeit zu gruppieren.
- TODO für weitere Verbesserungen bei der Codegenerierung für GetOrSetAsync-Methoden hinzugefügt.
2025-01-27 14:50:23 +01:00
Developer 02
c6e9ecfbca refactor(cache): Unterstützung für CancellationToken in IDistributedCache-Erweiterungsmethoden hinzufügen
- Aktualisierte `SetLongAsync`, `GetLongAsync`, `SetDateTimeAsync`, `GetDateTimeAsync`, `SetTimeSpanAsync` und `GetTimeSpanAsync`, um optionale `CancellationToken`-Parameter zu unterstützen.
- Modifizierte `GetOrSetAsync`, um zwischen synchronen und asynchronen Fabrikfunktionen zu unterscheiden.
- Sicherstellung einer konsistenten Handhabung von `CancellationToken` in allen Cache-bezogenen Operationen.
2025-01-27 14:23:06 +01:00
Developer 02
af5d7c289d refactor(HomeController): LogInEnvelope aktualisiert, um SMS-Code als TOTP zu verifizieren 2025-01-27 13:47:26 +01:00
Developer 02
3267acbeb3 feat(CodeGenerator): GenerateTotp und VerifyTotp Methoden hinzugefügt. 2025-01-25 00:35:19 +01:00
Developer 02
95efe58e1b chore(Web): Hochgestuft auf 2.8.2 2025-01-24 20:42:01 +01:00
Developer 02
867756242e refactor(EnvelopeReceiver): TFAEnabled wurde in die Envelope-Tabelle für Entität und DTO verschoben.
- Aktualisierte zugehörige Felder in HomeController.
2025-01-24 18:13:29 +01:00
Developer 02
713c2f3ed2 refactor(GTXMessagingResponse): In die Anwendungsschicht verschoben. 2025-01-24 17:11:38 +01:00
Developer01
5a0e258b35 Ms Auswertungen, Dokument anzeigen, Drag and Drop 2025-01-24 14:34:28 +01:00
Developer01
651095976a Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2025-01-03 10:25:22 +01:00
Developer01
fcbee75b9b MS Common 2.1 - Enum VerificationType 2025-01-03 10:25:06 +01:00
Developer 02
dcb25ffc4c chore(Web): auf Projekt 2.8.1 hochgerüstet 2024-12-12 18:49:20 +01:00
Developer 02
618e295634 fix(EnvelopeLocked): falschen Buchstaben aus html entfernen 2024-12-12 18:48:14 +01:00
Developer 02
8a2fa2035a chore : alle Projekte als Debugger konfiguriert. 2024-12-12 18:47:27 +01:00
Developer 02
60109e4deb refactor(annotation.js): Standortzuweisung für mobile Geräte entfernt. 2024-12-12 18:21:28 +01:00
Developer 02
ed6a00dfdf refactor(util): Verschieben von Methoden über Standort nach util.location.js. 2024-12-12 17:11:45 +01:00
Developer 02
c693495928 chore(Web): hochgestuft auf 2.8 2024-12-11 20:09:34 +01:00
Developer 02
241991721d feat(DTOExtension): Erweiterungsmethode hinzugefügt, um totp direkt über Receiver zu prüfen 2024-12-11 18:42:23 +01:00
Developer 02
c41d5c4a76 feat(HomeController): Funktion zur Überprüfung des Authenticator-Codes hinzugefügt. 2024-12-11 18:32:35 +01:00
Developer 02
27db664b4d feat(StringExtension): Erstellen, um erforderliche String-Erweiterungsmethoden hinzuzufügen.
- IsValidTotp Erweiterung hinzugefügt, um die totp zu überprüfen.
2024-12-11 18:22:45 +01:00
Developer 02
ba2518cdd2 refactor(EnvelopeLocked): QRCodeExpiration hinzugefügt 2024-12-11 18:06:36 +01:00
Developer 02
72a0cb78c7 refactor(EnvelopeLocked): Umbenennung von Expiration in SmsExpiration.
- HomeController aktualisiert.
2024-12-11 18:00:48 +01:00
Developer 02
e82d7552c2 refactor(EnvelopeLocked): Formatierbare Schlüsselnamen hinzugefügt. 2024-12-11 17:58:46 +01:00
Developer 02
4b50b6c35d refactor(Resource.resx): Schlüssel-Werte für Authenticators hinzugefügt 2024-12-11 17:32:17 +01:00
Developer 02
103d8da6b2 refactor(Resource.resx): Aktualisierte Schlüsselnamen für Schlüsselformate 2024-12-11 16:54:02 +01:00
Developer 02
15f3bd1bbd refactor(WebKey.Formate): Aktualisiert, um in der resx-Datei in alphabetischer Reihenfolge gruppieren zu können. 2024-12-11 16:39:01 +01:00
Developer 02
10a5adeeee fix: LocakedOpen entfernt. 2024-12-11 16:29:20 +01:00
Developer 02
3b5c6086a9 feat(WebKey): Statische Klasse Formats zur Aufnahme von Schlüsselformaten hinzugefügt.
- Erweiterungsmethoden für die Formatierung von Tastenformaten hinzugefügt.
2024-12-11 16:21:31 +01:00
Developer 02
abda0d14e8 fix: Behebung der falschen Variablenbenennung bei der Zuweisung von codeType 2024-12-11 15:41:31 +01:00
Developer 02
569ebc87cc refactor(site.css): aktualisiert, um den Klassennamen tfa hinzuzufügen, um alle TFA-Seiten zu verwenden.
- Umbenennung des Klassennamens sms-tfa in tfa.
2024-12-11 15:32:21 +01:00
Developer 02
6b6c8e407c refactor(EnvelopeLocked): Umbenennung von AccessCodeName in CodeType.
- HomeController aktualisiert.
2024-12-11 15:22:33 +01:00
Developer 02
556d02870e refactor(CodeGeneratorParams): DefaultTotpSecretKeyLength auf 20 setzen. 2024-12-11 14:56:30 +01:00
Developer 02
c6fc665002 refactor(EnvelopeMailService): Hinzufügen von [TFA_EXPIRATION] über optionale Platzhalter in der Methode SendTFAQrCodeAsync. 2024-12-11 14:45:36 +01:00
Developer 02
030fd0e45b refactor(HomeController): Aktualisierung zur Verwendung der SendTFAQrCodeAsync-Methode anstelle von SendAsync durch den Maildienst. 2024-12-11 12:55:53 +01:00
Developer 02
31e647d3e5 feat(EnvelopeMailService): SendTFAQrCodeAsync als Schnittstellenimplementierung zum Senden von QR-Code-E-Mails hinzugefügt. 2024-12-11 12:53:45 +01:00
Developer 02
6dfdd48ec0 fix(IEnvelopeMailService): Optionale Platzhalter in die richtige Methode verschoben. 2024-12-11 12:16:53 +01:00
Developer 02
85cacc822d feat(EnvelopeMailService): Optionale Platzhalter als Wörterbuch hinzugefügt.
- Als Standard ist es null
2024-12-11 12:14:10 +01:00
Developer 02
535ca23c86 feat(HomeController): Befehl zum Senden von E-Mails hinzugefügt, um QR-Code zu senden.
- TotpSecret zu EmailTemplateType hinzugefügt.
2024-12-11 11:44:39 +01:00
Developer 02
7f1009e402 feat(mapping): Ignorierregel für EnvelopeReceivers in ReceiverReadDto-Mapping hinzugefügt.
- ReceiverReadDto-Mapping aktualisiert, um die Eigenschaft EnvelopeReceivers in der Entität Receiver zu ignorieren.
 - Stellt sicher, dass die Datenzuordnung sauber bleibt und keine unbeabsichtigten Eigenschaften einbezogen werden.
2024-12-11 10:02:53 +01:00
Developer 02
ea4b35f4b4 feat(HomeController): Anweisung hinzugefügt, um den geheimen Totp-Schlüssel zu aktualisieren, wenn er in Kraft ist. 2024-12-11 00:04:29 +01:00
Developer 02
8e1b4e0832 feat(ReceiverService): Generische Update-Methode hinzugefügt 2024-12-10 23:48:01 +01:00
Developer 02
4f5b8f9d76 feat(EnvelopeReceiverService): Optionale schreibgeschützte Eingabe als Schnittstellenimplementierung hinzugefügt.
- als Standard ist Nur-Lesen wahr.
2024-12-10 22:48:43 +01:00
Developer 02
f06b41492e feat(EnvelopeReceiverRepository): Standardwert readOnly als true aktualisiert. 2024-12-10 22:43:53 +01:00
Developer 02
f0f1275e75 feat(EnvelopeReceiverRepository): Optionale schreibgeschützte Eingabe als Schnittstellenimplementierung hinzugefügt.
- Standardmäßig ist schreibgeschützt falsch.
2024-12-10 22:33:32 +01:00
Developer 02
085f37de16 feat(CodeGenerator): Die Methoden GenerateTotpSecretKey, GenerateTotpQrCode und GenerateTotpQrCode wurden als Schnittstellenimplementierung hinzugefügt. 2024-12-10 22:05:52 +01:00
Developer 02
1657a99aa6 feat(DTOExtensions): Optionale minutesBeforeExpiration Eingaben zu IsTotpSecretInvalid und IsTotpSecretValid Methoden hinzugefügt. 2024-12-10 20:34:22 +01:00
Developer 02
ff6d27df8e feat(DTOExtensions): Erstellt, um Erweiterungsmethoden für DTOs hinzuzufügen.
- IsTotpSecretExpired, IsTotpSecretInvalid und IsTotpSecretValid Erweiterungsmethoden für ReceiverReadDto hinzugefügt, um den Zustand des geheimen Schlüssels zu behandeln.
2024-12-10 20:32:09 +01:00
Developer 02
76bd1a102f fix(EnvelopedLocked): asp-for tag helper verwendet, um die Daten der UserSelectSMS Eigenschaft zu erhalten.
- nullibility und null check von UserSelectSMS entfernt, weil es für tag helper nicht akzeptabel ist
2024-12-10 20:13:26 +01:00
Developer 02
6a6da39bc4 refactor(HomeController): Aktualisiert, um zu prüfen, ob der UserSelectSMS-Wert falsch ist.
- Relevante Variablen zu EnvelopeLocked.cshtml hinzugefügt
2024-12-10 18:48:05 +01:00
Developer 02
137d8e09d4 refactor(HomeController): Aktualisiert, um zu prüfen, ob der UserSelectSMS-Status null ist. 2024-12-10 18:24:29 +01:00
Developer 02
bed51992d2 feat(Auth): Proproty mit dem Namen AuthenticatorCode für die Verwendung von Authenticators hinzugefügt.
- Getter mit dem Namen HasAuthenticatorCode hinzugefügt.
 - Aktualisierte HasMulti und HasNone Getter Methoden, die dies berücksichtigen.
2024-12-10 18:08:01 +01:00
Developer 02
a371abaabe feat(Auth): Nullbare Eigenschaft namens 'UserSelectSMS' hinzugefügt.
- Sie wird standardmäßig als null zugewiesen.
 - Die Checkbox des Formulars in Envelope.cshtml wurde userSelectSMS genannt.
2024-12-10 17:47:45 +01:00
Developer 02
90c6e87224 feat(EnvelopeLocked): Kontrollkästchen hinzugefügt, um TFA per SMS auswählen zu können oder nicht, wenn tfa aktiviert ist.
- Das Kontrollkästchen ist standardmäßig nicht aktiviert.
 - Das Kontrollkästchen ist deaktiviert, wenn der Benutzer keine Telefonnummer hat.
2024-12-10 17:26:09 +01:00
Developer 02
4af1534194 fix(Receiver): Behoben TotpExpiration Eigenschaft Column atribute name. 2024-12-10 13:15:25 +01:00
Developer 02
f39ac57009 feat(EnvelopeReceiver): TFAEnabled-Eigenschaft zu Entität und Basis-Dto hinzugefügt. 2024-12-10 12:11:58 +01:00
Developer 02
88d01e4ac7 refactor(Receiver): TotpSecretkey und TotpExpiration Eigenschaften zu Entity und DTOs hinzugefügt. 2024-12-10 11:09:25 +01:00
Developer 02
85c33eb0f8 refactor(CacheExtensions): Umbenennung der GetOrCreate-Methoden in GetOrSet 2024-12-09 17:18:24 +01:00
Developer 02
1bc31fe0ee feat: GetOrCreate und GetOrCreateAsync-Methoden zu CacheExtensions hinzugefügt
- GetOrCreate und GetOrCreateAsync-Methoden hinzugefügt, um Caching mit optionalem Hintergrund-Caching zu ermöglichen.
- Methoden prüfen zuerst den Cache, und wenn der Wert nicht gefunden wird, wird der Wert mit einer bereitgestellten Fabrikfunktion erstellt und zwischengespeichert.
- Unterstützt asynchrones und synchrones Caching mit optionalen DistributedCacheEntryOptions.
2024-12-09 17:13:10 +01:00
Developer 02
2e790b4e4c Revert "feat: Hinzufügen und Konfigurieren von EntityFrameworkCore und UI-Paketen von Microsoft.AspNetCore.Identity."
This reverts commit 19485860a5.
2024-12-09 15:29:30 +01:00
Developer 02
19485860a5 feat: Hinzufügen und Konfigurieren von EntityFrameworkCore und UI-Paketen von Microsoft.AspNetCore.Identity. 2024-12-09 09:37:49 +01:00
Developer 02
e33d859603 refactor(ShowEnvelope): änderte die Farbe der Schaltfläche via Bootstrap in 2024-12-02 14:57:10 +01:00
Developer 02
46b8bde162 chore(Web): Aktualisiert auf 2.7.0. 2024-12-02 10:12:10 +01:00
Developer 02
a6468c2ff1 feat(HomeController): Funktionalität zur Überprüfung des SMS-Codes hinzugefügt 2024-11-30 04:23:24 +01:00
Developer 02
40a21a0b89 feat(EnvelopeReceiverCache): zum Abrufen und Setzen von Caches über Envelope Receiver unter Verwendung von Standard-Schlüsselwörtern als Schnittstellenimplementierung erstellt.
- Erstellte Optionen.
 - Zu DI hinzugefügt.
2024-11-30 03:46:40 +01:00
Developer 02
fa44b82493 feat(EnvelopeLocked): Timer mit CSS-Konfiguration und Javascript-Ereignis hinzugefügt.
- Ablauf über Home-Controller-Ansichtsdaten hinzugefügt
2024-11-30 01:56:02 +01:00
Developer 02
cdec5485c6 feat(GtxMessagingService): Zwischenspeicherung für SMS-Code und Ablauf des SMS-Codes mittels Envelope-Receiver-ID hinzugefügt
- Erweiterungsmethode für Zeitcaching hinzugefügt.
2024-11-29 16:25:20 +01:00
Developer 02
2a963a1861 feat(Web): Verteilter Sql Server-Cache hinzugefügt.
- Bat-Datei erstellt, um Tabelle für Cache zu erstellen.
 - Sql-Datei zum Erstellen einer Tabelle für den Cache erstellt
2024-11-29 14:08:07 +01:00
Developer 02
9d1a2e7254 refactor(HomeController): SMS-Code zum Senden hinzugefügt 2024-11-29 12:05:07 +01:00
Developer 02
b779ef6f0b feat(GtxMessagingService): Konfigurierte Codelänge über ioptions.
- Standardmäßig ist sie 5
2024-11-29 11:16:08 +01:00
Developer 02
0c81a86610 feat(GtxMessagingService): SendSmsCodeAsync mit Basisfunktionalität als Schnittstellenimplementierung hinzugefügt 2024-11-29 11:13:59 +01:00
Developer 02
b11f32bd3c feat: CodeGenerator-Service mit Konfigurationsunterstützung implementiert
- CodeGenerator-Service erstellt, der zufällige Codes basierend auf einem konfigurierbaren Zeichensatz generiert.
- IOptions<CodeGeneratorConfig> für DI-Injektion der Konfigurationseinstellungen integriert.
- Lazy-Initialisierung für statische Instanz des CodeGenerators hinzugefügt.
- Validierung hinzugefügt, um sicherzustellen, dass die Code-Länge größer als null ist.
- Geplante zukünftige Verbesserung: Random als Singleton injizieren, um die Multithreading-Performance zu verbessern.
2024-11-29 11:08:01 +01:00
Developer 02
b8d9963fac refactor(HomeController): ReadWithSecretByUuidSignatureAsync implementiert, um alle Informationen in einer einzigen Sql-Transaktion zu erhalten.
- Methode hinzugefügt, um geheimes dto in dto zu konvertieren
2024-11-29 10:22:11 +01:00
Developer 02
e77532ebfd feat(EnvelopeReceiverService): ReadWithSecretByUuidSignatureAsync zum Lesen mit Zugangscode und Telefonnummer hinzugefügt 2024-11-29 10:11:33 +01:00
Developer 02
ec37518245 feat(EnvelopeReceiverSecretDto): Erstellt als Erbe von EnvelopeReceiverDto, hinzugefügt AccessCode und PhoneNumber. 2024-11-29 10:07:09 +01:00
Developer 02
a1618fc8d0 refactor(HomeController): EnvelopeReceiverSecretDto zur Vereinfachung entfernt und direkt String verwendet 2024-11-29 10:01:28 +01:00
Developer 02
6b65fc28fd refactor(HomeController): log message format more appropriately written 2024-11-29 09:29:27 +01:00
Developer 02
a763fd6a24 feat(EnvelopeLocked): Textkörper und Fußzeile für SMS-Ansicht hinzugefügt. 2024-11-29 01:10:08 +01:00
Developer 02
28a8e20b63 feat(WebKey): Lokalisierungstasten sms tfa in EnvelopeLocked Ansicht hinzugefügt. 2024-11-29 00:45:21 +01:00
Developer 02
155f80e8b3 feat(EnvelopeLocked): Angepasste Icon-Farbe für sms TFA 2024-11-29 00:38:18 +01:00
Developer 02
d8f74971f3 feat(EnvelopeLocked): Der Parameter viaSms wurde hinzugefügt, um die Seite sowohl für die Überprüfung des Zugangscodes als auch des SMS-Codes zu verwenden.
- accessCodeName und accessCodeLabel wurden aktualisiert, um bedingt zugewiesen zu werden.
2024-11-29 00:26:29 +01:00
Developer 02
44dc7185c6 feat(Auth): Getter-Methoden zur Werteprüfung hinzugefügt 2024-11-28 23:57:18 +01:00
Developer 02
551ba595b6 refactor(EnvelopeLocked): envelopeRecevier-Modell aus der Ansicht entfernt. 2024-11-28 23:56:18 +01:00
Developer 02
4b77713df4 Merge branch 'master' into feat/two-factor-auth 2024-11-28 23:39:12 +01:00
Developer 02
f1ca1e9067 feat(Auth): Erstellung eines Authentifizierungsmodells anstelle der direkten Verwendung des Zugriffscodes. 2024-11-28 23:38:51 +01:00
Developer 02
0469f057c9 refactor(HomeController): Aktualisiert, um den Envelope-Empfänger als Modell zur EnvelopeLocked-Ansicht hinzuzufügen 2024-11-28 21:50:05 +01:00
Developer 02
b4a97abe6b feat(EnvelopeReceiverBase): HasPhoneNumber-Eigenschaft sowohl zur Entität als auch zum DTO hinzugefügt 2024-11-28 20:46:51 +01:00
Developer 02
423b293197 feat(MessagingService): Möglichkeit hinzugefügt, den Anbieter des Messaging-Servers zu benachrichtigen. 2024-11-27 17:46:32 +01:00
Developer 02
27618a343e feat(EnvelopeReceiverService): SendSmsAsync hinzugefügt, um SMS an den Benutzer über die Umschlag-Empfänger-ID mithilfe des Messaging-Services zu senden. 2024-11-27 17:35:38 +01:00
Developer 02
fe106c5a8c feat(EnvelopeReceiverBase): Eigenschaft „Telefonnummer“ hinzugefügt. 2024-11-27 17:09:17 +01:00
Developer 02
941b98b1a4 feat(SmsResponse): Erstellung eines Standardantwort-DTOs für SMS-Anfragen.
- GtxMessagingResponse für rohe dynamische Antwort erstellt.
 - Mapping-Profil hinzufügen
2024-11-27 15:13:41 +01:00
Developer 02
168c33bfea chore(Application): Core.Client auf 2.0.3 hochgerüstet 2024-11-26 23:58:07 +01:00
Developer 02
40c25ee111 fix(appsettings): Leerzeichen aus SmsConfig.QueryParams.from entfernt, da vom SMS-Dienst nicht erlaubt 2024-11-26 23:47:42 +01:00
Developer 02
608d79d35b chore(Web): upgraded to 2.6.0 2024-11-25 15:54:15 +01:00
Developer 02
62d396932d refactor(EnvelopeDocument): removed Filename, Filepath and FilenameOriginal properties. 2024-11-25 15:42:51 +01:00
Developer 02
62dcb41526 Refactor: Unnötige alte Fußzeilen aus den Ansichten „Umschlag abgelaufen“, „Abgelehnt“ und „Signiert“ entfernt. 2024-11-25 15:37:28 +01:00
Developer 02
360bb9b3d8 refactor(_layout.cshtml): Datenschutz-Link in der Fußzeile aktualisiert, unterstützt mehrere Sprachen 2024-11-25 15:24:18 +01:00
Developer 02
1f57914f9e refactor(_Layout.cshtml): aktualisiert, um Datenschutz und die Website der Digital Data GmbH bei Klick in einem neuen Tab zu öffnen. 2024-11-25 15:12:48 +01:00
Developer 02
9c431ddf56 refactor(Config): DocumentPathDmz, ExportPathDmz und DocumentPathMoveAftsend sowohl in der Entität als auch im DTO entfernt. 2024-11-25 14:58:32 +01:00
Developer 02
61ff2f8cde Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2024-11-25 14:42:56 +01:00
Developer 02
f2ee509727 chore: Upgrade von Core.Abstractions 2.2.1 und Core.Client auf 2.0.2 2024-11-25 14:40:52 +01:00
Developer 02
da06daf776 refactor(GtxMessagingService): Optionen für generische und dynamische Antworttypen zur SendSmsAsync-Methode hinzugefügt. 2024-11-25 14:13:34 +01:00
Developer 02
d3104500d4 refactor(Application): Aufrüstung von Core.Client auf 2.0.1 2024-11-25 14:08:47 +01:00
Developer 02
d23b8b9187 feat(TestMessagingController): initialized 2024-11-25 13:32:50 +01:00
Developer 02
ec206ab33a feat(DIExtensions): Gtx-Nachrichtendienst hinzugefügt 2024-11-25 13:27:09 +01:00
Developer 02
de6d4b9dd8 feat(DIExtensions): HTTP-Client-Dienst hinzugefügt 2024-11-25 13:25:22 +01:00
Developer 02
2943fe0e2d refactor(DIExtensions): Aktualisiert, um TryAddScoped anstelle von AddScoped für sicherere DI-Injektion zu verwenden. 2024-11-25 13:10:43 +01:00
Developer 02
33e99f584a feat(IMessagingService): Initialisiert und implementiert in GtxMessagingService 2024-11-25 13:07:39 +01:00
Developer 02
4a62ab0c56 feat(GtxMessagingService): Umbenennung von SendSms in SendSmsAsync 2024-11-25 13:01:43 +01:00
Developer 02
132acd35cc feat(GtxMessagingService): Empfänger- und Nachrichteneingaben zur SendSms-Methode über SMS-Parameter hinzugefügt 2024-11-25 13:01:12 +01:00
Developer 02
ed80839777 feat(SmsParams): Aktualisiert, um IHttpClientOptions zu implementieren 2024-11-25 12:47:30 +01:00
Developer01
2114615584 MS Removed PathColumns 2024-11-25 12:38:02 +01:00
Developer 02
6e6f3fd2ed chore: Aktualisierung von Core.Abstraction auf 2.2.0 2024-11-25 11:55:09 +01:00
Developer 02
5da306acd3 feat(GtxMessagingService): SendSms-Methode initialisiert und Authentifizierungspfad hinzugefügt. 2024-11-22 15:37:59 +01:00
Developer 02
18ef1d19b5 feat(GtxMessagingService): Eingespritzter Client.IHttpClientService 2024-11-22 15:20:19 +01:00
Developer 02
b76ebd2abc chore: Aktualisierung von Core.Abstraction auf 2.1.0
- Core.Client zur Anwendungsschicht hinzufügen
2024-11-22 14:57:20 +01:00
Developer 02
d55233061d feat: erweitere SmsParams um zusätzliche Eigenschaften für die SMS-API-Integration
- Neue erforderliche Eigenschaft `Endpoint` hinzugefügt, mit einem Standardwert für den GTX Messaging REST-API-Endpunkt.
- Optionale Eigenschaften wie `Format`, `Accept`, `ContentType` und SMS-spezifische Parameter (`From`, `Texts`, `DlrMask` usw.) hinzugefügt, um API-Anforderungen zu erfüllen.
- XML-Dokumentation mit API-Referenzlink aktualisiert, um besseren Kontext zu bieten.
- TODO hinzugefügt, um Regex-Validierung in `init`-Methoden zu implementieren und Eingabefehler zu reduzieren.
2024-11-21 18:25:14 +01:00
Developer 02
949001791c refactor: Umbenennung von GTX in Gtx und GTXMessagingConfig in SmsParams 2024-11-21 17:22:21 +01:00
Developer 02
30f93f2439 feat(GTXMessagingService): initialisiert mit Konfigurationsoption 2024-11-21 11:46:15 +01:00
Developer01
36ffb9511c Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2024-11-12 08:30:32 +01:00
Developer01
bf84d5c63a MS Common v1.5.9 email Valdiation, email Resending, Clientintegration 2024-11-12 08:30:14 +01:00
Developer01
57f8d0e398 MS Multiple Files Dialog, Qualifizierte Signatur weg 2024-11-08 11:48:58 +01:00
Developer 02
bb8bd8ed40 chore: Aktualisiert auf 2.5.0. 2024-11-06 00:37:57 +01:00
Developer 02
ba832acad3 feat(Main.cshtml): Bootstrap-Warnung hinzugefügt. 2024-11-06 00:31:25 +01:00
Developer 02
6490a3cb82 feat(home-description): gestaltetes CSS 2024-11-05 23:48:30 +01:00
Developer 02
4c077c90db feat(Main.cshtml): Typed.js für die Beschreibung der Startseite hinzugefügt. 2024-11-05 23:05:30 +01:00
Developer 02
9bd5e63128 feat(Typed.js): hinzugefügt 2024-11-04 17:21:47 +01:00
Developer 02
15ce7c9384 feat(localizer): Wert für HomePageDescription in Deutsch und Englisch hinzugefügt 2024-11-04 17:02:21 +01:00
Developer 02
8707a5cdb5 feat(HomeController): Kultur-Cookie zur Hauptseite hinzugefügt. 2024-11-04 16:28:37 +01:00
Developer 02
47c7070700 feat(Main.cshtml): sign_flow_min.svg hinzugefügt 2024-11-04 15:03:00 +01:00
Developer 02
fcc3223eb1 feat(HomeController): Endpunkt für Stammverzeichnis als Startseite hinzugefügt. 2024-11-04 14:30:09 +01:00
Developer 02
c4114a3800 feat(HomeController): UserCulture zu EnvelopeSigned hinzugefügt 2024-10-18 13:27:42 +02:00
Developer 02
977486bb7d chore: Aktualisiert auf Version 2.4.0.0. 2024-10-18 10:40:24 +02:00
Developer 02
6ccc0d2e0a refactor(HomeController): Aktualisiert, um ein Dokument aus der Datenbank über EnvelopeDocumentDto zu lesen, anstatt das Dokument aus dem Dateipfad mit envelopeOldService zu lesen 2024-10-18 10:34:51 +02:00
Developer 02
084a9b7db4 refactor(EnvelopeDocumentDto): ByteDta-Eigenschaft hinzugefügt 2024-10-18 10:21:01 +02:00
Developer 02
826844cf46 refactor(EnvelopeDocument): ByteDta-Eigenschaft hinzugefügt 2024-10-18 10:17:28 +02:00
Developer 02
39cff26f2d feat(site.css): Die Schriftgröße der Fußzeile und die Anordnung der Elemente wurden angepasst, um eine bessere Reaktionsfähigkeit zu gewährleisten. 2024-10-18 10:05:03 +02:00
Developer 02
1619801526 refactor(appsettings) verschiebt DispatcherConfig in die Nähe von Mail config 2024-10-18 09:55:24 +02:00
Developer 02
5a1263ee3a refactor(CookieConsentSettings ): Entfernen Sie es und es ist DI Injection 2024-10-18 09:50:53 +02:00
Developer 02
bc91baa4fa refactor(appsettings): verschiebe appsettings about developmentement nach appsettings.Dev 2024-10-18 09:46:34 +02:00
Developer 02
a4882a7bfa refactor(appsettings): Der Pfad zu den Protokolldateien wurde auf einen zentralen Speicherort aktualisiert. 2024-10-18 09:43:39 +02:00
Developer 02
c254b5b8df refactor(Envelope): Entfernte DmzMoved-Eigenschaft 2024-10-18 09:32:49 +02:00
Developer 02
66718a3fd8 chore: das Projekt auf 2.3 aktualisiert 2024-10-16 15:06:01 +02:00
Developer 02
99fc2aecd9 refactor(app.js) : Entfernen von /ReadOnly beim Kopieren der Url 2024-10-16 14:56:54 +02:00
Developer 02
a41d03aed5 feat(HomeController): zentralisierte Standard-Kultur-Cookie-Zuweisung. 2024-10-16 14:42:58 +02:00
Developer 02
6d14b79c43 refactor(flag-dropdown): in die footer verschoben 2024-10-16 13:48:06 +02:00
Developer 02
faeac8f290 refactor(EnvelopeRejected): Unnötige _CookieConsentPartial entfernen 2024-10-16 11:58:23 +02:00
Developer 02
d172faacf3 refactor(ShowEnvelope): Unnötige _CookieConsentPartial entfernen 2024-10-16 11:56:54 +02:00
Developer 02
35d6beb3cb feat(ShowEnvelope): Wenn ReadOnly, machen Sie die Kopfzeile ViewDoc anstelle von SignDoc.
- ViewDoc-Schlüssel zu resx in beiden Sprachen hinzugefügt
2024-10-16 11:55:48 +02:00
Developer 02
7ff787ec28 refactor(_layout): City-Regex-Prüfung ignorieren, wenn IS_MOBILE_DEVICE
- IS_MOBILE_DEVICE als globalen konstanten Wert hinzugefügt
 - DEVICE_TYPE geändert in DEVICE_SCREEN_TYPE
 - IS_DESKTOP zu IS_DESKTOP_SIZE geändert
2024-10-16 11:32:25 +02:00
Developer 02
f6fc850a20 fix: Pull-Konflikte in Constant.vb gelöst. 2024-10-16 10:00:20 +02:00
Developer 02
04b8d0ef5d fix: Pull-Konflikte in Constant.vb gelöst. 2024-10-16 09:43:41 +02:00
Developer01
683ff03a0f Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2024-10-13 17:38:48 +02:00
Developer01
c9ba7eeaf9 MS 2024-10-13 17:38:31 +02:00
Developer01
6e7670f667 Service GDPicture 2024-09-24 17:48:29 +02:00
2225 changed files with 22267 additions and 2599 deletions

View File

@@ -0,0 +1,19 @@
namespace EnvelopeGenerator.Application.Configurations
{
public class AuthenticatorParams
{
public string CharPool { get; init; } = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789012345678901234567890123456789";
//TODO: Increase the DefaultTotpSecretKeyLength (e.g. to 32) but make sure that the QR code is generated correctly and can be scanned by the authenticator.
public int DefaultTotpSecretKeyLength { get; init; } = 20;
public string TotpIssuer { get; init; } = "signFlow";
/// <summary>
/// 0 is user email, 1 is secret key and 2 is issuer.
/// </summary>
public string TotpUrlFormat { get; init; } = "otpauth://totp/{0}?secret={1}&issuer={2}";
public int TotpQRPixelsPerModule { get; init; } = 20;
}
}

View File

@@ -1,13 +0,0 @@
namespace EnvelopeGenerator.Application.Configurations
{
public class DispatcherConfig
{
public int SendingProfile { get; init; } = 1;
public string AddedWho { get; init; } = "DDEnvelopGenerator";
public int ReminderTypeId { get; init; } = 202377;
public string EmailAttmt1 { get; init; } = string.Empty;
}
}

View File

@@ -0,0 +1,12 @@
namespace EnvelopeGenerator.Application.Configurations;
public class DispatcherParams
{
public int SendingProfile { get; init; } = 1;
public string AddedWho { get; init; } = "DDEnvelopGenerator";
public int ReminderTypeId { get; init; } = 202377;
public string EmailAttmt1 { get; init; } = string.Empty;
}

View File

@@ -0,0 +1,20 @@
using DigitalData.Core.Abstractions.Client;
namespace EnvelopeGenerator.Application.Configurations;
/// <summary>
/// https://www.gtx-messaging.com/en/api-docs/sms-rest-api/
/// </summary>
public class GtxMessagingParams : IHttpClientOptions
{
public required string Uri { get; init; }
public string? Path { get; init; }
public Dictionary<string, object>? Headers { get; init; }
public Dictionary<string, object?>? QueryParams { get; init; }
public string RecipientQueryParamName { get; init; } = "to";
public string MessageQueryParamName { get; init; } = "text";
}

View File

@@ -1,7 +0,0 @@
namespace EnvelopeGenerator.Application.Configurations
{
public class MailConfig
{
public required Dictionary<string, string> Placeholders { get; init; }
}
}

View File

@@ -0,0 +1,6 @@
namespace EnvelopeGenerator.Application.Configurations;
public class MailParams
{
public required Dictionary<string, string> Placeholders { get; init; }
}

View File

@@ -0,0 +1,49 @@
using OtpNet;
using System.Globalization;
namespace EnvelopeGenerator.Application.Configurations
{
public class TotpSmsParams
{
/// <summary>
/// The unit is second.
/// </summary>
public int TotpStep { get; init; } = 90;
public string Format { get; init; } = "Ihr 2FA-Passwort lautet {0}. Gültig bis {1}";
public ExpirationHandler Expiration { get; init; } = new();
public VerificationWindow? TotpVerificationWindow { get; private init; } = VerificationWindow.RfcSpecifiedNetworkDelay;
private IEnumerable<int>? _tvwParams;
public IEnumerable<int>? TotpVerificationWindowParams
{
get => _tvwParams;
init
{
_tvwParams = value;
if(_tvwParams is not null)
TotpVerificationWindow = new(previous: _tvwParams.ElementAtOrDefault(0), future: _tvwParams.ElementAtOrDefault(0));
}
}
public class ExpirationHandler
{
public string CacheKeyFormat { get; init; } = "e{0}_r{1}_sms_code_expiration";
public string Format { get; init; } = "HH:mm:ss";
public string CultureName
{
get => _cultureInfo.Name;
init => _cultureInfo = new(value);
}
private CultureInfo _cultureInfo = new("de-DE");
public CultureInfo CultureInfo => _cultureInfo;
}
}
}

View File

@@ -0,0 +1,19 @@
using OtpNet;
namespace EnvelopeGenerator.Application.Contracts
{
public interface IAuthenticator
{
string GenerateCode(int length);
string GenerateTotpSecretKey(int? length = null);
byte[] GenerateTotpQrCode(string userEmail, string secretKey, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null);
byte[] GenerateTotpQrCode(string userEmail, int? length = null, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null);
string GenerateTotp(string secretKey, int step = 30);
bool VerifyTotp(string totpCode, string secretKey, int step = 30, VerificationWindow? window = null);
}
}

View File

@@ -8,10 +8,12 @@ namespace EnvelopeGenerator.Application.Contracts
{ {
public interface IEnvelopeMailService : IEmailOutService public interface IEnvelopeMailService : IEmailOutService
{ {
Task<DataResult<int>> SendAsync(EnvelopeReceiverDto envelopeReceiverDto, Constants.EmailTemplateType tempType); Task<DataResult<int>> SendAsync(EnvelopeReceiverDto envelopeReceiverDto, Constants.EmailTemplateType tempType, Dictionary<string, object>? optionalPlaceholders = null);
Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto); Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto, Dictionary<string, object>? optionalPlaceholders = null);
Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto); Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
Task<DataResult<int>> SendTFAQrCodeAsync(EnvelopeReceiverDto envelopeReceiverDto);
} }
} }

View File

@@ -1,7 +1,7 @@
using DigitalData.Core.Abstractions.Application; using DigitalData.Core.Abstractions.Application;
using DigitalData.Core.DTO; using DigitalData.Core.DTO;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver; using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Application.DTOs.Messaging;
using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Application.Contracts namespace EnvelopeGenerator.Application.Contracts
@@ -9,15 +9,17 @@ namespace EnvelopeGenerator.Application.Contracts
public interface IEnvelopeReceiverService : IBasicCRUDService<EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)> 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<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true);
Task<DataResult<IEnumerable<EnvelopeReceiverSecretDto>>> ReadSecretByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true); Task<DataResult<IEnumerable<string?>>> ReadAccessCodeByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true);
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true); Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true);
Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true); Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true); Task<DataResult<EnvelopeReceiverSecretDto>> ReadWithSecretByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
Task<DataResult<string>> ReadAccessCodeByIdAsync(int envelopeId, int receiverId); Task<DataResult<string>> ReadAccessCodeByIdAsync(int envelopeId, int receiverId);
@@ -30,5 +32,7 @@ namespace EnvelopeGenerator.Application.Contracts
Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses); Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses);
Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail); Task<DataResult<string?>> ReadLastUsedReceiverNameByMail(string mail);
Task<DataResult<SmsResponse>> SendSmsAsync(string envelopeReceiverId, string message);
} }
} }

View File

@@ -0,0 +1,17 @@
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using EnvelopeGenerator.Application.DTOs.Messaging;
namespace EnvelopeGenerator.Application.Contracts;
public interface IEnvelopeSmsHandler
{
/// <summary>
/// If expiration is passed then, sends sms and returns smsResponse and up-to-date expiration; otherwise send expiration.
/// </summary>
/// <param name="er_secret"></param>
/// <param name="cToken"></param>
/// <returns></returns>
Task<(SmsResponse? SmsResponse, DateTime Expiration)> SendTotpAsync(EnvelopeReceiverSecretDto er_secret, CancellationToken cToken = default);
bool VerifyTotp(string totpCode, string secretKey);
}

View File

@@ -1,24 +0,0 @@
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Security.Cryptography;
namespace EnvelopeGenerator.Application.Contracts
{
public interface IJWTService<TClaimValue>
{
public static SymmetricSecurityKey GenerateSecurityKey(int byteSize = 32)
{
using var rng = RandomNumberGenerator.Create();
var randomBytes = new byte[byteSize];
rng.GetBytes(randomBytes);
var securityKey = new SymmetricSecurityKey(randomBytes);
return securityKey;
}
string GenerateToken(TClaimValue claimValue);
JwtSecurityToken? ReadSecurityToken(string token);
}
}

View File

@@ -1,4 +1,5 @@
using DigitalData.Core.Abstractions.Application; using DigitalData.Core.Abstractions;
using DigitalData.Core.Abstractions.Application;
using DigitalData.Core.DTO; using DigitalData.Core.DTO;
using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Application.DTOs.Receiver;
using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Domain.Entities;
@@ -7,8 +8,10 @@ namespace EnvelopeGenerator.Application.Contracts
{ {
public interface IReceiverService : ICRUDService<ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int> public interface IReceiverService : ICRUDService<ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
{ {
public Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null); Task<DataResult<ReceiverReadDto>> ReadByAsync(string? emailAddress = null, string? signature = null);
public Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null); Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null);
Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto) where TUpdateDto : IUnique<int>;
} }
} }

View File

@@ -0,0 +1,11 @@
using EnvelopeGenerator.Application.DTOs.Messaging;
namespace EnvelopeGenerator.Application.Contracts;
//TODO: move to DigitalData.Core
public interface ISmsSender
{
string ServiceProvider { get; }
Task<SmsResponse> SendSmsAsync(string recipient, string message);
}

View File

@@ -1,63 +0,0 @@
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"));
}
}

View File

@@ -1,4 +1,5 @@
using DigitalData.Core.Abstractions; using DigitalData.Core.Abstractions;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
namespace EnvelopeGenerator.Application.DTOs namespace EnvelopeGenerator.Application.DTOs
@@ -8,11 +9,9 @@ namespace EnvelopeGenerator.Application.DTOs
int SendingProfile, int SendingProfile,
string SignatureHost, string SignatureHost,
string ExternalProgramName, string ExternalProgramName,
string ExportPath, string ExportPath) : IUnique<int>
string DocumentPathDmz,
string ExportPathDmz,
string DocumentPathMoveAftsend) : IUnique<int>
{ {
[NotMapped]
[JsonIgnore] [JsonIgnore]
[Obsolete("Configuration does not have an ID; it represents a single table in the database.")] [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."); public int Id => throw new InvalidOperationException("This configuration does not support an ID as it represents a single row in the database.");

View File

@@ -7,6 +7,7 @@ namespace EnvelopeGenerator.Application.DTOs
int Id, int Id,
int EnvelopeId, int EnvelopeId,
DateTime AddedWhen, DateTime AddedWhen,
IEnumerable<DocumentReceiverElementDto>? Elements byte[]? ByteData = null,
IEnumerable<DocumentReceiverElementDto>? Elements = null
) : IUnique<int>; ) : IUnique<int>;
} }

View File

@@ -51,7 +51,9 @@ namespace EnvelopeGenerator.Application.DTOs
public int? ExpiresWarningWhenDays { get; set; } public int? ExpiresWarningWhenDays { get; set; }
public bool DmzMoved { get; set; } public bool TFAEnabled { get; init; }
public bool DmzMoved { get; set; }
public UserReadDto? User { get; set; } public UserReadDto? User { get; set; }
public EnvelopeType? EnvelopeType { get; set; } public EnvelopeType? EnvelopeType { get; set; }

View File

@@ -25,5 +25,7 @@ namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiver
public DateTime AddedWhen { get; init; } public DateTime AddedWhen { get; init; }
public DateTime? ChangedWhen { get; init; } public DateTime? ChangedWhen { get; init; }
public bool HasPhoneNumber { get; init; }
} }
} }

View File

@@ -1,4 +1,9 @@
namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiver namespace EnvelopeGenerator.Application.DTOs.EnvelopeReceiver
{ {
public record EnvelopeReceiverSecretDto(string? AccessCode) : EnvelopeReceiverDto; public record EnvelopeReceiverSecretDto() : EnvelopeReceiverDto()
{
public string? AccessCode { get; init; }
public string? PhoneNumber { get; init; }
}
} }

View File

@@ -0,0 +1,4 @@
namespace EnvelopeGenerator.Application.DTOs.Messaging
{
public class GtxMessagingResponse : Dictionary<string, object?> { }
}

View File

@@ -0,0 +1,11 @@
namespace EnvelopeGenerator.Application.DTOs.Messaging
{
public record SmsResponse
{
public required bool Ok { get; init; }
public bool Failed => !Ok;
public dynamic? Errors { get; init; }
}
}

View File

@@ -4,7 +4,7 @@ using System.Text;
namespace EnvelopeGenerator.Application.DTOs.Receiver namespace EnvelopeGenerator.Application.DTOs.Receiver
{ {
public record ReceiverCreateDto([EmailAddress] string EmailAddress) public record ReceiverCreateDto([EmailAddress] string EmailAddress, string? TotpSecretkey = null)
{ {
public string Signature => sha256HexOfMail.Value; public string Signature => sha256HexOfMail.Value;

View File

@@ -1,19 +1,24 @@
using DigitalData.Core.DTO; using DigitalData.Core.Abstractions;
using DigitalData.Core.DTO;
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver; using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
namespace EnvelopeGenerator.Application.DTOs.Receiver namespace EnvelopeGenerator.Application.DTOs.Receiver;
{
public record ReceiverReadDto(
int Id,
string EmailAddress,
string Signature,
DateTime AddedWhen
) : BaseDTO<int>(Id)
{
[JsonIgnore]
public IEnumerable<EnvelopeReceiverBasicDto>? EnvelopeReceivers { get; init; }
public string? LastUsedName => EnvelopeReceivers?.LastOrDefault()?.Name; public record ReceiverReadDto(
}; int Id,
} string EmailAddress,
string Signature,
DateTime AddedWhen
) : BaseDTO<int>(Id), IUnique<int>
{
[JsonIgnore]
public IEnumerable<EnvelopeReceiverBasicDto>? EnvelopeReceivers { get; init; }
public string? LastUsedName => EnvelopeReceivers?.LastOrDefault()?.Name;
public string? TotpSecretkey { get; set; } = null;
public DateTime? TfaRegDeadline { get; set; }
};

View File

@@ -1,6 +1,5 @@
using DigitalData.Core.Abstractions; using DigitalData.Core.Abstractions;
namespace EnvelopeGenerator.Application.DTOs.Receiver namespace EnvelopeGenerator.Application.DTOs.Receiver;
{
public record ReceiverUpdateDto(int Id) : IUnique<int>; public record ReceiverUpdateDto(int Id, string? TotpSecretkey = null, DateTime? TfaRegDeadline = null) : IUnique<int>;
}

View File

@@ -1,56 +1,60 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<None Remove="Resources\Model.Designer.vb" /> <None Remove="Resources\Model.Designer.vb" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" /> <PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="DigitalData.Core.Abstractions" Version="2.0.0" /> <PackageReference Include="DigitalData.Core.Abstractions" Version="2.2.1" />
<PackageReference Include="DigitalData.Core.Application" 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.Core.Client" Version="2.0.3" />
<PackageReference Include="DigitalData.EmailProfilerDispatcher" Version="2.0.0" /> <PackageReference Include="DigitalData.Core.DTO" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.18" /> <PackageReference Include="DigitalData.EmailProfilerDispatcher" Version="2.0.0" />
<PackageReference Include="UserManager.Application" Version="2.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.18" />
<PackageReference Include="UserManager.Infrastructure" Version="2.0.0" /> <PackageReference Include="Otp.NET" Version="1.4.0" />
</ItemGroup> <PackageReference Include="QRCoder" Version="1.6.0" />
<PackageReference Include="QRCoder-ImageSharp" Version="0.10.0" />
<PackageReference Include="UserManager.Application" Version="2.0.0" />
<PackageReference Include="UserManager.Infrastructure" Version="2.0.0" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\EnvelopeGenerator.Extensions\EnvelopeGenerator.Extensions.csproj" /> <ProjectReference Include="..\EnvelopeGenerator.Extensions\EnvelopeGenerator.Extensions.csproj" />
<ProjectReference Include="..\EnvelopeGenerator.Infrastructure\EnvelopeGenerator.Infrastructure.csproj" /> <ProjectReference Include="..\EnvelopeGenerator.Infrastructure\EnvelopeGenerator.Infrastructure.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="Resources\Model.Designer.cs"> <Compile Update="Resources\Model.Designer.cs">
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Model.resx</DependentUpon> <DependentUpon>Model.resx</DependentUpon>
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Update="Resources\Model.en.resx"> <EmbeddedResource Update="Resources\Model.en.resx">
<CustomToolNamespace>My.Resources</CustomToolNamespace> <CustomToolNamespace>My.Resources</CustomToolNamespace>
<LastGenOutput>Model.en.Designer.vb</LastGenOutput> <LastGenOutput>Model.en.Designer.vb</LastGenOutput>
<Generator>PublicResXFileCodeGenerator</Generator> <Generator>PublicResXFileCodeGenerator</Generator>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Update="Resources\Model.resx"> <EmbeddedResource Update="Resources\Model.resx">
<CustomToolNamespace>My.Resources</CustomToolNamespace> <CustomToolNamespace>My.Resources</CustomToolNamespace>
<LastGenOutput>Model.Designer.cs</LastGenOutput> <LastGenOutput>Model.Designer.cs</LastGenOutput>
<Generator>PublicResXFileCodeGenerator</Generator> <Generator>PublicResXFileCodeGenerator</Generator>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Update="Resources\Resource.de-DE.resx"> <EmbeddedResource Update="Resources\Resource.de-DE.resx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Update="Resources\Resource.en-US.resx"> <EmbeddedResource Update="Resources\Resource.en-US.resx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,131 @@
using Microsoft.Extensions.Caching.Distributed;
namespace EnvelopeGenerator.Application.Extensions
{
public static class CacheExtensions
{
public static Task SetLongAsync(this IDistributedCache cache, string key, long value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> options is null
? cache.SetAsync(key, BitConverter.GetBytes(value), token: cToken)
: cache.SetAsync(key, BitConverter.GetBytes(value), options: options, token: cToken);
public static async Task<long?> GetLongAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : BitConverter.ToInt64(value, 0);
}
public static Task SetDateTimeAsync(this IDistributedCache cache, string key, DateTime value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> cache.SetLongAsync(key: key, value: value.Ticks, options: options, cToken: cToken);
public static async Task<DateTime?> GetDateTimeAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : new(BitConverter.ToInt64(value, 0));
}
public static Task SetTimeSpanAsync(this IDistributedCache cache, string key, TimeSpan value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> cache.SetLongAsync(key: key, value: value.Ticks, options: options, cToken);
public static async Task<TimeSpan?> GetTimeSpanAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : new(BitConverter.ToInt64(value, 0));
}
//TODO: use code generator
#region GetOrSetAsync
#region string
public static async Task<string> GetOrSetAsync(this IDistributedCache cache, string key, Func<string> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
var value = await cache.GetStringAsync(key, cToken);
if (value is null)
{
// create new and save
value = factory();
Task CacheAsync() => options is null
? cache.SetStringAsync(key, value, cToken)
: cache.SetStringAsync(key, value, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
}
return value;
}
public static async Task<string> GetOrSetAsync(this IDistributedCache cache, string key, Func<Task<string>> factoryAsync, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
var value = await cache.GetStringAsync(key, cToken);
if(value is null)
{
// create new and save
value = await factoryAsync();
Task CacheAsync() => options is null
? cache.SetStringAsync(key: key, value: value, token: cToken)
: cache.SetStringAsync(key: key, value: value, options: options, token: cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
}
return value;
}
#endregion
#region DateTime
public static async Task<DateTime> GetOrSetAsync(this IDistributedCache cache, string key, Func<DateTime> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
if (await cache.GetDateTimeAsync(key, cToken) is DateTime dateTimeValue)
return dateTimeValue;
else
{
// create new and save
var newValue = factory();
Task CacheAsync() => options is null
? cache.SetDateTimeAsync(key, newValue, cToken: cToken)
: cache.SetDateTimeAsync(key, newValue, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
return newValue;
}
}
public static async Task<DateTime> GetOrSetAsync(this IDistributedCache cache, string key, Func<Task<DateTime>> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
if (await cache.GetDateTimeAsync(key, cToken) is DateTime dateTimeValue)
return dateTimeValue;
else
{
// create new and save
var newValue = await factory();
Task CacheAsync() => options is null
? cache.SetDateTimeAsync(key, newValue, cToken: cToken)
: cache.SetDateTimeAsync(key, newValue, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
return newValue;
}
}
#endregion
#endregion
}
}

View File

@@ -0,0 +1,69 @@
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;
using Microsoft.Extensions.DependencyInjection.Extensions;
using DigitalData.Core.Client;
using QRCoder;
namespace EnvelopeGenerator.Application.Extensions;
public static class DIExtensions
{
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfiguration config)
{
//Inject CRUD Service and repositoriesad
services.TryAddScoped<IConfigRepository, ConfigRepository>();
services.TryAddScoped<IDocumentReceiverElementRepository, DocumentReceiverElementRepository>();
services.TryAddScoped<IEnvelopeDocumentRepository, EnvelopeDocumentRepository>();
services.TryAddScoped<IConfigRepository, ConfigRepository>();
services.TryAddScoped<IDocumentReceiverElementRepository, DocumentReceiverElementRepository>();
services.TryAddScoped<IDocumentStatusRepository, DocumentStatusRepository>();
services.TryAddScoped<IEmailTemplateRepository, EmailTemplateRepository>();
services.TryAddScoped<IEnvelopeRepository, EnvelopeRepository>();
services.TryAddScoped<IEnvelopeCertificateRepository, EnvelopeCertificateRepository>();
services.TryAddScoped<IEnvelopeDocumentRepository, EnvelopeDocumentRepository>();
services.TryAddScoped<IEnvelopeHistoryRepository, EnvelopeHistoryRepository>();
services.TryAddScoped<IEnvelopeReceiverRepository, EnvelopeReceiverRepository>();
services.TryAddScoped<IEnvelopeTypeRepository, EnvelopeTypeRepository>();
services.TryAddScoped<IReceiverRepository, ReceiverRepository>();
services.TryAddScoped<IUserReceiverRepository, UserReceiverRepository>();
services.TryAddScoped<IEnvelopeReceiverReadOnlyRepository, EnvelopeReceiverReadOnlyRepository>();
services.TryAddScoped<IConfigService, ConfigService>();
services.TryAddScoped<IDocumentReceiverElementService, DocumentReceiverElementService>();
services.TryAddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
services.TryAddScoped<IEnvelopeHistoryService, EnvelopeHistoryService>();
services.TryAddScoped<IDocumentStatusService, DocumentStatusService>();
services.TryAddScoped<IEmailTemplateService, EmailTemplateService>();
services.TryAddScoped<IEnvelopeService, EnvelopeService>();
services.TryAddScoped<IEnvelopeCertificateService, EnvelopeCertificateService>();
services.TryAddScoped<IEnvelopeDocumentService, EnvelopeDocumentService>();
services.TryAddScoped<IEnvelopeReceiverService, EnvelopeReceiverService>();
services.TryAddScoped<IEnvelopeTypeService, EnvelopeTypeService>();
services.TryAddScoped<IReceiverService, ReceiverService>();
services.TryAddScoped<IUserReceiverService, UserReceiverService>();
services.TryAddScoped<IEnvelopeReceiverReadOnlyService, EnvelopeReceiverReadOnlyService>();
//Auto mapping profiles
services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly);
services.AddAutoMapper(typeof(UserMappingProfile).Assembly);
services.Configure<DispatcherParams>(config.GetSection(nameof(DispatcherParams)));
services.Configure<MailParams>(config.GetSection(nameof(MailParams)));
services.Configure<AuthenticatorParams>(config.GetSection(nameof(AuthenticatorParams)));
services.Configure<TotpSmsParams>(config.GetSection(nameof(TotpSmsParams)));
services.AddHttpClientService<GtxMessagingParams>(config.GetSection(nameof(GtxMessagingParams)));
services.TryAddSingleton<ISmsSender, GTXSmsSender>();
services.TryAddSingleton<IEnvelopeSmsHandler, EnvelopeSmsHandler>();
services.TryAddSingleton<IAuthenticator, Authenticator>();
services.TryAddSingleton<QRCodeGenerator>();
return services;
}
}

View File

@@ -0,0 +1,14 @@
using EnvelopeGenerator.Application.DTOs.Messaging;
namespace EnvelopeGenerator.Application.Extensions
{
public static class MappingExtensions
{
public static bool Ok(this GtxMessagingResponse gtxMessagingResponse)
=> gtxMessagingResponse.TryGetValue("message-status", out var status)
&& status?.ToString()?.ToLower() == "ok";
public static string ToBase64String(this byte[] bytes)
=> Convert.ToBase64String(bytes);
}
}

View File

@@ -14,6 +14,7 @@
public static readonly string PossibleSecurityBreach = nameof(PossibleSecurityBreach); public static readonly string PossibleSecurityBreach = nameof(PossibleSecurityBreach);
public static readonly string WrongEnvelopeReceiverId = nameof(WrongEnvelopeReceiverId); public static readonly string WrongEnvelopeReceiverId = nameof(WrongEnvelopeReceiverId);
public static readonly string EnvelopeOrReceiverNonexists = nameof(EnvelopeOrReceiverNonexists); public static readonly string EnvelopeOrReceiverNonexists = nameof(EnvelopeOrReceiverNonexists);
public static readonly string PhoneNumberNonexists = nameof(PhoneNumberNonexists);
public static readonly string Default = nameof(Default); public static readonly string Default = nameof(Default);
} }
} }

View File

@@ -3,7 +3,9 @@ using EnvelopeGenerator.Application.DTOs;
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory; using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver; using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly; using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
using EnvelopeGenerator.Application.DTOs.Messaging;
using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Application.DTOs.Receiver;
using EnvelopeGenerator.Application.Extensions;
using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Application.MappingProfiles namespace EnvelopeGenerator.Application.MappingProfiles
@@ -43,13 +45,20 @@ namespace EnvelopeGenerator.Application.MappingProfiles
CreateMap<EnvelopeHistoryCreateDto, EnvelopeHistory>(); CreateMap<EnvelopeHistoryCreateDto, EnvelopeHistory>();
CreateMap<EnvelopeReceiverDto, EnvelopeReceiver>(); CreateMap<EnvelopeReceiverDto, EnvelopeReceiver>();
CreateMap<EnvelopeTypeDto, EnvelopeType>(); CreateMap<EnvelopeTypeDto, EnvelopeType>();
CreateMap<ReceiverReadDto, Receiver>(); CreateMap<ReceiverReadDto, Receiver>().ForMember(rcv => rcv.EnvelopeReceivers, rcvReadDto => rcvReadDto.Ignore());
CreateMap<ReceiverCreateDto, Receiver>(); CreateMap<ReceiverCreateDto, Receiver>();
CreateMap<ReceiverUpdateDto, Receiver>(); CreateMap<ReceiverUpdateDto, Receiver>();
CreateMap<UserReceiverDto, UserReceiver>(); CreateMap<UserReceiverDto, UserReceiver>();
CreateMap<EnvelopeReceiverBase, EnvelopeReceiverBasicDto>(); CreateMap<EnvelopeReceiverBase, EnvelopeReceiverBasicDto>();
CreateMap<EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnly>(); CreateMap<EnvelopeReceiverReadOnlyCreateDto, EnvelopeReceiverReadOnly>();
CreateMap<EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly>(); CreateMap<EnvelopeReceiverReadOnlyUpdateDto, EnvelopeReceiverReadOnly>();
// Messaging mappings
// for GTX messaging
CreateMap<GtxMessagingResponse, SmsResponse>()
.ConstructUsing(gtxRes => gtxRes.Ok()
? new SmsResponse() { Ok = true }
: new SmsResponse() { Ok = false, Errors = gtxRes });
} }
} }
} }

View File

@@ -156,27 +156,63 @@
<data name="Hello" xml:space="preserve"> <data name="Hello" xml:space="preserve">
<value>Hallo</value> <value>Hallo</value>
</data> </data>
<data name="LocakedOpen" xml:space="preserve"> <data name="HomePageDescription" xml:space="preserve">
<value>Öffnen</value> <value>Das digitale Unterschriftenportal ist eine Plattform, die entwickelt wurde, um Ihre Dokumente sicher zu unterschreiben und zu verwalten. Mit seiner benutzerfreundlichen Oberfläche können Sie Ihre Dokumente schnell hochladen, die Unterschriftsprozesse verfolgen und Ihre digitalen Unterschriftenanwendungen einfach durchführen. Dieses Portal beschleunigt Ihren Arbeitsablauf mit rechtlich gültigen Unterschriften und erhöht gleichzeitig die Sicherheit Ihrer Dokumente.</value>
</data> </data>
<data name="LocationWarning" xml:space="preserve"> <data name="LocationWarning" xml:space="preserve">
<value>Bitte überprüfen Sie die Standortinformationen. Wenn sie falsch sind, korrigieren Sie diese bitte.</value> <value>Bitte überprüfen Sie die Standortinformationen. Wenn sie falsch sind, korrigieren Sie diese bitte.</value>
</data> </data>
<data name="LockedAccessCode" xml:space="preserve"> <data name="LockedBodyAccess" xml:space="preserve">
<value>Wir senden Ihnen nun einen Zugriffscode an Ihre hinterlegte Email-Adresse. Dies kann evtl. einige Minuten dauern!</value>
</data>
<data name="LockedBodyAuthenticator" xml:space="preserve">
<value>Bitte geben Sie den in Ihrer Authenticator-App angegebenen TOTP-Code ein.</value>
</data>
<data name="LockedBodyAuthenticatorNew" xml:space="preserve">
<value>Wir haben den QR-Code an Ihre E-Mail-Adresse gesendet. Ihr QR-Code ist bis {0} gültig. Sie können ihn für alle Umschläge verwenden, die Sie an diese E-Mail-Adresse erhalten.</value>
</data>
<data name="LockedBodySms" xml:space="preserve">
<value>Wir haben soeben den Zugangscode als SMS an die von Ihnen angegebene Telefonnummer gesendet.</value>
</data>
<data name="LockedCodeLabelAccess" xml:space="preserve">
<value>Zugriffscode</value> <value>Zugriffscode</value>
</data> </data>
<data name="LockedBody" xml:space="preserve"> <data name="LockedCodeLabelAuthenticator" xml:space="preserve">
<value>Wir haben Ihnen gerade den Zugriffscode an die hinterlegte Email Adresse gesendet. Dies kann evtl. einige Minuten dauern.</value> <value>TOTP</value>
</data> </data>
<data name="LockedFooterBody" xml:space="preserve"> <data name="LockedCodeLabelSms" xml:space="preserve">
<value>Bitte überprüfen Sie Ihr Email Postfach inklusive Spam-Ordner. Sie können auch den Absender bitten, Ihnen den Code auf anderem Wege zukommen zu lassen.</value> <value>SMS-Code</value>
</data> </data>
<data name="LockedFooterTitle" xml:space="preserve"> <data name="LockedFooterBodyAccess" xml:space="preserve">
<value>Bitte überprüfen Sie Ihr Email Postfach inklusive Spam-Ordner. Sie können auch den Absender &lt;a class="mail-link" href="mailto:{0}?subject={1}&amp;body={2}" target="_blank"&gt;{0}&lt;/a&gt; bitten, Ihnen den Code auf anderem Wege zukommen zu lassen.</value>
</data>
<data name="LockedFooterBodyAuthenticator" xml:space="preserve">
<value>Der neue QR-Code wird nur einmal für einen bestimmten Zeitraum gesendet und nach dem Scannen in Ihrer Authenticator-App gespeichert. Er kann für alle Umschläge verwendet werden, die an dieselbe E-Mail-Adresse gesendet werden, bis er abläuft. Wenn Sie die QR-Code-Mail nicht erhalten oder sie sowohl aus der Mail als auch aus authenticator löschen, kontaktieren Sie bitte den Absender.</value>
</data>
<data name="LockedFooterBodySms" xml:space="preserve">
<value>Sie können den Absender bitten, Ihre Rufnummer zu überprüfen. Die Telefonnummer muss mit der Ortsvorwahl eingegeben werden. Andernfalls können Sie beantragen, den Zwei-Faktor-Schutz zu entfernen.</value>
</data>
<data name="LockedFooterTitleAccess" xml:space="preserve">
<value>Sie haben keinen Zugriffscode erhalten?</value> <value>Sie haben keinen Zugriffscode erhalten?</value>
</data> </data>
<data name="LockedTitle" xml:space="preserve"> <data name="LockedFooterTitleAuthenticator" xml:space="preserve">
<value>Sie haben keinen QR-Code erhalten?</value>
</data>
<data name="LockedFooterTitleSms" xml:space="preserve">
<value>Sie haben keine SMS erhalten?</value>
</data>
<data name="LockedTitleAccess" xml:space="preserve">
<value>Dokument erfordert einen Zugriffscode</value> <value>Dokument erfordert einen Zugriffscode</value>
</data> </data>
<data name="LockedTitleAuthenticator" xml:space="preserve">
<value>2-Faktor-Authentifizierung</value>
</data>
<data name="LockedTitleSms" xml:space="preserve">
<value>2-Faktor-Authentifizierung</value>
</data>
<data name="Privacy" xml:space="preserve">
<value>Datenschutz</value>
</data>
<data name="ReadOnlyMessage" xml:space="preserve"> <data name="ReadOnlyMessage" xml:space="preserve">
<value>Weitergeleitet von {0}. Gültig bis {1}.</value> <value>Weitergeleitet von {0}. Gültig bis {1}.</value>
</data> </data>
@@ -213,6 +249,9 @@
<data name="UnexpectedError" xml:space="preserve"> <data name="UnexpectedError" xml:space="preserve">
<value>Ein unerwarteter Fehler ist aufgetreten.</value> <value>Ein unerwarteter Fehler ist aufgetreten.</value>
</data> </data>
<data name="ViewDoc" xml:space="preserve">
<value>Dokument ansehen</value>
</data>
<data name="WelcomeToTheESignPortal" xml:space="preserve"> <data name="WelcomeToTheESignPortal" xml:space="preserve">
<value>Herzlich willkommen im eSign-Portal</value> <value>Herzlich willkommen im eSign-Portal</value>
</data> </data>

View File

@@ -156,27 +156,63 @@
<data name="Hello" xml:space="preserve"> <data name="Hello" xml:space="preserve">
<value>Hello</value> <value>Hello</value>
</data> </data>
<data name="LocakedOpen" xml:space="preserve"> <data name="HomePageDescription" xml:space="preserve">
<value>Open</value> <value>The Digital Signature Portal is a platform developed for securely signing and managing your documents. With its user-friendly interface, you can quickly upload your documents, track the signing processes, and easily carry out your digital signature applications. This portal accelerates your workflow with legally valid signatures while enhancing the security of your documents.</value>
</data> </data>
<data name="LocationWarning" xml:space="preserve"> <data name="LocationWarning" xml:space="preserve">
<value>Please review the location information. If it is incorrect, kindly make the necessary corrections.</value> <value>Please review the location information. If it is incorrect, kindly make the necessary corrections.</value>
</data> </data>
<data name="LockedAccessCode" xml:space="preserve"> <data name="LockedBodyAccess" xml:space="preserve">
<value>We will now send you an access code to your registered e-mail address. This may take a few minutes!</value>
</data>
<data name="LockedBodyAuthenticator" xml:space="preserve">
<value>Please enter the TOTP provided in your Authenticator app.</value>
</data>
<data name="LockedBodyAuthenticatorNew" xml:space="preserve">
<value>We have sent the QR code to your e-mail address. Your QR code is valid until {0}. You can use it for all envelopes received at this email address.</value>
</data>
<data name="LockedBodySms" xml:space="preserve">
<value>We have just sent the access code as an SMS to the phone number you provided.</value>
</data>
<data name="LockedCodeLabelAccess" xml:space="preserve">
<value>Access Code</value> <value>Access Code</value>
</data> </data>
<data name="LockedBody" xml:space="preserve"> <data name="LockedCodeLabelAuthenticator" xml:space="preserve">
<value>We have just sent you the access code to the email address you provided. This may take a few minutes.</value> <value>TOTP</value>
</data> </data>
<data name="LockedFooterBody" xml:space="preserve"> <data name="LockedCodeLabelSms" xml:space="preserve">
<value>Please check your email inbox including your spam folder. Furthermore, you can also ask the sender to send the code by other means.</value> <value>SMS Code</value>
</data> </data>
<data name="LockedFooterTitle" xml:space="preserve"> <data name="LockedFooterBodyAccess" xml:space="preserve">
<value>Please check your email inbox including the spam folder. You can also ask the sender &lt;a class="mail-link" href="mailto:{0}?subject={1}&amp;body={2}" target="_blank"&gt;{0}&lt;/a&gt; to send you the code by other means.</value>
</data>
<data name="LockedFooterBodyAuthenticator" xml:space="preserve">
<value>The new QR code is sent only once for a given period and is saved in your authenticator app once scanned. It can be used for all envelopes received at the same email address until it expires. If you do not receive the QR code mail or delete it both from the mail and from authenticator, please contact the sender.</value>
</data>
<data name="LockedFooterBodySms" xml:space="preserve">
<value>You can ask the sender to check your phone number. The phone number must be entered with the area code. Otherwise you can request to remove the two-factor protection.</value>
</data>
<data name="LockedFooterTitleAccess" xml:space="preserve">
<value>You have not received an access code?</value> <value>You have not received an access code?</value>
</data> </data>
<data name="LockedTitle" xml:space="preserve"> <data name="LockedFooterTitleAuthenticator" xml:space="preserve">
<value>You have not received a QR code?</value>
</data>
<data name="LockedFooterTitleSms" xml:space="preserve">
<value>You have not received an SMS?</value>
</data>
<data name="LockedTitleAccess" xml:space="preserve">
<value>Document requires an access code</value> <value>Document requires an access code</value>
</data> </data>
<data name="LockedTitleAuthenticator" xml:space="preserve">
<value>2-Factor Authentication</value>
</data>
<data name="LockedTitleSms" xml:space="preserve">
<value>2-Factor Authentication</value>
</data>
<data name="Privacy" xml:space="preserve">
<value>Privacy</value>
</data>
<data name="ReadOnlyMessage" xml:space="preserve"> <data name="ReadOnlyMessage" xml:space="preserve">
<value>Forwarded by {0}. Valid until {1}.</value> <value>Forwarded by {0}. Valid until {1}.</value>
</data> </data>
@@ -213,6 +249,9 @@
<data name="UnexpectedError" xml:space="preserve"> <data name="UnexpectedError" xml:space="preserve">
<value>An unexpected error has occurred.</value> <value>An unexpected error has occurred.</value>
</data> </data>
<data name="ViewDoc" xml:space="preserve">
<value>View document</value>
</data>
<data name="WelcomeToTheESignPortal" xml:space="preserve"> <data name="WelcomeToTheESignPortal" xml:space="preserve">
<value>Welcome to the eSign portal</value> <value>Welcome to the eSign portal</value>
</data> </data>

View File

@@ -0,0 +1,71 @@
using EnvelopeGenerator.Application.Configurations;
using EnvelopeGenerator.Application.Contracts;
using Microsoft.Extensions.Options;
using OtpNet;
using QRCoder;
using System.Text;
namespace EnvelopeGenerator.Application.Services
{
public class Authenticator : IAuthenticator
{
public static Lazy<Authenticator> LazyStatic => new(() => new Authenticator(Options.Create<AuthenticatorParams>(new()), new QRCodeGenerator()));
public static Authenticator Static => LazyStatic.Value;
private readonly AuthenticatorParams _params;
private readonly QRCodeGenerator _qrCodeGenerator;
public Authenticator(IOptions<AuthenticatorParams> options, QRCodeGenerator qrCodeGenerator)
{
_params = options.Value;
_qrCodeGenerator = qrCodeGenerator;
}
public string GenerateCode(int length)
{
//TODO: Inject Random as a singleton to support multithreading to improve performance.
Random random = new();
if (length <= 0)
throw new ArgumentException("Password length must be greater than 0.");
var passwordBuilder = new StringBuilder(length);
for (int i = 0; i < length; i++)
passwordBuilder.Append(_params.CharPool[random.Next(_params.CharPool.Length)]);
return passwordBuilder.ToString();
}
public string GenerateTotpSecretKey(int? length = null)
=> Base32Encoding.ToString(KeyGeneration.GenerateRandomKey(length ?? _params.DefaultTotpSecretKeyLength));
public byte[] GenerateTotpQrCode(string userEmail, string secretKey, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null)
{
var url = string.Format(totpUrlFormat ?? _params.TotpUrlFormat,
Uri.EscapeDataString(userEmail),
Uri.EscapeDataString(secretKey),
Uri.EscapeDataString(issuer ?? _params.TotpIssuer));
using var qrCodeData = _qrCodeGenerator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q);
using var qrCode = new BitmapByteQRCode(qrCodeData);
return qrCode.GetGraphic(pixelsPerModule ?? _params.TotpQRPixelsPerModule);
}
public byte[] GenerateTotpQrCode(string userEmail, int? length = null, string? issuer = null, string? totpUrlFormat = null, int? pixelsPerModule = null)
{
return GenerateTotpQrCode(
userEmail: userEmail,
secretKey: GenerateTotpSecretKey(length: length),
issuer: issuer,
totpUrlFormat: totpUrlFormat,
pixelsPerModule: pixelsPerModule);
}
public string GenerateTotp(string secretKey, int step = 30) => new Totp(Base32Encoding.ToBytes(secretKey), step).ComputeTotp();
public bool VerifyTotp(string totpCode, string secretKey, int step = 30, VerificationWindow? window = null)
=> new Totp(Base32Encoding.ToBytes(secretKey), step).VerifyTotp(totpCode, out _, window);
}
}

View File

@@ -12,6 +12,8 @@ using static EnvelopeGenerator.Common.Constants;
using EnvelopeGenerator.Extensions; using EnvelopeGenerator.Extensions;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly; using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
using EnvelopeGenerator.Application.Configurations; using EnvelopeGenerator.Application.Configurations;
using EnvelopeGenerator.Application.Extensions;
using Newtonsoft.Json;
namespace EnvelopeGenerator.Application.Services namespace EnvelopeGenerator.Application.Services
{ {
@@ -19,20 +21,22 @@ namespace EnvelopeGenerator.Application.Services
{ {
private readonly IEmailTemplateService _tempService; private readonly IEmailTemplateService _tempService;
private readonly IEnvelopeReceiverService _envRcvService; private readonly IEnvelopeReceiverService _envRcvService;
private readonly DispatcherConfig _dConfig; private readonly DispatcherParams _dConfig;
private readonly IConfigService _configService; private readonly IConfigService _configService;
private readonly Dictionary<string, string> _placeholders; private readonly Dictionary<string, string> _placeholders;
private readonly IAuthenticator _authenticator;
public EnvelopeMailService(IEmailOutRepository repository, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions<DispatcherConfig> dispatcherConfigOptions, IConfigService configService, IOptions<MailConfig> mailConfig) : base(repository, mapper) public EnvelopeMailService(IEmailOutRepository repository, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions<DispatcherParams> dispatcherConfigOptions, IConfigService configService, IOptions<MailParams> mailConfig, IAuthenticator authenticator) : base(repository, mapper)
{ {
_tempService = tempService; _tempService = tempService;
_envRcvService = envelopeReceiverService; _envRcvService = envelopeReceiverService;
_dConfig = dispatcherConfigOptions.Value; _dConfig = dispatcherConfigOptions.Value;
_configService = configService; _configService = configService;
_placeholders = mailConfig.Value.Placeholders; _placeholders = mailConfig.Value.Placeholders;
_authenticator = authenticator;
} }
private async Task<Dictionary<string, string>> CreatePlaceholders(string? accessCode = null, EnvelopeReceiverDto? envelopeReceiverDto = null, EnvelopeReceiverReadOnlyDto? readOnlyDto = null) private async Task<Dictionary<string, string>> CreatePlaceholders(string? accessCode = null, EnvelopeReceiverDto? envelopeReceiverDto = null)
{ {
if (accessCode is not null) if (accessCode is not null)
_placeholders["[DOCUMENT_ACCESS_CODE]"] = accessCode; _placeholders["[DOCUMENT_ACCESS_CODE]"] = accessCode;
@@ -63,10 +67,8 @@ namespace EnvelopeGenerator.Application.Services
return _placeholders; 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, EmailTemplateType tempType, Dictionary<string, object>? optionalPlaceholders = null)
public async Task<DataResult<int>> SendAsync(EnvelopeReceiverDto dto, Constants.EmailTemplateType tempType)
{ {
var tempSerResult = await _tempService.ReadByNameAsync(tempType); var tempSerResult = await _tempService.ReadByNameAsync(tempType);
if (tempSerResult.IsFailed) if (tempSerResult.IsFailed)
@@ -104,14 +106,19 @@ namespace EnvelopeGenerator.Application.Services
var placeholders = await CreatePlaceholders(accessCode: accessCode, envelopeReceiverDto: dto); var placeholders = await CreatePlaceholders(accessCode: accessCode, envelopeReceiverDto: dto);
// Add optional place holders.
if (optionalPlaceholders is not null)
foreach (var oph in optionalPlaceholders)
placeholders[oph.Key] = oph.Value.ToString() ?? "NULL";
//TODO: remove the requirement to add the models using reflections //TODO: remove the requirement to add the models using reflections
return await CreateWithTemplateAsync(createDto: mail,placeholders: placeholders, return await CreateWithTemplateAsync(createDto: mail,placeholders: placeholders,
dto, dto.Envelope.User!, dto.Envelope); dto, dto.Envelope.User!, dto.Envelope);
} }
public async Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto) public async Task<DataResult<int>> SendAsync(EnvelopeReceiverReadOnlyDto dto, Dictionary<string, object>? optionalPlaceholders = null)
{ {
var tempSerResult = await _tempService.ReadByNameAsync(Constants.EmailTemplateType.DocumentShared); var tempSerResult = await _tempService.ReadByNameAsync(EmailTemplateType.DocumentShared);
if (tempSerResult.IsFailed) if (tempSerResult.IsFailed)
return tempSerResult.ToFail<int>().Notice(LogLevel.Error, Flag.DataIntegrityIssue, $"The email cannot send because '{Constants.EmailTemplateType.DocumentShared}' template cannot found."); 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 temp = tempSerResult.Data;
@@ -140,7 +147,29 @@ namespace EnvelopeGenerator.Application.Services
var placeholders = await CreatePlaceholders(readOnlyDto: dto); var placeholders = await CreatePlaceholders(readOnlyDto: dto);
// Add optional place holders.
if (optionalPlaceholders is not null)
foreach (var oph in optionalPlaceholders)
placeholders[oph.Key] = oph.Value.ToString() ?? "NULL";
return await CreateWithTemplateAsync(createDto: mail, placeholders: placeholders, dto.Envelope); return await CreateWithTemplateAsync(createDto: mail, placeholders: placeholders, dto.Envelope);
} }
public async Task<DataResult<int>> SendAccessCodeAsync(EnvelopeReceiverDto dto) => await SendAsync(dto: dto, tempType: EmailTemplateType.DocumentAccessCodeReceived);
public Task<DataResult<int>> SendTFAQrCodeAsync(EnvelopeReceiverDto dto)
{
// Check if receiver or secret key is null
if (dto.Receiver is null)
throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver information is missing. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}");
if (dto.Receiver.TotpSecretkey is null)
throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver.TotpSecretKey is null. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}");
var totp_qr_64 = _authenticator.GenerateTotpQrCode(userEmail: dto.Receiver.EmailAddress, secretKey: dto.Receiver.TotpSecretkey).ToBase64String();
return SendAsync(dto, EmailTemplateType.TotpSecret, new()
{
{"[TFA_QR_CODE]", totp_qr_64 },
});
}
} }
} }

View File

@@ -9,6 +9,7 @@ using EnvelopeGenerator.Infrastructure.Contracts;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using EnvelopeGenerator.Extensions; using EnvelopeGenerator.Extensions;
using EnvelopeGenerator.Application.DTOs.Messaging;
namespace EnvelopeGenerator.Application.Services namespace EnvelopeGenerator.Application.Services
{ {
@@ -16,33 +17,36 @@ namespace EnvelopeGenerator.Application.Services
{ {
private readonly IStringLocalizer<Resource> _localizer; private readonly IStringLocalizer<Resource> _localizer;
public EnvelopeReceiverService(IEnvelopeReceiverRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper) private readonly ISmsSender _smsSender;
public EnvelopeReceiverService(IEnvelopeReceiverRepository repository, IStringLocalizer<Resource> localizer, IMapper mapper, ISmsSender smsSender)
: base(repository, mapper) : base(repository, mapper)
{ {
_localizer = localizer; _localizer = localizer;
_smsSender = smsSender;
} }
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true) public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true)
{ {
var env_rcvs = await _repository.ReadBySignatureAsync(signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver); var env_rcvs = await _repository.ReadBySignatureAsync(signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs)); return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
} }
public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false) public async Task<DataResult<IEnumerable<EnvelopeReceiverDto>>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true)
{ {
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver); var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs)); return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverDto>>(env_rcvs));
} }
public async Task<DataResult<IEnumerable<EnvelopeReceiverSecretDto>>> ReadSecretByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true) public async Task<DataResult<IEnumerable<string?>>> ReadAccessCodeByUuidAsync(string uuid, bool withEnvelope = false, bool withReceiver = true)
{ {
var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver); var env_rcvs = await _repository.ReadByUuidAsync(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver);
return Result.Success(_mapper.Map<IEnumerable<EnvelopeReceiverSecretDto>>(env_rcvs)); return Result.Success(env_rcvs.Select(er => er.AccessCode));
} }
public async Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true) public async Task<DataResult<EnvelopeReceiverDto>> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
{ {
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver); var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
if (env_rcv is null) if (env_rcv is null)
return Result.Fail<EnvelopeReceiverDto>() return Result.Fail<EnvelopeReceiverDto>()
.Message(Key.EnvelopeReceiverNotFound); .Message(Key.EnvelopeReceiverNotFound);
@@ -50,7 +54,17 @@ namespace EnvelopeGenerator.Application.Services
return Result.Success(_mapper.Map<EnvelopeReceiverDto>(env_rcv)); return Result.Success(_mapper.Map<EnvelopeReceiverDto>(env_rcv));
} }
public async Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true) public async Task<DataResult<EnvelopeReceiverSecretDto>> ReadWithSecretByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
{
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
if (env_rcv is null)
return Result.Fail<EnvelopeReceiverSecretDto>()
.Message(Key.EnvelopeReceiverNotFound);
return Result.Success(_mapper.Map<EnvelopeReceiverSecretDto>(env_rcv));
}
public async Task<DataResult<EnvelopeReceiverDto>> ReadByEnvelopeReceiverIdAsync(string envelopeReceiverId, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
{ {
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId(); (string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
@@ -61,7 +75,7 @@ namespace EnvelopeGenerator.Application.Services
.Notice(LogLevel.Warning, EnvelopeFlag.WrongEnvelopeReceiverId) .Notice(LogLevel.Warning, EnvelopeFlag.WrongEnvelopeReceiverId)
.Notice(LogLevel.Warning, Flag.PossibleSecurityBreach); .Notice(LogLevel.Warning, Flag.PossibleSecurityBreach);
return await ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver); return await ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly);
} }
public async Task<DataResult<bool>> VerifyAccessCodeAsync(string uuid, string signature, string accessCode) public async Task<DataResult<bool>> VerifyAccessCodeAsync(string uuid, string signature, string accessCode)
@@ -135,5 +149,31 @@ namespace EnvelopeGenerator.Application.Services
var er = await _repository.ReadLastByReceiver(mail); var er = await _repository.ReadLastByReceiver(mail);
return er is null ? Result.Fail<string?>().Notice(LogLevel.None, Flag.NotFound) : Result.Success(er.Name); return er is null ? Result.Fail<string?>().Notice(LogLevel.None, Flag.NotFound) : Result.Success(er.Name);
} }
public async Task<DataResult<SmsResponse>> SendSmsAsync(string envelopeReceiverId, string message)
{
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
if (uuid is null || signature is null)
return Result.Fail<SmsResponse>()
.Message(_localizer[Key.WrongEnvelopeReceiverId])
.Notice(LogLevel.Warning, (uuid, signature).ToTitle())
.Notice(LogLevel.Warning, EnvelopeFlag.WrongEnvelopeReceiverId)
.Notice(LogLevel.Warning, Flag.PossibleSecurityBreach);
var env_rcv = await _repository.ReadByUuidSignatureAsync(uuid: uuid, signature: signature, withEnvelope: false, withReceiver: false);
if (env_rcv is null)
return Result.Fail<SmsResponse>()
.Message(Key.EnvelopeReceiverNotFound);
if (env_rcv.PhoneNumber is null)
return Result.Fail<SmsResponse>()
.Message(Key.PhoneNumberNonexists)
.Notice(LogLevel.Error, Flag.NotFound, $"An attempt was made to send sms to the user whose phone number is null. Envelope recipient ID is {envelopeReceiverId}, UUID is {uuid} and signature is {signature}.");
var res = await _smsSender.SendSmsAsync(recipient: env_rcv.PhoneNumber, message: message);
return Result.Success(res);
}
} }
} }

View File

@@ -0,0 +1,54 @@
using EnvelopeGenerator.Application.Configurations;
using EnvelopeGenerator.Application.Contracts;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using EnvelopeGenerator.Application.DTOs.Messaging;
using EnvelopeGenerator.Application.Extensions;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Options;
namespace EnvelopeGenerator.Application.Services;
public class EnvelopeSmsHandler : IEnvelopeSmsHandler
{
private readonly ISmsSender _sender;
private readonly TotpSmsParams _totpSmsParams;
private readonly IDistributedCache _dCache;
private readonly IAuthenticator _authenticator;
public EnvelopeSmsHandler(ISmsSender sender, IOptions<TotpSmsParams> totpSmsParamsOptions, IDistributedCache distributedCache, IAuthenticator authenticator)
{
_sender = sender;
_totpSmsParams = totpSmsParamsOptions.Value;
_dCache = distributedCache;
_authenticator = authenticator;
}
/// <summary>
/// If expiration is passed then, sends sms and returns smsResponse and up-to-date expiration; otherwise send expiration.
/// </summary>
/// <param name="er_secret"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public async Task<(SmsResponse? SmsResponse, DateTime Expiration)> SendTotpAsync(EnvelopeReceiverSecretDto er_secret, CancellationToken cToken = default)
{
var key = string.Format(_totpSmsParams.Expiration.CacheKeyFormat, er_secret.EnvelopeId, er_secret.ReceiverId);
var expiration = await _dCache.GetDateTimeAsync(key, cToken);
if(expiration is DateTime expirationDateTime && expirationDateTime >= DateTime.Now)
return (null, expirationDateTime);
else
{
var new_expiration = DateTime.Now.AddSeconds(_totpSmsParams.TotpStep);
var totp = _authenticator.GenerateTotp(er_secret.Receiver!.TotpSecretkey!, _totpSmsParams.TotpStep);
var msg = string.Format(_totpSmsParams.Format, totp, new_expiration.ToString(_totpSmsParams.Expiration.Format, _totpSmsParams.Expiration.CultureInfo));
await _dCache.SetDateTimeAsync(key, new_expiration, cToken: cToken);
return (await _sender.SendSmsAsync(er_secret.PhoneNumber!, msg), new_expiration);
}
}
public bool VerifyTotp(string totpCode, string secretKey) => _authenticator
.VerifyTotp(totpCode, secretKey, _totpSmsParams.TotpStep, _totpSmsParams.TotpVerificationWindow);
}

View File

@@ -0,0 +1,40 @@
using AutoMapper;
using DigitalData.Core.Abstractions.Client;
using DigitalData.Core.Client;
using EnvelopeGenerator.Application.Configurations;
using EnvelopeGenerator.Application.Contracts;
using EnvelopeGenerator.Application.DTOs.Messaging;
using Microsoft.Extensions.Options;
namespace EnvelopeGenerator.Application.Services;
//TODO: move to DigitalData.Core
public class GTXSmsSender : ISmsSender
{
private readonly IHttpClientService<GtxMessagingParams> _smsClient;
private readonly GtxMessagingParams _smsParams;
private readonly IMapper _mapper;
public string ServiceProvider { get; }
public GTXSmsSender(IHttpClientService<GtxMessagingParams> smsClient, IOptions<GtxMessagingParams> smsParamsOptions, IMapper mapper)
{
_smsClient = smsClient;
_smsParams = smsParamsOptions.Value;
_mapper = mapper;
ServiceProvider = GetType().Name.Replace("Service", string.Empty);
}
public async Task<SmsResponse> SendSmsAsync(string recipient, string message)
{
return await _smsClient.FetchAsync(queryParams: new Dictionary<string, object?>()
{
{ _smsParams.RecipientQueryParamName, recipient },
{ _smsParams.MessageQueryParamName, message }
})
.ThenAsync(res => res.Json<GtxMessagingResponse>())
.ThenAsync(_mapper.Map<SmsResponse>);
}
}

View File

@@ -5,6 +5,8 @@ using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.Infrastructure.Contracts; using EnvelopeGenerator.Infrastructure.Contracts;
using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Application.DTOs.Receiver;
using DigitalData.Core.DTO; using DigitalData.Core.DTO;
using DigitalData.Core.Abstractions;
using Microsoft.Extensions.Logging;
namespace EnvelopeGenerator.Application.Services namespace EnvelopeGenerator.Application.Services
{ {
@@ -34,5 +36,17 @@ namespace EnvelopeGenerator.Application.Services
return await _repository.DeleteAsync(rcv) ? Result.Success() : Result.Fail(); return await _repository.DeleteAsync(rcv) ? Result.Success() : Result.Fail();
} }
public virtual async Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto) where TUpdateDto : IUnique<int>
{
var val = await _repository.ReadByIdAsync(updateDto.Id);
if (val == null)
{
return Result.Fail().Notice(LogLevel.Warning, Flag.NotFound, $"{updateDto.Id} is not found in update process of {GetType()} entity.");
}
var entity = _mapper.Map(updateDto, val);
return (await _repository.UpdateAsync(entity)) ? Result.Success() : Result.Fail();
}
} }
} }

View File

@@ -18,6 +18,7 @@
AccessCodeIncorrect = 2003 AccessCodeIncorrect = 2003
DocumentOpened = 2004 DocumentOpened = 2004
DocumentSigned = 2005 DocumentSigned = 2005
DocumentForwarded = 4001
SignatureConfirmed = 2006 SignatureConfirmed = 2006
DocumentRejected = 2007 DocumentRejected = 2007
EnvelopeShared = 2008 EnvelopeShared = 2008
@@ -76,8 +77,9 @@
End Enum End Enum
Public Enum CertificationType Public Enum CertificationType
ElectronicSignature = 1 AdvancedElectronicSignature = 1
QualifiedSignature = 2 'ElectronicSignature = 1
'QualifiedSignature = 2
End Enum End Enum
Public Enum FinalEmailType Public Enum FinalEmailType
@@ -98,14 +100,23 @@
DocumentCompleted DocumentCompleted
DocumentAccessCodeReceived DocumentAccessCodeReceived
DocumentShared DocumentShared
TotpSecret
End Enum End Enum
Public Enum EncodeType Public Enum EncodeType
EnvelopeReceiver EnvelopeReceiver
EnvelopeReceiverReadOnly EnvelopeReceiverReadOnly
Undefined Undefined
DocumentForwarded
DocumentShared
End Enum End Enum
#End Region
#Region "Role"
Public NotInheritable Class ReceiverRole
Public Const PreAuth As String = "PreAuth"
Public Const FullyAuth As String = "FullyAuth"
End Class
#End Region #End Region
#Region "Constants" #Region "Constants"
@@ -119,4 +130,4 @@
Public Const RED_300 = "#fecaca" Public Const RED_300 = "#fecaca"
Public Const ORANGE_300 = "#fed7aa" Public Const ORANGE_300 = "#fed7aa"
#End Region #End Region
End Class End Class

View File

@@ -1,15 +1,11 @@
Public Class DbConfig Public Class DbConfig
Public Property ExternalProgramName As String = "Sign Flow" Public Property ExternalProgramName As String = "signFLOW"
Public Property DocumentPathOrigin As String = "" 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 Default_TFA_Enabled As Boolean = False
Public Property NetUse_Finish As Boolean = False Public Property Default_TFA_WithPhone As Boolean = False
End Class End Class

View File

@@ -8,8 +8,8 @@
Public Property Uuid As String = Guid.NewGuid.ToString() Public Property Uuid As String = Guid.NewGuid.ToString()
Public Property UseAccessCode As Boolean = False Public Property UseAccessCode As Boolean = False
Public Property Language As String = "de-DE" Public Property Language As String = "de-DE"
Public Property CertificationType As Constants.CertificationType = Constants.CertificationType.ElectronicSignature Public Property CertificationType As Constants.CertificationType = Constants.CertificationType.AdvancedElectronicSignature
Public Property TFA_Enabled As Boolean = False
Public Property SendReminderEmails As Boolean = False Public Property SendReminderEmails As Boolean = False
Public Property FirstReminderDays As Integer = 0 Public Property FirstReminderDays As Integer = 0
Public Property ReminderIntervalDays As Integer = 0 Public Property ReminderIntervalDays As Integer = 0

View File

@@ -75,6 +75,7 @@ Public Class EnvelopeReceiver
Public Property Sequence As Integer = 0 Public Property Sequence As Integer = 0
Public Property PrivateMessage As String = "" Public Property PrivateMessage As String = ""
Public Property AccessCode As String = "" Public Property AccessCode As String = ""
Public Property PhoneNumber As String = ""
Public Function GetSignature() As String Public Function GetSignature() As String
Return StringEx.GetChecksum(Email.ToUpper) Return StringEx.GetChecksum(Email.ToUpper)

View File

@@ -6,7 +6,8 @@
Public Property ContractType As Integer ' Unbenutzt Public Property ContractType As Integer ' Unbenutzt
Public Property Language As String Public Property Language As String
Public Property CertificationType As Constants.CertificationType = Constants.CertificationType.ElectronicSignature Public Property CertificationType As Constants.CertificationType = Constants.CertificationType.AdvancedElectronicSignature
Public Property TFA_Enabled As Boolean = False
Public Property SendReminderEmails As Boolean = False Public Property SendReminderEmails As Boolean = False
Public Property FirstReminderDays As Integer = 0 Public Property FirstReminderDays As Integer = 0
Public Property ReminderIntervalDays As Integer = 0 Public Property ReminderIntervalDays As Integer = 0

View File

@@ -77,8 +77,8 @@
<Reference Include="DigitalData.Modules.Logging"> <Reference Include="DigitalData.Modules.Logging">
<HintPath>..\..\2_DLL Projekte\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath> <HintPath>..\..\2_DLL Projekte\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
</Reference> </Reference>
<Reference Include="GdPicture.NET.14, Version=14.2.89.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL"> <Reference Include="GdPicture.NET.14, Version=14.2.90.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.2.89\lib\net462\GdPicture.NET.14.dll</HintPath> <HintPath>..\packages\GdPicture.14.2.90\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">
@@ -260,11 +260,13 @@
<Generator>PublicResXFileCodeGenerator</Generator> <Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Model.en.Designer.vb</LastGenOutput> <LastGenOutput>Model.en.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace> <CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Strings\Model.resx"> <EmbeddedResource Include="Strings\Model.resx">
<CustomToolNamespace>My.Resources</CustomToolNamespace> <CustomToolNamespace>My.Resources</CustomToolNamespace>
<Generator>PublicResXFileCodeGenerator</Generator> <Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Model.Designer.vb</LastGenOutput> <LastGenOutput>Model.Designer.vb</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -289,11 +291,11 @@
</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')" /> <Import Project="..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets" Condition="Exists('..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <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> <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> </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'))" /> <Error Condition="!Exists('..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets'))" />
</Target> </Target>
</Project> </Project>

View File

@@ -82,49 +82,14 @@ Namespace Jobs
Logger.Debug("Loading ReportCreator..") Logger.Debug("Loading ReportCreator..")
ReportCreator = New ReportCreator(LogConfig, oState) 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)
Config.DocumentPath = Config.DocumentPath
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) 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) 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 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 oSql = $"SELECT * FROM TBSIG_ENVELOPE WHERE STATUS = {oCompleteStatus} AND DATEDIFF(minute, CHANGED_WHEN, GETDATE()) >= {CompleteWaitTime} ORDER BY GUID"
Dim oTable = Database.GetDatatable(oSql) Dim oTable = Database.GetDatatable(oSql)
@@ -157,10 +122,6 @@ Namespace Jobs
Logger.Warn("EnvelopeData could not be loaded for Id [{0}]!", oId) Logger.Warn("EnvelopeData could not be loaded for Id [{0}]!", oId)
Throw New ArgumentNullException("EnvelopeData") Throw New ArgumentNullException("EnvelopeData")
End If 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 ...") Logger.Debug("Burning Annotations to pdf ...")
Dim oBurnedDocument As Byte() = BurnAnnotationsToPdf(oEnvelopeData) Dim oBurnedDocument As Byte() = BurnAnnotationsToPdf(oEnvelopeData)
If oBurnedDocument Is Nothing Then If oBurnedDocument Is Nothing Then
@@ -196,13 +157,6 @@ Namespace Jobs
Throw New ExportDocumentException("Could not export final document to disk!", ex) Throw New ExportDocumentException("Could not export final document to disk!", ex)
End Try 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...") Logger.Info("Writing EB-bytes to database...")
Update_File_DB(oOutputFilePath, oEnvelope.Id) Update_File_DB(oOutputFilePath, oEnvelope.Id)
@@ -287,48 +241,48 @@ Namespace Jobs
data = br.ReadBytes(CInt(numBytes)) data = br.ReadBytes(CInt(numBytes))
Return data Return data
End Function End Function
Private Function NetUse_Command(pDestinationPath As String, pUsername As String, pPassword As String) 'Private Function NetUse_Command(pDestinationPath As String, pUsername As String, pPassword As String)
Dim oDectryptedPW = Helpers.Decrypt(My.Settings.NetUse_PW) ' Dim oDectryptedPW = Helpers.Decrypt(My.Settings.NetUse_PW)
Dim netUseCommand As String = $"net use {pDestinationPath} /user:{pUsername} {oDectryptedPW}" ' Dim netUseCommand As String = $"net use {pDestinationPath} /user:{pUsername} {oDectryptedPW}"
Logger.Debug("EXECUTING NetUse_Command for " & pDestinationPath) ' Logger.Debug("EXECUTING NetUse_Command for " & pDestinationPath)
Dim processInfo As New ProcessStartInfo("cmd.exe", $"/C {netUseCommand}") ' Dim processInfo As New ProcessStartInfo("cmd.exe", $"/C {netUseCommand}")
processInfo.RedirectStandardOutput = True ' processInfo.RedirectStandardOutput = True
processInfo.UseShellExecute = False ' processInfo.UseShellExecute = False
processInfo.CreateNoWindow = True ' processInfo.CreateNoWindow = True
Using process As Process = Process.Start(processInfo) ' Using process As Process = Process.Start(processInfo)
process.WaitForExit() ' process.WaitForExit()
' Prüfe den Rückgabewert des net use Befehls ' ' Prüfe den Rückgabewert des net use Befehls
If process.ExitCode = 0 Then ' If process.ExitCode = 0 Then
Return True ' Return True
Else ' Else
Return False ' Return False
End If ' End If
End Using ' End Using
End Function 'End Function
Private Function Clean_DNZ_PAth(pSourcePath As String) As Boolean 'Private Function Clean_DNZ_PAth(pSourcePath As String) As Boolean
Dim oFilename = System.IO.Path.GetFileName(pSourcePath) ' Dim oFilename = System.IO.Path.GetFileName(pSourcePath)
Logger.Debug("## Starting Clean_DNZ_PAth ...") ' Logger.Debug("## Starting Clean_DNZ_PAth ...")
Logger.Debug("## pSourcePath {0}", pSourcePath) ' Logger.Debug("## pSourcePath {0}", pSourcePath)
Dim oDirectorySource = Path.Combine(pSourcePath, ParentFolderUID) ' Dim oDirectorySource = Path.Combine(pSourcePath, ParentFolderUID)
Try ' Try
Logger.Debug($"Deleting oDirectorySource {oDirectorySource} ...") ' Logger.Debug($"Deleting oDirectorySource {oDirectorySource} ...")
Directory.Delete(oDirectorySource, True) ' Directory.Delete(oDirectorySource, True)
Console.WriteLine($"Folder successfully deleted!") ' Console.WriteLine($"Folder successfully deleted!")
Logger.Debug($"...Deleted!") ' Logger.Debug($"...Deleted!")
Return True ' Return True
Catch ex As Exception ' Catch ex As Exception
Logger.Error(ex) ' Logger.Error(ex)
Return False ' Return False
End Try ' End Try
End Function 'End Function
Private Function SendFinalEmails(pEnvelope As Envelope) As Boolean ', pAttachment As String Private Function SendFinalEmails(pEnvelope As Envelope) As Boolean ', pAttachment As String
Dim oMailToCreator = pEnvelope.FinalEmailToCreator Dim oMailToCreator = pEnvelope.FinalEmailToCreator
Dim oMailToReceivers = pEnvelope.FinalEmailToReceivers Dim oMailToReceivers = pEnvelope.FinalEmailToReceivers
@@ -398,15 +352,7 @@ Namespace Jobs
Dim oAnnotations = pEnvelopeData.AnnotationData Dim oAnnotations = pEnvelopeData.AnnotationData
Dim oInputPath = "" Dim oInputPath = ""
If IsNothing(pEnvelopeData.DocAsByte) Then If IsNothing(pEnvelopeData.DocAsByte) Then
If My.Settings.RuninDMZ Then oInputPath = pEnvelopeData.DocumentPath
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}]") Logger.Info($"Input path: [{oInputPath}]")
Else Else
Logger.Info($"we got bytes..") Logger.Info($"we got bytes..")

View File

@@ -16,17 +16,14 @@ Public Class ConfigModel
Dim oRow As DataRow = 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", ""), .DocumentPathOrigin = oRow.ItemEx("DOCUMENT_PATH", ""),
.DocumentPath_DMZ = oRow.ItemEx("DOCUMENT_PATH_DMZ", ""), .ExportPath = oRow.ItemEx("EXPORT_PATH", ""),
.ExportPath = oRow.ItemEx("EXPORT_PATH", ""), .SendingProfile = oRow.ItemEx("SENDING_PROFILE", 0),
.ExportPath_DMZ = oRow.ItemEx("EXPORT_PATH_DMZ", ""), .SignatureHost = oRow.ItemEx("SIGNATURE_HOST", ""),
.SendingProfile = oRow.ItemEx("SENDING_PROFILE", 0), .ExternalProgramName = oRow.ItemEx("EXTERNAL_PROGRAM_NAME", ""),
.SignatureHost = oRow.ItemEx("SIGNATURE_HOST", ""), .Default_TFA_Enabled = oRow.ItemEx("DEF_TFA_ENABLED", False),
.ExternalProgramName = oRow.ItemEx("EXTERNAL_PROGRAM_NAME", ""), .Default_TFA_WithPhone = oRow.ItemEx("DEF_TFA_WITH_PHONE", False)
.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) Logger.Error(ex)

View File

@@ -2,6 +2,7 @@
Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls
Imports DigitalData.Modules.Base Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports EnvelopeGenerator.Common.Constants
Public Class EnvelopeModel Public Class EnvelopeModel
Inherits BaseModel Inherits BaseModel
@@ -34,7 +35,7 @@ Public Class EnvelopeModel
.Language = pRow.ItemEx("LANGUAGE", "de-DE"), .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"),
.CertificationType = ObjectEx.ToEnum(Of Constants.CertificationType)(pRow.ItemEx("CERTIFICATION_TYPE", Constants.CertificationType.ElectronicSignature.ToString())), .CertificationType = ObjectEx.ToEnum(Of Constants.CertificationType)(pRow.ItemEx("CERTIFICATION_TYPE", Constants.CertificationType.AdvancedElectronicSignature.ToString())),
.User = New User(), .User = New User(),
.ExpiresWhen = pRow.ItemEx(Of Date)("EXPIRES_WHEN", Nothing), .ExpiresWhen = pRow.ItemEx(Of Date)("EXPIRES_WHEN", Nothing),
.ExpiresWarningWhen = pRow.ItemEx(Of Date)("EXPIRES_WARNING_WHEN", Nothing), .ExpiresWarningWhen = pRow.ItemEx(Of Date)("EXPIRES_WARNING_WHEN", Nothing),
@@ -45,7 +46,8 @@ Public Class EnvelopeModel
.ReminderIntervalDays = pRow.ItemEx("REMINDER_INTERVAL_DAYS", 0), .ReminderIntervalDays = pRow.ItemEx("REMINDER_INTERVAL_DAYS", 0),
.UseAccessCode = pRow.ItemEx("USE_ACCESS_CODE", False), .UseAccessCode = pRow.ItemEx("USE_ACCESS_CODE", False),
.FinalEmailToCreator = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_CREATOR", Constants.FinalEmailType.No.ToString())), .FinalEmailToCreator = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_CREATOR", Constants.FinalEmailType.No.ToString())),
.FinalEmailToReceivers = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_RECEIVERS", Constants.FinalEmailType.No.ToString())) .FinalEmailToReceivers = ObjectEx.ToEnum(Of Constants.FinalEmailType)(pRow.ItemEx("FINAL_EMAIL_TO_RECEIVERS", Constants.FinalEmailType.No.ToString())),
.TFA_Enabled = pRow.ItemEx("TFA_Enabled", False)
} }
Dim oDOC_RESULT = pRow.Item("DOC_RESULT") Dim oDOC_RESULT = pRow.Item("DOC_RESULT")
If Not IsDBNull(oDOC_RESULT) Then If Not IsDBNull(oDOC_RESULT) Then
@@ -142,13 +144,17 @@ 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) " Dim oSql = $"INSERT INTO [dbo].[TBSIG_ENVELOPE] (MESSAGE, ENVELOPE_UUID, STATUS, USER_ID)
oSql += " VALUES (@MESSAGE, @UUID, @STATUS, @USER_ID)" VALUES('',
'{pEnvelope.Uuid}',
'{CInt([Enum].Parse(GetType(EnvelopeStatus), Constants.EnvelopeStatus.EnvelopeCreated))}',
'{pEnvelope.UserId}')"
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
If Database.ExecuteNonQuery(oCommand) Then If Database.ExecuteNonQuery(oCommand) Then
pEnvelope.Id = GetEnvelopeId(pEnvelope) pEnvelope.Id = GetEnvelopeId(pEnvelope)
@@ -182,9 +188,11 @@ Public Class EnvelopeModel
oSql += " [REMINDER_INTERVAL_DAYS] = @REMINDER_INTERVAL_DAYS, " oSql += " [REMINDER_INTERVAL_DAYS] = @REMINDER_INTERVAL_DAYS, "
oSql += " [SEND_REMINDER_EMAILS] = @SEND_REMINDER_EMAILS, " oSql += " [SEND_REMINDER_EMAILS] = @SEND_REMINDER_EMAILS, "
oSql += " [USE_ACCESS_CODE] = @USE_ACCESS_CODE, " oSql += " [USE_ACCESS_CODE] = @USE_ACCESS_CODE, "
oSql += " [CHANGED_WHEN] = GETDATE() " oSql += " [CHANGED_WHEN] = GETDATE(), "
oSql += " [TFA_Enabled] = @TFA_Enabled"
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("ID", SqlDbType.Int).Value = pEnvelope.Id
oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
@@ -206,7 +214,7 @@ Public Class EnvelopeModel
oCommand.Parameters.Add("REMINDER_INTERVAL_DAYS", SqlDbType.Int).Value = pEnvelope.ReminderIntervalDays 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("SEND_REMINDER_EMAILS", SqlDbType.Bit).Value = pEnvelope.SendReminderEmails
oCommand.Parameters.Add("USE_ACCESS_CODE", SqlDbType.Bit).Value = pEnvelope.UseAccessCode oCommand.Parameters.Add("USE_ACCESS_CODE", SqlDbType.Bit).Value = pEnvelope.UseAccessCode
oCommand.Parameters.Add("TFA_ENABLED", SqlDbType.Bit).Value = pEnvelope.TFA_Enabled
Return Database.ExecuteNonQuery(oCommand, pTransaction) Return Database.ExecuteNonQuery(oCommand, pTransaction)
Catch ex As Exception Catch ex As Exception

View File

@@ -1,4 +1,5 @@
Imports DigitalData.Modules.Base Imports DigitalData.Modules.Base
Imports EnvelopeGenerator.Common.Constants
Public Class EnvelopeTypeModel Public Class EnvelopeTypeModel
Inherits BaseModel Inherits BaseModel
@@ -21,7 +22,8 @@ Public Class EnvelopeTypeModel
.FinalEmailToCreator = pRow.ItemEx("FINAL_EMAIL_TO_CREATOR", 0), .FinalEmailToCreator = pRow.ItemEx("FINAL_EMAIL_TO_CREATOR", 0),
.FinalEmailToReceivers = pRow.ItemEx("FINAL_EMAIL_TO_RECEIVERS", 0), .FinalEmailToReceivers = pRow.ItemEx("FINAL_EMAIL_TO_RECEIVERS", 0),
.ContractType = pRow.ItemEx("CONTRACT_TYPE", 0), .ContractType = pRow.ItemEx("CONTRACT_TYPE", 0),
.CertificationType = pRow.ItemEx("CERTIFICATION_TYPE", 0) .CertificationType = pRow.ItemEx("CERTIFICATION_TYPE", 0),
.TFA_Enabled = pRow.ItemEx("TFA_Enabled", 0)
} }
End Function End Function

View File

@@ -33,7 +33,8 @@ Public Class ReceiverModel
.Status = ReceiverSignedStatus, .Status = ReceiverSignedStatus,
.ColorType = DirectCast(pColorIndex + 1, ColorType), .ColorType = DirectCast(pColorIndex + 1, ColorType),
.AccessCode = pRow.ItemEx("ACCESS_CODE", ""), .AccessCode = pRow.ItemEx("ACCESS_CODE", ""),
.SignedDate = SignedDate .SignedDate = SignedDate,
.PhoneNumber = pRow.ItemEx("PHONE_NUMBER", "")
} }
End Function End Function
@@ -56,25 +57,29 @@ Public Class ReceiverModel
Public Function Insert(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Public Function Insert(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean
Try Try
Dim oSql As String = "INSERT INTO [dbo].[TBSIG_RECEIVER] Dim oCheck = $"SELECT COUNT(GUID) FROM [dbo].[TBSIG_RECEIVER] WHERE SIGNATURE = '{pReceiver.GetSignature()}'"
Dim oExists = Database.GetScalarValue(oCheck)
If oExists = 0 Then
Dim oSql As String = $"INSERT INTO [dbo].[TBSIG_RECEIVER]
([EMAIL_ADDRESS] ([EMAIL_ADDRESS]
,[SIGNATURE]) ,[SIGNATURE])
VALUES VALUES
(@EMAIL ('{pReceiver.Email}'
,@SIGNATURE)" ,'{pReceiver.GetSignature()}')"
Dim oCommand = New SqlCommand(oSql) Dim oCommand = New SqlCommand(oSql)
oCommand.Parameters.Add("EMAIL", SqlDbType.NVarChar).Value = pReceiver.Email Dim oResult = Database.ExecuteNonQuery(oCommand)
oCommand.Parameters.Add("SIGNATURE", SqlDbType.NVarChar).Value = pReceiver.GetSignature() If oResult = True Then
pReceiver.Id = GetReceiverIdByEmail(pReceiver.Email, pTransaction)
Dim oResult = Database.ExecuteNonQuery(oCommand) Return True
If oResult = True Then Else
pReceiver.Id = GetReceiverIdByEmail(pReceiver.Email, pTransaction) Return False
End If
Else Else
Return False Logger.Warn($"Receiver [{pReceiver.Email}] already existing! Check collecting not existing Receivers!")
Return True
End If End If
Return True
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
Return False Return False
@@ -83,18 +88,18 @@ Public Class ReceiverModel
Public Function Update(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Public Function Update(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean
Try Try
Dim oSql As String = "UPDATE [dbo].[TBSIG_USER_RECEIVER] Dim oSql As String = $"UPDATE [dbo].[TBSIG_USER_RECEIVER]
SET [NAME] = @NAME SET [NAME] = '{pReceiver.Name}'
,[COMPANY_NAME] = @COMPANY ,[COMPANY_NAME] = '{pReceiver.Company}'
,[JOB_TITLE] = @JOB ,[JOB_TITLE] = '{pReceiver.JobTitle}'
WHERE RECEIVER_ID = @RECEIVER_ID" WHERE RECEIVER_ID = {pReceiver.Id}"
Dim oCommand = New SqlCommand(oSql) Dim oCommand = New SqlCommand(oSql)
oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name 'oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name
oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company 'oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company
oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle 'oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle
oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.Int).Value = pReceiver.Id 'oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.Int).Value = pReceiver.Id
oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pReceiver.Id 'oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pReceiver.Id
Return Database.ExecuteNonQuery(oCommand, pTransaction) Return Database.ExecuteNonQuery(oCommand, pTransaction)
Catch ex As Exception Catch ex As Exception
@@ -113,7 +118,7 @@ Public Class ReceiverModel
End Function End Function
Public Function Assign(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Public Function Assign(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean
Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE_RECEIVER] Dim oSql = $"INSERT INTO [dbo].[TBSIG_ENVELOPE_RECEIVER]
([ENVELOPE_ID] ([ENVELOPE_ID]
,[RECEIVER_ID] ,[RECEIVER_ID]
,[PRIVATE_MESSAGE] ,[PRIVATE_MESSAGE]
@@ -121,26 +126,28 @@ Public Class ReceiverModel
,[NAME] ,[NAME]
,[JOB_TITLE] ,[JOB_TITLE]
,[COMPANY_NAME] ,[COMPANY_NAME]
,[SEQUENCE]) ,[SEQUENCE]
,[PHONE_NUMBER])
VALUES VALUES
(@ENVELOPE_ID ('{pEnvelope.Id}'
,@RECEIVER_ID ,'{pReceiver.Id}'
,@MESSAGE ,'{pReceiver.PrivateMessage}'
,@ACCESS_CODE ,'{pReceiver.AccessCode}'
,@NAME ,'{pReceiver.Name}'
,@JOB ,'{pReceiver.JobTitle}'
,@COMPANY ,'{pReceiver.Company}'
,@SEQUENCE)" ,'{pReceiver.Sequence}'
,'{pReceiver.PhoneNumber}')"
Dim oCommand As New SqlCommand(oSql) Dim oCommand As New SqlCommand(oSql)
oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.NVarChar).Value = pEnvelope.Id 'oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.NVarChar).Value = pEnvelope.Id
oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.NVarChar).Value = pReceiver.Id 'oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.NVarChar).Value = pReceiver.Id
oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pReceiver.PrivateMessage 'oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pReceiver.PrivateMessage
oCommand.Parameters.Add("ACCESS_CODE", SqlDbType.NVarChar).Value = pReceiver.AccessCode 'oCommand.Parameters.Add("ACCESS_CODE", SqlDbType.NVarChar).Value = pReceiver.AccessCode
oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name 'oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name
oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle 'oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle
oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company 'oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company
oCommand.Parameters.Add("SEQUENCE", SqlDbType.NVarChar).Value = pReceiver.Sequence 'oCommand.Parameters.Add("SEQUENCE", SqlDbType.NVarChar).Value = pReceiver.Sequence
Return Database.ExecuteNonQuery(oCommand, pTransaction) Return Database.ExecuteNonQuery(oCommand, pTransaction)
End Function End Function
@@ -266,6 +273,22 @@ Public Class ReceiverModel
Return String.Empty Return String.Empty
End Try End Try
End Function End Function
Public Function GetLastUsedReceiverPhone(pEmailAddress As String, pUserId As Integer) As String
Try
Dim oSql As String
oSql = "SELECT TOP 1 [PHONE_NUMBER] FROM dbo.VWSIG_ENVELOPE_RECEIVERS "
oSql += $" WHERE ENV_USERID_CREATED = {pUserId} "
oSql += $" AND EMAIL_ADDRESS = '{pEmailAddress}' "
oSql += " AND Len([PHONE_NUMBER]) > 0 "
oSql += " ORDER BY [ADDED_WHEN] DESC"
Return Database.GetScalarValue(oSql)
Catch ex As Exception
Logger.Error(ex)
Return String.Empty
End Try
End Function
Private Function GetReceiverIdByEmail(pEmailAddress As String, pTransaction As SqlTransaction) As Integer Private Function GetReceiverIdByEmail(pEmailAddress As String, pTransaction As SqlTransaction) As Integer
Try Try

View File

@@ -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.9.3.0")> <Assembly: AssemblyVersion("2.3.0.0")>
<Assembly: AssemblyFileVersion("1.9.3.0")> <Assembly: AssemblyFileVersion("2.3.0.0")>

View File

@@ -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.3.0.0"), _ Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.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,33 +53,6 @@ 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

View File

@@ -1,15 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true"> <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles /> <Profiles />
<Settings> <Settings />
<Setting Name="RuninDMZ" Type="System.Boolean" Scope="Application">
<Value Profile="(Default)">False</Value>
</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> </SettingsFile>

View File

@@ -45,7 +45,7 @@ Public Class ActionService
Return oSendResult Return oSendResult
End Function End Function
Public Function ResendReceiver(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean Public Function ResendReceiver(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean
EmailService.SendDocumentReceivedEmail(pEnvelope, pReceiver) Return EmailService.SendDocumentReceivedEmail(pEnvelope, pReceiver)
End Function End Function

View File

@@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.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>
<data name="Dialog Concat PDF" xml:space="preserve">
<value>Please select the PDF documents you would like to link/concat:</value>
</data>
<data name="Do you really want to delete this envelope" xml:space="preserve"> <data name="Do you really want to delete this envelope" xml:space="preserve">
<value>Do you really want to delete this envelope?</value> <value>Do you really want to delete this envelope?</value>
</data> </data>
@@ -138,6 +141,15 @@
<data name="Document Could Not Be Saved" xml:space="preserve"> <data name="Document Could Not Be Saved" xml:space="preserve">
<value>Document could not be saved!</value> <value>Document could not be saved!</value>
</data> </data>
<data name="Document forwarded" xml:space="preserve">
<value>Document forwarded to receiver: {0}</value>
</data>
<data name="Drop only one file" xml:space="preserve">
<value>Currently, only one PDF file is permitted via drag and drop.</value>
</data>
<data name="Drop only pdf" xml:space="preserve">
<value />
</data>
<data name="Edit Envelope" xml:space="preserve"> <data name="Edit Envelope" xml:space="preserve">
<value>Edit Envelope</value> <value>Edit Envelope</value>
</data> </data>
@@ -165,6 +177,12 @@
<data name="Envelope-Editor" xml:space="preserve"> <data name="Envelope-Editor" xml:space="preserve">
<value>Envelope-Editor</value> <value>Envelope-Editor</value>
</data> </data>
<data name="Error email Validation" xml:space="preserve">
<value>The email [ @Mail ] could not be varified!</value>
</data>
<data name="Error phone Validation" xml:space="preserve">
<value />
</data>
<data name="Error sending the envelope" xml:space="preserve"> <data name="Error sending the envelope" xml:space="preserve">
<value>Error sending the envelope:</value> <value>Error sending the envelope:</value>
</data> </data>
@@ -187,7 +205,7 @@
<value>Receiver {0} has an invalid Email Address.</value> <value>Receiver {0} has an invalid Email Address.</value>
</data> </data>
<data name="Invitation successfully resend" xml:space="preserve"> <data name="Invitation successfully resend" xml:space="preserve">
<value>Invitation has been send once again!</value> <value>Invitation to [@Mail] has been send once again!</value>
</data> </data>
<data name="Missing Documents" xml:space="preserve"> <data name="Missing Documents" xml:space="preserve">
<value>Missing Documents</value> <value>Missing Documents</value>

View File

@@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.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>
<data name="Dialog Concat PDF" xml:space="preserve">
<value>Bitte wählen Sie die PDF-Dokumente die Sie verketten möchten:</value>
</data>
<data name="Do you really want to delete this envelope" xml:space="preserve"> <data name="Do you really want to delete this envelope" xml:space="preserve">
<value>Wollen Sie diesen Umschlag wirklich löschen?</value> <value>Wollen Sie diesen Umschlag wirklich löschen?</value>
</data> </data>
@@ -138,6 +141,12 @@
<data name="Document Could Not Be Saved" xml:space="preserve"> <data name="Document Could Not Be Saved" xml:space="preserve">
<value>Dokument konnte nicht gespeichert werden!</value> <value>Dokument konnte nicht gespeichert werden!</value>
</data> </data>
<data name="Document forwarded" xml:space="preserve">
<value>Umschlag an Empfänger {0} weitergeleitet.</value>
</data>
<data name="Drop only one file" xml:space="preserve">
<value>Aktuell ist per Drag and Drop nur eine PDF-Datei erlaubt.</value>
</data>
<data name="Edit Envelope" xml:space="preserve"> <data name="Edit Envelope" xml:space="preserve">
<value>Bearbeite Umschlag</value> <value>Bearbeite Umschlag</value>
</data> </data>
@@ -165,6 +174,13 @@
<data name="Envelope-Editor" xml:space="preserve"> <data name="Envelope-Editor" xml:space="preserve">
<value>Umschlag-Editor</value> <value>Umschlag-Editor</value>
</data> </data>
<data name="Error email Validation" xml:space="preserve">
<value>Die Email-Adresse [ @Mail ] konnte nicht validiert werden!</value>
</data>
<data name="Error phone Validation" xml:space="preserve">
<value>The mobile phone number [@PhoneNr] could not be validated.
Pattern: +491234567890</value>
</data>
<data name="Error sending the envelope" xml:space="preserve"> <data name="Error sending the envelope" xml:space="preserve">
<value>Fehler beim Senden des Umschlags:</value> <value>Fehler beim Senden des Umschlags:</value>
</data> </data>
@@ -187,7 +203,7 @@
<value>Empfänger {0} hat keine gültige Email Addresse.</value> <value>Empfänger {0} hat keine gültige Email Addresse.</value>
</data> </data>
<data name="Invitation successfully resend" xml:space="preserve"> <data name="Invitation successfully resend" xml:space="preserve">
<value>Die Einladung wurde nochmal versendet!</value> <value>Die Einladung an [@Mail] wurde nochmal versendet!</value>
</data> </data>
<data name="Missing Documents" xml:space="preserve"> <data name="Missing Documents" xml:space="preserve">
<value>Fehlendes Dokument</value> <value>Fehlendes Dokument</value>

View File

@@ -64,6 +64,15 @@ Namespace My.Resources
End Set End Set
End Property End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Bitte wählen Sie die PDF-Dokumente die Sie verketten möchten: ähnelt.
'''</summary>
Public Shared ReadOnly Property Dialog_Concat_PDF() As String
Get
Return ResourceManager.GetString("Dialog Concat PDF", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Wollen Sie diesen Umschlag wirklich löschen? ähnelt. ''' Sucht eine lokalisierte Zeichenfolge, die Wollen Sie diesen Umschlag wirklich löschen? ähnelt.
'''</summary> '''</summary>
@@ -127,6 +136,24 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Umschlag an Empfänger {0} weitergeleitet. ähnelt.
'''</summary>
Public Shared ReadOnly Property Document_forwarded() As String
Get
Return ResourceManager.GetString("Document forwarded", resourceCulture)
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Aktuell ist per Drag and Drop nur eine PDF-Datei erlaubt. ähnelt.
'''</summary>
Public Shared ReadOnly Property Drop_only_one_file() As String
Get
Return ResourceManager.GetString("Drop only one file", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Bearbeite Umschlag ähnelt. ''' Sucht eine lokalisierte Zeichenfolge, die Bearbeite Umschlag ähnelt.
'''</summary> '''</summary>
@@ -208,6 +235,25 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Die Email-Adresse [ @Mail ] konnte nicht validiert werden! ähnelt.
'''</summary>
Public Shared ReadOnly Property Error_email_Validation() As String
Get
Return ResourceManager.GetString("Error email Validation", resourceCulture)
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die The mobile phone number [@PhoneNr] could not be validated.
'''Pattern: +491234567890 ähnelt.
'''</summary>
Public Shared ReadOnly Property Error_phone_Validation() As String
Get
Return ResourceManager.GetString("Error phone Validation", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Fehler beim Senden des Umschlags: ähnelt. ''' Sucht eine lokalisierte Zeichenfolge, die Fehler beim Senden des Umschlags: ähnelt.
'''</summary> '''</summary>
@@ -272,7 +318,7 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Die Einladung wurde nochmal versendet! ähnelt. ''' Sucht eine lokalisierte Zeichenfolge, die Die Einladung an [@Mail] wurde nochmal versendet! ähnelt.
'''</summary> '''</summary>
Public Shared ReadOnly Property Invitation_successfully_resend() As String Public Shared ReadOnly Property Invitation_successfully_resend() As String
Get Get

View File

@@ -91,6 +91,15 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Fortgeschrittene Elektronische Signatur ähnelt.
'''</summary>
Public Shared ReadOnly Property AdvancedElectronicSignature() As String
Get
Return ResourceManager.GetString("AdvancedElectronicSignature", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Abgeschlossen ähnelt. ''' Sucht eine lokalisierte Zeichenfolge, die Abgeschlossen ähnelt.
'''</summary> '''</summary>
@@ -154,15 +163,6 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Elektronische Signatur ähnelt.
'''</summary>
Public Shared ReadOnly Property ElectronicSignature() As String
Get
Return ResourceManager.GetString("ElectronicSignature", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Archiviert ähnelt. ''' Sucht eine lokalisierte Zeichenfolge, die Archiviert ähnelt.
'''</summary> '''</summary>

View File

@@ -126,6 +126,9 @@
<data name="AccessCodeRequested" xml:space="preserve"> <data name="AccessCodeRequested" xml:space="preserve">
<value>Accesscode requested</value> <value>Accesscode requested</value>
</data> </data>
<data name="AdvancedElectronicSignature" xml:space="preserve">
<value>Advanced electronic signature</value>
</data>
<data name="Completed" xml:space="preserve"> <data name="Completed" xml:space="preserve">
<value>Completed</value> <value>Completed</value>
</data> </data>
@@ -144,9 +147,6 @@
<data name="Draft" xml:space="preserve"> <data name="Draft" xml:space="preserve">
<value>Draft</value> <value>Draft</value>
</data> </data>
<data name="ElectronicSignature" xml:space="preserve">
<value>Electronic Signature</value>
</data>
<data name="EnvelopeArchived" xml:space="preserve"> <data name="EnvelopeArchived" xml:space="preserve">
<value>Archived</value> <value>Archived</value>
</data> </data>

View File

@@ -126,6 +126,9 @@
<data name="AccessCodeRequested" xml:space="preserve"> <data name="AccessCodeRequested" xml:space="preserve">
<value>Zugriffscode angefordert</value> <value>Zugriffscode angefordert</value>
</data> </data>
<data name="AdvancedElectronicSignature" xml:space="preserve">
<value>Fortgeschrittene Elektronische Signatur</value>
</data>
<data name="Completed" xml:space="preserve"> <data name="Completed" xml:space="preserve">
<value>Abgeschlossen</value> <value>Abgeschlossen</value>
</data> </data>
@@ -147,9 +150,6 @@
<data name="Draft" xml:space="preserve"> <data name="Draft" xml:space="preserve">
<value>Entwurf</value> <value>Entwurf</value>
</data> </data>
<data name="ElectronicSignature" xml:space="preserve">
<value>Elektronische Signatur</value>
</data>
<data name="EnvelopeArchived" xml:space="preserve"> <data name="EnvelopeArchived" xml:space="preserve">
<value>Archiviert</value> <value>Archiviert</value>
</data> </data>

View File

@@ -2,9 +2,6 @@
<configuration> <configuration>
<configSections> <configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="EnvelopeGenerator.Common.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections> </configSections>
<system.diagnostics> <system.diagnostics>
<sources> <sources>
@@ -29,17 +26,4 @@
</sharedListeners> </sharedListeners>
</system.diagnostics> </system.diagnostics>
<applicationSettings>
<EnvelopeGenerator.Common.My.MySettings>
<setting name="RuninDMZ" serializeAs="String">
<value>False</value>
</setting>
<setting name="NetUse_Usr" serializeAs="String">
<value>dd-gan\Administrator</value>
</setting>
<setting name="NetUse_PW" serializeAs="String">
<value>sY4vnATDXwosbTJGip6SqA==</value>
</setting>
</EnvelopeGenerator.Common.My.MySettings>
</applicationSettings>
</configuration> </configuration>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="GdPicture" version="14.2.89" targetFramework="net462" /> <package id="GdPicture" version="14.2.90" targetFramework="net462" />
<package id="GdPicture.runtimes.windows" version="14.2.89" targetFramework="net462" /> <package id="GdPicture.runtimes.windows" version="14.2.90" targetFramework="net462" />
<package id="Microsoft.Extensions.Logging.Abstractions" version="2.1.1" targetFramework="net462" /> <package id="Microsoft.Extensions.Logging.Abstractions" version="2.1.1" targetFramework="net462" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" /> <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
<package id="Quartz" version="3.8.0" targetFramework="net462" /> <package id="Quartz" version="3.8.0" targetFramework="net462" />

View File

@@ -1,6 +1,7 @@
using DigitalData.Core.Abstractions; using DigitalData.Core.Abstractions;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities
{ {
@@ -23,19 +24,9 @@ namespace EnvelopeGenerator.Domain.Entities
[Column("EXPORT_PATH", TypeName = "nvarchar(256)")] [Column("EXPORT_PATH", TypeName = "nvarchar(256)")]
public string? ExportPath { get; init; } public string? ExportPath { get; init; }
[Column("DOCUMENT_PATH_DMZ", TypeName = "nvarchar(512)")]
[Required]
public string? DocumentPathDmz { get; init; }
[Column("EXPORT_PATH_DMZ", TypeName = "nvarchar(512)")]
[Required]
public required string ExportPathDmz { get; init; }
[Column("DOCUMENT_PATH_MOVE_AFTSEND", TypeName = "nvarchar(512)")]
[Required]
public required string DocumentPathMoveAftsend { get; init; }
[Obsolete("Configuration does not have an ID; it represents a single table in the database.")] [Obsolete("Configuration does not have an ID; it represents a single table in the database.")]
[NotMapped]
[JsonIgnore]
public int Id => throw new InvalidOperationException("This configuration does not support an ID as 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 table in the database.");
} }
} }

View File

@@ -84,9 +84,8 @@ namespace EnvelopeGenerator.Domain.Entities
[Column("EXPIRES_WARNING_WHEN_DAYS")] [Column("EXPIRES_WARNING_WHEN_DAYS")]
public int? ExpiresWarningWhenDays { get; set; } public int? ExpiresWarningWhenDays { get; set; }
[Required] [Column("TFA_ENABLED", TypeName = "bit")]
[Column("DMZ_MOVED")] public bool TFAEnabled { get; set; }
public bool DmzMoved { get; set; }
/// <summary> /// <summary>
/// The sender of envelope /// The sender of envelope

View File

@@ -16,20 +16,12 @@ namespace EnvelopeGenerator.Domain.Entities
[Column("ENVELOPE_ID")] [Column("ENVELOPE_ID")]
public int EnvelopeId { get; set; } public int EnvelopeId { get; set; }
[Required]
[Column("FILENAME", TypeName = "nvarchar(256)")]
public required string Filename { get; set; }
[Required]
[Column("FILEPATH", TypeName = "nvarchar(256)")]
public required string Filepath { get; set; }
[Required] [Required]
[Column("ADDED_WHEN", TypeName = "datetime")] [Column("ADDED_WHEN", TypeName = "datetime")]
public required DateTime AddedWhen { get; set; } public required DateTime AddedWhen { get; set; }
[Column("FILENAME_ORIGINAL", TypeName = "nvarchar(256)")] [Column("BYTE_DATA", TypeName = "varbinary(max)")]
public required string FilenameOriginal { get; set; } public byte[]? ByteData { get; init; }
public IEnumerable<DocumentReceiverElement>? Elements { get; set; } public IEnumerable<DocumentReceiverElement>? Elements { get; set; }
} }

View File

@@ -41,6 +41,15 @@ namespace EnvelopeGenerator.Domain.Entities
[Column("CHANGED_WHEN", TypeName = "datetime")] [Column("CHANGED_WHEN", TypeName = "datetime")]
public DateTime? ChangedWhen { get; set; } public DateTime? ChangedWhen { get; set; }
[Column("PHONE_NUMBER")]
[StringLength(20)]
[RegularExpression(@"^\+[0-9]+$", ErrorMessage = "Phone number must start with '+' followed by digits.")]
public string? PhoneNumber { get; set; }
[NotMapped]
public (int Envelope, int Receiver) Id => (Envelope: EnvelopeId, Receiver: ReceiverId); public (int Envelope, int Receiver) Id => (Envelope: EnvelopeId, Receiver: ReceiverId);
[NotMapped]
public bool HasPhoneNumber => !string.IsNullOrWhiteSpace(PhoneNumber);
} }
} }

View File

@@ -2,28 +2,33 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities;
[Table("TBSIG_RECEIVER", Schema = "dbo")]
public class Receiver : IUnique<int>
{ {
[Table("TBSIG_RECEIVER", Schema = "dbo")] [Key]
public class Receiver : IUnique<int> [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
{ [Column("GUID")]
[Key] public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("GUID")] [Required, EmailAddress]
public int Id { get; set; } [Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")]
public required string EmailAddress { get; set; }
[Required, EmailAddress]
[Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")]
public required string EmailAddress { get; set; }
[Required] [Required]
[Column("SIGNATURE", TypeName = "nvarchar(64)")] [Column("SIGNATURE", TypeName = "nvarchar(64)")]
public required string Signature { get; set; } public required string Signature { get; set; }
[Required] [Required]
[Column("ADDED_WHEN", TypeName = "datetime")] [Column("ADDED_WHEN", TypeName = "datetime")]
public DateTime AddedWhen { get; set; } public DateTime AddedWhen { get; set; }
public IEnumerable<EnvelopeReceiver>? EnvelopeReceivers { get; init; } [Column("TOTP_SECRET_KEY", TypeName = "nvarchar(MAX)")]
} public string? TotpSecretkey { get; set; }
[Column("TFA_REG_DEADLINE", TypeName = "datetime")]
public DateTime? TfaRegDeadline { get; set; }
public IEnumerable<EnvelopeReceiver>? EnvelopeReceivers { get; init; }
} }

View File

@@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DigitalData.Core.Abstractions" Version="2.0.0" /> <PackageReference Include="DigitalData.Core.Abstractions" Version="2.2.1" />
<PackageReference Include="DigitalData.EmailProfilerDispatcher.Abstraction" Version="1.0.0" /> <PackageReference Include="DigitalData.EmailProfilerDispatcher.Abstraction" Version="1.0.0" />
<PackageReference Include="UserManager.Domain" Version="1.0.0" /> <PackageReference Include="UserManager.Domain" Version="1.0.0" />
</ItemGroup> </ItemGroup>

View File

@@ -10,6 +10,7 @@
<PackageReference Include="HtmlSanitizer" Version="8.0.865" /> <PackageReference Include="HtmlSanitizer" Version="8.0.865" />
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="7.0.19" /> <PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="7.0.19" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Otp.NET" Version="1.4.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -0,0 +1,14 @@
using OtpNet;
namespace EnvelopeGenerator.Extensions
{
public static class StringExtension
{
public static bool IsValidTotp(this string totp, string secret)
{
var secret_bytes = Base32Encoding.ToBytes(secret);
var secret_totp = new Totp(secret_bytes);
return secret_totp.VerifyTotp(totp, out _, VerificationWindow.RfcSpecifiedNetworkDelay);
}
}
}

View File

@@ -65,7 +65,8 @@ Public Class EnvelopeEditorController
Public Function CreateEnvelope() As Envelope Public Function CreateEnvelope() As Envelope
Dim oEnvelope As New Envelope() With { Dim oEnvelope As New Envelope() With {
.UserId = State.UserId, .UserId = State.UserId,
.User = UserModel.SelectUser() .User = UserModel.SelectUser(),
.TFA_Enabled = DEF_TF_ENABLED
} }
If EnvelopeModel.Insert(oEnvelope) Then If EnvelopeModel.Insert(oEnvelope) Then
@@ -87,11 +88,13 @@ Public Class EnvelopeEditorController
Public Function SaveReceivers(pEnvelope As Envelope, pReceiversFromGrid As List(Of EnvelopeReceiver)) As Boolean Public Function SaveReceivers(pEnvelope As Envelope, pReceiversFromGrid As List(Of EnvelopeReceiver)) As Boolean
Dim oExistingReceivers As List(Of EnvelopeReceiver) = ReceiverModel.ListReceivers(pReceiversFromGrid).ToList() Dim oExistingReceivers As List(Of EnvelopeReceiver) = ReceiverModel.ListReceivers(pReceiversFromGrid).ToList()
Dim oExistingAddresses = oExistingReceivers.Select(Function(r) r.Email) Dim oExistingAddresses = oExistingReceivers.Select(Function(r) r.Email)
Logger.Debug($"oExistingReceivers.count: {oExistingReceivers.Count}")
Logger.Debug($"oExistingAddresses.count: {oExistingAddresses.Count}")
Dim oNewReceivers = pReceiversFromGrid.Where(Function(r) Dim oNewReceivers = pReceiversFromGrid.Where(Function(r)
If r.Email Is Nothing Then Return False If r.Email Is Nothing Then Return False
Return Not oExistingAddresses.Contains(r.Email) Return Not oExistingAddresses.Contains(r.Email)
End Function).ToList() End Function).ToList()
Logger.Debug($"oNewReceivers.count: {oNewReceivers.Count}")
If CreateNewReceivers(oNewReceivers) = False Then If CreateNewReceivers(oNewReceivers) = False Then
Return False Return False
End If End If
@@ -158,6 +161,7 @@ Public Class EnvelopeEditorController
Dim oTempFilePath = Path.Combine(oTempFiles.TempPath, Guid.NewGuid().ToString + oFileInfo.Extension) Dim oTempFilePath = Path.Combine(oTempFiles.TempPath, Guid.NewGuid().ToString + oFileInfo.Extension)
Await Helpers.CopyFileAsync(oFileInfo.FullName, oTempFilePath) Await Helpers.CopyFileAsync(oFileInfo.FullName, oTempFilePath)
'File.Copy(oFileInfo.FullName, oTempFilePath, True) 'File.Copy(oFileInfo.FullName, oTempFilePath, True)
Dim oFileInfoTemp = New FileInfo(oTempFilePath) Dim oFileInfoTemp = New FileInfo(oTempFilePath)
@@ -175,6 +179,7 @@ Public Class EnvelopeEditorController
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
Logger.Warn($"error in CreateDocument: {ex.Message}")
Return Nothing Return Nothing
End Try End Try
End Function End Function
@@ -288,7 +293,9 @@ Public Class EnvelopeEditorController
#End Region #End Region
Private Function GetEnvelopePath(pEnvelope As Envelope) As String Private Function GetEnvelopePath(pEnvelope As Envelope) As String
Try Try
Dim oEnvelopePath As String = Path.Combine(State.DbConfig.DocumentPath, pEnvelope.Uuid) Dim oTempFiles As New TempFiles(State.LogConfig)
Dim oTempFolderPath = oTempFiles.TempPath
Dim oEnvelopePath As String = Path.Combine(oTempFolderPath, pEnvelope.Uuid)
If Not Directory.Exists(oEnvelopePath) Then If Not Directory.Exists(oEnvelopePath) Then
Directory.CreateDirectory(oEnvelopePath) Directory.CreateDirectory(oEnvelopePath)
@@ -402,4 +409,11 @@ Public Class EnvelopeEditorController
Return String.Empty Return String.Empty
End If End If
End Function End Function
Public Function GetLastPhoneByEmailAdress(pEmailAdress As String) As String
If (String.IsNullOrEmpty(pEmailAdress) = False) Then
Return ReceiverModel.GetLastUsedReceiverPhone(pEmailAdress, Envelope.UserId)
Else
Return String.Empty
End If
End Function
End Class End Class

View File

@@ -54,6 +54,7 @@
<Reference Include="DevExpress.Charts.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" /> <Reference Include="DevExpress.Charts.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v21.2" /> <Reference Include="DevExpress.Data.v21.2" />
<Reference Include="DevExpress.Data.Desktop.v21.2" /> <Reference Include="DevExpress.Data.Desktop.v21.2" />
<Reference Include="DevExpress.Dialogs.v21.2.Core, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v21.2" /> <Reference Include="DevExpress.Utils.v21.2" />
<Reference Include="DevExpress.Sparkline.v21.2.Core" /> <Reference Include="DevExpress.Sparkline.v21.2.Core" />
<Reference Include="DevExpress.Utils.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> <Reference Include="DevExpress.Utils.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
@@ -64,6 +65,7 @@
</Reference> </Reference>
<Reference Include="DevExpress.XtraCharts.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" /> <Reference Include="DevExpress.XtraCharts.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v21.2.Wizard, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> <Reference Include="DevExpress.XtraCharts.v21.2.Wizard, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraDialogs.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v21.2" /> <Reference Include="DevExpress.XtraEditors.v21.2" />
<Reference Include="DevExpress.Printing.v21.2.Core" /> <Reference Include="DevExpress.Printing.v21.2.Core" />
<Reference Include="DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" /> <Reference Include="DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
@@ -71,14 +73,15 @@
<Reference Include="DevExpress.XtraNavBar.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" /> <Reference Include="DevExpress.XtraNavBar.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraPrinting.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> <Reference Include="DevExpress.XtraPrinting.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> <Reference Include="DevExpress.XtraTreeList.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DigitalData.Controls.DocumentViewer"> <Reference Include="DigitalData.Controls.DocumentViewer, Version=1.9.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\DDMonorepo\Controls.DocumentViewer\bin\Debug\DigitalData.Controls.DocumentViewer.dll</HintPath> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\2_DLL Projekte\DDMonorepo\Controls.DocumentViewer\bin\Debug\DigitalData.Controls.DocumentViewer.dll</HintPath>
</Reference> </Reference>
<Reference Include="DigitalData.GUIs.Common"> <Reference Include="DigitalData.GUIs.Common">
<HintPath>..\..\DDMonorepo\GUIs.Common\bin\Debug\DigitalData.GUIs.Common.dll</HintPath> <HintPath>..\..\2_DLL Projekte\DDMonorepo\GUIs.Common\bin\Debug\DigitalData.GUIs.Common.dll</HintPath>
</Reference> </Reference>
<Reference Include="DigitalData.Modules.Base"> <Reference Include="DigitalData.Modules.Base">
<HintPath>..\..\DDModules\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath> <HintPath>..\..\2_DLL Projekte\DDModules\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath>
</Reference> </Reference>
<Reference Include="DigitalData.Modules.Config, Version=1.2.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="DigitalData.Modules.Config, Version=1.2.2.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
@@ -99,13 +102,14 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\EnvelopeGenerator.Common\bin\Debug\EnvelopeGenerator.Common.dll</HintPath> <HintPath>..\EnvelopeGenerator.Common\bin\Debug\EnvelopeGenerator.Common.dll</HintPath>
</Reference> </Reference>
<Reference Include="GdPicture.NET.14, Version=14.2.89.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL"> <Reference Include="GdPicture.NET.14, Version=14.2.90.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.2.89\lib\net462\GdPicture.NET.14.dll</HintPath> <HintPath>..\packages\GdPicture.14.2.90\lib\net462\GdPicture.NET.14.dll</HintPath>
</Reference> </Reference>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> <Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath> <HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data.Linq" /> <Reference Include="System.Data.Linq" />
@@ -165,6 +169,12 @@
<Compile Include="frmMain.vb"> <Compile Include="frmMain.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="frmOrderFiles.Designer.vb">
<DependentUpon>frmOrderFiles.vb</DependentUpon>
</Compile>
<Compile Include="frmOrderFiles.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmRueckruf.Designer.vb"> <Compile Include="frmRueckruf.Designer.vb">
<DependentUpon>frmRueckruf.vb</DependentUpon> <DependentUpon>frmRueckruf.vb</DependentUpon>
</Compile> </Compile>
@@ -203,6 +213,7 @@
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmEnvelopeMainData.resx"> <EmbeddedResource Include="frmEnvelopeMainData.resx">
<DependentUpon>frmEnvelopeMainData.vb</DependentUpon> <DependentUpon>frmEnvelopeMainData.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmFieldEditor.en.resx"> <EmbeddedResource Include="frmFieldEditor.en.resx">
<DependentUpon>frmFieldEditor.vb</DependentUpon> <DependentUpon>frmFieldEditor.vb</DependentUpon>
@@ -219,6 +230,9 @@
<DependentUpon>frmMain.vb</DependentUpon> <DependentUpon>frmMain.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmOrderFiles.resx">
<DependentUpon>frmOrderFiles.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmRueckruf.resx"> <EmbeddedResource Include="frmRueckruf.resx">
<DependentUpon>frmRueckruf.vb</DependentUpon> <DependentUpon>frmRueckruf.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
@@ -271,12 +285,12 @@
</ProjectReference> </ProjectReference>
</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')" /> <Import Project="..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets" Condition="Exists('..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <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> <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> </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'))" /> <Error Condition="!Exists('..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\GdPicture.runtimes.windows.14.2.90\build\net462\GdPicture.runtimes.windows.targets'))" />
</Target> </Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -1,10 +1,20 @@
Imports DigitalData.Modules.Database Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports EnvelopeGenerator.Common
Module ModuleSettings Module ModuleSettings
Public DOCUMENT_PATH_MOVE_AFTSEND As String = "" Public ENVELOPE_TEMP_DOCUMENT As String = ""
Public CurrLogConfig As LogConfig Public CurrLogConfig As LogConfig
Public Directory2Delete As String = "" Public Directory2Delete As String = ""
Public MS_GDPICTUREKEY As String = "" Public MS_GDPICTUREKEY As String = ""
Public DB_DD_ECM As MSSQLServer = Nothing Public DB_DD_ECM As MSSQLServer = Nothing
Public DEF_TF_ENABLED As Boolean = False
Public DEF_TF_ENABLED_WITH_PHONE As Boolean = False
Public MYUSER As User
Public MyTempFiles As TempFiles
Public SQL_REP_ENV_USER_LM As String = ""
Public SQL_REP_ENV_USER_TM As String = ""
Public SQL_REP_ENV_USER_Y As String = ""
Public SQL_REP_ENV_USER_ALL As String = ""
Public DT_CHARTS As DataTable
End Module End Module

View File

@@ -11,7 +11,7 @@ Imports System.Runtime.InteropServices
<Assembly: AssemblyCompany("Digital Data")> <Assembly: AssemblyCompany("Digital Data")>
<Assembly: AssemblyProduct("Envelope Generator")> <Assembly: AssemblyProduct("Envelope Generator")>
<Assembly: AssemblyCopyright("Copyright © 2024")> <Assembly: AssemblyCopyright("Copyright © 2024")>
<Assembly: AssemblyTrademark("2.4.5.0")> <Assembly: AssemblyTrademark("2.8.0.0")>
<Assembly: AssemblyCulture("")> <Assembly: AssemblyCulture("")>
' Setting ComVisible to false makes the types in this assembly not visible ' Setting ComVisible to false makes the types in this assembly not visible
@@ -32,5 +32,5 @@ Imports System.Runtime.InteropServices
' You can specify all the values or you can default the Build and Revision Numbers ' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below: ' by using the '*' as shown below:
' [assembly: AssemblyVersion("1.0.*")] ' [assembly: AssemblyVersion("1.0.*")]
<Assembly: AssemblyVersion("2.7.0.0")> <Assembly: AssemblyVersion("2.8.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")> <Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@@ -72,7 +72,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="GdPicture.NET.14" publicKeyToken="f52a2e60ad468dbb" culture="neutral" /> <assemblyIdentity name="GdPicture.NET.14" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.2.89.0" newVersion="14.2.89.0" /> <bindingRedirect oldVersion="0.0.0.0-14.2.90.0" newVersion="14.2.90.0" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@@ -56,8 +56,11 @@ Partial Public Class frmEnvelopeEditor
Me.txtCreatorEmailLabel = New DevExpress.XtraBars.BarStaticItem() Me.txtCreatorEmailLabel = New DevExpress.XtraBars.BarStaticItem()
Me.txtEnvelopeIdLabel2 = New DevExpress.XtraBars.BarStaticItem() Me.txtEnvelopeIdLabel2 = New DevExpress.XtraBars.BarStaticItem()
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
Me.BarStaticItem1 = New DevExpress.XtraBars.BarStaticItem() Me.bsitm_info = New DevExpress.XtraBars.BarStaticItem()
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
Me.bbtnitm_ConcatFiles = New DevExpress.XtraBars.BarButtonItem()
Me.btnShowFile = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroupDocuments = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroupDocuments = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
@@ -80,6 +83,7 @@ Partial Public Class frmEnvelopeEditor
Me.RepositoryItemComboBox1 = New DevExpress.XtraEditors.Repository.RepositoryItemComboBox() Me.RepositoryItemComboBox1 = New DevExpress.XtraEditors.Repository.RepositoryItemComboBox()
Me.colName = New DevExpress.XtraGrid.Columns.GridColumn() Me.colName = New DevExpress.XtraGrid.Columns.GridColumn()
Me.colAccessCode = New DevExpress.XtraGrid.Columns.GridColumn() Me.colAccessCode = New DevExpress.XtraGrid.Columns.GridColumn()
Me.colPhoneNumber = New DevExpress.XtraGrid.Columns.GridColumn()
Me.RepositoryItemEmailEdit = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit() Me.RepositoryItemEmailEdit = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit()
Me.RepositoryItemPictureEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit() Me.RepositoryItemPictureEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit()
Me.RepositoryItemColorPickEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemColorPickEdit() Me.RepositoryItemColorPickEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemColorPickEdit()
@@ -240,9 +244,9 @@ Partial Public Class frmEnvelopeEditor
'RibbonControl1 'RibbonControl1
' '
Me.RibbonControl1.ExpandCollapseItem.Id = 0 Me.RibbonControl1.ExpandCollapseItem.Id = 0
Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.btnSave, Me.btnCancel, Me.btnNewFile, Me.btnDeleteFile, Me.btnSendEnvelope, Me.btnEditFields, Me.btnDeleteReceiver, Me.btnEditData, Me.txtCreatorEmailLabel, Me.txtEnvelopeIdLabel2, Me.BarButtonItem1, Me.BarStaticItem1, Me.BarButtonItem2}) Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.btnSave, Me.btnCancel, Me.btnNewFile, Me.btnDeleteFile, Me.btnSendEnvelope, Me.btnEditFields, Me.btnDeleteReceiver, Me.btnEditData, Me.txtCreatorEmailLabel, Me.txtEnvelopeIdLabel2, Me.BarButtonItem1, Me.bsitm_info, Me.BarButtonItem2, Me.BarButtonItem3, Me.bbtnitm_ConcatFiles, Me.btnShowFile})
resources.ApplyResources(Me.RibbonControl1, "RibbonControl1") resources.ApplyResources(Me.RibbonControl1, "RibbonControl1")
Me.RibbonControl1.MaxItemId = 15 Me.RibbonControl1.MaxItemId = 18
Me.RibbonControl1.Name = "RibbonControl1" Me.RibbonControl1.Name = "RibbonControl1"
Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
@@ -331,10 +335,10 @@ Partial Public Class frmEnvelopeEditor
Me.BarButtonItem1.Id = 12 Me.BarButtonItem1.Id = 12
Me.BarButtonItem1.Name = "BarButtonItem1" Me.BarButtonItem1.Name = "BarButtonItem1"
' '
'BarStaticItem1 'bsitm_info
' '
Me.BarStaticItem1.Id = 13 Me.bsitm_info.Id = 13
Me.BarStaticItem1.Name = "BarStaticItem1" Me.bsitm_info.Name = "bsitm_info"
' '
'BarButtonItem2 'BarButtonItem2
' '
@@ -342,6 +346,26 @@ Partial Public Class frmEnvelopeEditor
Me.BarButtonItem2.Id = 14 Me.BarButtonItem2.Id = 14
Me.BarButtonItem2.Name = "BarButtonItem2" Me.BarButtonItem2.Name = "BarButtonItem2"
' '
'BarButtonItem3
'
resources.ApplyResources(Me.BarButtonItem3, "BarButtonItem3")
Me.BarButtonItem3.Id = 15
Me.BarButtonItem3.Name = "BarButtonItem3"
'
'bbtnitm_ConcatFiles
'
resources.ApplyResources(Me.bbtnitm_ConcatFiles, "bbtnitm_ConcatFiles")
Me.bbtnitm_ConcatFiles.Id = 16
Me.bbtnitm_ConcatFiles.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitm_ConcatFiles.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.bbtnitm_ConcatFiles.Name = "bbtnitm_ConcatFiles"
'
'btnShowFile
'
resources.ApplyResources(Me.btnShowFile, "btnShowFile")
Me.btnShowFile.Id = 17
Me.btnShowFile.ImageOptions.SvgImage = CType(resources.GetObject("btnShowFile.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.btnShowFile.Name = "btnShowFile"
'
'RibbonPage1 'RibbonPage1
' '
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroupDocuments, Me.RibbonPageGroupInvitation, Me.RibbonPageGroupAddSignature, Me.RibbonPageGroupReceiver}) Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroupDocuments, Me.RibbonPageGroupInvitation, Me.RibbonPageGroupAddSignature, Me.RibbonPageGroupReceiver})
@@ -359,7 +383,9 @@ Partial Public Class frmEnvelopeEditor
'RibbonPageGroupDocuments 'RibbonPageGroupDocuments
' '
Me.RibbonPageGroupDocuments.ItemLinks.Add(Me.btnNewFile) Me.RibbonPageGroupDocuments.ItemLinks.Add(Me.btnNewFile)
Me.RibbonPageGroupDocuments.ItemLinks.Add(Me.bbtnitm_ConcatFiles)
Me.RibbonPageGroupDocuments.ItemLinks.Add(Me.btnDeleteFile) Me.RibbonPageGroupDocuments.ItemLinks.Add(Me.btnDeleteFile)
Me.RibbonPageGroupDocuments.ItemLinks.Add(Me.btnShowFile)
Me.RibbonPageGroupDocuments.Name = "RibbonPageGroupDocuments" Me.RibbonPageGroupDocuments.Name = "RibbonPageGroupDocuments"
resources.ApplyResources(Me.RibbonPageGroupDocuments, "RibbonPageGroupDocuments") resources.ApplyResources(Me.RibbonPageGroupDocuments, "RibbonPageGroupDocuments")
' '
@@ -386,7 +412,7 @@ Partial Public Class frmEnvelopeEditor
' '
Me.RibbonStatusBar1.ItemLinks.Add(Me.txtCreatorEmailLabel) Me.RibbonStatusBar1.ItemLinks.Add(Me.txtCreatorEmailLabel)
Me.RibbonStatusBar1.ItemLinks.Add(Me.txtEnvelopeIdLabel2) Me.RibbonStatusBar1.ItemLinks.Add(Me.txtEnvelopeIdLabel2)
Me.RibbonStatusBar1.ItemLinks.Add(Me.BarStaticItem1) Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitm_info)
resources.ApplyResources(Me.RibbonStatusBar1, "RibbonStatusBar1") resources.ApplyResources(Me.RibbonStatusBar1, "RibbonStatusBar1")
Me.RibbonStatusBar1.Name = "RibbonStatusBar1" Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1 Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
@@ -466,7 +492,7 @@ Partial Public Class frmEnvelopeEditor
'ViewReceivers 'ViewReceivers
' '
Me.ViewReceivers.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple Me.ViewReceivers.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple
Me.ViewReceivers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colColor, Me.colEmail, Me.colName, Me.colAccessCode}) Me.ViewReceivers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colColor, Me.colEmail, Me.colName, Me.colAccessCode, Me.colPhoneNumber})
Me.ViewReceivers.GridControl = Me.GridReceivers Me.ViewReceivers.GridControl = Me.GridReceivers
Me.ViewReceivers.Name = "ViewReceivers" Me.ViewReceivers.Name = "ViewReceivers"
Me.ViewReceivers.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[True] Me.ViewReceivers.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[True]
@@ -526,6 +552,12 @@ Partial Public Class frmEnvelopeEditor
Me.colAccessCode.OptionsColumn.AllowEdit = False Me.colAccessCode.OptionsColumn.AllowEdit = False
Me.colAccessCode.OptionsColumn.ReadOnly = True Me.colAccessCode.OptionsColumn.ReadOnly = True
' '
'colPhoneNumber
'
resources.ApplyResources(Me.colPhoneNumber, "colPhoneNumber")
Me.colPhoneNumber.FieldName = "PhoneNumber"
Me.colPhoneNumber.Name = "colPhoneNumber"
'
'RepositoryItemEmailEdit 'RepositoryItemEmailEdit
' '
resources.ApplyResources(Me.RepositoryItemEmailEdit, "RepositoryItemEmailEdit") resources.ApplyResources(Me.RepositoryItemEmailEdit, "RepositoryItemEmailEdit")
@@ -661,6 +693,7 @@ Partial Public Class frmEnvelopeEditor
' '
'frmEnvelopeEditor 'frmEnvelopeEditor
' '
Me.AllowDrop = True
resources.ApplyResources(Me, "$this") resources.ApplyResources(Me, "$this")
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Controls.Add(Me.SplitContainerControl1) Me.Controls.Add(Me.SplitContainerControl1)
@@ -781,8 +814,12 @@ Partial Public Class frmEnvelopeEditor
Friend WithEvents txtEnvelopeIdLabel2 As DevExpress.XtraBars.BarStaticItem Friend WithEvents txtEnvelopeIdLabel2 As DevExpress.XtraBars.BarStaticItem
Friend WithEvents colPageCount As DevExpress.XtraGrid.Columns.TileViewColumn Friend WithEvents colPageCount As DevExpress.XtraGrid.Columns.TileViewColumn
Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarStaticItem1 As DevExpress.XtraBars.BarStaticItem Friend WithEvents bsitm_info As DevExpress.XtraBars.BarStaticItem
Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarButtonItem3 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents bbtnitm_ConcatFiles As DevExpress.XtraBars.BarButtonItem
Friend WithEvents colPhoneNumber As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents btnShowFile As DevExpress.XtraBars.BarButtonItem
#End Region #End Region

View File

@@ -213,7 +213,7 @@
</value> </value>
</data> </data>
<data name="btnNewFile.Caption" xml:space="preserve"> <data name="btnNewFile.Caption" xml:space="preserve">
<value>Neues Dokument</value> <value>Ein PDF-Dokument hinzufügen</value>
</data> </data>
<data name="btnNewFile.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnNewFile.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
@@ -322,35 +322,30 @@
</value> </value>
</data> </data>
<data name="btnEditData.Caption" xml:space="preserve"> <data name="btnEditData.Caption" xml:space="preserve">
<value>Titel und Typ</value> <value>Eigenschaften</value>
</data> </data>
<data name="btnEditData.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnEditData.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABwFAAAC77u/ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAOYDAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg Y2U9InByZXNlcnZlIiBpZD0iRG9jdW1lbnRfUHJvcGVydGllcyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3Jv
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ dW5kOm5ldyAwIDAgMzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3 IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQo8L3N0eWxlPg0KICA8cGF0aCBkPSJNMzAsMjV2
RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh LTJsLTIuMi0wLjRjLTAuMi0wLjYtMC40LTEuMy0wLjctMS44bDEuMy0xLjhsLTEuNC0xLjRsLTEuOCwx
Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm LjNjLTAuNS0wLjMtMS4yLTAuNi0xLjgtMC43TDIzLDE2aC0yICBsLTAuNCwyLjJjLTAuNiwwLjItMS4z
aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyAvPg0KICA8ZyBpZD0iUmVuYW1lXzFfIj4NCiAgICA8 LDAuNC0xLjgsMC43bC0xLjgtMS4zbC0xLjQsMS40bDEuMywxLjhjLTAuMywwLjUtMC42LDEuMi0wLjcs
cGF0aCBkPSJNMi4xLDE2aDIuMmwwLjYtMi4zaDMuMkw4LjgsMTZIMTFMNy44LDZINS40TDIuMSwxNnog MS44TDE0LDIzdjJsMi4yLDAuNGMwLjIsMC42LDAuNCwxLjMsMC43LDEuOCAgbC0xLjMsMS44bDEuNCwx
TTYuNCw4LjdjMC4xLTAuMywwLjEtMC42LDAuMS0wLjloMC4xICAgYzAsMC4zLDAuMSwwLjYsMC4xLDAu LjRsMS44LTEuM2MwLjUsMC4zLDEuMiwwLjYsMS44LDAuN0wyMSwzMmgybDAuNC0yLjJjMC42LTAuMiwx
OWwxLDMuM0g1LjRMNi40LDguN3ogTTE3LjUsMTAuNmMwLjYtMC4yLDEuMS0wLjUsMS41LTAuOWMwLjQt LjMtMC40LDEuOC0wLjdsMS44LDEuM2wxLjQtMS40bC0xLjMtMS44ICBjMC4zLTAuNSwwLjYtMS4yLDAu
MC40LDAuNi0wLjksMC42LTEuNGMwLTAuNy0wLjMtMS4zLTAuOS0xLjcgICBDMTguMSw2LjIsMTcuMSw2 Ny0xLjhMMzAsMjV6IE0yMiwyNmMtMS4xLDAtMi0wLjktMi0yczAuOS0yLDItMnMyLDAuOSwyLDJTMjMu
LDE1LjksNkgxMnY5LjlWMTZoNGMxLjIsMCwyLjItMC4yLDIuOS0wLjhDMTkuNywxNC42LDIwLDE0LDIw MSwyNiwyMiwyNnoiIGNsYXNzPSJCbHVlIiAvPg0KICA8cGF0aCBkPSJNMTQuMywyNkg2VjRoNmg2djVj
LDEzYzAtMC42LTAuMi0xLjItMC43LTEuNiAgIEMxOC45LDExLDE4LjMsMTAuNywxNy41LDEwLjZ6IE0x MCwwLjYsMC40LDEsMSwxaDV2NS45bDAsMC40YzAuNywwLjIsMS40LDAuNSwyLDAuOFY5bC03LTdINUM0
NC40LDcuN2gwLjljMS4xLDAsMS43LDAuNCwxLjcsMS4xYzAsMC40LTAuMSwwLjctMC40LDAuOUMxNi40 LjQsMiw0LDIuNCw0LDN2MjQgIGMwLDAuNiwwLjQsMSwxLDFoMTAuMUMxNC43LDI3LjQsMTQuNCwyNi43
LDkuOSwxNiwxMCwxNS41LDEwaC0xLjFWNy43eiAgICBNMTcsMTMuOGMtMC4zLDAuMi0wLjgsMC40LTEu LDE0LjMsMjZ6IiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L
MywwLjRoLTEuM3YtMi42aDEuM2MwLjUsMCwwLjksMC4xLDEuMywwLjNjMC4zLDAuMiwwLjUsMC42LDAu
NSwwLjlDMTcuNSwxMy4zLDE3LjQsMTMuNiwxNywxMy44eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxw
YXRoIGQ9Ik0yNywxOWwtOCw4bC00LTRsOC04TDI3LDE5eiBNMjgsMThsMS43LTEuN2MwLjQtMC40LDAu
NC0xLDAtMS4zTDI3LDEyLjNjLTAuNC0wLjQtMS0wLjQtMS4zLDBMMjQsMTRMMjgsMTh6ICAgIE0xNCwy
NHY0aDRMMTQsMjR6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value> </value>
</data> </data>
<data name="txtCreatorEmailLabel.Caption" xml:space="preserve"> <data name="txtCreatorEmailLabel.Caption" xml:space="preserve">
@@ -414,6 +409,60 @@
<data name="BarButtonItem2.Caption" xml:space="preserve"> <data name="BarButtonItem2.Caption" xml:space="preserve">
<value>Öffnen</value> <value>Öffnen</value>
</data> </data>
<data name="BarButtonItem3.Caption" xml:space="preserve">
<value>BarButtonItem3</value>
</data>
<data name="bbtnitm_ConcatFiles.Caption" xml:space="preserve">
<value>Mehrere PDF-Dokumente verketten</value>
</data>
<data name="bbtnitm_ConcatFiles.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAHECAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTXVsdGlwbGVfRG9jdW1lbnRzIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91
bmQ6bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuQmxhY2t7ZmlsbDoj
NzI3MjcyO30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTMxLDhoLTVWNWMwLTAuNS0wLjUtMS0xLTFoLTVW
MWMwLTAuNS0wLjUtMS0xLTFIMUMwLjUsMCwwLDAuNSwwLDF2MjJjMCwwLjUsMC41LDEsMSwxaDV2M2Mw
LDAuNSwwLjUsMSwxLDEgIGg1djNjMCwwLjUsMC41LDEsMSwxaDE4YzAuNSwwLDEtMC41LDEtMVY5QzMy
LDguNSwzMS41LDgsMzEsOHogTTYsNXYxN0gyVjJoMTZ2Mkg3QzYuNSw0LDYsNC41LDYsNXogTTEyLDl2
MTdIOFY2aDE2djJIMTMgIEMxMi41LDgsMTIsOC41LDEyLDl6IE0zMCwzMEgxNFYxMGgxNlYzMHoiIGNs
YXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs=
</value>
</data>
<data name="btnShowFile.Caption" xml:space="preserve">
<value>Dokument anzeigen</value>
</data>
<data name="btnShowFile.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJYEAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkRvY3VtZW50UERGIj4NCiAgICA8cGF0aCBkPSJN
MjIsMjR2NEgyVjJoMTR2NWMwLDAuNiwwLjQsMSwxLDFoNXY0aDJWN2wtNy03SDFDMC40LDAsMCwwLjQs
MCwxdjI4YzAsMC42LDAuNCwxLDEsMWgyMmMwLjYsMCwxLTAuNCwxLTEgICB2LTVIMjJ6IiBjbGFzcz0i
QmxhY2siIC8+DQogICAgPHBhdGggZD0iTTE5LjIsMTZjMC4zLDAuNSwwLjQsMS4xLDAuNCwxLjljMCww
LjktMC4yLDEuNS0wLjUsMmMtMC4zLDAuNS0wLjcsMC43LTEuMywwLjdoLTAuNnYtNS4zaDAuNiAgIEMx
OC40LDE1LjMsMTguOSwxNS42LDE5LjIsMTZ6IE0xMi4xLDE1LjNoLTAuNXYyLjZoMC41YzAuNywwLDEu
MS0wLjQsMS4xLTEuM2MwLTAuNC0wLjEtMC44LTAuMy0xQzEyLjYsMTUuNCwxMi40LDE1LjMsMTIuMSwx
NS4zeiAgICBNMzAsMTJ2MTJINlYxMkgzMHogTTE0LjgsMTYuNWMwLTAuOC0wLjItMS41LTAuNi0xLjlj
LTAuNC0wLjQtMS0wLjctMS44LTAuN0gxMHY4aDEuNnYtMi43aDAuNmMwLjgsMCwxLjQtMC4zLDEuOS0w
LjggICBDMTQuNSwxOCwxNC44LDE3LjMsMTQuOCwxNi41eiBNMjEuMiwxNy45YzAtMi42LTEuMS0zLjkt
My40LTMuOWgtMi4xdjhoMi4yYzEuMSwwLDEuOS0wLjQsMi41LTEuMUMyMC45LDIwLjIsMjEuMiwxOS4y
LDIxLjIsMTcuOXogICAgTTI2LDE0aC0zLjd2OGgxLjZ2LTMuMWgydi0xLjNoLTJ2LTIuMkgyNlYxNHoi
IGNsYXNzPSJSZWQiIC8+DQogIDwvZz4NCjwvc3ZnPgs=
</value>
</data>
<data name="RibbonControl1.Location" type="System.Drawing.Point, System.Drawing"> <data name="RibbonControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value> <value>0, 0</value>
</data> </data>
@@ -421,7 +470,7 @@
<value>Umschlag</value> <value>Umschlag</value>
</data> </data>
<data name="RibbonPageGroupDocuments.Text" xml:space="preserve"> <data name="RibbonPageGroupDocuments.Text" xml:space="preserve">
<value>Dateien</value> <value>Dokument-Funktionen</value>
</data> </data>
<data name="RibbonPageGroupInvitation.Text" xml:space="preserve"> <data name="RibbonPageGroupInvitation.Text" xml:space="preserve">
<value>Prozess</value> <value>Prozess</value>
@@ -578,7 +627,7 @@
<value>0</value> <value>0</value>
</data> </data>
<data name="colColor.Width" type="System.Int32, mscorlib"> <data name="colColor.Width" type="System.Int32, mscorlib">
<value>37</value> <value>32</value>
</data> </data>
<data name="RepositoryItemComboBox1.AutoHeight" type="System.Boolean, mscorlib"> <data name="RepositoryItemComboBox1.AutoHeight" type="System.Boolean, mscorlib">
<value>False</value> <value>False</value>
@@ -593,7 +642,7 @@
<value>1</value> <value>1</value>
</data> </data>
<data name="colEmail.Width" type="System.Int32, mscorlib"> <data name="colEmail.Width" type="System.Int32, mscorlib">
<value>341</value> <value>275</value>
</data> </data>
<data name="colName.Caption" xml:space="preserve"> <data name="colName.Caption" xml:space="preserve">
<value>Anrede Email</value> <value>Anrede Email</value>
@@ -605,7 +654,7 @@
<value>2</value> <value>2</value>
</data> </data>
<data name="colName.Width" type="System.Int32, mscorlib"> <data name="colName.Width" type="System.Int32, mscorlib">
<value>344</value> <value>227</value>
</data> </data>
<data name="colAccessCode.Caption" xml:space="preserve"> <data name="colAccessCode.Caption" xml:space="preserve">
<value>Zugriffscode</value> <value>Zugriffscode</value>
@@ -617,7 +666,19 @@
<value>3</value> <value>3</value>
</data> </data>
<data name="colAccessCode.Width" type="System.Int32, mscorlib"> <data name="colAccessCode.Width" type="System.Int32, mscorlib">
<value>147</value> <value>109</value>
</data>
<data name="colPhoneNumber.Caption" xml:space="preserve">
<value>Mobilnummer</value>
</data>
<data name="colPhoneNumber.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colPhoneNumber.VisibleIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="colPhoneNumber.Width" type="System.Int32, mscorlib">
<value>226</value>
</data> </data>
<data name="RepositoryItemEmailEdit.AutoHeight" type="System.Boolean, mscorlib"> <data name="RepositoryItemEmailEdit.AutoHeight" type="System.Boolean, mscorlib">
<value>False</value> <value>False</value>
@@ -878,7 +939,7 @@
<value>0</value> <value>0</value>
</data> </data>
<metadata name="FrmEditorBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="FrmEditorBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 54</value> <value>792, 17</value>
</metadata> </metadata>
<metadata name="EnvelopeDocumentBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="EnvelopeDocumentBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>557, 17</value> <value>557, 17</value>
@@ -1046,10 +1107,10 @@
<data name="&gt;&gt;BarButtonItem1.Type" xml:space="preserve"> <data name="&gt;&gt;BarButtonItem1.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value> <value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data> </data>
<data name="&gt;&gt;BarStaticItem1.Name" xml:space="preserve"> <data name="&gt;&gt;bsitm_info.Name" xml:space="preserve">
<value>BarStaticItem1</value> <value>bsitm_info</value>
</data> </data>
<data name="&gt;&gt;BarStaticItem1.Type" xml:space="preserve"> <data name="&gt;&gt;bsitm_info.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarStaticItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value> <value>DevExpress.XtraBars.BarStaticItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data> </data>
<data name="&gt;&gt;BarButtonItem2.Name" xml:space="preserve"> <data name="&gt;&gt;BarButtonItem2.Name" xml:space="preserve">
@@ -1058,6 +1119,24 @@
<data name="&gt;&gt;BarButtonItem2.Type" xml:space="preserve"> <data name="&gt;&gt;BarButtonItem2.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value> <value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data> </data>
<data name="&gt;&gt;BarButtonItem3.Name" xml:space="preserve">
<value>BarButtonItem3</value>
</data>
<data name="&gt;&gt;BarButtonItem3.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;bbtnitm_ConcatFiles.Name" xml:space="preserve">
<value>bbtnitm_ConcatFiles</value>
</data>
<data name="&gt;&gt;bbtnitm_ConcatFiles.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;btnShowFile.Name" xml:space="preserve">
<value>btnShowFile</value>
</data>
<data name="&gt;&gt;btnShowFile.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RibbonPage1.Name" xml:space="preserve"> <data name="&gt;&gt;RibbonPage1.Name" xml:space="preserve">
<value>RibbonPage1</value> <value>RibbonPage1</value>
</data> </data>
@@ -1160,6 +1239,12 @@
<data name="&gt;&gt;colAccessCode.Type" xml:space="preserve"> <data name="&gt;&gt;colAccessCode.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value> <value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data> </data>
<data name="&gt;&gt;colPhoneNumber.Name" xml:space="preserve">
<value>colPhoneNumber</value>
</data>
<data name="&gt;&gt;colPhoneNumber.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RepositoryItemEmailEdit.Name" xml:space="preserve"> <data name="&gt;&gt;RepositoryItemEmailEdit.Name" xml:space="preserve">
<value>RepositoryItemEmailEdit</value> <value>RepositoryItemEmailEdit</value>
</data> </data>

View File

@@ -1,12 +1,16 @@
Imports System.ComponentModel Imports System.ComponentModel
Imports System.Data.SqlClient Imports System.Data.SqlClient
Imports System.IO Imports System.IO
Imports System.Text.RegularExpressions
Imports DevExpress.Export.Xl Imports DevExpress.Export.Xl
Imports DevExpress.Utils.CommonDialogs Imports DevExpress.Utils.CommonDialogs
Imports DevExpress.Utils.Drawing Imports DevExpress.Utils.Drawing
Imports DevExpress.Utils.Svg.CommonSvgImages
Imports DevExpress.XtraEditors Imports DevExpress.XtraEditors
Imports DevExpress.XtraExport.Helpers Imports DevExpress.XtraExport.Helpers
Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Columns
Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraSplashScreen Imports DevExpress.XtraSplashScreen
Imports DigitalData.Modules.Base Imports DigitalData.Modules.Base
@@ -14,6 +18,7 @@ Imports DigitalData.Modules.Logging
Imports EnvelopeGenerator.Common Imports EnvelopeGenerator.Common
Imports EnvelopeGenerator.Common.Constants Imports EnvelopeGenerator.Common.Constants
Imports EnvelopeGenerator.Common.My Imports EnvelopeGenerator.Common.My
Imports GdPicture14
Partial Public Class frmEnvelopeEditor Partial Public Class frmEnvelopeEditor
Public Property Envelope As Envelope Public Property Envelope As Envelope
@@ -28,8 +33,9 @@ Partial Public Class frmEnvelopeEditor
Private Const COL_NAME = "Name" Private Const COL_NAME = "Name"
Private Const COL_EMAIL = "Email" Private Const COL_EMAIL = "Email"
Private Const COL_CODE = "AccessCode" Private Const COL_CODE = "AccessCode"
Private Const COL_PHONE = "PhoneNumber"
Public Property State As State Public Property State As State
Private TempFiles As TempFiles
Public Sub New() Public Sub New()
InitializeComponent() InitializeComponent()
@@ -40,42 +46,53 @@ Partial Public Class frmEnvelopeEditor
'SaveEnvelopeWithValidation() 'SaveEnvelopeWithValidation()
' If Not IsNothing(Envelope) Then ' If Not IsNothing(Envelope) Then
Try Try
' prüfen ob es schon eine Datei gibt ' prüfen ob es schon eine Datei gibt
If Documents.Count > 0 Then If Documents.Count > 0 Then
MsgBox(Resources.Envelope.Only_one_file_is_allowed, MsgBoxStyle.Information, Text) MsgBox(Resources.Envelope.Only_one_file_is_allowed, MsgBoxStyle.Information, Text)
Return Return
End If End If
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
Dim oDocument = Await Controller.CreateDocument(OpenFileDialog1.FileName) Await AddDocument(OpenFileDialog1.FileName)
End If
If oDocument IsNot Nothing Then Catch ex As Exception
Documents.Add(oDocument) Logger.Error(ex)
' Update_File_DB(OpenFileDialog1.FileName) Finally
Else SplashScreenManager.CloseOverlayForm(oHandle)
MsgBox(Resources.Envelope.Document_Could_Not_Be_Saved, MsgBoxStyle.Critical, Text)
End If
End If
Catch ex As Exception RibbonPageGroupAddSignature_Enabled()
Logger.Error(ex) End Try
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
RibbonPageGroupAddSignature_Enabled()
End Try
' Else ' Else
' SplashScreenManager.CloseOverlayForm(oHandle) ' SplashScreenManager.CloseOverlayForm(oHandle)
' End If ' End If
End Sub End Sub
Private Async Function AddDocument(pfilePath As String) As Threading.Tasks.Task(Of Boolean)
Dim oDocument = Await Controller.CreateDocument(pfilePath)
If oDocument IsNot Nothing Then
Documents.Add(oDocument)
' Update_File_DB(OpenFileDialog1.FileName)
ClearBsiItem()
Return True
Else
MsgBox(Resources.Envelope.Document_Could_Not_Be_Saved, MsgBoxStyle.Critical, Text)
Return False
End If
End Function
Private Sub frmEditor_Load(sender As Object, e As EventArgs) Handles Me.Load Private Sub frmEditor_Load(sender As Object, e As EventArgs) Handles Me.Load
Logger = State.LogConfig.GetLogger() Logger = State.LogConfig.GetLogger()
Logger.Debug("Loading Configuration..") Logger.Debug("Loading Configuration..")
TempFiles = New TempFiles(State.LogConfig)
TempFiles.Create()
If Envelope Is Nothing Then If Envelope Is Nothing Then
Logger.Debug("Loading Controller..")
Controller = New EnvelopeEditorController(State) Controller = New EnvelopeEditorController(State)
' Get additional data ' Get additional data
Logger.Debug("Loading oDataForm..")
Dim oDataForm As New frmEnvelopeMainData() With { Dim oDataForm As New frmEnvelopeMainData() With {
.State = State, .State = State,
.Envelope = Controller.Envelope, .Envelope = Controller.Envelope,
@@ -86,6 +103,8 @@ Partial Public Class frmEnvelopeEditor
If oResult = DialogResult.Cancel Then If oResult = DialogResult.Cancel Then
Controller.DeleteEnvelopeFromDisk(Controller.Envelope) Controller.DeleteEnvelopeFromDisk(Controller.Envelope)
Me.Close() Me.Close()
Else
Envelope = Controller.Envelope
End If End If
Else Else
Controller = New EnvelopeEditorController(State, Envelope) Controller = New EnvelopeEditorController(State, Envelope)
@@ -93,6 +112,25 @@ Partial Public Class frmEnvelopeEditor
Receivers = New BindingList(Of EnvelopeReceiver)(Controller.Envelope.Receivers) Receivers = New BindingList(Of EnvelopeReceiver)(Controller.Envelope.Receivers)
For Each docItem As EnvelopeDocument In Documents For Each docItem As EnvelopeDocument In Documents
If Not File.Exists(docItem.Filepath) Then
Dim oTempFolder = TempFiles.TempPath
Dim oTempFilename = String.Concat(oTempFolder, "\", $"ViewEnvDoc_{Envelope.Id}.pdf")
If File.Exists(oTempFilename) Then
Try
File.OpenWrite(oTempFilename)
Catch ex As Exception
MsgBox("File might already be open?", MsgBoxStyle.Exclamation)
Me.Cursor = Cursors.Default
Exit Sub
End Try
File.Delete(oTempFilename)
End If
WriteBytetoPath(oTempFilename, docItem.Byte_Data)
docItem.Filepath = oTempFilename
GridDocuments.Tag = docItem.Filepath
End If
If docItem.Thumbnail Is Nothing Then If docItem.Thumbnail Is Nothing Then
docItem.Thumbnail = Controller.CreateThumbnail(docItem.Filepath) docItem.Thumbnail = Controller.CreateThumbnail(docItem.Filepath)
docItem.PageCount = Controller.GetPageCount(docItem.Filepath) docItem.PageCount = Controller.GetPageCount(docItem.Filepath)
@@ -115,7 +153,7 @@ Partial Public Class frmEnvelopeEditor
RepositoryItemComboBox1.Items.AddRange(AllReceiverEmails) RepositoryItemComboBox1.Items.AddRange(AllReceiverEmails)
SetAccessCodeColumnVisible() SetAccessCodeColumnVisible()
SetPhoneNumberColumnVisible()
txtEnvelopeIdLabel2.Caption = String.Format(txtEnvelopeIdLabel2.Tag.ToString, Controller.Envelope.Id) txtEnvelopeIdLabel2.Caption = String.Format(txtEnvelopeIdLabel2.Tag.ToString, Controller.Envelope.Id)
txtCreatorEmailLabel.Caption = String.Format(txtCreatorEmailLabel.Tag.ToString, Controller.Envelope.User.Email) txtCreatorEmailLabel.Caption = String.Format(txtCreatorEmailLabel.Tag.ToString, Controller.Envelope.User.Email)
@@ -129,6 +167,17 @@ Partial Public Class frmEnvelopeEditor
colAccessCode.Visible = False colAccessCode.Visible = False
End If End If
End Sub End Sub
Private Sub SetPhoneNumberColumnVisible()
If IsNothing(Envelope) Then
colPhoneNumber.Visible = False
Exit Sub
End If
If Envelope.TFA_Enabled = True Then
colPhoneNumber.Visible = DEF_TF_ENABLED_WITH_PHONE
Else
colPhoneNumber.Visible = False
End If
End Sub
Private Sub btnDeleteFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteFile.ItemClick Private Sub btnDeleteFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteFile.ItemClick
If ViewDocuments.GetSelectedRows().Count > 0 Then If ViewDocuments.GetSelectedRows().Count > 0 Then
@@ -141,13 +190,19 @@ Partial Public Class frmEnvelopeEditor
Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument) Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument)
If Controller.DeleteDocument(oDocument) Then If Controller.DeleteDocument(oDocument) Then
Documents.Remove(oDocument) Documents.Remove(oDocument)
GridDocuments.DataSource = Nothing
ClearBsiItem()
End If End If
End If End If
End Sub End Sub
Private Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick Private Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick
Try Try
SaveEnvelopeWithOutValidation() If SaveEnvelopeWithOutValidation() = True Then
bsitm_info.Caption = "Data saved succeddfully " + Now.ToString
Else
bsitm_info.Caption = "Exceprion - Error saving Data. Check LOG"
End If
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
End Try End Try
@@ -163,6 +218,19 @@ Partial Public Class frmEnvelopeEditor
If ViewDocuments.GetSelectedRows().Count > 0 Then If ViewDocuments.GetSelectedRows().Count > 0 Then
Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument) Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument)
Dim oEnvelope = Controller.Envelope
If Not IsNothing(oDocument.Byte_Data) Then
Dim oTempFolder = TempFiles.TempPath
Dim oTempFilename = String.Concat(oTempFolder, "\", $"ViewEnvDoc_{oEnvelope.Id}.pdf")
If Not File.Exists(oTempFilename) Then
WriteBytetoPath(oTempFilename, oDocument.Byte_Data)
oDocument.Filepath = oTempFilename
End If
End If
Dim oGDPictureKey As String = MS_GDPICTUREKEY Dim oGDPictureKey As String = MS_GDPICTUREKEY
Dim oForm As New frmFieldEditor(State) With { Dim oForm As New frmFieldEditor(State) With {
@@ -180,7 +248,23 @@ Partial Public Class frmEnvelopeEditor
SplashScreenManager.CloseOverlayForm(oHandle) SplashScreenManager.CloseOverlayForm(oHandle)
End Try End Try
End Sub End Sub
Private Sub WriteBytetoPath(ByVal sFileName As String, pByte As Byte())
'For Document
Try
If Not pByte Is Nothing Then
'Read image data into a file stream
Using fs As New FileStream(sFileName, FileMode.OpenOrCreate, FileAccess.Write)
fs.Write(pByte, 0, pByte.Length)
'Set image variable value using memory stream.
fs.Flush()
fs.Close()
End Using
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in downloadFile")
End Try
End Sub
Private Function SaveEnvelopeWithValidation() As Boolean Private Function SaveEnvelopeWithValidation() As Boolean
Return SaveEnvelope(True) Return SaveEnvelope(True)
End Function End Function
@@ -384,7 +468,7 @@ Partial Public Class frmEnvelopeEditor
oForm.ShowDialog() oForm.ShowDialog()
SetAccessCodeColumnVisible() SetAccessCodeColumnVisible()
SetPhoneNumberColumnVisible()
SetFormTitle(Controller.Envelope.Title) SetFormTitle(Controller.Envelope.Title)
End Sub End Sub
@@ -436,10 +520,14 @@ Partial Public Class frmEnvelopeEditor
Private Sub DocumentButtons_Enable() Private Sub DocumentButtons_Enable()
If ViewDocuments.RowCount = 0 Then If ViewDocuments.RowCount = 0 Then
btnNewFile.Enabled = True btnNewFile.Enabled = True
bbtnitm_ConcatFiles.Enabled = True
btnDeleteFile.Enabled = False btnDeleteFile.Enabled = False
btnShowFile.Enabled = False
Else Else
btnNewFile.Enabled = False btnNewFile.Enabled = False
bbtnitm_ConcatFiles.Enabled = False
btnDeleteFile.Enabled = True btnDeleteFile.Enabled = True
btnShowFile.Enabled = True
End If End If
End Sub End Sub
@@ -479,7 +567,12 @@ Partial Public Class frmEnvelopeEditor
RibbonPageGroupAddSignature_Enabled() RibbonPageGroupAddSignature_Enabled()
End Sub End Sub
Dim CellValueChanged As Boolean = False Dim CellValueChanged As Boolean = False
Private Sub ViewReceivers_ColumnPositionChanged(sender As Object, e As EventArgs) Handles ViewReceivers.ColumnPositionChanged
End Sub
Private Sub ViewReceivers_CellValueChanged(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles ViewReceivers.CellValueChanged Private Sub ViewReceivers_CellValueChanged(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles ViewReceivers.CellValueChanged
If e.Column.FieldName = COL_EMAIL And CellValueChanged = False Then If e.Column.FieldName = COL_EMAIL And CellValueChanged = False Then
If e.Value Is Nothing Then If e.Value Is Nothing Then
' Keine E-Mail-Adresse, also weg damit ' Keine E-Mail-Adresse, also weg damit
@@ -491,21 +584,197 @@ Partial Public Class frmEnvelopeEditor
Dim oNameCellValue = ViewReceivers.GetRowCellValue(e.RowHandle, COL_NAME) Dim oNameCellValue = ViewReceivers.GetRowCellValue(e.RowHandle, COL_NAME)
If oNameCellValue Is Nothing Then If oNameCellValue Is Nothing Then
Dim oEmailAdress As String = DirectCast(e.Value.ToString.ToLower, String) Dim oEmailAdress As String = DirectCast(e.Value.ToString.ToLower, String)
oEmailAdress = Trim(oEmailAdress)
Dim oLastName As String = Controller.GetLastNameByEmailAdress(oEmailAdress) If IsValidEmailAddress(oEmailAdress) = True Then
Dim oAccessCode As String = Helpers.GetAccessCode() Dim oLastName As String = Controller.GetLastNameByEmailAdress(oEmailAdress)
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_EMAIL), oEmailAdress) Dim oAccessCode As String = Helpers.GetAccessCode()
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_NAME), oLastName) Dim oPhoneNumber As String = Controller.GetLastPhoneByEmailAdress(oEmailAdress)
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_CODE), oAccessCode) ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_EMAIL), oEmailAdress)
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_NAME), oLastName)
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_CODE), oAccessCode)
If Envelope.TFA_Enabled AndAlso DEF_TF_ENABLED_WITH_PHONE Then
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_PHONE), oPhoneNumber)
End If
Else
Dim oMsg = Resources.Envelope.Error_email_Validation
oMsg = oMsg.Replace("@Mail", oEmailAdress)
MsgBox(oMsg, MsgBoxStyle.Exclamation, Text)
ViewReceivers.DeleteRow(ViewReceivers.FocusedRowHandle)
End If
CellValueChanged = False CellValueChanged = False
End If End If
End If End If
ElseIf e.Column.FieldName = COL_PHONE And CellValueChanged = False Then
CellValueChanged = True
Dim oPhoneNumber As String = DirectCast(e.Value.ToString.ToLower, String)
oPhoneNumber = Trim(oPhoneNumber)
If IsValidMobilePhoneNumber(oPhoneNumber) = True Then
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_PHONE), oPhoneNumber)
Else
Dim oMsg = Resources.Envelope.Error_phone_Validation
oMsg = oMsg.Replace("@PhoneNr", oPhoneNumber)
MsgBox(oMsg, MsgBoxStyle.Exclamation, Text)
ViewReceivers.DeleteRow(ViewReceivers.FocusedRowHandle)
End If
CellValueChanged = False
End If
End Sub
Private Function IsValidEmailAddress(pEmailAddress As String) As Boolean
Try
If pEmailAddress.Contains("@") Then
Dim oAddress = New System.Net.Mail.MailAddress(pEmailAddress)
Return oAddress.Address = pEmailAddress
Else
Return False
End If
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Private Function IsValidMobilePhoneNumber(pPhoneNumber As String) As Boolean
Try
Dim pattern As String = "^\+49\d{10,14}$"
Dim regex As New Regex(pattern)
Return regex.IsMatch(pPhoneNumber)
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Private Sub RibbonControl1_Click(sender As Object, e As EventArgs) Handles RibbonControl1.Click
End Sub
Private Async Sub bbtnitm_ConcatFiles_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitm_ConcatFiles.ItemClick
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
ENVELOPE_TEMP_DOCUMENT = String.Empty
Dim openform As New frmOrderFiles
openform.oTitle = Resources.Envelope.Dialog_Concat_PDF
openform.ShowDialog()
If Not IsNothing(openform.fileResults) Then
Dim oIDX As Integer = -1
For Each oFile As String In openform.fileResults
oIDX += 1
Next
Dim oSuccess As Boolean = False
Dim oErr As Boolean = False
Dim arPDF As GdPicturePDF() = New GdPicturePDF(oIDX) {}
oIDX = 0
For Each oFile As String In openform.fileResults
arPDF(oIDX) = New GdPicturePDF()
If arPDF(oIDX).LoadFromFile(oFile) <> GdPictureStatus.OK Then
MsgBox($"PDF Status of file {oFile} is not OK. Please check PDF-conformity!", MsgBoxStyle.Critical)
oErr = True
Exit For
End If
oIDX += 1
Next
If oErr = False Then
Dim dstPDF As GdPicturePDF = arPDF(0).MergeDocuments(arPDF)
Dim oStatus As GdPictureStatus = arPDF(0).GetStat()
If oStatus = GdPictureStatus.OK Then
Dim oTempFolder = MyTempFiles.TempPath
If Not Directory.Exists(oTempFolder) Then
Directory.CreateDirectory(oTempFolder)
End If
Dim oTempFilename = String.Concat(oTempFolder, "\", $"MergedDoc.pdf")
'wenn es das MergedDocument schon gibt dann löschen
If System.IO.File.Exists(oTempFilename) Then
System.IO.File.Delete(oTempFilename)
End If
If dstPDF.SaveToFile(oTempFilename) = GdPictureStatus.OK Then
ENVELOPE_TEMP_DOCUMENT = oTempFilename
dstPDF.CloseDocument()
oSuccess = True
Else
MsgBox("Unexpected format-error within the final document!", MsgBoxStyle.Critical)
oSuccess = False
End If
Else
MessageBox.Show("The MergeDocuments() method has failed with the status: " + oStatus.ToString(), "Example: MergeDocuments")
oSuccess = False
End If
dstPDF.Dispose()
oIDX = 0
For Each oFile As String In openform.fileResults
arPDF(oIDX).CloseDocument()
oIDX += 1
Next
If oSuccess = True And ENVELOPE_TEMP_DOCUMENT <> String.Empty Then
Await AddDocument(ENVELOPE_TEMP_DOCUMENT)
End If
End If
End If
Catch ex As Exception
Logger.Error(ex)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Sub
Private Sub frmEnvelopeEditor_DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter
ClearBsiItem()
' Prüfen, ob die Daten vom Typ Datei sind
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
' prüfen ob es schon eine Datei gibt
If Documents.Count > 0 Then
e.Effect = DragDropEffects.None
bsitm_info.Caption = Resources.Envelope.Only_one_file_is_allowed
bsitm_info.ItemAppearance.Normal.BackColor = Color.Red
bsitm_info.ItemAppearance.Normal.ForeColor = Color.Yellow
Else
' Effekt auf "Kopieren" setzen, um Drag-and-Drop zu ermöglichen
e.Effect = DragDropEffects.Copy
End If
Else
e.Effect = DragDropEffects.None
End If
End Sub
Sub ClearBsiItem()
bsitm_info.Caption = ""
bsitm_info.ItemAppearance.Normal.BackColor = Color.Transparent
bsitm_info.ItemAppearance.Normal.ForeColor = Color.Black
End Sub
Private Async Sub frmEnvelopeEditor_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
' Den Pfad der Datei(en) erhalten
Dim ofiles() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
' Beispiel: Ersten Dateipfad anzeigen
If ofiles IsNot Nothing AndAlso ofiles.Length > 0 Then
If Not ofiles(0).ToString.EndsWith("pdf") Then
bsitm_info.Caption = Resources.Envelope.Drop_only_one_file
bsitm_info.ItemAppearance.Normal.BackColor = Color.Red
bsitm_info.ItemAppearance.Normal.ForeColor = Color.Yellow
Else
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Await AddDocument(ofiles(0))
SplashScreenManager.CloseOverlayForm(oHandle)
' MessageBox.Show("Dateipfad: " & ofiles(0), "Datei abgelegt", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End If End If
End Sub End Sub
Private Sub RibbonControl1_Click(sender As Object, e As EventArgs) Handles RibbonControl1.Click Private Sub GridDocuments_DoubleClick(sender As Object, e As EventArgs) Handles GridDocuments.DoubleClick
showdocument()
End Sub End Sub
Private Sub btnShowFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnShowFile.ItemClick
showDocument
End Sub
Sub showdocument()
If Not IsNothing(Documents) Then
Process.Start(Documents.Item(0).Filepath)
End If
End Sub
End Class End Class

View File

@@ -25,6 +25,7 @@ Partial Class frmEnvelopeMainData
Me.components = New System.ComponentModel.Container() Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmEnvelopeMainData)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmEnvelopeMainData))
Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl() Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl()
Me.chked_2Faktor = New DevExpress.XtraEditors.CheckEdit()
Me.txtTitle = New DevExpress.XtraEditors.TextEdit() Me.txtTitle = New DevExpress.XtraEditors.TextEdit()
Me.cmbEnvelopeType = New DevExpress.XtraEditors.ComboBoxEdit() Me.cmbEnvelopeType = New DevExpress.XtraEditors.ComboBoxEdit()
Me.btOK = New DevExpress.XtraEditors.SimpleButton() Me.btOK = New DevExpress.XtraEditors.SimpleButton()
@@ -62,9 +63,11 @@ Partial Class frmEnvelopeMainData
Me.LayoutControlItem8 = New DevExpress.XtraLayout.LayoutControlItem() Me.LayoutControlItem8 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem12 = New DevExpress.XtraLayout.LayoutControlItem() Me.LayoutControlItem12 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem13 = New DevExpress.XtraLayout.LayoutControlItem() Me.LayoutControlItem13 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem16 = New DevExpress.XtraLayout.LayoutControlItem()
Me.AdornerUIManager1 = New DevExpress.Utils.VisualEffects.AdornerUIManager(Me.components) Me.AdornerUIManager1 = New DevExpress.Utils.VisualEffects.AdornerUIManager(Me.components)
CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.LayoutControl1.SuspendLayout() Me.LayoutControl1.SuspendLayout()
CType(Me.chked_2Faktor.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.txtTitle.Properties, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtTitle.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.cmbEnvelopeType.Properties, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.cmbEnvelopeType.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.cmbCertificationType.Properties, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.cmbCertificationType.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -100,11 +103,13 @@ Partial Class frmEnvelopeMainData
CType(Me.LayoutControlItem8, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.LayoutControlItem8, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem12, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.LayoutControlItem12, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem13, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.LayoutControlItem13, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem16, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.AdornerUIManager1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.AdornerUIManager1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout() Me.SuspendLayout()
' '
'LayoutControl1 'LayoutControl1
' '
Me.LayoutControl1.Controls.Add(Me.chked_2Faktor)
Me.LayoutControl1.Controls.Add(Me.txtTitle) Me.LayoutControl1.Controls.Add(Me.txtTitle)
Me.LayoutControl1.Controls.Add(Me.cmbEnvelopeType) Me.LayoutControl1.Controls.Add(Me.cmbEnvelopeType)
Me.LayoutControl1.Controls.Add(Me.btOK) Me.LayoutControl1.Controls.Add(Me.btOK)
@@ -124,6 +129,15 @@ Partial Class frmEnvelopeMainData
Me.LayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = New System.Drawing.Rectangle(855, 189, 650, 400) Me.LayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = New System.Drawing.Rectangle(855, 189, 650, 400)
Me.LayoutControl1.Root = Me.Root Me.LayoutControl1.Root = Me.Root
' '
'chked_2Faktor
'
resources.ApplyResources(Me.chked_2Faktor, "chked_2Faktor")
Me.chked_2Faktor.Name = "chked_2Faktor"
Me.chked_2Faktor.Properties.Appearance.Font = CType(resources.GetObject("chked_2Faktor.Properties.Appearance.Font"), System.Drawing.Font)
Me.chked_2Faktor.Properties.Appearance.Options.UseFont = True
Me.chked_2Faktor.Properties.Caption = resources.GetString("chked_2Faktor.Properties.Caption")
Me.chked_2Faktor.StyleController = Me.LayoutControl1
'
'txtTitle 'txtTitle
' '
resources.ApplyResources(Me.txtTitle, "txtTitle") resources.ApplyResources(Me.txtTitle, "txtTitle")
@@ -311,16 +325,16 @@ Partial Class frmEnvelopeMainData
'EmptySpaceItem2 'EmptySpaceItem2
' '
Me.EmptySpaceItem2.AllowHotTrack = False Me.EmptySpaceItem2.AllowHotTrack = False
Me.EmptySpaceItem2.Location = New System.Drawing.Point(0, 416) Me.EmptySpaceItem2.Location = New System.Drawing.Point(0, 441)
Me.EmptySpaceItem2.Name = "EmptySpaceItem2" Me.EmptySpaceItem2.Name = "EmptySpaceItem2"
Me.EmptySpaceItem2.Size = New System.Drawing.Size(565, 88) Me.EmptySpaceItem2.Size = New System.Drawing.Size(565, 63)
Me.EmptySpaceItem2.TextSize = New System.Drawing.Size(0, 0) Me.EmptySpaceItem2.TextSize = New System.Drawing.Size(0, 0)
' '
'groupFinalEmail 'groupFinalEmail
' '
Me.groupFinalEmail.GroupStyle = DevExpress.Utils.GroupStyle.Light Me.groupFinalEmail.GroupStyle = DevExpress.Utils.GroupStyle.Light
Me.groupFinalEmail.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem9, Me.LayoutControlItem14}) Me.groupFinalEmail.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem9, Me.LayoutControlItem14})
Me.groupFinalEmail.Location = New System.Drawing.Point(0, 323) Me.groupFinalEmail.Location = New System.Drawing.Point(0, 348)
Me.groupFinalEmail.Name = "groupFinalEmail" Me.groupFinalEmail.Name = "groupFinalEmail"
Me.groupFinalEmail.Size = New System.Drawing.Size(565, 93) Me.groupFinalEmail.Size = New System.Drawing.Size(565, 93)
resources.ApplyResources(Me.groupFinalEmail, "groupFinalEmail") resources.ApplyResources(Me.groupFinalEmail, "groupFinalEmail")
@@ -348,7 +362,7 @@ Partial Class frmEnvelopeMainData
Me.groupExpiration.Enabled = False Me.groupExpiration.Enabled = False
Me.groupExpiration.GroupStyle = DevExpress.Utils.GroupStyle.Light Me.groupExpiration.GroupStyle = DevExpress.Utils.GroupStyle.Light
Me.groupExpiration.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem10, Me.LayoutControlItem11}) Me.groupExpiration.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem10, Me.LayoutControlItem11})
Me.groupExpiration.Location = New System.Drawing.Point(0, 230) Me.groupExpiration.Location = New System.Drawing.Point(0, 255)
Me.groupExpiration.Name = "groupExpiration" Me.groupExpiration.Name = "groupExpiration"
Me.groupExpiration.Size = New System.Drawing.Size(565, 93) Me.groupExpiration.Size = New System.Drawing.Size(565, 93)
resources.ApplyResources(Me.groupExpiration, "groupExpiration") resources.ApplyResources(Me.groupExpiration, "groupExpiration")
@@ -376,7 +390,7 @@ Partial Class frmEnvelopeMainData
Me.groupReminders.Enabled = False Me.groupReminders.Enabled = False
Me.groupReminders.GroupStyle = DevExpress.Utils.GroupStyle.Light Me.groupReminders.GroupStyle = DevExpress.Utils.GroupStyle.Light
Me.groupReminders.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem5, Me.LayoutControlItem6, Me.LayoutControlItem7}) Me.groupReminders.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem5, Me.LayoutControlItem6, Me.LayoutControlItem7})
Me.groupReminders.Location = New System.Drawing.Point(0, 115) Me.groupReminders.Location = New System.Drawing.Point(0, 140)
Me.groupReminders.Name = "groupReminders" Me.groupReminders.Name = "groupReminders"
Me.groupReminders.Size = New System.Drawing.Size(565, 115) Me.groupReminders.Size = New System.Drawing.Size(565, 115)
resources.ApplyResources(Me.groupReminders, "groupReminders") resources.ApplyResources(Me.groupReminders, "groupReminders")
@@ -411,10 +425,10 @@ Partial Class frmEnvelopeMainData
'groupOptions 'groupOptions
' '
Me.groupOptions.GroupStyle = DevExpress.Utils.GroupStyle.Light Me.groupOptions.GroupStyle = DevExpress.Utils.GroupStyle.Light
Me.groupOptions.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem8, Me.LayoutControlItem12, Me.LayoutControlItem13}) Me.groupOptions.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem8, Me.LayoutControlItem12, Me.LayoutControlItem13, Me.LayoutControlItem16})
Me.groupOptions.Location = New System.Drawing.Point(0, 0) Me.groupOptions.Location = New System.Drawing.Point(0, 0)
Me.groupOptions.Name = "groupOptions" Me.groupOptions.Name = "groupOptions"
Me.groupOptions.Size = New System.Drawing.Size(565, 115) Me.groupOptions.Size = New System.Drawing.Size(565, 140)
resources.ApplyResources(Me.groupOptions, "groupOptions") resources.ApplyResources(Me.groupOptions, "groupOptions")
' '
'LayoutControlItem8 'LayoutControlItem8
@@ -438,12 +452,21 @@ Partial Class frmEnvelopeMainData
'LayoutControlItem13 'LayoutControlItem13
' '
Me.LayoutControlItem13.Control = Me.chkUseAccessCode Me.LayoutControlItem13.Control = Me.chkUseAccessCode
Me.LayoutControlItem13.Location = New System.Drawing.Point(0, 48) Me.LayoutControlItem13.Location = New System.Drawing.Point(0, 73)
Me.LayoutControlItem13.Name = "LayoutControlItem13" Me.LayoutControlItem13.Name = "LayoutControlItem13"
Me.LayoutControlItem13.Size = New System.Drawing.Size(541, 22) Me.LayoutControlItem13.Size = New System.Drawing.Size(541, 22)
Me.LayoutControlItem13.TextSize = New System.Drawing.Size(0, 0) Me.LayoutControlItem13.TextSize = New System.Drawing.Size(0, 0)
Me.LayoutControlItem13.TextVisible = False Me.LayoutControlItem13.TextVisible = False
' '
'LayoutControlItem16
'
Me.LayoutControlItem16.Control = Me.chked_2Faktor
Me.LayoutControlItem16.Location = New System.Drawing.Point(0, 48)
Me.LayoutControlItem16.Name = "LayoutControlItem16"
Me.LayoutControlItem16.Size = New System.Drawing.Size(541, 25)
Me.LayoutControlItem16.TextSize = New System.Drawing.Size(0, 0)
Me.LayoutControlItem16.TextVisible = False
'
'AdornerUIManager1 'AdornerUIManager1
' '
Me.AdornerUIManager1.Owner = Me Me.AdornerUIManager1.Owner = Me
@@ -461,6 +484,7 @@ Partial Class frmEnvelopeMainData
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.LayoutControl1.ResumeLayout(False) Me.LayoutControl1.ResumeLayout(False)
CType(Me.chked_2Faktor.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.txtTitle.Properties, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.txtTitle.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.cmbEnvelopeType.Properties, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.cmbEnvelopeType.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.cmbCertificationType.Properties, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.cmbCertificationType.Properties, System.ComponentModel.ISupportInitialize).EndInit()
@@ -496,6 +520,7 @@ Partial Class frmEnvelopeMainData
CType(Me.LayoutControlItem8, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.LayoutControlItem8, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem12, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.LayoutControlItem12, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem13, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.LayoutControlItem13, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem16, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.AdornerUIManager1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.AdornerUIManager1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False) Me.ResumeLayout(False)
@@ -540,4 +565,6 @@ Partial Class frmEnvelopeMainData
Friend WithEvents LayoutControlItem14 As DevExpress.XtraLayout.LayoutControlItem Friend WithEvents LayoutControlItem14 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents EmptySpaceItem2 As DevExpress.XtraLayout.EmptySpaceItem Friend WithEvents EmptySpaceItem2 As DevExpress.XtraLayout.EmptySpaceItem
Friend WithEvents groupAllOptions As DevExpress.XtraLayout.LayoutControlGroup Friend WithEvents groupAllOptions As DevExpress.XtraLayout.LayoutControlGroup
Friend WithEvents chked_2Faktor As DevExpress.XtraEditors.CheckEdit
Friend WithEvents LayoutControlItem16 As DevExpress.XtraLayout.LayoutControlItem
End Class End Class

View File

@@ -118,13 +118,40 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.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.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="chked_2Faktor.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 210</value>
</data>
<data name="chked_2Faktor.Properties.Appearance.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 10pt, style=Bold</value>
</data>
<data name="chked_2Faktor.Properties.Caption" xml:space="preserve">
<value>2 Faktor -Authentifizierung aktivieren</value>
</data>
<data name="chked_2Faktor.Size" type="System.Drawing.Size, System.Drawing">
<value>537, 21</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="chked_2Faktor.TabIndex" type="System.Int32, mscorlib">
<value>21</value>
</data>
<data name="&gt;&gt;chked_2Faktor.Name" xml:space="preserve">
<value>chked_2Faktor</value>
</data>
<data name="&gt;&gt;chked_2Faktor.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;chked_2Faktor.Parent" xml:space="preserve">
<value>LayoutControl1</value>
</data>
<data name="&gt;&gt;chked_2Faktor.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="txtTitle.Location" type="System.Drawing.Point, System.Drawing"> <data name="txtTitle.Location" type="System.Drawing.Point, System.Drawing">
<value>204, 45</value> <value>204, 45</value>
</data> </data>
<data name="txtTitle.Size" type="System.Drawing.Size, System.Drawing"> <data name="txtTitle.Size" type="System.Drawing.Size, System.Drawing">
<value>363, 20</value> <value>363, 20</value>
</data> </data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="txtTitle.TabIndex" type="System.Int32, mscorlib"> <data name="txtTitle.TabIndex" type="System.Int32, mscorlib">
<value>4</value> <value>4</value>
</data> </data>
@@ -138,7 +165,7 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;txtTitle.ZOrder" xml:space="preserve"> <data name="&gt;&gt;txtTitle.ZOrder" xml:space="preserve">
<value>4</value> <value>5</value>
</data> </data>
<data name="cmbEnvelopeType.Location" type="System.Drawing.Point, System.Drawing"> <data name="cmbEnvelopeType.Location" type="System.Drawing.Point, System.Drawing">
<value>204, 69</value> <value>204, 69</value>
@@ -163,7 +190,7 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;cmbEnvelopeType.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cmbEnvelopeType.ZOrder" xml:space="preserve">
<value>5</value> <value>6</value>
</data> </data>
<data name="btOK.Location" type="System.Drawing.Point, System.Drawing"> <data name="btOK.Location" type="System.Drawing.Point, System.Drawing">
<value>22, 636</value> <value>22, 636</value>
@@ -191,7 +218,7 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;btOK.ZOrder" xml:space="preserve"> <data name="&gt;&gt;btOK.ZOrder" xml:space="preserve">
<value>6</value> <value>7</value>
</data> </data>
<data name="btCancel.Location" type="System.Drawing.Point, System.Drawing"> <data name="btCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>92, 636</value> <value>92, 636</value>
@@ -218,7 +245,10 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;btCancel.ZOrder" xml:space="preserve"> <data name="&gt;&gt;btCancel.ZOrder" xml:space="preserve">
<value>7</value> <value>8</value>
</data>
<data name="cmbCertificationType.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data> </data>
<data name="cmbCertificationType.Location" type="System.Drawing.Point, System.Drawing"> <data name="cmbCertificationType.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 162</value> <value>207, 162</value>
@@ -242,10 +272,10 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;cmbCertificationType.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cmbCertificationType.ZOrder" xml:space="preserve">
<value>8</value> <value>9</value>
</data> </data>
<data name="chkSendReminderEmails.Location" type="System.Drawing.Point, System.Drawing"> <data name="chkSendReminderEmails.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 277</value> <value>27, 302</value>
</data> </data>
<data name="chkSendReminderEmails.Properties.Caption" xml:space="preserve"> <data name="chkSendReminderEmails.Properties.Caption" xml:space="preserve">
<value>Erinnerungen senden</value> <value>Erinnerungen senden</value>
@@ -266,13 +296,13 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;chkSendReminderEmails.ZOrder" xml:space="preserve"> <data name="&gt;&gt;chkSendReminderEmails.ZOrder" xml:space="preserve">
<value>9</value> <value>10</value>
</data> </data>
<data name="spnFirstReminderDays.EditValue" type="System.Decimal, mscorlib"> <data name="spnFirstReminderDays.EditValue" type="System.Decimal, mscorlib">
<value>0</value> <value>0</value>
</data> </data>
<data name="spnFirstReminderDays.Location" type="System.Drawing.Point, System.Drawing"> <data name="spnFirstReminderDays.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 299</value> <value>207, 324</value>
</data> </data>
<data name="spnFirstReminderDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2"> <data name="spnFirstReminderDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2">
<value>Combo</value> <value>Combo</value>
@@ -293,13 +323,13 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;spnFirstReminderDays.ZOrder" xml:space="preserve"> <data name="&gt;&gt;spnFirstReminderDays.ZOrder" xml:space="preserve">
<value>10</value> <value>11</value>
</data> </data>
<data name="spnReminderIntervalDays.EditValue" type="System.Decimal, mscorlib"> <data name="spnReminderIntervalDays.EditValue" type="System.Decimal, mscorlib">
<value>0</value> <value>0</value>
</data> </data>
<data name="spnReminderIntervalDays.Location" type="System.Drawing.Point, System.Drawing"> <data name="spnReminderIntervalDays.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 323</value> <value>207, 348</value>
</data> </data>
<data name="spnReminderIntervalDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2"> <data name="spnReminderIntervalDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2">
<value>Combo</value> <value>Combo</value>
@@ -320,13 +350,13 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;spnReminderIntervalDays.ZOrder" xml:space="preserve"> <data name="&gt;&gt;spnReminderIntervalDays.ZOrder" xml:space="preserve">
<value>11</value> <value>12</value>
</data> </data>
<data name="spnExpiresDays.EditValue" type="System.Decimal, mscorlib"> <data name="spnExpiresDays.EditValue" type="System.Decimal, mscorlib">
<value>0</value> <value>0</value>
</data> </data>
<data name="spnExpiresDays.Location" type="System.Drawing.Point, System.Drawing"> <data name="spnExpiresDays.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 392</value> <value>207, 417</value>
</data> </data>
<data name="spnExpiresDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2"> <data name="spnExpiresDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2">
<value>Combo</value> <value>Combo</value>
@@ -347,13 +377,13 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;spnExpiresDays.ZOrder" xml:space="preserve"> <data name="&gt;&gt;spnExpiresDays.ZOrder" xml:space="preserve">
<value>12</value> <value>13</value>
</data> </data>
<data name="spnExpiresWarningDays.EditValue" type="System.Decimal, mscorlib"> <data name="spnExpiresWarningDays.EditValue" type="System.Decimal, mscorlib">
<value>0</value> <value>0</value>
</data> </data>
<data name="spnExpiresWarningDays.Location" type="System.Drawing.Point, System.Drawing"> <data name="spnExpiresWarningDays.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 416</value> <value>207, 441</value>
</data> </data>
<data name="spnExpiresWarningDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2"> <data name="spnExpiresWarningDays.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2">
<value>Combo</value> <value>Combo</value>
@@ -374,7 +404,7 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;spnExpiresWarningDays.ZOrder" xml:space="preserve"> <data name="&gt;&gt;spnExpiresWarningDays.ZOrder" xml:space="preserve">
<value>13</value> <value>14</value>
</data> </data>
<data name="cmbLanguage.Location" type="System.Drawing.Point, System.Drawing"> <data name="cmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 186</value> <value>207, 186</value>
@@ -398,10 +428,10 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;cmbLanguage.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cmbLanguage.ZOrder" xml:space="preserve">
<value>14</value> <value>15</value>
</data> </data>
<data name="chkUseAccessCode.Location" type="System.Drawing.Point, System.Drawing"> <data name="chkUseAccessCode.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 210</value> <value>27, 235</value>
</data> </data>
<data name="chkUseAccessCode.Properties.Caption" xml:space="preserve"> <data name="chkUseAccessCode.Properties.Caption" xml:space="preserve">
<value>Verwende Zugriffscode</value> <value>Verwende Zugriffscode</value>
@@ -422,10 +452,10 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;chkUseAccessCode.ZOrder" xml:space="preserve"> <data name="&gt;&gt;chkUseAccessCode.ZOrder" xml:space="preserve">
<value>15</value> <value>16</value>
</data> </data>
<data name="cmbEmailToCreator.Location" type="System.Drawing.Point, System.Drawing"> <data name="cmbEmailToCreator.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 485</value> <value>207, 510</value>
</data> </data>
<data name="cmbEmailToCreator.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2"> <data name="cmbEmailToCreator.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2">
<value>Combo</value> <value>Combo</value>
@@ -446,10 +476,10 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;cmbEmailToCreator.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cmbEmailToCreator.ZOrder" xml:space="preserve">
<value>16</value> <value>17</value>
</data> </data>
<data name="cmbEmailToReceivers.Location" type="System.Drawing.Point, System.Drawing"> <data name="cmbEmailToReceivers.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 509</value> <value>207, 534</value>
</data> </data>
<data name="cmbEmailToReceivers.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2"> <data name="cmbEmailToReceivers.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v21.2">
<value>Combo</value> <value>Combo</value>
@@ -470,7 +500,7 @@
<value>LayoutControl1</value> <value>LayoutControl1</value>
</data> </data>
<data name="&gt;&gt;cmbEmailToReceivers.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cmbEmailToReceivers.ZOrder" xml:space="preserve">
<value>17</value> <value>18</value>
</data> </data>
<data name="LayoutControl1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> <data name="LayoutControl1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value> <value>Fill</value>
@@ -724,6 +754,12 @@
<data name="&gt;&gt;LayoutControlItem13.Type" xml:space="preserve"> <data name="&gt;&gt;LayoutControlItem13.Type" xml:space="preserve">
<value>DevExpress.XtraLayout.LayoutControlItem, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value> <value>DevExpress.XtraLayout.LayoutControlItem, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data> </data>
<data name="&gt;&gt;LayoutControlItem16.Name" xml:space="preserve">
<value>LayoutControlItem16</value>
</data>
<data name="&gt;&gt;LayoutControlItem16.Type" xml:space="preserve">
<value>DevExpress.XtraLayout.LayoutControlItem, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;AdornerUIManager1.Name" xml:space="preserve"> <data name="&gt;&gt;AdornerUIManager1.Name" xml:space="preserve">
<value>AdornerUIManager1</value> <value>AdornerUIManager1</value>
</data> </data>

View File

@@ -4,7 +4,7 @@ Imports EnvelopeGenerator.Common.Constants
Imports System.ComponentModel Imports System.ComponentModel
Public Class frmEnvelopeMainData Public Class frmEnvelopeMainData
Private FormLoaded As Boolean = False
Public Property Envelope As Envelope = New Envelope() Public Property Envelope As Envelope = New Envelope()
Public Property NewEnvelopeMode As Boolean = True Public Property NewEnvelopeMode As Boolean = True
@@ -20,70 +20,92 @@ Public Class frmEnvelopeMainData
End Sub End Sub
Private Sub frmEnvelopeMainData_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmEnvelopeMainData_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If NewEnvelopeMode = True Then Try
Me.Text = Resources.Envelope.New_Envelope If NewEnvelopeMode = True Then
Else Me.Text = Resources.Envelope.New_Envelope
Me.Text = Resources.Envelope.Edit_Envelope Else
cmbEnvelopeType.ReadOnly = True Me.Text = Resources.Envelope.Edit_Envelope
End If cmbEnvelopeType.ReadOnly = True
End If
EnvelopeTypeModel = New EnvelopeTypeModel(State) EnvelopeTypeModel = New EnvelopeTypeModel(State)
Dim oTypes = EnvelopeTypeModel.List() Dim oTypes = EnvelopeTypeModel.List()
If oTypes.Count = 0 Then If oTypes.Count = 0 Then
MsgBox("No templates in Database!", MsgBoxStyle.Exclamation, Text) MsgBox("No templates in Database!", MsgBoxStyle.Exclamation, Text)
Close() Close()
Exit Sub Exit Sub
End If End If
Dim certificationTypeList = [Enum].GetValues(GetType(CertificationType)).Cast(Of CertificationType)()
Dim oTranslatedCertificationTypeList = certificationTypeList.Select(AddressOf TranslateCertificationType).ToList()
cmbCertificationType.Properties.Items.AddRange(oTranslatedCertificationTypeList) ' Dim oTranslatedVerificationTypeList = VerificationTypeList.Select(AddressOf TranslateVerificationTypeType).ToList()
Dim finalEmailTypeList = [Enum].GetValues(GetType(FinalEmailType)).Cast(Of FinalEmailType)() Dim certificationTypeList = [Enum].GetValues(GetType(CertificationType)).Cast(Of CertificationType)()
Dim oTranslatedFinalEmailTypeList = FinalEmailTypeList.Select(AddressOf TranslateFinalEmailType).ToList() Dim oTranslatedCertificationTypeList = certificationTypeList.Select(AddressOf TranslateCertificationType).ToList()
cmbEmailToCreator.Properties.Items.AddRange(oTranslatedFinalEmailTypeList) cmbCertificationType.Properties.Items.AddRange(oTranslatedCertificationTypeList)
cmbEmailToReceivers.Properties.Items.AddRange(oTranslatedFinalEmailTypeList)
cmbEnvelopeType.Properties.Items.AddRange(oTypes.ToList)
cmbLanguage.Properties.Items.AddRange(New List(Of String) From {"de", "en"})
groupAllOptions.Expanded = False Dim finalEmailTypeList = [Enum].GetValues(GetType(FinalEmailType)).Cast(Of FinalEmailType)()
Dim oTranslatedFinalEmailTypeList = finalEmailTypeList.Select(AddressOf TranslateFinalEmailType).ToList()
If NewEnvelopeMode = True Then cmbEmailToCreator.Properties.Items.AddRange(oTranslatedFinalEmailTypeList)
Dim oType = oTypes.FirstOrDefault() cmbEmailToReceivers.Properties.Items.AddRange(oTranslatedFinalEmailTypeList)
' This will trigger loading values from the type cmbEnvelopeType.Properties.Items.AddRange(oTypes.ToList)
cmbEnvelopeType.EditValue = oType cmbLanguage.Properties.Items.AddRange(New List(Of String) From {"de", "en"})
Else
' This will trigger loading values from the type groupAllOptions.Expanded = False
cmbEnvelopeType.EditValue = Envelope.EnvelopeType Dim EnvelopeType = oTypes.FirstOrDefault()
' cmbEnvelopeType.SelectedIndex = Convert.ToInt32(Envelope.EnvelopeType) - 1 If NewEnvelopeMode = True Then
' cmbEnvelopeType.SelectedIndex = Envelope.Type.Id - 1
' cmbEnvelopeType.SelectedItem = cmbEnvelopeType.Properties.Items.Cast(Of EnvelopeType).Where(Function(i) i.Id = Envelope.EnvelopeType.Id).SingleOrDefault()
' This will trigger loading values from the type
cmbEnvelopeType.EditValue = EnvelopeType
chked_2Faktor.EditValue = DEF_TF_ENABLED
Else
If Envelope.EnvelopeType.ContractType = 0 Then
cmbEnvelopeType.EditValue = EnvelopeType
Else
' This will trigger loading values from the type
cmbEnvelopeType.EditValue = Envelope.EnvelopeType
' cmbEnvelopeType.SelectedIndex = Convert.ToInt32(Envelope.EnvelopeType) - 1
' cmbEnvelopeType.SelectedIndex = Envelope.Type.Id - 1
' cmbEnvelopeType.SelectedItem = cmbEnvelopeType.Properties.Items.Cast(Of EnvelopeType).Where(Function(i) i.Id = Envelope.EnvelopeType.Id).SingleOrDefault()
End If
' Now we can override these values with the values from envelope
txtTitle.EditValue = Envelope.Title
chkUseAccessCode.EditValue = Envelope.UseAccessCode
chked_2Faktor.EditValue = Envelope.TFA_Enabled
cmbCertificationType.SelectedIndex = Convert.ToInt32(Envelope.CertificationType) - 1
cmbEmailToCreator.SelectedIndex = Convert.ToInt32(Envelope.FinalEmailToCreator)
cmbEmailToReceivers.SelectedIndex = Convert.ToInt32(Envelope.FinalEmailToReceivers)
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected Error loading form:")
End Try
' Now we can override these values with the values from envelope
txtTitle.EditValue = Envelope.Title
chkUseAccessCode.EditValue = Envelope.UseAccessCode
cmbCertificationType.SelectedIndex = Convert.ToInt32(Envelope.CertificationType) - 1
cmbEmailToCreator.SelectedIndex = Convert.ToInt32(Envelope.FinalEmailToCreator)
cmbEmailToReceivers.SelectedIndex = Convert.ToInt32(Envelope.FinalEmailToReceivers)
End If
End Sub End Sub
Private Sub CheckAccessCode()
If Envelope.TFA_Enabled = True Then
chkUseAccessCode.Checked = True
chkUseAccessCode.Enabled = False
Else
chkUseAccessCode.Enabled = True
End If
End Sub
Private Function TranslateCertificationType(pType As CertificationType) As String Private Function TranslateCertificationType(pType As CertificationType) As String
Return Resources.Model.ResourceManager.GetString(pType.ToString()) Return Resources.Model.ResourceManager.GetString(pType.ToString())
End Function End Function
Private Function TranslateFinalEmailType(pType As FinalEmailType) As String Private Function TranslateFinalEmailType(pType As FinalEmailType) As String
Return Resources.Model.ResourceManager.GetString(pType.ToString()) Return Resources.Model.ResourceManager.GetString(pType.ToString())
End Function End Function
Private Sub btOK_Click(sender As Object, e As EventArgs) Handles btOK.Click Private Sub btOK_Click(sender As Object, e As EventArgs) Handles btOK.Click
Dim Validator As Validator = New Validator(State.LogConfig, AdornerUIManager1) Dim Validator As Validator = New Validator(State.LogConfig, AdornerUIManager1)
Dim oMissingParams = Validator.Validate(txtTitle) Dim oMissingParams = Validator.Validate(txtTitle)
@@ -110,13 +132,16 @@ Public Class frmEnvelopeMainData
Envelope.ExpiresWarningWhenDays = spnExpiresWarningDays.EditValue Envelope.ExpiresWarningWhenDays = spnExpiresWarningDays.EditValue
Envelope.FinalEmailToCreator = cmbEmailToCreator.SelectedIndex Envelope.FinalEmailToCreator = cmbEmailToCreator.SelectedIndex
Envelope.FinalEmailToReceivers = cmbEmailToReceivers.SelectedIndex Envelope.FinalEmailToReceivers = cmbEmailToReceivers.SelectedIndex
Envelope.TFA_Enabled = chked_2Faktor.EditValue
' ContractType kann zzt nicht über die Oberfläche gesetzt werden ' ContractType kann zzt nicht über die Oberfläche gesetzt werden
Envelope.ContractType = ContractType.Contract Envelope.ContractType = ContractType.Contract
End Sub End Sub
Private Sub frmEnvelopeMainData_Shown(sender As Object, e As EventArgs) Handles Me.Shown Private Sub frmEnvelopeMainData_Shown(sender As Object, e As EventArgs) Handles Me.Shown
SetFormHeight() SetFormHeight()
CheckAccessCode()
FormLoaded = True
End Sub End Sub
Private Sub SetFormHeight() Private Sub SetFormHeight()
@@ -152,4 +177,15 @@ Public Class frmEnvelopeMainData
cmbEmailToReceivers.SelectedIndex = oSelectedType.FinalEmailToReceivers cmbEmailToReceivers.SelectedIndex = oSelectedType.FinalEmailToReceivers
End Sub End Sub
Private Sub chked_2Faktor_CheckedChanged(sender As Object, e As EventArgs) Handles chked_2Faktor.CheckedChanged
If FormLoaded = True Then
If chked_2Faktor.Checked = True Then
chkUseAccessCode.Checked = True
chkUseAccessCode.Enabled = False
Else
chkUseAccessCode.Enabled = True
End If
End If
End Sub
End Class End Class

View File

@@ -62,10 +62,11 @@ Partial Class frmMain
Me.bbtnitmEB = New DevExpress.XtraBars.BarButtonItem() Me.bbtnitmEB = New DevExpress.XtraBars.BarButtonItem()
Me.bbtnitmInfoMail = New DevExpress.XtraBars.BarButtonItem() Me.bbtnitmInfoMail = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageEnvelopeActions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageEnvelopeActions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroupFunctions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
@@ -85,8 +86,21 @@ Partial Class frmMain
Me.GridColumn4 = New DevExpress.XtraGrid.Columns.GridColumn() Me.GridColumn4 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn5 = New DevExpress.XtraGrid.Columns.GridColumn() Me.GridColumn5 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn7 = New DevExpress.XtraGrid.Columns.GridColumn() Me.GridColumn7 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.XtraTabPageAdmin = New DevExpress.XtraTab.XtraTabPage()
Me.SplitContainerControl2 = New DevExpress.XtraEditors.SplitContainerControl()
Me.GridControlData = New DevExpress.XtraGrid.GridControl()
Me.GridViewData = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.PanelControl1 = New DevExpress.XtraEditors.PanelControl()
Me.GroupControl2 = New DevExpress.XtraEditors.GroupControl()
Me.LabelControl1 = New DevExpress.XtraEditors.LabelControl()
Me.GroupControl1 = New DevExpress.XtraEditors.GroupControl()
Me.btnEnvelopes_All = New DevExpress.XtraEditors.SimpleButton()
Me.btnEnvelopes_thisYear = New DevExpress.XtraEditors.SimpleButton()
Me.btnEnvelopes_lastmonth = New DevExpress.XtraEditors.SimpleButton()
Me.btnEnvelopes_thismonth = New DevExpress.XtraEditors.SimpleButton()
Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components) Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components)
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog() Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
Me.XtraSaveFileDialog1 = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components)
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainerControl1.Panel1.SuspendLayout() Me.SplitContainerControl1.Panel1.SuspendLayout()
@@ -105,6 +119,20 @@ Partial Class frmMain
CType(Me.ViewReceiversCompleted, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.ViewReceiversCompleted, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).BeginInit()
Me.XtraTabPageAdmin.SuspendLayout()
CType(Me.SplitContainerControl2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainerControl2.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainerControl2.Panel1.SuspendLayout()
CType(Me.SplitContainerControl2.Panel2, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainerControl2.SuspendLayout()
CType(Me.GridControlData, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridViewData, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.PanelControl1.SuspendLayout()
CType(Me.GroupControl2, System.ComponentModel.ISupportInitialize).BeginInit()
Me.GroupControl2.SuspendLayout()
CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.GroupControl1.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
' '
'SplashScreenManager1 'SplashScreenManager1
@@ -113,16 +141,16 @@ Partial Class frmMain
' '
'SplitContainerControl1 'SplitContainerControl1
' '
resources.ApplyResources(Me.SplitContainerControl1, "SplitContainerControl1")
Me.SplitContainerControl1.Collapsed = True Me.SplitContainerControl1.Collapsed = True
Me.SplitContainerControl1.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2 Me.SplitContainerControl1.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2
resources.ApplyResources(Me.SplitContainerControl1, "SplitContainerControl1")
Me.SplitContainerControl1.Horizontal = False Me.SplitContainerControl1.Horizontal = False
Me.SplitContainerControl1.Name = "SplitContainerControl1" Me.SplitContainerControl1.Name = "SplitContainerControl1"
' '
'SplitContainerControl1.Panel1 'SplitContainerControl1.Panel1
' '
Me.SplitContainerControl1.Panel1.Controls.Add(Me.XtraTabControlMain)
resources.ApplyResources(Me.SplitContainerControl1.Panel1, "SplitContainerControl1.Panel1") resources.ApplyResources(Me.SplitContainerControl1.Panel1, "SplitContainerControl1.Panel1")
Me.SplitContainerControl1.Panel1.Controls.Add(Me.XtraTabControlMain)
' '
'SplitContainerControl1.Panel2 'SplitContainerControl1.Panel2
' '
@@ -134,23 +162,29 @@ Partial Class frmMain
resources.ApplyResources(Me.XtraTabControlMain, "XtraTabControlMain") resources.ApplyResources(Me.XtraTabControlMain, "XtraTabControlMain")
Me.XtraTabControlMain.Name = "XtraTabControlMain" Me.XtraTabControlMain.Name = "XtraTabControlMain"
Me.XtraTabControlMain.SelectedTabPage = Me.XtraTabPage1 Me.XtraTabControlMain.SelectedTabPage = Me.XtraTabPage1
Me.XtraTabControlMain.TabPages.AddRange(New DevExpress.XtraTab.XtraTabPage() {Me.XtraTabPage1, Me.XtraTabPage2}) Me.XtraTabControlMain.TabPages.AddRange(New DevExpress.XtraTab.XtraTabPage() {Me.XtraTabPage1, Me.XtraTabPage2, Me.XtraTabPageAdmin})
' '
'XtraTabPage1 'XtraTabPage1
' '
resources.ApplyResources(Me.XtraTabPage1, "XtraTabPage1")
Me.XtraTabPage1.Controls.Add(Me.GridEnvelopes) Me.XtraTabPage1.Controls.Add(Me.GridEnvelopes)
Me.XtraTabPage1.Name = "XtraTabPage1" Me.XtraTabPage1.Name = "XtraTabPage1"
resources.ApplyResources(Me.XtraTabPage1, "XtraTabPage1")
' '
'GridEnvelopes 'GridEnvelopes
' '
resources.ApplyResources(Me.GridEnvelopes, "GridEnvelopes") resources.ApplyResources(Me.GridEnvelopes, "GridEnvelopes")
Me.GridEnvelopes.EmbeddedNavigator.AccessibleDescription = resources.GetString("GridEnvelopes.EmbeddedNavigator.AccessibleDescription")
Me.GridEnvelopes.EmbeddedNavigator.AccessibleName = resources.GetString("GridEnvelopes.EmbeddedNavigator.AccessibleName")
Me.GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean) Me.GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
Me.GridEnvelopes.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles) Me.GridEnvelopes.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
Me.GridEnvelopes.EmbeddedNavigator.BackgroundImage = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.BackgroundImage"), System.Drawing.Image)
Me.GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout) Me.GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
Me.GridEnvelopes.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode) Me.GridEnvelopes.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
Me.GridEnvelopes.EmbeddedNavigator.MaximumSize = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.MaximumSize"), System.Drawing.Size)
Me.GridEnvelopes.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation) Me.GridEnvelopes.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
Me.GridEnvelopes.EmbeddedNavigator.ToolTip = resources.GetString("GridEnvelopes.EmbeddedNavigator.ToolTip")
Me.GridEnvelopes.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType) Me.GridEnvelopes.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
Me.GridEnvelopes.EmbeddedNavigator.ToolTipTitle = resources.GetString("GridEnvelopes.EmbeddedNavigator.ToolTipTitle")
GridLevelNode1.LevelTemplate = Me.ViewReceivers GridLevelNode1.LevelTemplate = Me.ViewReceivers
GridLevelNode1.RelationName = "Receivers" GridLevelNode1.RelationName = "Receivers"
GridLevelNode2.LevelTemplate = Me.ViewHistory GridLevelNode2.LevelTemplate = Me.ViewHistory
@@ -164,6 +198,7 @@ Partial Class frmMain
' '
'ViewReceivers 'ViewReceivers
' '
resources.ApplyResources(Me.ViewReceivers, "ViewReceivers")
Me.ViewReceivers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColReceiverStatus, Me.ColName, Me.ColEmail, Me.ColSignedDate, Me.colAccessCode, Me.ColStatusReceiver}) Me.ViewReceivers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColReceiverStatus, Me.ColName, Me.ColEmail, Me.ColSignedDate, Me.colAccessCode, Me.ColStatusReceiver})
Me.ViewReceivers.GridControl = Me.GridEnvelopes Me.ViewReceivers.GridControl = Me.GridEnvelopes
Me.ViewReceivers.Name = "ViewReceivers" Me.ViewReceivers.Name = "ViewReceivers"
@@ -173,7 +208,6 @@ Partial Class frmMain
Me.ViewReceivers.OptionsView.ShowDetailButtons = False Me.ViewReceivers.OptionsView.ShowDetailButtons = False
Me.ViewReceivers.OptionsView.ShowGroupPanel = False Me.ViewReceivers.OptionsView.ShowGroupPanel = False
Me.ViewReceivers.OptionsView.ShowIndicator = False Me.ViewReceivers.OptionsView.ShowIndicator = False
resources.ApplyResources(Me.ViewReceivers, "ViewReceivers")
' '
'ColReceiverStatus 'ColReceiverStatus
' '
@@ -217,6 +251,7 @@ Partial Class frmMain
' '
'ViewHistory 'ViewHistory
' '
resources.ApplyResources(Me.ViewHistory, "ViewHistory")
Me.ViewHistory.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatus, Me.ColHistoryUserReference, Me.ColHistoryDate}) Me.ViewHistory.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatus, Me.ColHistoryUserReference, Me.ColHistoryDate})
Me.ViewHistory.GridControl = Me.GridEnvelopes Me.ViewHistory.GridControl = Me.GridEnvelopes
Me.ViewHistory.Name = "ViewHistory" Me.ViewHistory.Name = "ViewHistory"
@@ -248,6 +283,7 @@ Partial Class frmMain
' '
'ViewEnvelopes 'ViewEnvelopes
' '
resources.ApplyResources(Me.ViewEnvelopes, "ViewEnvelopes")
Me.ViewEnvelopes.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colEnvelopeId, Me.colContractType, Me.colStatus, Me.colTitle, Me.colAddedWhen}) Me.ViewEnvelopes.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colEnvelopeId, Me.colContractType, Me.colStatus, Me.colTitle, Me.colAddedWhen})
Me.ViewEnvelopes.GridControl = Me.GridEnvelopes Me.ViewEnvelopes.GridControl = Me.GridEnvelopes
Me.ViewEnvelopes.Name = "ViewEnvelopes" Me.ViewEnvelopes.Name = "ViewEnvelopes"
@@ -289,12 +325,14 @@ Partial Class frmMain
' '
'RibbonControl 'RibbonControl
' '
resources.ApplyResources(Me.RibbonControl, "RibbonControl")
Me.RibbonControl.ExpandCollapseItem.Id = 0 Me.RibbonControl.ExpandCollapseItem.Id = 0
Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer) Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer)
Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer) Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer)
Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.BarButtonItem2}) Me.RibbonControl.ExpandCollapseItem.ImageOptions.SvgImage = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
resources.ApplyResources(Me.RibbonControl, "RibbonControl") Me.RibbonControl.ExpandCollapseItem.SearchTags = resources.GetString("RibbonControl.ExpandCollapseItem.SearchTags")
Me.RibbonControl.MaxItemId = 17 Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.BarButtonItem2, Me.BarButtonItem3})
Me.RibbonControl.MaxItemId = 18
Me.RibbonControl.Name = "RibbonControl" Me.RibbonControl.Name = "RibbonControl"
Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2}) Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2})
Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
@@ -383,6 +421,8 @@ Partial Class frmMain
' '
resources.ApplyResources(Me.btnOpenLogDirectory, "btnOpenLogDirectory") resources.ApplyResources(Me.btnOpenLogDirectory, "btnOpenLogDirectory")
Me.btnOpenLogDirectory.Id = 10 Me.btnOpenLogDirectory.Id = 10
Me.btnOpenLogDirectory.ImageOptions.ImageIndex = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.ImageIndex"), Integer)
Me.btnOpenLogDirectory.ImageOptions.LargeImageIndex = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.LargeImageIndex"), Integer)
Me.btnOpenLogDirectory.ImageOptions.SvgImage = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnOpenLogDirectory.ImageOptions.SvgImage = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.btnOpenLogDirectory.Name = "btnOpenLogDirectory" Me.btnOpenLogDirectory.Name = "btnOpenLogDirectory"
' '
@@ -391,13 +431,20 @@ Partial Class frmMain
resources.ApplyResources(Me.BarCheckItem1, "BarCheckItem1") resources.ApplyResources(Me.BarCheckItem1, "BarCheckItem1")
Me.BarCheckItem1.Id = 12 Me.BarCheckItem1.Id = 12
Me.BarCheckItem1.ImageOptions.Image = CType(resources.GetObject("BarCheckItem1.ImageOptions.Image"), System.Drawing.Image) Me.BarCheckItem1.ImageOptions.Image = CType(resources.GetObject("BarCheckItem1.ImageOptions.Image"), System.Drawing.Image)
Me.BarCheckItem1.ImageOptions.ImageIndex = CType(resources.GetObject("BarCheckItem1.ImageOptions.ImageIndex"), Integer)
Me.BarCheckItem1.ImageOptions.LargeImage = CType(resources.GetObject("BarCheckItem1.ImageOptions.LargeImage"), System.Drawing.Image) Me.BarCheckItem1.ImageOptions.LargeImage = CType(resources.GetObject("BarCheckItem1.ImageOptions.LargeImage"), System.Drawing.Image)
Me.BarCheckItem1.ImageOptions.LargeImageIndex = CType(resources.GetObject("BarCheckItem1.ImageOptions.LargeImageIndex"), Integer)
Me.BarCheckItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarCheckItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarCheckItem1.Name = "BarCheckItem1" Me.BarCheckItem1.Name = "BarCheckItem1"
' '
'bsitmInfo 'bsitmInfo
' '
resources.ApplyResources(Me.bsitmInfo, "bsitmInfo")
Me.bsitmInfo.Id = 13 Me.bsitmInfo.Id = 13
Me.bsitmInfo.ImageOptions.Image = CType(resources.GetObject("bsitmInfo.ImageOptions.Image"), System.Drawing.Image) Me.bsitmInfo.ImageOptions.Image = CType(resources.GetObject("bsitmInfo.ImageOptions.Image"), System.Drawing.Image)
Me.bsitmInfo.ImageOptions.ImageIndex = CType(resources.GetObject("bsitmInfo.ImageOptions.ImageIndex"), Integer)
Me.bsitmInfo.ImageOptions.LargeImageIndex = CType(resources.GetObject("bsitmInfo.ImageOptions.LargeImageIndex"), Integer)
Me.bsitmInfo.ImageOptions.SvgImage = CType(resources.GetObject("bsitmInfo.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.bsitmInfo.Name = "bsitmInfo" Me.bsitmInfo.Name = "bsitmInfo"
Me.bsitmInfo.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph Me.bsitmInfo.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
Me.bsitmInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never Me.bsitmInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
@@ -407,6 +454,8 @@ Partial Class frmMain
resources.ApplyResources(Me.bbtnitmEB, "bbtnitmEB") resources.ApplyResources(Me.bbtnitmEB, "bbtnitmEB")
Me.bbtnitmEB.Enabled = False Me.bbtnitmEB.Enabled = False
Me.bbtnitmEB.Id = 14 Me.bbtnitmEB.Id = 14
Me.bbtnitmEB.ImageOptions.ImageIndex = CType(resources.GetObject("bbtnitmEB.ImageOptions.ImageIndex"), Integer)
Me.bbtnitmEB.ImageOptions.LargeImageIndex = CType(resources.GetObject("bbtnitmEB.ImageOptions.LargeImageIndex"), Integer)
Me.bbtnitmEB.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmEB.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.bbtnitmEB.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmEB.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.bbtnitmEB.Name = "bbtnitmEB" Me.bbtnitmEB.Name = "bbtnitmEB"
' '
@@ -414,6 +463,8 @@ Partial Class frmMain
' '
resources.ApplyResources(Me.bbtnitmInfoMail, "bbtnitmInfoMail") resources.ApplyResources(Me.bbtnitmInfoMail, "bbtnitmInfoMail")
Me.bbtnitmInfoMail.Id = 15 Me.bbtnitmInfoMail.Id = 15
Me.bbtnitmInfoMail.ImageOptions.ImageIndex = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.ImageIndex"), Integer)
Me.bbtnitmInfoMail.ImageOptions.LargeImageIndex = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.LargeImageIndex"), Integer)
Me.bbtnitmInfoMail.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.bbtnitmInfoMail.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitmInfoMail.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.bbtnitmInfoMail.Name = "bbtnitmInfoMail" Me.bbtnitmInfoMail.Name = "bbtnitmInfoMail"
' '
@@ -421,12 +472,23 @@ Partial Class frmMain
' '
resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2") resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2")
Me.BarButtonItem2.Id = 16 Me.BarButtonItem2.Id = 16
Me.BarButtonItem2.ImageOptions.ImageIndex = CType(resources.GetObject("BarButtonItem2.ImageOptions.ImageIndex"), Integer)
Me.BarButtonItem2.ImageOptions.LargeImageIndex = CType(resources.GetObject("BarButtonItem2.ImageOptions.LargeImageIndex"), Integer)
Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem2.Name = "BarButtonItem2" Me.BarButtonItem2.Name = "BarButtonItem2"
' '
'BarButtonItem3
'
resources.ApplyResources(Me.BarButtonItem3, "BarButtonItem3")
Me.BarButtonItem3.Id = 17
Me.BarButtonItem3.ImageOptions.ImageIndex = CType(resources.GetObject("BarButtonItem3.ImageOptions.ImageIndex"), Integer)
Me.BarButtonItem3.ImageOptions.LargeImageIndex = CType(resources.GetObject("BarButtonItem3.ImageOptions.LargeImageIndex"), Integer)
Me.BarButtonItem3.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem3.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem3.Name = "BarButtonItem3"
'
'RibbonPage1 'RibbonPage1
' '
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageGroup2}) Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageGroupFunctions})
Me.RibbonPage1.Name = "RibbonPage1" Me.RibbonPage1.Name = "RibbonPage1"
resources.ApplyResources(Me.RibbonPage1, "RibbonPage1") resources.ApplyResources(Me.RibbonPage1, "RibbonPage1")
' '
@@ -442,18 +504,19 @@ Partial Class frmMain
' '
Me.RibbonPageGroup1.Alignment = DevExpress.XtraBars.Ribbon.RibbonPageGroupAlignment.Far Me.RibbonPageGroup1.Alignment = DevExpress.XtraBars.Ribbon.RibbonPageGroupAlignment.Far
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1) Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem3)
Me.RibbonPageGroup1.Name = "RibbonPageGroup1" Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
resources.ApplyResources(Me.RibbonPageGroup1, "RibbonPageGroup1") resources.ApplyResources(Me.RibbonPageGroup1, "RibbonPageGroup1")
' '
'RibbonPageGroup2 'RibbonPageGroupFunctions
' '
Me.RibbonPageGroup2.ItemLinks.Add(Me.btnShowDocument) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnShowDocument)
Me.RibbonPageGroup2.ItemLinks.Add(Me.btnContactReceiver) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.BarButtonItem2)
Me.RibbonPageGroup2.ItemLinks.Add(Me.bbtnitmInfoMail) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnContactReceiver)
Me.RibbonPageGroup2.ItemLinks.Add(Me.bbtnitmEB) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmEB)
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem2) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmInfoMail)
Me.RibbonPageGroup2.Name = "RibbonPageGroup2" Me.RibbonPageGroupFunctions.Name = "RibbonPageGroupFunctions"
resources.ApplyResources(Me.RibbonPageGroup2, "RibbonPageGroup2") resources.ApplyResources(Me.RibbonPageGroupFunctions, "RibbonPageGroupFunctions")
' '
'RibbonPage2 'RibbonPage2
' '
@@ -470,28 +533,34 @@ Partial Class frmMain
' '
'RibbonStatusBar 'RibbonStatusBar
' '
resources.ApplyResources(Me.RibbonStatusBar, "RibbonStatusBar")
Me.RibbonStatusBar.ItemLinks.Add(Me.txtRefreshLabel) Me.RibbonStatusBar.ItemLinks.Add(Me.txtRefreshLabel)
Me.RibbonStatusBar.ItemLinks.Add(Me.txtEnvelopeIdLabel) Me.RibbonStatusBar.ItemLinks.Add(Me.txtEnvelopeIdLabel)
Me.RibbonStatusBar.ItemLinks.Add(Me.bsitmInfo) Me.RibbonStatusBar.ItemLinks.Add(Me.bsitmInfo)
resources.ApplyResources(Me.RibbonStatusBar, "RibbonStatusBar")
Me.RibbonStatusBar.Name = "RibbonStatusBar" Me.RibbonStatusBar.Name = "RibbonStatusBar"
Me.RibbonStatusBar.Ribbon = Me.RibbonControl Me.RibbonStatusBar.Ribbon = Me.RibbonControl
' '
'XtraTabPage2 'XtraTabPage2
' '
resources.ApplyResources(Me.XtraTabPage2, "XtraTabPage2")
Me.XtraTabPage2.Controls.Add(Me.GridCompleted) Me.XtraTabPage2.Controls.Add(Me.GridCompleted)
Me.XtraTabPage2.Name = "XtraTabPage2" Me.XtraTabPage2.Name = "XtraTabPage2"
resources.ApplyResources(Me.XtraTabPage2, "XtraTabPage2")
' '
'GridCompleted 'GridCompleted
' '
resources.ApplyResources(Me.GridCompleted, "GridCompleted") resources.ApplyResources(Me.GridCompleted, "GridCompleted")
Me.GridCompleted.EmbeddedNavigator.AccessibleDescription = resources.GetString("GridCompleted.EmbeddedNavigator.AccessibleDescription")
Me.GridCompleted.EmbeddedNavigator.AccessibleName = resources.GetString("GridCompleted.EmbeddedNavigator.AccessibleName")
Me.GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean) Me.GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
Me.GridCompleted.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles) Me.GridCompleted.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
Me.GridCompleted.EmbeddedNavigator.BackgroundImage = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.BackgroundImage"), System.Drawing.Image)
Me.GridCompleted.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout) Me.GridCompleted.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
Me.GridCompleted.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode) Me.GridCompleted.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
Me.GridCompleted.EmbeddedNavigator.MaximumSize = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.MaximumSize"), System.Drawing.Size)
Me.GridCompleted.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation) Me.GridCompleted.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
Me.GridCompleted.EmbeddedNavigator.ToolTip = resources.GetString("GridCompleted.EmbeddedNavigator.ToolTip")
Me.GridCompleted.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType) Me.GridCompleted.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
Me.GridCompleted.EmbeddedNavigator.ToolTipTitle = resources.GetString("GridCompleted.EmbeddedNavigator.ToolTipTitle")
GridLevelNode3.LevelTemplate = Me.ViewReceiversCompleted GridLevelNode3.LevelTemplate = Me.ViewReceiversCompleted
GridLevelNode3.RelationName = "Receivers" GridLevelNode3.RelationName = "Receivers"
GridLevelNode4.LevelTemplate = Me.ViewHistoryCompleted GridLevelNode4.LevelTemplate = Me.ViewHistoryCompleted
@@ -505,6 +574,7 @@ Partial Class frmMain
' '
'ViewReceiversCompleted 'ViewReceiversCompleted
' '
resources.ApplyResources(Me.ViewReceiversCompleted, "ViewReceiversCompleted")
Me.ViewReceiversCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColStatusCompleted, Me.ColNameCompleted, Me.ColEmailCompleted, Me.ColSignedDateCompleted}) Me.ViewReceiversCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColStatusCompleted, Me.ColNameCompleted, Me.ColEmailCompleted, Me.ColSignedDateCompleted})
Me.ViewReceiversCompleted.GridControl = Me.GridCompleted Me.ViewReceiversCompleted.GridControl = Me.GridCompleted
Me.ViewReceiversCompleted.Name = "ViewReceiversCompleted" Me.ViewReceiversCompleted.Name = "ViewReceiversCompleted"
@@ -514,7 +584,6 @@ Partial Class frmMain
Me.ViewReceiversCompleted.OptionsView.ShowDetailButtons = False Me.ViewReceiversCompleted.OptionsView.ShowDetailButtons = False
Me.ViewReceiversCompleted.OptionsView.ShowGroupPanel = False Me.ViewReceiversCompleted.OptionsView.ShowGroupPanel = False
Me.ViewReceiversCompleted.OptionsView.ShowIndicator = False Me.ViewReceiversCompleted.OptionsView.ShowIndicator = False
resources.ApplyResources(Me.ViewReceiversCompleted, "ViewReceiversCompleted")
' '
'ColStatusCompleted 'ColStatusCompleted
' '
@@ -542,6 +611,7 @@ Partial Class frmMain
' '
'ViewHistoryCompleted 'ViewHistoryCompleted
' '
resources.ApplyResources(Me.ViewHistoryCompleted, "ViewHistoryCompleted")
Me.ViewHistoryCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatusCompleted, Me.ColHistoryUserReferenceCompleted, Me.ColHistoryDateCompleted}) Me.ViewHistoryCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.ColHistoryStatusCompleted, Me.ColHistoryUserReferenceCompleted, Me.ColHistoryDateCompleted})
Me.ViewHistoryCompleted.GridControl = Me.GridCompleted Me.ViewHistoryCompleted.GridControl = Me.GridCompleted
Me.ViewHistoryCompleted.Name = "ViewHistoryCompleted" Me.ViewHistoryCompleted.Name = "ViewHistoryCompleted"
@@ -575,6 +645,7 @@ Partial Class frmMain
' '
'ViewCompleted 'ViewCompleted
' '
resources.ApplyResources(Me.ViewCompleted, "ViewCompleted")
Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn4, Me.GridColumn5, Me.GridColumn7}) Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn4, Me.GridColumn5, Me.GridColumn7})
Me.ViewCompleted.GridControl = Me.GridCompleted Me.ViewCompleted.GridControl = Me.GridCompleted
Me.ViewCompleted.Name = "ViewCompleted" Me.ViewCompleted.Name = "ViewCompleted"
@@ -606,6 +677,109 @@ Partial Class frmMain
Me.GridColumn7.FieldName = "AddedWhen" Me.GridColumn7.FieldName = "AddedWhen"
Me.GridColumn7.Name = "GridColumn7" Me.GridColumn7.Name = "GridColumn7"
' '
'XtraTabPageAdmin
'
resources.ApplyResources(Me.XtraTabPageAdmin, "XtraTabPageAdmin")
Me.XtraTabPageAdmin.Controls.Add(Me.SplitContainerControl2)
Me.XtraTabPageAdmin.Controls.Add(Me.PanelControl1)
Me.XtraTabPageAdmin.Name = "XtraTabPageAdmin"
'
'SplitContainerControl2
'
resources.ApplyResources(Me.SplitContainerControl2, "SplitContainerControl2")
Me.SplitContainerControl2.Name = "SplitContainerControl2"
'
'SplitContainerControl2.Panel1
'
resources.ApplyResources(Me.SplitContainerControl2.Panel1, "SplitContainerControl2.Panel1")
Me.SplitContainerControl2.Panel1.Controls.Add(Me.GridControlData)
'
'SplitContainerControl2.Panel2
'
resources.ApplyResources(Me.SplitContainerControl2.Panel2, "SplitContainerControl2.Panel2")
Me.SplitContainerControl2.SplitterPosition = 584
'
'GridControlData
'
resources.ApplyResources(Me.GridControlData, "GridControlData")
Me.GridControlData.EmbeddedNavigator.AccessibleDescription = resources.GetString("GridControlData.EmbeddedNavigator.AccessibleDescription")
Me.GridControlData.EmbeddedNavigator.AccessibleName = resources.GetString("GridControlData.EmbeddedNavigator.AccessibleName")
Me.GridControlData.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridControlData.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean)
Me.GridControlData.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridControlData.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles)
Me.GridControlData.EmbeddedNavigator.BackgroundImage = CType(resources.GetObject("GridControlData.EmbeddedNavigator.BackgroundImage"), System.Drawing.Image)
Me.GridControlData.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridControlData.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout)
Me.GridControlData.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridControlData.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode)
Me.GridControlData.EmbeddedNavigator.MaximumSize = CType(resources.GetObject("GridControlData.EmbeddedNavigator.MaximumSize"), System.Drawing.Size)
Me.GridControlData.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridControlData.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation)
Me.GridControlData.EmbeddedNavigator.ToolTip = resources.GetString("GridControlData.EmbeddedNavigator.ToolTip")
Me.GridControlData.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridControlData.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType)
Me.GridControlData.EmbeddedNavigator.ToolTipTitle = resources.GetString("GridControlData.EmbeddedNavigator.ToolTipTitle")
Me.GridControlData.MainView = Me.GridViewData
Me.GridControlData.MenuManager = Me.RibbonControl
Me.GridControlData.Name = "GridControlData"
Me.GridControlData.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewData})
'
'GridViewData
'
resources.ApplyResources(Me.GridViewData, "GridViewData")
Me.GridViewData.GridControl = Me.GridControlData
Me.GridViewData.Name = "GridViewData"
'
'PanelControl1
'
resources.ApplyResources(Me.PanelControl1, "PanelControl1")
Me.PanelControl1.Controls.Add(Me.GroupControl2)
Me.PanelControl1.Controls.Add(Me.GroupControl1)
Me.PanelControl1.Name = "PanelControl1"
'
'GroupControl2
'
resources.ApplyResources(Me.GroupControl2, "GroupControl2")
Me.GroupControl2.Controls.Add(Me.LabelControl1)
Me.GroupControl2.Name = "GroupControl2"
'
'LabelControl1
'
resources.ApplyResources(Me.LabelControl1, "LabelControl1")
Me.LabelControl1.Name = "LabelControl1"
'
'GroupControl1
'
resources.ApplyResources(Me.GroupControl1, "GroupControl1")
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_All)
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_thisYear)
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_lastmonth)
Me.GroupControl1.Controls.Add(Me.btnEnvelopes_thismonth)
Me.GroupControl1.Name = "GroupControl1"
'
'btnEnvelopes_All
'
resources.ApplyResources(Me.btnEnvelopes_All, "btnEnvelopes_All")
Me.btnEnvelopes_All.Appearance.BackColor = System.Drawing.Color.MediumTurquoise
Me.btnEnvelopes_All.Appearance.Options.UseBackColor = True
Me.btnEnvelopes_All.Name = "btnEnvelopes_All"
'
'btnEnvelopes_thisYear
'
resources.ApplyResources(Me.btnEnvelopes_thisYear, "btnEnvelopes_thisYear")
Me.btnEnvelopes_thisYear.Appearance.BackColor = System.Drawing.Color.LightSeaGreen
Me.btnEnvelopes_thisYear.Appearance.Options.UseBackColor = True
Me.btnEnvelopes_thisYear.Name = "btnEnvelopes_thisYear"
'
'btnEnvelopes_lastmonth
'
resources.ApplyResources(Me.btnEnvelopes_lastmonth, "btnEnvelopes_lastmonth")
Me.btnEnvelopes_lastmonth.Appearance.BackColor = System.Drawing.Color.Turquoise
Me.btnEnvelopes_lastmonth.Appearance.Options.UseBackColor = True
Me.btnEnvelopes_lastmonth.Name = "btnEnvelopes_lastmonth"
'
'btnEnvelopes_thismonth
'
resources.ApplyResources(Me.btnEnvelopes_thismonth, "btnEnvelopes_thismonth")
Me.btnEnvelopes_thismonth.Appearance.BackColor = System.Drawing.Color.Aquamarine
Me.btnEnvelopes_thismonth.Appearance.Options.UseBackColor = True
Me.btnEnvelopes_thismonth.Name = "btnEnvelopes_thismonth"
'
'RefreshTimer 'RefreshTimer
' '
Me.RefreshTimer.Interval = 120000 Me.RefreshTimer.Interval = 120000
@@ -614,6 +788,11 @@ Partial Class frmMain
' '
resources.ApplyResources(Me.SaveFileDialog1, "SaveFileDialog1") resources.ApplyResources(Me.SaveFileDialog1, "SaveFileDialog1")
' '
'XtraSaveFileDialog1
'
resources.ApplyResources(Me.XtraSaveFileDialog1, "XtraSaveFileDialog1")
Me.XtraSaveFileDialog1.FileName = "XtraSaveFileDialog1"
'
'frmMain 'frmMain
' '
resources.ApplyResources(Me, "$this") resources.ApplyResources(Me, "$this")
@@ -643,6 +822,21 @@ Partial Class frmMain
CType(Me.ViewReceiversCompleted, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.ViewReceiversCompleted, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.ViewHistoryCompleted, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.ViewCompleted, System.ComponentModel.ISupportInitialize).EndInit()
Me.XtraTabPageAdmin.ResumeLayout(False)
CType(Me.SplitContainerControl2.Panel1, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitContainerControl2.Panel1.ResumeLayout(False)
CType(Me.SplitContainerControl2.Panel2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.SplitContainerControl2, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitContainerControl2.ResumeLayout(False)
CType(Me.GridControlData, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridViewData, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.PanelControl1.ResumeLayout(False)
CType(Me.GroupControl2, System.ComponentModel.ISupportInitialize).EndInit()
Me.GroupControl2.ResumeLayout(False)
Me.GroupControl2.PerformLayout()
CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.GroupControl1.ResumeLayout(False)
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
@@ -692,7 +886,6 @@ Partial Class frmMain
Friend WithEvents txtRefreshLabel As DevExpress.XtraBars.BarStaticItem Friend WithEvents txtRefreshLabel As DevExpress.XtraBars.BarStaticItem
Friend WithEvents btnShowDocument As DevExpress.XtraBars.BarButtonItem Friend WithEvents btnShowDocument As DevExpress.XtraBars.BarButtonItem
Friend WithEvents btnContactReceiver As DevExpress.XtraBars.BarButtonItem Friend WithEvents btnContactReceiver As DevExpress.XtraBars.BarButtonItem
Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents colEnvelopeId As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents colEnvelopeId As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents ViewHistoryCompleted As DevExpress.XtraGrid.Views.Grid.GridView Friend WithEvents ViewHistoryCompleted As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents ColHistoryStatusCompleted As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents ColHistoryStatusCompleted As DevExpress.XtraGrid.Columns.GridColumn
@@ -709,4 +902,19 @@ Partial Class frmMain
Friend WithEvents bbtnitmEB As DevExpress.XtraBars.BarButtonItem Friend WithEvents bbtnitmEB As DevExpress.XtraBars.BarButtonItem
Friend WithEvents bbtnitmInfoMail As DevExpress.XtraBars.BarButtonItem Friend WithEvents bbtnitmInfoMail As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents XtraTabPageAdmin As DevExpress.XtraTab.XtraTabPage
Friend WithEvents PanelControl1 As DevExpress.XtraEditors.PanelControl
Friend WithEvents GroupControl1 As DevExpress.XtraEditors.GroupControl
Friend WithEvents btnEnvelopes_thisYear As DevExpress.XtraEditors.SimpleButton
Friend WithEvents btnEnvelopes_lastmonth As DevExpress.XtraEditors.SimpleButton
Friend WithEvents btnEnvelopes_thismonth As DevExpress.XtraEditors.SimpleButton
Friend WithEvents btnEnvelopes_All As DevExpress.XtraEditors.SimpleButton
Friend WithEvents GridControlData As DevExpress.XtraGrid.GridControl
Friend WithEvents GridViewData As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents GroupControl2 As DevExpress.XtraEditors.GroupControl
Friend WithEvents SplitContainerControl2 As DevExpress.XtraEditors.SplitContainerControl
Friend WithEvents LabelControl1 As DevExpress.XtraEditors.LabelControl
Friend WithEvents BarButtonItem3 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents XtraSaveFileDialog1 As DevExpress.XtraEditors.XtraSaveFileDialog
Friend WithEvents RibbonPageGroupFunctions As DevExpress.XtraBars.Ribbon.RibbonPageGroup
End Class End Class

View File

@@ -353,12 +353,260 @@
MC40QzIuMSwyNS4zLDIuMiwyNS4zLDIuMiwyNS4yeiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0K MC40QzIuMSwyNS4zLDIuMiwyNS4zLDIuMiwyNS4yeiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0K
ICA8cGF0aCBkPSJNMzEuMywxNEg5LjZMNCwyNmgyMS44YzAuNSwwLDEuMS0wLjMsMS4zLTAuN0wzMiwx ICA8cGF0aCBkPSJNMzEuMywxNEg5LjZMNCwyNmgyMS44YzAuNSwwLDEuMS0wLjMsMS4zLTAuN0wzMiwx
NC43QzMyLjEsMTQuMywzMS44LDE0LDMxLjMsMTR6IiBjbGFzcz0iWWVsbG93IiAvPg0KPC9zdmc+Cw== NC43QzMyLjEsMTQuMywzMS44LDE0LDMxLjMsMTR6IiBjbGFzcz0iWWVsbG93IiAvPg0KPC9zdmc+Cw==
</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BarCheckItem1.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABN0RVh0VGl0
bGUAUHJvamVjdDtGaWxlOz37jYIAAAK6SURBVDhPfdNbSNNRHAfwv5bRNK3Ql1WEc5IgDLsIFk3LiIJK
Ic2XHlJLNC95mVpumCOWLrXUZJZu5g3NoqtYKJnhpZeSIHrIkuFDpRFl7eru+3bO2RouqMFn52Hn9/39
zuGMA+BTl7hFQLQo9vDn5fER8zLR+pbKGJ5g5Z6/0U8gsYpYrRBv1sp388skceHRxbFh0eUxwWUlgiAt
+S3Ii+4L8AtYGCyd0Pacg7anCCOydMx1FWLuVgE+dubjgyYfD4oOY1adh/cduXinOjNJG/kFTF85BevC
Sz+2b29g+TqD5cUZmBdew/TlFdOVd5TOHEqsIehEAdyINA362SF8firDp2Eps/iiEX39w7jaOYVGSuPR
oJlEg5pon0CtamyKBQ3mHoB2qAa92TvRlBKNtoxYvNXkoJ5sdLvh4yJfjMsNJ1Grek6n4XENh2JRtYOP
a6TYaZiAXMyHYl8klDfGWYHZ4mBMFidBVwccThcuXX9GA4K51uPxUGUkoO7gVphnMnB+VwTa0kVQtI6x
TqZlB4xeBrOHzeFCdeMIDQjhujOTMVqdjoq4jTgr5EEi2oBHhWLUNI2STm4YzXZSZIfe5ICerDqTHVa7
C1XKYU/AzRMJGMhJQnuqEB3HhFCnRuFhXgKk9U9YJz0p0Jls0Bk9fhHLVifKFY9pwDqu+YgI6rQ4NCfz
0UTt56MjbRsqLg/BYnf6in4aPJYMVhgtdhRfvEcDQjm5OGpamSSEMjEKdWIBavdGoiVlO0pr7sNMOi15
i5b0VvzwrnqzDQXSO54ANgbHhRMRK2wqlN1lN84KGQu+66wMnSincoAGhPmepN/z5Li1uRdus0v7cwfs
GASdhoZlS/r+GxCUWdI9frq8j23MkvQiq6wXmVQpUdKDk/nt9H/B+1dAAEHfezARQtBj0vNSYV48juMC
fwOJP3aHKtHXCAAAAABJRU5ErkJggg==
</value>
</data>
<data name="BarCheckItem1.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABN0RVh0VGl0
bGUAUHJvamVjdDtGaWxlOz37jYIAAAiRSURBVFhHlZcJVJTXFcdJbG2axCZICgoqnGjcJRqXurUmBg1W
U7eoRUshVkyMIoIFhYCA4oBKkE0GEFwTWRUVFxQFRFDcMJrVE42ABhWHGdZhBob8e+/7vg8HQ23zzvmd
+3n85v3/3333vvewAPALzMZzRLft3kuszycH+FxI8s8rSfC9Xhzrg/wtK788vnHZqXRfFz/3qaP60Hsv
Er8lnpd/1+XcT/OsIcSPqFa8XRLv8+jG/g24fTQSFSei8fCcGt9mBONashcKVG74fPn0ex+NcZhG7/+B
6C7/9pnD3AC/3BXdiBeObXCruJW2HgXhbjjwiTN2uk7G1veGYccHo5HsMhbH1s1CacRCBI3vV0Xv2xIv
E78hupqTEcPcAAvxDxhOocLviFf2eTjj6g53qN4dDI9Rdu6uw2ym2b3c3W7xICunDwdbuYZMsEd+wFT4
Ob7Gsw0irImX5N8rcFa6XB6L6pLdhQ8v7MXDC3skSncLHpTuElxU++GHg8E4EeqO6uIUVJ/bKfipiGJR
Mgq2rsCXqZ7I9l2A+4WJuF+gxj3mrBpVZxNQeWYHKvPjcTMzvEg20ZEFMSpPx6Hpbj5aNWVmXETrY+aC
TOkTakpgfHSeKJY5B+NDpkimUGB4UCDgZ+03GTj+6VzO0AsEZ+HJKFd7oOG7NOguh0N3SUZ+1jLyc115
HHTX1QLt9QTUdkKN2nKKhKZceubI7+muRqHhZjKyPKexAV6azgZKty1GdWEU7mR4oiLHCxWHvXE3ZzW+
y/iYWEH/Xo2qYz6oLtiMnJw8pKRfwc4MgmJy2mVBEpHIHLgkUH8hcTJrL+6fCaP5tyBm9hA28ArRbUtS
gdAWoyB0Hm5l+qE8biGuxy7Elah5OOnvhOxVE5C5cjyOr5+K8vgF+D7DC8kk2tUwGtvQpDeirl6PR5oG
VNzTovzrn1Bc9iMyE+Pwbfo6RLwnDFgS3cJiTwttMU76z0RJxFwUh0wV5K2bjC88RqOqPAtV17IQ5mSP
XJ8JKItegqQDl9H+889oM0m0mtoFLQbJgK6hBQ81jbhTVYu4fRdAr+Jk0ffYtS0C22aPYwNWROdC3OU+
sSj+b4OQtGAo1POHIHrWAKS4OqK9iYqwOhr+k2wQOqUPktymiPSa2mXhNopt7TDKtBha0dhshEbbTAY0
iEw5Jww06tuQe/YbBHoGVJPcH4lfbFS26jkOSFw8GlHT+yLiHVvEzB9M4gnQf70Ua8dYIWSyNRL/MQkJ
n5dJBmRREVvbYWg1UTShuaUVtbQMtykDm+PPCAN6Y7swkXPqKyz3TdlKerxl897TYcJm76KBOL1hNtLc
RmCPyxConB1wM80Z17b3xpqRloid9ToOeTsjfv9FmCj1LG4gYUWcaWGMJmhpGX6o0CDosxPCAGeqRZgw
IfvEDXy4JiWcNLkdO0zY7CEDFyOX4OgnY3Fo+VsIf7cPPh70Ej4a+CKCJlpj16IhOBHwPuL2loq1N7RJ
okKYRBX0VIx1jQbcrqiFn+qIKFA2QStGy8ZGTMjMLYfrSrWKdHkpREv2Sp3XH5ciF+PoirdwhEhzH4GE
2f0R5WyPnfPfQObSN6kbZiJmdwkZoPWmL5dE22RhggpRbzChvtGIygd1CIvNg1dwNjw3ZMEzKAurAplM
5OTdQPiOM1yQylJY2Ca+74Dzqvk46OGI7GVvSvzLEVnLCIqZSx1x2HcGonedlwzIX8uCijDHJj0VIlGj
0+PHezrcvPUAV76qQtn1SpRcvYvCstsovnQbYXH5bKCHYsAuzrkfTgfMRNo/hyPdfTgyiHS3YYI04oDr
MGR7T0NUSjHaaP1ZrNmcFhInuAg51jcZqRhb8JiMVGuacO9BPe7e14nauFOpwabYU2yAj24+AC36Rjv1
wZHVU5A6dwBS5/RH6vwB2L3gDexZOBB7F1H8+0CkrXoHkTuLROV3FpZEmUaGMtBA7cixnmIdm6HCrNE1
o7qmETW1jQjdnscGeFcUBvptm2KLzGV/QsJfHWTskTDDATtm2AviqBZS3egekEgHDRloIvEOUWoxIcrp
b5ZiA0eiXqHDhF5sVsHUIaT7qmLAPnxSL+xfMhKxTn0RY0Y0dQMTNdUOiS7jEZFwlgyYhKAk2iYJyqJP
BFtRR7GOIxWlTkZDy9JIZoIihQHeliUDm8ZZI2XeUHz2l96ErYiRCn/uja2TeyP+g3FQUfVy7wsDJNBJ
lKHJWZwjp14R1lFrahskuE4Cth5nAz0VA3aBo6xqYpz6YctEG2yZYI61QDXeGjFzxmBzbL7Y8SRhFpMF
5Wfzr2W0CrJ4bb1BdJB/RC4bUM4Fi1ddXu/h4T+iZ22gY08EOloicIQlPlUYbgn/YZZQTR+JjTGnxeaj
fKECi0niBkmYxcxEFTTCQBvWqY6ygdcUA3xn43T0JQYQA2X4fqcwlBgbQtXLX9AhLkTNvraBi41bUDIg
RCmysKaO2rLOIFrYd/MRNsAHkzDA+zGvBRv5PcE71NNwz9py9bIBRVRZ21p6FsIspkAFx6IaEmUDj2UD
3L5rN+V0MsCDTTwLftEqaNtxse1qWVgRl4U70kwij3kTYmTRGoo1dXoRuXV9QoUBvj1377ge/zfkIQxw
9fK2q6xxxxezsBBUvlSiRsfCLXhE/f9IS5cVrV500JqQQzyxDfHrDKwPzxUpFOnltArhJ+mt6fhaFpWF
OZIwiwsD1EFeG7J54l7ErzLQ0y/8qLiQSPcA6S7ANSEdTsrB1Pl8kHZLeeMicYZPR5rv/14CrgE+tXqs
CU4v/HfYYTBrNx2GDxWTz8YceNOaeoceIg6K9HoFHxSspi9lPJkgho7koEws99t3juaTtuKuRM2RB18c
+ALBRyj3L7vnNWQ4leb0fgr+e9Ec/g2Lc9c936WoOfLgLLAJbldeDjbzv1D+Lnwa/j+eh+azeO4/pQGb
2zax9GEAAAAASUVORK5CYII=
</value>
</data>
<data name="bsitmInfo.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0
bGUASW5mbzttEi2GAAAKW0lEQVRYR5VWd1DVVxYmbdOTzc5sZst/O7M7s7Ozs9mdzCRZE5WiYCFERSmS
KIL0IrCASpUighQpAtKLICC9FwFBenvwKArSm9IFBQXRb8+5D4iazGT3zHzv3nfv/Z3vO+eee38/OQAv
4f+w134Gv2g/4eOfxOx2uXhCgoCE+hLRJmS2CcRnSvjZTZLXN/DGz2BzTqyNvt4sF53WJBdFiEyllhCZ
0igXwbjW8KOAOCLZVPQqNpwJwpD4ys+uXGs4F5nWVBuV2twandayHnW9eT0ytbGNnNaGJdW4+YYX/IvW
vsnrN5597ef8hiXVyfzzT8z1lpcmxcTGw4Q3Qq/WqEekNvWm5HeguWMME1NLmJl/hOfPnwtwf+L+Ihrb
R5GUK0FYUm3fpahyLXr2LX6e/bzqPyShZpNHTqTmxUkyEfWFkNw/hSfVN+Te6MEkkW4ak64/e46n68+w
9vSZaJ+uP8czGmObnFpEdmkngmKrG097xP6ZfHFGXqepLY7A2CrmkVl4smw/GGQiat/wYqXw5Pr5zjv3
aJhJgdW1dfSNL6Go7R5Sasbgk9MHr+xeJNwcQWb9ODoG5rH0aA1rtI5FtvdMIjiuat7VN12ZfHI2tkT4
R1Yyl8xCr27sxwa5T2ihUlRq4+rE/QfMLSKUDi0gqGgAAYVDCCwZQVDpKGEEAcXDuJg3BK+su3BNvQP3
lG7c6prCw0erQvDY5AIux9esOnglq5DvLRE+4eXMJ7OguFvciLQ7X0z5y+WEmtn707KUrzx5iqSqEfjk
9SOQCENujCGkfAzBhMCyMQSQGL/CYXiTCM+sfiHCLq4Tgdl3MD2/jJXHa6I+/CLK54xtLv2NOFjEa16X
S5hTZv7RN7nhSn+LFtZJb08K8kcrawgu6Id3bj/8S4ZxqWxUwL9oBCXSKUzMr2D+4SqqumfgQeTuWQNw
TevD2aQe/CdaCqe4DkzOPCQ/q5B0jcH9Un49cbxH2DwhW8Z/3nQLyNFOyGgS5Jy+6LIBeGTehU/+EHwp
1b5Fw/DKG0Dz3TmsrK5jefUpnlARPqb+mcQuuFzvg9O1Ozh7tRs2MZ0wC2vD+WQp5hZWsEyZiEyqhbVz
3DHiepvAAW8Z/3nbK6S0b3h8TlRzbfc0HJO7KbI+nM8dxHki9iIhDsldmJxdJlLZCWBr75vGqah2OBD5
mas9sI3tgg1lwIIE6Ac0IvvWEGYXlnF3aBoOXln9xPUBgU+GyIKI3tYtUTnyWq1wuLS8CqerneSwB+fS
+3Auox9ulGKGHUUaX3wHD2l7uvpnkFxyG7o+NyniDtgnUOrjumDN5Fc6YBLaKgQY+tVh7N4SFhYfIzim
HPqWAarE+asXBbx19kK6f3XjXRF9K0cU3Y7TyT1wpKJyTOuFE+2tE7VnaMz8Sit0LlRCw7UMWm7lsApv
gmWEBFYxXZQJKcwjOmAa2gbD4Bbo+TfgqOctZFcP4t70Q5RVdcP8TEwQcb5LENvAP+84emfVDI7MiKqN
KOiFZZQEtvFdsE/shj0VlT0Rn6bWJr4TJpcbEZQuRX3XJBZXnoqt0CUi88h2mIZLYHy5FYZBMvLjvvXQ
9qiGR1wbxu8too2K0dIhgYvxQwIXoxDw7lmvzNnFpceYmVuGU6yEopBQFqSwpiNlzWnllvbWMKQJkr4Z
Il6TYXlNbNvR81Uw5qhDWnEysAknKPXHL9bj+wu1lKVqHPeswuD4PPoGp2HhkDhHnB8TuA6Eivft3a+v
rdOFM0ZnVsOlAkaXW2B2RQIzSidHZhHZATNq9QMbkVZxFwtE/IDALZumWyVOBjVDL6AJun4NOOZTT9tU
C01Kv7pLJfZYFaJ/eBb9I7MwOxO/RpyfEPhOEAI+sHFNEQKG6BR8Z1eCAw4VMCCHRlRIRhSZAFW1QUgL
DrncwCRlap5uuwW6etnUXcplxBcboONdRxmpgZYHk9/EXqti7D1VgN7BGdwemIKxXQwL+M1LAiwdk2Yf
LK5gYHQOOuRsj3Ux1E6X4weKRI9Sqr8BPRJ15FwleobnSMATcRGxHXAokxF7EbFnNTTcqnDIkfwQ+W7z
fGg4lOB2/zRapKPQt4rgLWABYgu4Bt43to2t6x24h8HReZzyuwVly0LstS7BXpsSHHSsJOe1OOZLERIO
Uga6h2Yxt/QEsySAX1Sq9sXQcq+GpjsRO1dgv10p+SjAbosCKJnmwtz7Jrr6psQpOGYS3Eicv35RwLu6
5iFBReVSjE4sIC6nC0pm+VA5VSQiECAxqvZlQsxe20L0ji5ghgVQ4fIpULMrwn77UiFYhcQrE/Fui3wi
z4O8URZCUySQ0ps1Ia0GR3S9wojzpVPw9gEdZzV3v2xMzT5CS+cE7Vk+dpOI3RQFC1EmqJwqFBEdOV2A
abpUphefYIZazoS5dwUUTXLFPBPvMsuDIkWuaJQDZfMc1EtGxevZ/tw17FY7pUGc/E5gbtlFRPhY1yxs
QNozBv4G8E1ogYJxLmUiTziUoQDyxtmobh/H1IPHArMPn2CZ3pgzdN/vMMzCLopYyTRHiJE3ysYOg0x4
xzTR+R9Hbkk7NPT8hojrt4Stm5CNlbz33VHnk64+GeK4tHSO46hjMYnIgRI544h2meVCgZyGprVj/P6P
X0hDEw8QQineSWSKJtmEHMiTGP6vdaZQRN8iHYe1YzxFb21CXJvp3xKwmYVPtAwCmosrpGglxRUNg1C1
ysNOcqZAkSuSGAUi2GGYia/1rmPbiTRs003F1/ppIlJ54yyx37x++8kM7LPIQWntABrpOzIq6SYO6pxv
J45PCfw23CKX0zbkq1lWjF/Jf//VcbOQ+Rp6LzRLx8hBP7TPFmHHSSIwIAJyziQKAtkCPMaiWMQOIt6u
nw7t04Uoqu5Dg2QE2UUSaOn5L3z2xYHtxMFvwpeil9PUv8QND/Cx+FB+n6m6nmXYWgGdCv7SrWkehmdE
HXaZZArn2w0yiIxAZAI09o1+Br6hrCgaZcD9Sh2qmgZR1zaMtNxm6BhcWvtKQZe/kvnoiS8itaNe1GzY
kRP+L34TioLcrmx4RFM/4EFiei05GkFd6zBu1A3gYmwj9FxLcNg2H1+foPTrpom+nksJfGIaUFrTj5qW
YdS2DCEsvgKHfriw+OXOY9rkky8eUXjM9a2WB3U37NCxiy8K2BTx0d8/3/+F2lGPdlvnRKTnt5DjIeGY
UdNM2GhvNQ8SuJX1U3OaYWYXhX2HXTr++o9d/yZffO9vVr0QsF/DnbobdkDHWwh4RQRvx/uET3eqmJqq
anmO6luEwiswB8lZjcgoaEM1pZmRTv2kzAacD8jGcZNg7D9ybnSbooEFPft7Ale8SDtjk2fPYVf6u2Fq
2l5bAl4RwcXCFfsR4Xefb9NSVVK1Cd1LkRF6v9XyxLeaHtij7ty3R92pQ2GfVdg/v1T/jtb+gcD7/Q6B
A3mJnKFyyJmGNmy/hqecqqbHT0D2qhCuYE4nHyWO7o8b4D6P8T7zGl67RbznkIucwEFnQaxy0ElO+YAT
Tf3vtimEjyo75pQyyYvgMZ7jNQxe/wsmJ/df0Zh/vpjXMzsAAAAASUVORK5CYII=
</value>
</data>
<data name="bbtnitmEB.Caption" xml:space="preserve">
<value>Show results report</value>
</data>
<data name="bbtnitmEB.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJYEAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkRvY3VtZW50UERGIj4NCiAgICA8cGF0aCBkPSJN
MjIsMjR2NEgyVjJoMTR2NWMwLDAuNiwwLjQsMSwxLDFoNXY0aDJWN2wtNy03SDFDMC40LDAsMCwwLjQs
MCwxdjI4YzAsMC42LDAuNCwxLDEsMWgyMmMwLjYsMCwxLTAuNCwxLTEgICB2LTVIMjJ6IiBjbGFzcz0i
QmxhY2siIC8+DQogICAgPHBhdGggZD0iTTE5LjIsMTZjMC4zLDAuNSwwLjQsMS4xLDAuNCwxLjljMCww
LjktMC4yLDEuNS0wLjUsMmMtMC4zLDAuNS0wLjcsMC43LTEuMywwLjdoLTAuNnYtNS4zaDAuNiAgIEMx
OC40LDE1LjMsMTguOSwxNS42LDE5LjIsMTZ6IE0xMi4xLDE1LjNoLTAuNXYyLjZoMC41YzAuNywwLDEu
MS0wLjQsMS4xLTEuM2MwLTAuNC0wLjEtMC44LTAuMy0xQzEyLjYsMTUuNCwxMi40LDE1LjMsMTIuMSwx
NS4zeiAgICBNMzAsMTJ2MTJINlYxMkgzMHogTTE0LjgsMTYuNWMwLTAuOC0wLjItMS41LTAuNi0xLjlj
LTAuNC0wLjQtMS0wLjctMS44LTAuN0gxMHY4aDEuNnYtMi43aDAuNmMwLjgsMCwxLjQtMC4zLDEuOS0w
LjggICBDMTQuNSwxOCwxNC44LDE3LjMsMTQuOCwxNi41eiBNMjEuMiwxNy45YzAtMi42LTEuMS0zLjkt
My40LTMuOWgtMi4xdjhoMi4yYzEuMSwwLDEuOS0wLjQsMi41LTEuMUMyMC45LDIwLjIsMjEuMiwxOS4y
LDIxLjIsMTcuOXogICAgTTI2LDE0aC0zLjd2OGgxLjZ2LTMuMWgydi0xLjNoLTJ2LTIuMkgyNlYxNHoi
IGNsYXNzPSJSZWQiIC8+DQogIDwvZz4NCjwvc3ZnPgs=
</value>
</data>
<data name="bbtnitmInfoMail.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKQCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLlJlZHtmaWxsOiNEMTFD
MUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7Zmls
bDojNzI3MjcyO30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuNzU7fQo8L3N0eWxl
Pg0KICA8ZyBpZD0iTWFpbCI+DQogICAgPHBhdGggZD0iTTE2LDE4LjNsMTQtOFYyNWMwLDAuNS0wLjUs
MS0xLDFIM2MtMC41LDAtMS0wLjUtMS0xVjEwLjNMMTYsMTguM3ogTTI5LDZIM0MyLjUsNiwyLDYuNSwy
LDd2MWwxNCw4bDE0LThWNyAgIEMzMCw2LjUsMjkuNSw2LDI5LDZ6IiBjbGFzcz0iQmxhY2siIC8+DQog
IDwvZz4NCjwvc3ZnPgs=
</value>
</data>
<data name="BarButtonItem2.Caption" xml:space="preserve">
<value>Send invitation again</value>
</data>
<data name="BarButtonItem2.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKQCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLlJlZHtmaWxsOiNEMTFD
MUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7Zmls
bDojNzI3MjcyO30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuNzU7fQo8L3N0eWxl
Pg0KICA8ZyBpZD0iTWFpbCI+DQogICAgPHBhdGggZD0iTTE2LDE4LjNsMTQtOFYyNWMwLDAuNS0wLjUs
MS0xLDFIM2MtMC41LDAtMS0wLjUtMS0xVjEwLjNMMTYsMTguM3ogTTI5LDZIM0MyLjUsNiwyLDYuNSwy
LDd2MWwxNCw4bDE0LThWNyAgIEMzMCw2LjUsMjkuNSw2LDI5LDZ6IiBjbGFzcz0iQmxhY2siIC8+DQog
IDwvZz4NCjwvc3ZnPgs=
</value>
</data>
<data name="BarButtonItem3.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAHYNAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5H
cmVlbntmaWxsOiMwMzlDMjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgkuc3Qwe29wYWNpdHk6MC4z
O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTgsNGgxOHY2aDJWM2MwLTAuNS0wLjUtMS0xLTFIN0M2LjUs
Miw2LDIuNSw2LDN2N2gyVjR6IiBjbGFzcz0iQmxhY2siIC8+DQogIDxwYXRoIGQ9Ik0yNiwyNkg4di04
SDZ2OWMwLDAuNSwwLjUsMSwxLDFoMjBjMC41LDAsMS0wLjUsMS0xdi05aC0yVjI2eiIgY2xhc3M9IkJs
YWNrIiAvPg0KICA8cGF0aCBkPSJNMzEsOEgzQzIuNCw4LDIsOC40LDIsOXYxMGMwLDAuNiwwLjQsMSwx
LDFoMjhjMC42LDAsMS0wLjQsMS0xVjlDMzIsOC40LDMxLjYsOCwzMSw4eiBNOS4xLDE4bC0xLjMtMi41
ICBjLTAuMS0wLjEtMC4xLTAuMy0wLjItMC41aDBjMCwwLjEtMC4xLDAuMy0wLjIsMC41TDYuMSwxOEg0
bDIuNS0zLjlsLTIuMi0zLjloMi4xbDEuMSwyLjNjMC4xLDAuMiwwLjIsMC40LDAuMiwwLjdoMCAgYzAt
MC4yLDAuMS0wLjQsMC4yLTAuN2wxLjItMi4zaDEuOWwtMi4zLDMuOGwyLjQsMy45SDkuMXogTTE2Ljcs
MThoLTQuNnYtNy43aDEuN3Y2LjNoMi45VjE4eiBNMjIuNCwxNi45Yy0wLjIsMC4zLTAuNCwwLjUtMC43
LDAuNyAgcy0wLjYsMC4zLTEsMC40Yy0wLjQsMC4xLTAuOCwwLjEtMS4yLDAuMWMtMC40LDAtMC44LDAt
MS4yLTAuMWMtMC40LTAuMS0wLjctMC4yLTEtMC4zVjE2YzAuMywwLjMsMC42LDAuNSwxLDAuNnMwLjcs
MC4yLDEuMSwwLjIgIGMwLjIsMCwwLjQsMCwwLjYtMC4xczAuMy0wLjEsMC40LTAuMmMwLjEtMC4xLDAu
Mi0wLjIsMC4yLTAuMmMwLjEtMC4xLDAuMS0wLjIsMC4xLTAuM2MwLTAuMiwwLTAuMy0wLjEtMC40ICBj
LTAuMS0wLjEtMC4yLTAuMi0wLjQtMC4zUzIwLDE1LjEsMTkuOCwxNXMtMC40LTAuMi0wLjctMC4zYy0w
LjYtMC4zLTEuMS0wLjYtMS4zLTAuOWMtMC4zLTAuNC0wLjQtMC44LTAuNC0xLjMgIGMwLTAuNCwwLjEt
MC43LDAuMi0xYzAuMi0wLjMsMC40LTAuNSwwLjctMC43YzAuMy0wLjIsMC42LTAuMywxLTAuNHMwLjgt
MC4xLDEuMi0wLjFjMC40LDAsMC44LDAsMS4xLDAuMWMwLjMsMCwwLjYsMC4xLDAuOSwwLjIgIHYxLjZj
LTAuMS0wLjEtMC4zLTAuMi0wLjQtMC4ycy0wLjMtMC4xLTAuNS0wLjJjLTAuMiwwLTAuMy0wLjEtMC41
LTAuMXMtMC4zLDAtMC41LDBjLTAuMiwwLTAuNCwwLTAuNSwwLjFjLTAuMiwwLTAuMywwLjEtMC40LDAu
MiAgYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEs
MCwwLjIsMC4xLDAuM2MwLjEsMC4xLDAuMiwwLjIsMC4zLDAuM2MwLjEsMC4xLDAuMywwLjIsMC41LDAu
MyAgczAuNCwwLjIsMC42LDAuM2MwLjMsMC4xLDAuNiwwLjMsMC44LDAuNGMwLjIsMC4xLDAuNSwwLjMs
MC42LDAuNWMwLjIsMC4yLDAuMywwLjQsMC40LDAuNnMwLjEsMC41LDAuMSwwLjggIEMyMi42LDE2LjMs
MjIuNSwxNi42LDIyLjQsMTYuOXogTTI4LjEsMThsLTEuMy0yLjVjLTAuMS0wLjEtMC4xLTAuMy0wLjIt
MC41aDBjMCwwLjEtMC4xLDAuMy0wLjIsMC41TDI1LjEsMThIMjNsMi41LTMuOWwtMi4yLTMuOSAgaDIu
MWwxLjEsMi4zYzAuMSwwLjIsMC4yLDAuNCwwLjIsMC43aDBjMC0wLjIsMC4xLTAuNCwwLjItMC43bDEu
Mi0yLjNoMS45bC0yLjMsMy44bDIuNCwzLjlIMjguMXoiIGNsYXNzPSJHcmVlbiIgLz4NCiAgPGcgY2xh
c3M9InN0MCI+DQogICAgPHBhdGggZD0iTTMxLDhIM0MyLjQsOCwyLDguNCwyLDl2MTBjMCwwLjYsMC40
LDEsMSwxaDI4YzAuNiwwLDEtMC40LDEtMVY5QzMyLDguNCwzMS42LDgsMzEsOHogTTkuMSwxOGwtMS4z
LTIuNSAgIGMtMC4xLTAuMS0wLjEtMC4zLTAuMi0wLjVoMGMwLDAuMS0wLjEsMC4zLTAuMiwwLjVMNi4x
LDE4SDRsMi41LTMuOWwtMi4yLTMuOWgyLjFsMS4xLDIuM2MwLjEsMC4yLDAuMiwwLjQsMC4yLDAuN2gw
ICAgYzAtMC4yLDAuMS0wLjQsMC4yLTAuN2wxLjItMi4zaDEuOWwtMi4zLDMuOGwyLjQsMy45SDkuMXog
TTE2LjcsMThoLTQuNnYtNy43aDEuN3Y2LjNoMi45VjE4eiBNMjIuNCwxNi45ICAgYy0wLjIsMC4zLTAu
NCwwLjUtMC43LDAuN3MtMC42LDAuMy0xLDAuNGMtMC40LDAuMS0wLjgsMC4xLTEuMiwwLjFjLTAuNCww
LTAuOCwwLTEuMi0wLjFjLTAuNC0wLjEtMC43LTAuMi0xLTAuM1YxNiAgIGMwLjMsMC4zLDAuNiwwLjUs
MSwwLjZzMC43LDAuMiwxLjEsMC4yYzAuMiwwLDAuNCwwLDAuNi0wLjFzMC4zLTAuMSwwLjQtMC4yYzAu
MS0wLjEsMC4yLTAuMiwwLjItMC4yYzAuMS0wLjEsMC4xLTAuMiwwLjEtMC4zICAgYzAtMC4yLDAtMC4z
LTAuMS0wLjRjLTAuMS0wLjEtMC4yLTAuMi0wLjQtMC4zUzIwLDE1LjEsMTkuOCwxNXMtMC40LTAuMi0w
LjctMC4zYy0wLjYtMC4zLTEuMS0wLjYtMS4zLTAuOSAgIGMtMC4zLTAuNC0wLjQtMC44LTAuNC0xLjNj
MC0wLjQsMC4xLTAuNywwLjItMWMwLjItMC4zLDAuNC0wLjUsMC43LTAuN2MwLjMtMC4yLDAuNi0wLjMs
MS0wLjRzMC44LTAuMSwxLjItMC4xICAgYzAuNCwwLDAuOCwwLDEuMSwwLjFjMC4zLDAsMC42LDAuMSww
LjksMC4ydjEuNmMtMC4xLTAuMS0wLjMtMC4yLTAuNC0wLjJzLTAuMy0wLjEtMC41LTAuMmMtMC4yLDAt
MC4zLTAuMS0wLjUtMC4xcy0wLjMsMC0wLjUsMCAgIGMtMC4yLDAtMC40LDAtMC41LDAuMWMtMC4yLDAt
MC4zLDAuMS0wLjQsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAu
MSwwLjNjMCwwLjEsMCwwLjIsMC4xLDAuMyAgIGMwLjEsMC4xLDAuMiwwLjIsMC4zLDAuM2MwLjEsMC4x
LDAuMywwLjIsMC41LDAuM3MwLjQsMC4yLDAuNiwwLjNjMC4zLDAuMSwwLjYsMC4zLDAuOCwwLjRjMC4y
LDAuMSwwLjUsMC4zLDAuNiwwLjUgICBjMC4yLDAuMiwwLjMsMC40LDAuNCwwLjZzMC4xLDAuNSwwLjEs
MC44QzIyLjYsMTYuMywyMi41LDE2LjYsMjIuNCwxNi45eiBNMjguMSwxOGwtMS4zLTIuNWMtMC4xLTAu
MS0wLjEtMC4zLTAuMi0wLjVoMCAgIGMwLDAuMS0wLjEsMC4zLTAuMiwwLjVMMjUuMSwxOEgyM2wyLjUt
My45bC0yLjItMy45aDIuMWwxLjEsMi4zYzAuMSwwLjIsMC4yLDAuNCwwLjIsMC43aDBjMC0wLjIsMC4x
LTAuNCwwLjItMC43bDEuMi0yLjNoMS45ICAgbC0yLjMsMy44bDIuNCwzLjlIMjguMXoiIGNsYXNzPSJC
bHVlIiAvPg0KICA8L2c+DQo8L3N2Zz4L
</value> </value>
</data> </data>
<data name="RibbonPageGroup1.Text" xml:space="preserve"> <data name="RibbonPageGroup1.Text" xml:space="preserve">
<value>Data</value> <value>Data</value>
</data> </data>
<data name="RibbonPageGroup2.Text" xml:space="preserve"> <data name="RibbonPageGroupFunctions.Text" xml:space="preserve">
<value>Functions</value> <value>Functions</value>
</data> </data>
<data name="RibbonPageGroup3.Text" xml:space="preserve"> <data name="RibbonPageGroup3.Text" xml:space="preserve">
@@ -397,7 +645,24 @@
<data name="XtraTabPage2.Text" xml:space="preserve"> <data name="XtraTabPage2.Text" xml:space="preserve">
<value>Completed Envelopes</value> <value>Completed Envelopes</value>
</data> </data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <data name="btnEnvelopes_All.Text" xml:space="preserve">
<value>All over</value>
</data>
<data name="btnEnvelopes_thisYear.Text" xml:space="preserve">
<value>this year</value>
</data>
<data name="btnEnvelopes_lastmonth.Text" xml:space="preserve">
<value>last month</value>
</data>
<data name="btnEnvelopes_thismonth.Text" xml:space="preserve">
<value>this month</value>
</data>
<data name="GroupControl1.Text" xml:space="preserve">
<value>Envelopes per user</value>
</data>
<data name="XtraTabPageAdmin.Text" xml:space="preserve">
<value>Reports (Admin) - BETA</value>
</data>
<data name="frmMain.IconOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="frmMain.IconOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL

File diff suppressed because it is too large Load Diff

View File

@@ -12,6 +12,7 @@ Imports EnvelopeGenerator.Common
Imports EnvelopeGenerator.Common.My Imports EnvelopeGenerator.Common.My
Imports System.Diagnostics Imports System.Diagnostics
Imports System.ComponentModel Imports System.ComponentModel
Imports DevExpress.XtraPrinting
Public Class frmMain Public Class frmMain
Private ReadOnly LogConfig As LogConfig Private ReadOnly LogConfig As LogConfig
@@ -40,17 +41,22 @@ Public Class frmMain
TempFiles = New TempFiles(LogConfig) TempFiles = New TempFiles(LogConfig)
TempFiles.Create() TempFiles.Create()
MyTempFiles = TempFiles
RefreshHelper = New RefreshHelper(ViewEnvelopes, "Id") RefreshHelper = New RefreshHelper(ViewEnvelopes, "Id")
Controller = New EnvelopeListController(State) Controller = New EnvelopeListController(State)
Try Try
Me.LookAndFeel.UseDefaultLookAndFeel = False Me.LookAndFeel.UseDefaultLookAndFeel = False
LookAndFeel.SetSkinStyle(SkinStyle.Office2019White, SkinSvgPalette.DefaultSkin) LookAndFeel.SetSkinStyle(SkinStyle.Office2019White, SkinSvgPalette.DefaultSkin)
Catch ex As Exception Catch ex As Exception
End Try End Try
If MYUSER.IsAdmin Then
XtraTabControlMain.TabPages(2).PageVisible = True
Else
XtraTabControlMain.TabPages(2).PageVisible = False
End If
LoadEnvelopeData() LoadEnvelopeData()
End Sub End Sub
@@ -190,6 +196,8 @@ Public Class frmMain
End Sub End Sub
Private Sub XtraTabControl1_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles XtraTabControlMain.SelectedPageChanged Private Sub XtraTabControl1_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles XtraTabControlMain.SelectedPageChanged
RibbonPageGroupFunctions.Enabled = True
RibbonPageEnvelopeActions.Enabled = True
Select Case XtraTabControlMain.SelectedTabPageIndex Select Case XtraTabControlMain.SelectedTabPageIndex
Case 1 Case 1
btnEditEnvelope.Enabled = False btnEditEnvelope.Enabled = False
@@ -206,6 +214,10 @@ Public Class frmMain
bbtnitmEB.Enabled = False bbtnitmEB.Enabled = False
LoadEnvelopeData() LoadEnvelopeData()
txtEnvelopeIdLabel.Caption = "No Envelope selected" txtEnvelopeIdLabel.Caption = "No Envelope selected"
Case 2
RibbonPageGroupFunctions.Enabled = False
RibbonPageEnvelopeActions.Enabled = False
End Select End Select
End Sub End Sub
@@ -384,7 +396,7 @@ Public Class frmMain
End If End If
Catch ex As Exception Catch ex As Exception
MsgBox(Resources.Envelope.Document_could_not_be_opened, MsgBoxStyle.Critical, Text) MsgBox(Resources.Envelope.Document_could_not_be_opened, MsgBoxStyle.Critical, Text)
Logger.Error(ex) Logger.Error(ex)
End Try End Try
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
End Sub End Sub
@@ -565,7 +577,9 @@ Public Class frmMain
For Each oReceiver As EnvelopeReceiver In Receivers For Each oReceiver As EnvelopeReceiver In Receivers
If oReceiver.Email = selReceiver.Email Then If oReceiver.Email = selReceiver.Email Then
If oController.ActionService.ResendReceiver(oEnvelope, oReceiver) = True Then If oController.ActionService.ResendReceiver(oEnvelope, oReceiver) = True Then
MsgBox(Resources.Envelope.Invitation_successfully_resend, MsgBoxStyle.Information, Text) Dim oMsg = Resources.Envelope.Invitation_successfully_resend.Replace("@Mail", oReceiver.Email)
MsgBox(oMsg, MsgBoxStyle.Information, Text)
End If End If
End If End If
Next Next
@@ -582,4 +596,72 @@ Public Class frmMain
txtEnvelopeIdLabel.Caption = String.Format(txtEnvelopeIdLabel.Tag, oEnvelope.Id) txtEnvelopeIdLabel.Caption = String.Format(txtEnvelopeIdLabel.Tag, oEnvelope.Id)
End Sub End Sub
Private Sub btnEnvelopes_thismonth_Click(sender As Object, e As EventArgs) Handles btnEnvelopes_thismonth.Click
If SQL_REP_ENV_USER_TM <> String.Empty Then
Result_Execute(SQL_REP_ENV_USER_TM)
Else
GridControlData.DataSource = Nothing
End If
End Sub
Private Sub btnEnvelopes_lastmonth_Click(sender As Object, e As EventArgs) Handles btnEnvelopes_lastmonth.Click
If SQL_REP_ENV_USER_LM <> String.Empty Then
Result_Execute(SQL_REP_ENV_USER_LM)
Else
GridControlData.DataSource = Nothing
End If
End Sub
Private Sub btnEnvelopes_thisYear_Click(sender As Object, e As EventArgs) Handles btnEnvelopes_thisYear.Click
If SQL_REP_ENV_USER_Y <> String.Empty Then
Result_Execute(SQL_REP_ENV_USER_Y)
Else
GridControlData.DataSource = Nothing
End If
End Sub
Private Sub btnEnvelopes_All_Click(sender As Object, e As EventArgs) Handles btnEnvelopes_All.Click
If SQL_REP_ENV_USER_ALL <> String.Empty Then
Result_Execute(SQL_REP_ENV_USER_ALL)
Else
GridControlData.DataSource = Nothing
End If
End Sub
Private Sub Result_Execute(mySQL As String)
Try
Dim oDT As DataTable = DB_DD_ECM.GetDatatable(mySQL)
If Not IsNothing(oDT) Then
GridControlData.DataSource = oDT
Else
GridControlData.DataSource = Nothing
End If
Catch ex As Exception
End Try
End Sub
Private Sub LabelControl1_Click(sender As Object, e As EventArgs) Handles LabelControl1.Click
End Sub
Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick
XtraSaveFileDialog1.FileName = "Overview.xlsx"
XtraSaveFileDialog1.DefaultExt = ".xlsx"
If XtraSaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim oOptions As New XlsxExportOptions() With {
.ExportMode = XlsxExportMode.SingleFile
}
If XtraTabControlMain.SelectedTabPageIndex = 0 Then
GridEnvelopes.ExportToXlsx(XtraSaveFileDialog1.FileName, oOptions)
ElseIf XtraTabControlMain.SelectedTabPageIndex = 1 Then
GridCompleted.ExportToXlsx(XtraSaveFileDialog1.FileName, oOptions)
ElseIf XtraTabControlMain.SelectedTabPageIndex = 2 Then
GridControlData.ExportToXlsx(XtraSaveFileDialog1.FileName, oOptions)
End If
End If
End Sub
End Class End Class

View File

@@ -0,0 +1,112 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmOrderFiles
Inherits System.Windows.Forms.Form
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmOrderFiles))
Me.SimpleButton1 = New DevExpress.XtraEditors.SimpleButton()
Me.SimpleButton2 = New DevExpress.XtraEditors.SimpleButton()
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
Me.ListView1 = New System.Windows.Forms.ListView()
Me.Dateiname = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.SuspendLayout()
'
'SimpleButton1
'
Me.SimpleButton1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.SimpleButton1.Appearance.Font = New System.Drawing.Font("Tahoma", 12.0!)
Me.SimpleButton1.Appearance.Options.UseFont = True
Me.SimpleButton1.ImageOptions.SvgImage = CType(resources.GetObject("SimpleButton1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.SimpleButton1.Location = New System.Drawing.Point(12, 179)
Me.SimpleButton1.Name = "SimpleButton1"
Me.SimpleButton1.Size = New System.Drawing.Size(580, 37)
Me.SimpleButton1.TabIndex = 0
Me.SimpleButton1.Text = "Dateien zusammenfügen"
'
'SimpleButton2
'
Me.SimpleButton2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.SimpleButton2.Appearance.Font = New System.Drawing.Font("Tahoma", 9.75!)
Me.SimpleButton2.Appearance.Options.UseFont = True
Me.SimpleButton2.ImageOptions.SvgImage = CType(resources.GetObject("SimpleButton2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.SimpleButton2.Location = New System.Drawing.Point(598, 179)
Me.SimpleButton2.Name = "SimpleButton2"
Me.SimpleButton2.Size = New System.Drawing.Size(110, 37)
Me.SimpleButton2.TabIndex = 1
Me.SimpleButton2.Text = "Abbruch"
'
'OpenFileDialog1
'
Me.OpenFileDialog1.FileName = "OpenFileDialog1"
Me.OpenFileDialog1.Filter = "PDF Files|*.pdf"
Me.OpenFileDialog1.Multiselect = True
'
'ListView1
'
Me.ListView1.AllowDrop = True
Me.ListView1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.Dateiname})
Me.ListView1.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.ListView1.FullRowSelect = True
Me.ListView1.GridLines = True
Me.ListView1.HideSelection = False
Me.ListView1.Location = New System.Drawing.Point(12, 12)
Me.ListView1.Name = "ListView1"
Me.ListView1.Size = New System.Drawing.Size(696, 161)
Me.ListView1.TabIndex = 3
Me.ListView1.UseCompatibleStateImageBehavior = False
Me.ListView1.View = System.Windows.Forms.View.Details
'
'Dateiname
'
Me.Dateiname.Text = "Dateiname"
Me.Dateiname.Width = 534
'
'frmOrderFiles
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(712, 227)
Me.Controls.Add(Me.ListView1)
Me.Controls.Add(Me.SimpleButton2)
Me.Controls.Add(Me.SimpleButton1)
Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmOrderFiles"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Auswahl Dateien ordnen"
Me.TopMost = True
Me.ResumeLayout(False)
End Sub
Friend WithEvents SimpleButton1 As DevExpress.XtraEditors.SimpleButton
Friend WithEvents SimpleButton2 As DevExpress.XtraEditors.SimpleButton
Friend WithEvents OpenFileDialog1 As OpenFileDialog
Friend WithEvents ListView1 As ListView
Friend WithEvents Dateiname As ColumnHeader
End Class

View File

@@ -0,0 +1,159 @@
<?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>
<assembly alias="DevExpress.Data.v21.2" name="DevExpress.Data.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="SimpleButton1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMcCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkNvcHkiPg0KICAgIDxwYXRoIGQ9Ik0yMSwySDEx
Yy0wLjUsMC0xLDAuNS0xLDF2NUg1QzQuNSw4LDQsOC41LDQsOXYyMGMwLDAuNSwwLjUsMSwxLDFoMTZj
MC41LDAsMS0wLjUsMS0xdi01aDVjMC41LDAsMS0wLjUsMS0xICAgVjlMMjEsMnogTTIwLDI4SDZWMTBo
OHY1YzAsMC41LDAuNSwxLDEsMWg1VjI4eiBNMjYsMjJoLTR2LTdsLTctN2gtM1Y0aDh2NWMwLDAuNSww
LjUsMSwxLDFoNVYyMnoiIGNsYXNzPSJCbGFjayIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
</data>
<data name="SimpleButton2.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPoBAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iQ2xlYXJIZWFkZXJBbmRGb290ZXIiIHN0eWxlPSJlbmFibGUtYmFja2dy
b3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5SZWR7ZmlsbDoj
RDExQzFDO30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTI3LDRINUM0LjUsNCw0LDQuNSw0LDV2MjJjMCww
LjUsMC41LDEsMSwxaDIyYzAuNSwwLDEtMC41LDEtMVY1QzI4LDQuNSwyNy41LDQsMjcsNHogTTIyLDIw
bC0yLDJsLTQtNGwtNCw0ICBsLTItMmw0LTRsLTQtNGwyLTJsNCw0bDQtNGwyLDJsLTQsNEwyMiwyMHoi
IGNsYXNzPSJSZWQiIC8+DQo8L3N2Zz4L
</value>
</data>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,62 @@
Imports System.IO
Public Class frmOrderFiles
Public fileResults As List(Of String)
Public oTitle As String
Private Sub frmOrderFiles_Shown(sender As Object, e As EventArgs) Handles Me.Shown
OpenFileDialog1.Title = oTitle
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
ListView1.Items.Clear()
For Each file As String In OpenFileDialog1.FileNames
Dim item As New ListViewItem(Path.GetFileName(file))
item.Tag = file ' Speichere den vollständigen Pfad im Tag
ListView1.Items.Add(item)
Next
Else
Me.Close()
End If
End Sub
Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
fileResults = New List(Of String)
For Each item As ListViewItem In ListView1.Items
fileResults.Add(item.Tag.ToString())
Next
Me.Close()
End Sub
Private Sub SimpleButton2_Click(sender As Object, e As EventArgs) Handles SimpleButton2.Click
Me.Close()
End Sub
Private Sub ListView1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDown
' Starte den Drag & Drop-Vorgang, wenn ein Item ausgewählt ist
If ListView1.SelectedItems.Count > 0 Then
ListView1.DoDragDrop(ListView1.SelectedItems(0), DragDropEffects.Move)
End If
End Sub
Private Sub ListView1_DragOver(sender As Object, e As DragEventArgs) Handles ListView1.DragOver
' Erlaube das Verschieben von Items innerhalb der ListView
e.Effect = DragDropEffects.Move
End Sub
Private Sub ListView1_DragDrop(sender As Object, e As DragEventArgs) Handles ListView1.DragDrop
' Füge das Item an der neuen Position ein und entferne es von der alten Position
Dim point As Point = ListView1.PointToClient(New Point(e.X, e.Y))
Dim hoverItem As ListViewItem = ListView1.GetItemAt(point.X, point.Y)
Dim draggedItem As ListViewItem = CType(e.Data.GetData(GetType(ListViewItem)), ListViewItem)
If hoverItem Is Nothing Then
' Wenn kein Item unter dem Mauszeiger ist, füge das Item am Ende hinzu
ListView1.Items.Add(DirectCast(draggedItem.Clone(), ListViewItem))
Else
' Füge das Item vor dem hoverItem ein
ListView1.Items.Insert(hoverItem.Index, DirectCast(draggedItem.Clone(), ListViewItem))
End If
' Entferne das ursprüngliche Item
ListView1.Items.Remove(draggedItem)
End Sub
End Class

View File

@@ -25,11 +25,11 @@ Partial Class frmRueckruf
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmRueckruf)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmRueckruf))
Me.Label2 = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label()
Me.txtReason = New System.Windows.Forms.TextBox() Me.txtReason = New System.Windows.Forms.TextBox()
Me.btnWeiter = New System.Windows.Forms.Button()
Me.Label1 = New System.Windows.Forms.Label() Me.Label1 = New System.Windows.Forms.Label()
Me.btnCancel = New System.Windows.Forms.Button() Me.btnCancel = New System.Windows.Forms.Button()
Me.StatusStrip1 = New System.Windows.Forms.StatusStrip() Me.StatusStrip1 = New System.Windows.Forms.StatusStrip()
Me.tsstatus = New System.Windows.Forms.ToolStripStatusLabel() Me.tsstatus = New System.Windows.Forms.ToolStripStatusLabel()
Me.SimpleButton1 = New DevExpress.XtraEditors.SimpleButton()
Me.StatusStrip1.SuspendLayout() Me.StatusStrip1.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
' '
@@ -53,15 +53,6 @@ Partial Class frmRueckruf
Me.txtReason.Size = New System.Drawing.Size(429, 87) Me.txtReason.Size = New System.Drawing.Size(429, 87)
Me.txtReason.TabIndex = 1 Me.txtReason.TabIndex = 1
' '
'btnWeiter
'
Me.btnWeiter.Location = New System.Drawing.Point(25, 134)
Me.btnWeiter.Name = "btnWeiter"
Me.btnWeiter.Size = New System.Drawing.Size(203, 44)
Me.btnWeiter.TabIndex = 2
Me.btnWeiter.Text = "Umschlag zurückrufen"
Me.btnWeiter.UseVisualStyleBackColor = True
'
'Label1 'Label1
' '
Me.Label1.AutoSize = True Me.Label1.AutoSize = True
@@ -96,15 +87,24 @@ Partial Class frmRueckruf
Me.tsstatus.Name = "tsstatus" Me.tsstatus.Name = "tsstatus"
Me.tsstatus.Size = New System.Drawing.Size(0, 17) Me.tsstatus.Size = New System.Drawing.Size(0, 17)
' '
'SimpleButton1
'
Me.SimpleButton1.ImageOptions.SvgImage = CType(resources.GetObject("SimpleButton1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.SimpleButton1.Location = New System.Drawing.Point(25, 134)
Me.SimpleButton1.Name = "SimpleButton1"
Me.SimpleButton1.Size = New System.Drawing.Size(220, 44)
Me.SimpleButton1.TabIndex = 6
Me.SimpleButton1.Text = "Umschlag zurückrufen"
'
'frmRueckruf 'frmRueckruf
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 16.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 16.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(488, 207) Me.ClientSize = New System.Drawing.Size(488, 207)
Me.Controls.Add(Me.SimpleButton1)
Me.Controls.Add(Me.StatusStrip1) Me.Controls.Add(Me.StatusStrip1)
Me.Controls.Add(Me.btnCancel) Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.btnWeiter)
Me.Controls.Add(Me.txtReason) Me.Controls.Add(Me.txtReason)
Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label2)
Me.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
@@ -124,9 +124,9 @@ Partial Class frmRueckruf
Friend WithEvents Label2 As Label Friend WithEvents Label2 As Label
Friend WithEvents txtReason As TextBox Friend WithEvents txtReason As TextBox
Friend WithEvents btnWeiter As Button
Friend WithEvents Label1 As Label Friend WithEvents Label1 As Label
Friend WithEvents btnCancel As Button Friend WithEvents btnCancel As Button
Friend WithEvents StatusStrip1 As StatusStrip Friend WithEvents StatusStrip1 As StatusStrip
Friend WithEvents tsstatus As ToolStripStatusLabel Friend WithEvents tsstatus As ToolStripStatusLabel
Friend WithEvents SimpleButton1 As DevExpress.XtraEditors.SimpleButton
End Class End Class

View File

@@ -120,17 +120,37 @@
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnCancel.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnCancel.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFJSURBVDhPpVOhjoNQEOQT+gn9hPuEC56kFleBB41CYRs8 wQAADsEBuJFr7QAAAUlJREFUOE+lU6GOg1AQ5BP6Cf2E+4QLnqQWV4EHjUJhGzxJJbICDxpFQvCHg4DA
SSWyAg8aRULwh4OAwGHf7Sz7yuMCd+ImmfRlZ3cYeFsLWJblQnwSFXEmBiz8ANUj6dG8aSGoqko5jsNs Yd/tLPvK4wJ34iaZ9GVndxh4WwtYluVCfBIVcSYGLPwA1SPp0bxpIaiqSjmOw2zbdhMJdL4S6yzLlG3b
23YTCXS+Eussy5Rt26ooCuiRyNxQpmnKIuh5nhrHEUmQLMA5jmPW0Ee1l4yuQBMSaAMwSRI0zl3XsSFq qigK6JHI3FCmacoi6HmeGscRSZAswDmOY9bQR7WXjK5AExJoAzBJEjTOXdexIWowoVpNvMjoChQg5Hm+
MKFaTbzI6AoUIOR5vjPB0/BKOBuprjK2x5kJCJNpmvD0T2k/BtyJHNU0gCnVn9J2DBk+TOC67p/xP4gz M8HT8Eo4G6muMrbHmQkIk2ma8PRPaT8G3Ikc1TSAKdWf0nYMGT5M4Lrun/E/iDM+nDlofgPf9/kDysgG
Ppw5aH4D3/f5A8rIBj18Ers2b0Fu5iGjKxAtDMPdMBaGGvmu6feOHiQwjN9LZunt0jy6azoj5Rc0vFLT PXwSuzZvQW7mIaMrEC0Mw90wFoYa+a7p944eJDCM30tm6e3SPLprOiPlFzS8UtM0vGQsmgani0JAjVii
NLxkLJoGp4tCQI1Yoh+v1Pd9ycIwDLzjEntzPgHpD/wXsLl0jrRzIPx1WIP67sQStJRS/6CyvgGjI/3S H6/U933JwjAMvOMSe3M+AekP/BewuXSOtHMg/HVYg/ruxBK0lFL/oLK+AaMj/dL+UYA6AAAAAElFTkSu
/lGAOgAAAABJRU5ErkJggg== QmCC
</value> </value>
</data> </data>
<metadata name="StatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="StatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<assembly alias="DevExpress.Data.v21.2" name="DevExpress.Data.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="SimpleButton1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKoCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IlRyYXNoIj4NCiAgICA8cGF0aCBkPSJNOCwyN2MwLDAu
NSwwLjUsMSwxLDFoMTRjMC41LDAsMS0wLjUsMS0xVjEySDhWMjd6IiBjbGFzcz0iQmxhY2siIC8+DQog
ICAgPHBhdGggZD0iTTI1LDZoLTdWNWMwLTAuNS0wLjUtMS0xLTFoLTJjLTAuNSwwLTEsMC41LTEsMXYx
SDdDNi41LDYsNiw2LjUsNiw3djNoMjBWN0MyNiw2LjUsMjUuNSw2LDI1LDZ6IiBjbGFzcz0iQmxhY2si
IC8+DQogIDwvZz4NCjwvc3ZnPgs=
</value>
</data>
</root> </root>

View File

@@ -12,7 +12,19 @@ Public Class frmRueckruf
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
End Sub End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnWeiter.Click
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Continue_Reject = False
Me.Close()
End Sub
Private Sub frmRueckruf_Load(sender As Object, e As EventArgs) Handles Me.Load
txtReason.Text = ""
tsstatus.Text = ""
Continue_Reject = False
End Sub
Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
If txtReason.Text <> "" Then If txtReason.Text <> "" Then
If MsgBox(Resources.Envelope.Do_you_really_want_to_delete_this_envelope, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then If MsgBox(Resources.Envelope.Do_you_really_want_to_delete_this_envelope, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then
Me.Close() Me.Close()
@@ -38,13 +50,4 @@ Public Class frmRueckruf
tsstatus.Text = "Please add a reason for aborting - " & Now tsstatus.Text = "Please add a reason for aborting - " & Now
End If End If
End Sub End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub frmRueckruf_Load(sender As Object, e As EventArgs) Handles Me.Load
txtReason.Text = ""
tsstatus.Text = ""
End Sub
End Class End Class

View File

@@ -62,7 +62,7 @@ Public Class frmSplashScreen
Private Sub Worker_DoWork(sender As Object, e As DoWorkEventArgs) Handles Worker.DoWork Private Sub Worker_DoWork(sender As Object, e As DoWorkEventArgs) Handles Worker.DoWork
Dim oState As State = DirectCast(e.Argument, State) Dim oState As State = DirectCast(e.Argument, State)
Worker.ReportProgress(20, "Initialize Database") Worker.ReportProgress(20, "Initializing Database")
Thread.Sleep(300) Thread.Sleep(300)
Dim oConnectionString = MSSQLServer.DecryptConnectionString(oState.Config.ConnectionString) Dim oConnectionString = MSSQLServer.DecryptConnectionString(oState.Config.ConnectionString)
@@ -74,15 +74,34 @@ Public Class frmSplashScreen
DB_DD_ECM = oState.Database DB_DD_ECM = oState.Database
End If End If
Worker.ReportProgress(40, "Initialize Confguration") Worker.ReportProgress(40, "Initializing Configuration")
Thread.Sleep(300) Thread.Sleep(300)
Dim oSQl = "SELECT * FROM TBDD_SQL_COMMANDS"
Dim oDT = oState.Database.GetDatatable(oSQl)
For Each oROW As DataRow In oDT.Rows
If oROW.Item("TITLE") = "REPORT ENV USER THIS_MONTH" Then
SQL_REP_ENV_USER_TM = oROW.Item("SQL_COMMAND")
ElseIf oROW.Item("TITLE") = "REPORT ENV USER LAST_MONTH" Then
SQL_REP_ENV_USER_LM = oROW.Item("SQL_COMMAND")
ElseIf oROW.Item("TITLE") = "REPORT ENV USER YEAR" Then
SQL_REP_ENV_USER_Y = oROW.Item("SQL_COMMAND")
ElseIf oROW.Item("TITLE") = "REPORT ENV USER ALL" Then
SQL_REP_ENV_USER_ALL = oROW.Item("SQL_COMMAND")
End If
Next
oSQl = "SELECT * FROM TBSIG_CHART"
DT_CHARTS = oState.Database.GetDatatable(oSQl)
Dim ConfigModel = New ConfigModel(oState) Dim ConfigModel = New ConfigModel(oState)
oState.DbConfig = ConfigModel.LoadConfiguration() oState.DbConfig = ConfigModel.LoadConfiguration()
DOCUMENT_PATH_MOVE_AFTSEND = oState.DbConfig.DOCUMENT_PATH_MOVE_AFTSEND DEF_TF_ENABLED = oState.DbConfig.Default_TFA_Enabled
Worker.ReportProgress(60, "Initialize User") DEF_TF_ENABLED_WITH_PHONE = oState.DbConfig.Default_TFA_WithPhone
' DOCUMENT_PATH_MOVE_AFTSEND = oState.DbConfig.DOCUMENT_PATH_MOVE_AFTSEND
Worker.ReportProgress(60, "Initializing User")
Dim oKey = oState.Database.GetScalarValue("SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE' and ACTIVE = 1") Dim oKey = oState.Database.GetScalarValue("SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE' and ACTIVE = 1")
Thread.Sleep(300) Thread.Sleep(300)
If oKey.ToString <> String.Empty Then If oKey.ToString <> String.Empty Then
MS_GDPICTUREKEY = oKey MS_GDPICTUREKEY = oKey
End If End If
@@ -91,13 +110,14 @@ Public Class frmSplashScreen
Dim oUser = oUserModel.SelectUser() Dim oUser = oUserModel.SelectUser()
Worker.ReportProgress(80, "Initialize Rights") Worker.ReportProgress(80, "Initializing Rights")
Thread.Sleep(300) Thread.Sleep(300)
' This checks for module access and admin rights ' This checks for module access and admin rights
If oUser IsNot Nothing Then If oUser IsNot Nothing Then
oUserModel.CheckUserLogin(oUser) oUserModel.CheckUserLogin(oUser)
End If End If
MYUSER = oUser
Worker.ReportProgress(100, "Starting Application") Worker.ReportProgress(100, "Starting Application")
Thread.Sleep(300) Thread.Sleep(300)

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="GdPicture" version="14.2.89" targetFramework="net462" /> <package id="GdPicture" version="14.2.90" targetFramework="net462" />
<package id="GdPicture.runtimes.windows" version="14.2.89" targetFramework="net462" /> <package id="GdPicture.runtimes.windows" version="14.2.90" targetFramework="net462" />
<package id="NLog" version="5.0.5" targetFramework="net462" /> <package id="NLog" version="5.0.5" targetFramework="net462" />
</packages> </packages>

View File

@@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DigitalData.Core.Abstractions" Version="2.0.0" /> <PackageReference Include="DigitalData.Core.Abstractions" Version="2.2.1" />
<PackageReference Include="DigitalData.Core.API" Version="2.0.0" /> <PackageReference Include="DigitalData.Core.API" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.15" /> <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.15" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />

View File

@@ -1,7 +1,7 @@
using DigitalData.Core.API; using DigitalData.Core.API;
using DigitalData.Core.Application; using DigitalData.Core.Application;
using DigitalData.UserManager.Application; using DigitalData.UserManager.Application;
using EnvelopeGenerator.Application; using EnvelopeGenerator.Application.Extensions;
using EnvelopeGenerator.Infrastructure; using EnvelopeGenerator.Infrastructure;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
@@ -60,7 +60,7 @@ builder.Services.AddDirectorySearchService();
builder.Services.AddCookieBasedLocalizer() ; builder.Services.AddCookieBasedLocalizer() ;
// Envelope generator serives // Envelope generator serives
builder.Services.AddEnvelopeGenerator(); builder.Services.AddEnvelopeGenerator(config);
var app = builder.Build(); var app = builder.Build();

View File

@@ -5,19 +5,19 @@ namespace EnvelopeGenerator.Infrastructure.Contracts
{ {
public interface IEnvelopeReceiverRepository : ICRUDRepository<EnvelopeReceiver, (int Envelope, int Receiver)> public interface IEnvelopeReceiverRepository : ICRUDRepository<EnvelopeReceiver, (int Envelope, int Receiver)>
{ {
Task<IEnumerable<EnvelopeReceiver>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false); Task<IEnumerable<EnvelopeReceiver>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true);
Task<IEnumerable<EnvelopeReceiver>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true); Task<IEnumerable<EnvelopeReceiver>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true);
Task<EnvelopeReceiver?> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true); Task<EnvelopeReceiver?> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true);
Task<string?> ReadAccessCodeAsync(string uuid, string signature); Task<string?> ReadAccessCodeAsync(string uuid, string signature, bool readOnly = true);
Task<int> CountAsync(string uuid, string signature); Task<int> CountAsync(string uuid, string signature);
Task<EnvelopeReceiver?> ReadByIdAsync(int envelopeId, int receiverId); Task<EnvelopeReceiver?> ReadByIdAsync(int envelopeId, int receiverId, bool readOnly = true);
Task<string?> ReadAccessCodeByIdAsync(int envelopeId, int receiverId); Task<string?> ReadAccessCodeByIdAsync(int envelopeId, int receiverId, bool readOnly = true);
Task<IEnumerable<EnvelopeReceiver>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses); Task<IEnumerable<EnvelopeReceiver>> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses);

View File

@@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DigitalData.Core.Abstractions" Version="2.0.0" /> <PackageReference Include="DigitalData.Core.Abstractions" Version="2.2.1" />
<PackageReference Include="DigitalData.Core.Infrastructure" Version="2.0.0" /> <PackageReference Include="DigitalData.Core.Infrastructure" Version="2.0.0" />
<PackageReference Include="DigitalData.EmailProfilerDispatcher" Version="2.0.0" /> <PackageReference Include="DigitalData.EmailProfilerDispatcher" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.16" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.16" />

View File

@@ -11,9 +11,9 @@ namespace EnvelopeGenerator.Infrastructure.Repositories
{ {
} }
private IQueryable<EnvelopeReceiver> ReadWhere(string? uuid = null, string? signature = null, bool withEnvelope = false, bool withReceiver = false) private IQueryable<EnvelopeReceiver> ReadWhere(string? uuid = null, string? signature = null, bool withEnvelope = false, bool withReceiver = false, bool readOnly = true)
{ {
var query = _dbSet.AsNoTracking(); var query = readOnly ? _dbSet.AsNoTracking() : _dbSet;
if (uuid is not null) if (uuid is not null)
query = query.Where(er => er.Envelope != null && er.Envelope.Uuid == uuid); query = query.Where(er => er.Envelope != null && er.Envelope.Uuid == uuid);
@@ -32,31 +32,34 @@ namespace EnvelopeGenerator.Infrastructure.Repositories
return query; return query;
} }
public async Task<IEnumerable<EnvelopeReceiver>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false) public async Task<IEnumerable<EnvelopeReceiver>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false, bool readOnly = true)
=> await ReadWhere(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver).ToListAsync(); => await ReadWhere(uuid: uuid, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly).ToListAsync();
public async Task<IEnumerable<EnvelopeReceiver>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true) public async Task<IEnumerable<EnvelopeReceiver>> ReadBySignatureAsync(string signature, bool withEnvelope = false, bool withReceiver = true, bool readOnly = true)
=> await ReadWhere(signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver).ToListAsync(); => await ReadWhere(signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly).ToListAsync();
public async Task<EnvelopeReceiver?> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true) public async Task<EnvelopeReceiver?> ReadByUuidSignatureAsync(string uuid, string signature, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true)
=> await ReadWhere(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver).FirstOrDefaultAsync(); => await ReadWhere(uuid: uuid, signature: signature, withEnvelope: withEnvelope, withReceiver: withReceiver, readOnly: readOnly).FirstOrDefaultAsync();
public async Task<string?> ReadAccessCodeAsync(string uuid, string signature) public async Task<string?> ReadAccessCodeAsync(string uuid, string signature, bool readOnly = true)
=> await ReadWhere(uuid: uuid, signature: signature) => await ReadWhere(uuid: uuid, signature: signature, readOnly: readOnly)
.Select(er => er.AccessCode) .Select(er => er.AccessCode)
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
public async Task<int> CountAsync(string uuid, string signature) => await ReadWhere(uuid: uuid, signature: signature).CountAsync(); public async Task<int> CountAsync(string uuid, string signature) => await ReadWhere(uuid: uuid, signature: signature).CountAsync();
public IQueryable<EnvelopeReceiver> ReadById(int envelopeId, int receiverId) => _dbSet.AsNoTracking() private IQueryable<EnvelopeReceiver> ReadById(int envelopeId, int receiverId, bool readOnly = true)
.Where(er => er.EnvelopeId == envelopeId && er.ReceiverId == receiverId); {
var query = readOnly ? _dbSet.AsNoTracking() : _dbSet;
return query.Where(er => er.EnvelopeId == envelopeId && er.ReceiverId == receiverId);
}
public async Task<EnvelopeReceiver?> ReadByIdAsync(int envelopeId, int receiverId) public async Task<EnvelopeReceiver?> ReadByIdAsync(int envelopeId, int receiverId, bool readOnly = true)
=> await ReadById(envelopeId: envelopeId, receiverId: receiverId) => await ReadById(envelopeId: envelopeId, receiverId: receiverId, readOnly: readOnly)
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
public async Task<string?> ReadAccessCodeByIdAsync(int envelopeId, int receiverId) public async Task<string?> ReadAccessCodeByIdAsync(int envelopeId, int receiverId, bool readOnly = true)
=> await ReadById(envelopeId: envelopeId, receiverId: receiverId) => await ReadById(envelopeId: envelopeId, receiverId: receiverId, readOnly: readOnly)
.Select(er => er.AccessCode) .Select(er => er.AccessCode)
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();

View File

@@ -1,9 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<configSections> <configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="EnvelopeGenerator.Service.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections> </configSections>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
@@ -16,11 +13,4 @@
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
<applicationSettings>
<EnvelopeGenerator.Service.My.MySettings>
<setting name="RunInDMZ" serializeAs="String">
<value>False</value>
</setting>
</EnvelopeGenerator.Service.My.MySettings>
</applicationSettings>
</configuration> </configuration>

View File

@@ -14,6 +14,8 @@
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@@ -66,9 +68,8 @@
<Reference Include="DigitalData.Modules.Messaging"> <Reference Include="DigitalData.Modules.Messaging">
<HintPath>..\..\2_DLL Projekte\DDModules\Messaging\bin\Debug\DigitalData.Modules.Messaging.dll</HintPath> <HintPath>..\..\2_DLL Projekte\DDModules\Messaging\bin\Debug\DigitalData.Modules.Messaging.dll</HintPath>
</Reference> </Reference>
<Reference Include="GdPicture.NET.14, Version=14.1.0.152, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL"> <Reference Include="GdPicture.NET.14, Version=14.2.89.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <HintPath>..\packages\GdPicture.14.2.89\lib\net462\GdPicture.NET.14.dll</HintPath>
<HintPath>D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll</HintPath>
</Reference> </Reference>
<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">
@@ -177,4 +178,11 @@
</ProjectReference> </ProjectReference>
</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>

Some files were not shown because too many files have changed in this diff Show More