From b66c2f67daacb1f00baf5a67f30392a7724d8239 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Mon, 9 Sep 2024 17:30:36 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Hinzuf=C3=BCgen=20einer=20erweiterten?= =?UTF-8?q?=20Ansicht=20f=C3=BCr=20die=20Tabelle=20im=20Envelope=20Generat?= =?UTF-8?q?or?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - In der Tabelle für Umschläge wurde ein versteckter Abschnitt unter den Zeilen hinzugefügt. - Beim Klicken auf eine Zeile wird nun ein Detailbereich angezeigt, der Informationen zu Empfänger und Historie des Umschlags zeigt. --- .../EnvelopeHistory/EnvelopeHistoryDto.cs | 1 + .../Entities/EnvelopeHistory.cs | 8 ++++++- .../receiver-table.component.html | 23 +++++++++++++++++++ .../envelope-table.component.html | 1 + .../envelope-table.component.ts | 13 ++++++++++- .../history-table.component.html | 2 +- .../history-table/history-table.component.ts | 22 ++++++++++++++++-- .../receiver-status-table.component.ts | 2 +- .../src/app/services/configuration.service.ts | 10 +++++--- .../src/app/services/history.service.ts | 16 ++++++------- .../Controllers/HistoryController.cs | 6 ++--- 11 files changed, 83 insertions(+), 21 deletions(-) create mode 100644 EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/receiver-table/receiver-table.component.html diff --git a/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs b/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs index 7967ac3c..54e0b1d6 100644 --- a/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs +++ b/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs @@ -10,6 +10,7 @@ namespace EnvelopeGenerator.Application.DTOs.EnvelopeHistory int EnvelopeId, string UserReference, int Status, + string? StatusName, DateTime AddedWhen, DateTime? ActionDate, UserCreateDto? Sender, diff --git a/EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs b/EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs index 55313e36..d03922fd 100644 --- a/EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs +++ b/EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs @@ -43,11 +43,17 @@ namespace EnvelopeGenerator.Domain.Entities public virtual Receiver? Receiver { get; set; } [NotMapped] - public ReferenceType ReferenceType => (Status / 3) switch + public ReferenceType ReferenceType => (Status / 1000) switch { 1 => ReferenceType.Sender, 2 or 3 => ReferenceType.Receiver, _ => ReferenceType.Unknown, }; + + [NotMapped] + public string? StatusName + => (Enum.IsDefined(typeof(EnvelopeStatus), Status)) + ? Enum.GetName(typeof(EnvelopeStatus), Status) + : null; } } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/receiver-table/receiver-table.component.html b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/receiver-table/receiver-table.component.html new file mode 100644 index 00000000..744d5711 --- /dev/null +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/receiver-table/receiver-table.component.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + +
Email + + Anrede Email + + Zugriffscode {{element.accessCode}}
\ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.html b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.html index 01582673..77a6daf9 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.html +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.html @@ -6,6 +6,7 @@ + \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts index 5d7267b4..79adf50a 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts @@ -6,12 +6,14 @@ import { DDTable } from "../dd-table/dd-table.component"; import { ClearableInputComponent } from '../../clearable-input/clearable-input.component' import { MatTabsModule } from '@angular/material/tabs'; import { ReceiverStatusTableComponent } from "../receiver-status-table/receiver-status-table.component"; +import { HistoryTableComponent } from "../history-table/history-table.component"; import { EnvelopeReceiverService } from '../../../services/envelope-receiver.service'; +import { HistoryService } from '../../../services/history.service'; @Component({ selector: 'envelope-table', standalone: true, - imports: [DDTable, ClearableInputComponent, MatTabsModule, ReceiverStatusTableComponent], + imports: [DDTable, ClearableInputComponent, MatTabsModule, ReceiverStatusTableComponent, HistoryTableComponent], templateUrl: './envelope-table.component.html', animations: [ trigger('detailExpand', [ @@ -51,12 +53,19 @@ export class EnvelopeTableComponent implements AfterViewInit { @ViewChild(ReceiverStatusTableComponent) rsTable!: ReceiverStatusTableComponent + @ViewChild(HistoryTableComponent) histTable!: HistoryTableComponent + onToggleExpandedRow: (envelope: any, event: Event) => Promise = async (envelope, event) => { if (envelope === null || envelope === undefined) return; var uuid: string = envelope.uuid; this.rsTable.data = await this.erService.getSecretAsync(uuid); + + var id: number = envelope.id; + var refType: number = this.config.referenceType.receiver; + const histories = await this.histService.getHistoryAsync({ envelopeId: id, referenceType: refType, withReceiver: true }) + this.histTable.data = histories; } private eService: EnvelopeService = inject(EnvelopeService); @@ -65,6 +74,8 @@ export class EnvelopeTableComponent implements AfterViewInit { private readonly erService: EnvelopeReceiverService = inject(EnvelopeReceiverService); + private readonly histService: HistoryService = inject(HistoryService); + async ngAfterViewInit() { this.data = await this.eService.getEnvelopeAsync(this.options); } diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.html b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.html index 2f5cd4e6..73206709 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.html +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.html @@ -1 +1 @@ -

history-table works!

+ \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.ts index d8181354..1d2cd2fd 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/history-table/history-table.component.ts @@ -1,12 +1,30 @@ import { Component } from '@angular/core'; +import { DDTable } from '../dd-table/dd-table.component' @Component({ selector: 'history-table', standalone: true, - imports: [], + imports: [DDTable], templateUrl: './history-table.component.html', styleUrl: './history-table.component.scss' }) export class HistoryTableComponent { + data: any[] = []; -} + schema: Record any; }> = { + "status": { + "header": "Status", + "field": hist => hist.statusName + }, + "user": { + "header": "Benutzer", + "field": hist => hist.userReference + }, + "date": { + "header": "Datum", + "field": hist => hist.actionDate + } + } + + columnsToDisplay: string[] = ["status", "user", "date"]; +} \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts index 0a82494c..b4a17350 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts @@ -1,4 +1,4 @@ -import { Component, inject } from '@angular/core'; +import { Component } from '@angular/core'; import { DDTable } from '../dd-table/dd-table.component' @Component({ diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/configuration.service.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/configuration.service.ts index e27fa9aa..2b56191e 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/configuration.service.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/configuration.service.ts @@ -14,7 +14,7 @@ export class ConfigurationService implements OnInit { private _envelopeTypeTitles! : any[]; - private referenceType!: any; + private _referenceType!: any; constructor(private http: HttpClient) { const api_url = inject(API_URL); @@ -29,7 +29,7 @@ export class ConfigurationService implements OnInit { }}); this.http.get(`${this.url}/History/reference-type`).subscribe({ - next: res => this.referenceType = res + next: res => this._referenceType = res }) } @@ -39,5 +39,9 @@ export class ConfigurationService implements OnInit { public get envelopeTypeTitles() { return this._envelopeTypeTitles; - } + } + + public get referenceType() { + return this._referenceType; + } } diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/history.service.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/history.service.ts index cfb508f3..b458943f 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/history.service.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/history.service.ts @@ -19,15 +19,15 @@ export class HistoryService { let params = new HttpParams(); if (options) { if (options.envelopeId) - params = params.set('envelopeId', options.envelopeId.toString()); - if (options.referenceType) - params = params.set('referenceType', options.referenceType.toString()); + params = params.set('envelopeId', options.envelopeId); + if (options.referenceType != null) + params = params.set('referenceType', options.referenceType); if (options.userReference) - params = params.set('userReference', options.userReference.toString()); + params = params.set('userReference', options.userReference); if (options.withReceiver) - params = params.set('withReceiver', options.withReceiver.toString()); + params = params.set('withReceiver', options.withReceiver); if (options.withSender) - params = params.set('withSender', options.withSender.toString()); + params = params.set('withSender', options.withSender); } return this.http.get(this.url, { params }); } @@ -37,10 +37,10 @@ export class HistoryService { } } -interface Options { +class Options { envelopeId?: number; userReference?: string; - referenceType?: number; + referenceType: number | null = null; withSender?: boolean; withReceiver?: boolean; } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs index b6670838..8b24cc9d 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs @@ -45,12 +45,10 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers ReferenceType? refTypEnum = null; if (referenceType is int refTypInt) - { if (Enum.IsDefined(typeof(ReferenceType), refTypInt)) refTypEnum = (ReferenceType)refTypInt; - } - else - throw new ArgumentException($"The provided referenceType '{referenceType}' is not valid. It must correspond to a valid value in the {nameof(ReferenceType)} enum."); + else + throw new ArgumentException($"The provided referenceType '{referenceType}' is not valid. It must correspond to a valid value in the {nameof(ReferenceType)} enum."); switch(referenceType) {