Merge remote-tracking branch 'origin/master' into RED-9747

This commit is contained in:
Dan Percic 2024-08-05 17:54:22 +02:00
commit 1bbef9eb37
22 changed files with 305 additions and 267 deletions

View File

@ -3,7 +3,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
export const digitalSignatureDialogTranslations = {
title: {
beforeConfiguration: _('digital-signature-dialog.title.before-configuration'),
pkcs: _('digital-signature-dialog.title.pkcs'),
kms: _('digital-signature-dialog.title.kms'),
PKCS: _('digital-signature-dialog.title.pkcs'),
KMS: _('digital-signature-dialog.title.kms'),
},
} as const;

View File

@ -6,25 +6,13 @@
[viewModeSelection]="viewModeSelection"
>
<ng-container slot="right">
<iqser-circle-button
*allow="roles.getRss"
[attr.help-mode-key]="'component_download'"
[disabled]="downloadComponentLogsDisabled$ | async"
[icon]="'red:extract'"
[matMenuTriggerFor]="(downloadComponentLogsDisabled$ | async) ? null : bulkComponentDownloadMenu"
[tooltip]="
((downloadComponentLogsDisabled$ | async) ? 'component-download.disabled-tooltip' : 'component-download.tooltip')
| translate
"
dropdownButton
></iqser-circle-button>
<redaction-file-download-btn
[attr.help-mode-key]="'download_dossier_in_dossier'"
[buttonId]="'download-files-btn'"
[disabled]="downloadFilesDisabled$ | async"
[dossier]="dossier"
[files]="entitiesService.all$ | async"
dossierDownload
></redaction-file-download-btn>
<iqser-circle-button
@ -62,8 +50,3 @@
<ng-template #viewModeSelection>
<redaction-view-mode-selection iqserDisableStopPropagation></redaction-view-mode-selection>
</ng-template>
<mat-menu #bulkComponentDownloadMenu="matMenu">
<button (click)="downloadComponentAsJSON()" [innerHTML]="'component-download.json' | translate" mat-menu-item></button>
<button (click)="downloadComponentAsXML()" [innerHTML]="'component-download.xml' | translate" mat-menu-item></button>
</mat-menu>

View File

@ -73,7 +73,6 @@ export class DossierOverviewScreenHeaderComponent implements OnInit {
private readonly _reanalysisService: ReanalysisService,
private readonly _loadingService: LoadingService,
private readonly _primaryFileAttributeService: PrimaryFileAttributeService,
private readonly _componentLogService: ComponentLogService,
) {
const someNotProcessed$ = this.entitiesService.all$.pipe(some(file => !file.lastProcessed));
this.downloadFilesDisabled$ = combineLatest([this.listingService.areSomeSelected$, someNotProcessed$]).pipe(
@ -128,12 +127,4 @@ export class DossierOverviewScreenHeaderComponent implements OnInit {
];
saveAsCSV(fileName, entities, fileFields, mapper);
}
downloadComponentAsJSON() {
return firstValueFrom(this._componentLogService.exportJSON(this.dossier.dossierTemplateId, this.dossier.dossierId));
}
async downloadComponentAsXML() {
return firstValueFrom(this._componentLogService.exportXML(this.dossier.dossierTemplateId, this.dossier.dossierId));
}
}

View File

@ -61,8 +61,8 @@
[configs]="[
{
color: file.workflowStatus,
length: 1
}
length: 1,
},
]"
></iqser-status-bar>
</ng-template>
@ -71,6 +71,7 @@
*ngIf="!file.isProcessing"
[dossier]="dossier"
[file]="file"
[singleEntityAction]="true"
class="mr-4"
type="dossier-overview-list"
></redaction-file-actions>

View File

@ -1,6 +1,7 @@
<div
(mousedown)="fileAttributesService.resetEdit()"
[class.help-mode-active]="helpModeService?.isHelpModeActive$ | async"
[class.active-entity]="activeEntity()"
class="workflow-item"
>
<div class="details-wrapper">
@ -38,6 +39,7 @@
[dossier]="dossier"
[file]="file"
[maxWidth]="width"
[singleEntityAction]="true"
iqserDisableStopPropagation
type="dossier-overview-workflow"
></redaction-file-actions>

View File

@ -12,6 +12,7 @@
}
&:hover,
&.active-entity,
&.help-mode-active {
redaction-file-actions {
display: initial;

View File

@ -1,4 +1,4 @@
import { ChangeDetectorRef, Component, ElementRef, Input, OnInit, Optional, ViewChild } from '@angular/core';
import { ChangeDetectorRef, Component, computed, ElementRef, Input, OnInit, Optional, ViewChild } from '@angular/core';
import { DisableStopPropagationDirective, HelpModeService } from '@iqser/common-ui';
import { Debounce, trackByFactory } from '@iqser/common-ui/lib/utils';
import { Dossier, File, IFileAttributeConfig } from '@red/domain';
@ -12,6 +12,7 @@ import { FileWorkloadComponent } from '../table-item/file-workload/file-workload
import { ProcessingIndicatorComponent } from '@shared/components/processing-indicator/processing-indicator.component';
import { FileActionsComponent } from '../../../shared-dossiers/components/file-actions/file-actions.component';
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
import { ActiveListingEntityService } from '@services/active-listing-entity.service';
@Component({
selector: 'redaction-workflow-item',
@ -38,12 +39,14 @@ export class WorkflowItemComponent implements OnInit {
@ViewChild('actionsWrapper', { static: true }) private _actionsWrapper: ElementRef;
width: number;
readonly trackBy = trackByFactory();
readonly activeEntity = computed(() => this._activeListingEntityService.activeEntity() === this.file?.id);
@Input({ required: true }) file: File;
@Input({ required: true }) dossier: Dossier;
@Input({ required: true }) displayedAttributes: IFileAttributeConfig[];
constructor(
readonly fileAttributesService: FileAttributesService,
readonly _activeListingEntityService: ActiveListingEntityService,
private readonly _changeRef: ChangeDetectorRef,
@Optional() readonly helpModeService: HelpModeService,
) {}

View File

@ -116,7 +116,7 @@ export class ConfigService {
return [
{
id: 'editDossier',
label: this._translateService.instant('dossier-overview.header-actions.edit'),
label: _('dossier-overview.header-actions.edit'),
action: () => this.#openEditDossierDialog(dossierId),
icon: 'iqser:edit',
hide: !this.#currentUser.isManager && !this._iqserPermissionsService.has(Roles.dossiers.edit),

View File

@ -33,6 +33,7 @@
[file]="file"
[helpModeKeyPrefix]="'editor'"
[minWidth]="width"
[singleEntityAction]="true"
iqserDisableStopPropagation
type="file-preview"
></redaction-file-actions>

View File

@ -29,5 +29,6 @@
[disabled]="downloadBtnDisabled"
[dossier]="dossier"
[files]="files"
dossierDownload
></redaction-file-download-btn>
</div>

View File

@ -20,7 +20,7 @@
[tooltipPosition]="tooltipPosition"
[helpModeKeyPrefix]="helpModeKeyPrefix"
[isDossierOverviewWorkflow]="isDossierOverviewWorkflow"
[file]="file"
[singleEntityAction]="singleEntityAction"
></redaction-expandable-file-actions>
</div>
</ng-template>

View File

@ -51,6 +51,7 @@ export class FileActionsComponent implements OnChanges {
@Input() maxWidth: number;
@Input() minWidth: number;
@Input() helpModeKeyPrefix: 'dossier' | 'editor' = 'dossier';
@Input() singleEntityAction = false;
readonly currentUser = getCurrentUser<User>();
toggleTooltip?: string;
assignTooltip?: string;
@ -119,6 +120,16 @@ export class FileActionsComponent implements OnChanges {
private get _buttons(): Action[] {
const actions: Action[] = [
{
id: 'btn-download_file',
type: ActionTypes.downloadBtn,
files: [this.file],
dossier: this.dossier,
tooltipClass: 'small',
show: this.showDownload,
disabled: this.file.processingStatus === ProcessingFileStatuses.ERROR,
helpModeKey: 'download',
},
{
id: 'btn-delete_file',
type: ActionTypes.circleBtn,
@ -155,16 +166,6 @@ export class FileActionsComponent implements OnChanges {
show: this.showImportRedactions && !this._iqserPermissionsService.has(Roles.getRss),
helpModeKey: 'import_redactions',
},
{
id: 'btn-download_file',
type: ActionTypes.downloadBtn,
files: [this.file],
dossier: this.dossier,
tooltipClass: 'small',
show: this.showDownload,
disabled: this.file.processingStatus === ProcessingFileStatuses.ERROR,
helpModeKey: 'download',
},
{
id: 'btn-toggle_document_info',
type: ActionTypes.circleBtn,

View File

@ -1,10 +1,31 @@
<iqser-circle-button
(action)="downloadFiles()"
[buttonId]="buttonId"
[disabled]="disabled || !canDownloadFiles || invalidDownload"
[tooltipClass]="tooltipClass"
[tooltipPosition]="tooltipPosition"
[tooltip]="tooltip | translate : { count: files.length }"
[type]="type"
icon="iqser:download"
></iqser-circle-button>
@if (dropdownButton()) {
<iqser-circle-button
(click)="setActiveListingEntity($event)"
[matMenuTriggerFor]="downloadMenu"
[tooltipClass]="tooltipClass()"
[tooltipPosition]="tooltipPosition()"
[tooltip]="tooltip | translate: { count: files().length }"
[type]="type()"
[disabled]="disabled() || !canDownloadFiles || invalidDownload"
[buttonId]="buttonId()"
icon="iqser:download"
dropdownButton
></iqser-circle-button>
} @else {
<iqser-circle-button
(action)="downloadFiles()"
[buttonId]="buttonId()"
[disabled]="disabled() || !canDownloadFiles || invalidDownload"
[tooltipClass]="tooltipClass()"
[tooltipPosition]="tooltipPosition()"
[tooltip]="tooltip | translate: { count: files().length }"
[type]="type()"
icon="iqser:download"
></iqser-circle-button>
}
<mat-menu #downloadMenu="matMenu" (closed)="onDownloadMenuClosed()">
<button (click)="downloadComponentAsJSON($event)" [innerHTML]="'component-download.json' | translate" mat-menu-item></button>
<button (click)="downloadComponentAsXML($event)" [innerHTML]="'component-download.xml' | translate" mat-menu-item></button>
<button (click)="downloadFiles($event)" [innerHTML]="'component-download.report' | translate" mat-menu-item></button>
</mat-menu>

View File

@ -1,48 +1,69 @@
import { Component, inject, Input, OnChanges } from '@angular/core';
import { booleanAttribute, Component, computed, inject, input, Input, OnChanges, ViewChild } from '@angular/core';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { CircleButtonComponent, CircleButtonType, CircleButtonTypes, IqserDialog, Toaster } from '@iqser/common-ui';
import { Dossier, File, ProcessingFileStatuses } from '@red/domain';
import { CircleButtonComponent, CircleButtonType, CircleButtonTypes, getConfig, IqserDialog, Toaster } from '@iqser/common-ui';
import { Dossier, File, IFile, ProcessingFileStatuses } from '@red/domain';
import { PermissionsService } from '@services/permissions.service';
import { DownloadDialogComponent } from '@shared/dialogs/download-dialog/download-dialog.component';
import { FileDownloadService } from '@upload-download/services/file-download.service';
import { APP_BASE_HREF } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core';
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
import { firstValueFrom } from 'rxjs';
import { ComponentLogService } from '@services/files/component-log.service';
import { ActiveListingEntityService } from '@services/active-listing-entity.service';
@Component({
selector: 'redaction-file-download-btn',
templateUrl: './file-download-btn.component.html',
standalone: true,
imports: [CircleButtonComponent, TranslateModule],
imports: [CircleButtonComponent, TranslateModule, MatMenu, MatMenuItem, MatMenuTrigger],
})
export class FileDownloadBtnComponent implements OnChanges {
@Input({ required: true }) files: File[];
@Input({ required: true }) dossier: Dossier;
@Input({ required: true }) buttonId: string;
@Input() tooltipPosition: 'above' | 'below' | 'before' | 'after' = 'above';
@Input() type: CircleButtonType = CircleButtonTypes.default;
@Input() tooltipClass: string;
@Input() disabled = false;
readonly files = input.required<File[]>();
readonly dossier = input.required<Dossier>();
readonly buttonId = input.required<string>();
readonly tooltipPosition = input<'above' | 'below' | 'before' | 'after'>('above');
readonly type = input<CircleButtonType>(CircleButtonTypes.default);
readonly tooltipClass = input<string>();
readonly disabled = input<boolean>(false);
readonly singleFileDownload = input<boolean>(false);
readonly dossierDownload = input(false, { transform: booleanAttribute });
readonly dropdownButton = computed(() => this.isDocumine && (this.dossierDownload() || this.singleFileDownload()));
tooltip: string;
canDownloadFiles: boolean;
invalidDownload = false;
readonly #appBaseHref = inject(APP_BASE_HREF);
protected readonly isDocumine = getConfig().IS_DOCUMINE;
@ViewChild(MatMenuTrigger) menuTrigger: MatMenuTrigger;
constructor(
private readonly _permissionsService: PermissionsService,
private readonly _fileDownloadService: FileDownloadService,
private readonly _componentLogService: ComponentLogService,
private readonly _activeListingEntity: ActiveListingEntityService,
private readonly _dialog: IqserDialog,
private readonly _toaster: Toaster,
) {}
ngOnChanges(): void {
this.invalidDownload = this.files.some(file => file.processingStatus === ProcessingFileStatuses.ERROR);
this.canDownloadFiles = this._permissionsService.canDownloadFiles(this.files, this.dossier);
this.tooltip = this.canDownloadFiles ? _('dossier-overview.download-file') : _('dossier-overview.download-file-disabled');
this.invalidDownload = this.files().some(file => file.processingStatus === ProcessingFileStatuses.ERROR);
this.canDownloadFiles = this._permissionsService.canDownloadFiles(this.files(), this.dossier());
if (this.canDownloadFiles) {
if (this.isDocumine && !this.dropdownButton()) {
this.tooltip = _('dossier-overview.report-download');
} else {
this.tooltip = _('dossier-overview.download-file');
}
} else {
this.tooltip = _('dossier-overview.download-file-disabled');
}
}
async downloadFiles() {
async downloadFiles($event?: MouseEvent) {
$event?.stopImmediatePropagation();
this.menuTrigger?.closeMenu();
const ref = this._dialog.openDefault(DownloadDialogComponent, {
data: { dossier: this.dossier, files: this.files },
data: { dossier: this.dossier(), files: this.files() },
});
const result = await ref.result();
if (!result) {
@ -50,8 +71,8 @@ export class FileDownloadBtnComponent implements OnChanges {
}
const downloadRequest = this._fileDownloadService.downloadFiles({
dossierId: this.dossier.id,
fileIds: this.files.map(f => f.id),
dossierId: this.dossier().id,
fileIds: this.files().map(f => f.id),
...result,
});
@ -63,4 +84,30 @@ export class FileDownloadBtnComponent implements OnChanges {
)
.catch(() => this._toaster.error(_('download-status.error')));
}
onDownloadMenuClosed() {
this._activeListingEntity.updateEntity();
}
setActiveListingEntity($event: MouseEvent) {
$event.stopImmediatePropagation();
if (this.dropdownButton()) {
const entityId = this.dossierDownload() ? this.dossier().id : this.files()[0].id;
this._activeListingEntity.updateEntity(entityId);
}
}
downloadComponentAsJSON($event: MouseEvent) {
$event.stopImmediatePropagation();
this.menuTrigger?.closeMenu();
const fileToDownload = !this.dossierDownload() ? this.files()[0] : null;
return firstValueFrom(this._componentLogService.exportJSON(this.dossier().dossierTemplateId, this.dossier().id, fileToDownload));
}
async downloadComponentAsXML($event: MouseEvent) {
$event.stopImmediatePropagation();
this.menuTrigger?.closeMenu();
const fileToDownload = !this.dossierDownload() ? this.files()[0] : null;
return firstValueFrom(this._componentLogService.exportXML(this.dossier().dossierTemplateId, this.dossier().id, fileToDownload));
}
}

View File

@ -1,14 +1,3 @@
@if (isDocumine) {
<iqser-circle-button
[attr.help-mode-key]="'component_download'"
[icon]="'red:extract'"
[matMenuTriggerFor]="bulkComponentDownloadMenu"
[tooltip]="'documine-export.export-tooltip' | translate"
[tooltipPosition]="tooltipPosition"
dropdownButton
></iqser-circle-button>
}
<ng-container *ngFor="let btn of displayedButtons; trackBy: trackBy">
<iqser-circle-button
(action)="btn.action($event)"
@ -36,6 +25,7 @@
[tooltipPosition]="tooltipPosition"
[type]="buttonType"
[attr.help-mode-key]="helpModeKey(btn)"
[singleFileDownload]="singleEntityAction"
></redaction-file-download-btn>
<!-- exclude from redaction -->
@ -84,8 +74,3 @@
</ng-container>
</button>
</mat-menu>
<mat-menu #bulkComponentDownloadMenu="matMenu">
<button (click)="downloadComponentAsJSON()" [innerHTML]="'component-download.json' | translate" mat-menu-item></button>
<button (click)="downloadComponentAsXML()" [innerHTML]="'component-download.xml' | translate" mat-menu-item></button>
</mat-menu>

View File

@ -1,6 +1,6 @@
import { Component, inject, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
import { booleanAttribute, Component, inject, input, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
import { Action, ActionTypes, Dossier, File } from '@red/domain';
import { CircleButtonComponent, CircleButtonType, getConfig, IqserDialog, StopPropagationDirective, Toaster } from '@iqser/common-ui';
import { CircleButtonComponent, CircleButtonType, IqserDialog, StopPropagationDirective, Toaster } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { FileDownloadService } from '@upload-download/services/file-download.service';
import { PermissionsService } from '@services/permissions.service';
@ -13,8 +13,6 @@ import { FileDownloadBtnComponent } from '@shared/components/buttons/file-downlo
import { MatSlideToggle } from '@angular/material/slide-toggle';
import { MatTooltip } from '@angular/material/tooltip';
import { MatIcon } from '@angular/material/icon';
import { firstValueFrom } from 'rxjs';
import { ComponentLogService } from '@services/files/component-log.service';
@Component({
selector: 'redaction-expandable-file-actions',
@ -46,13 +44,12 @@ export class ExpandableFileActionsComponent implements OnChanges {
@Input() tooltipPosition: IqserTooltipPosition;
@Input() helpModeKeyPrefix: 'dossier' | 'editor';
@Input() isDossierOverviewWorkflow = false;
@Input() file: File;
@Input() singleEntityAction = false;
displayedButtons: Action[];
hiddenButtons: Action[];
expanded = false;
@ViewChild(MatMenuTrigger) readonly matMenu: MatMenuTrigger;
readonly trackBy = trackByFactory();
readonly isDocumine = getConfig().IS_DOCUMINE;
readonly #appBaseHref = inject(APP_BASE_HREF);
constructor(
@ -60,7 +57,6 @@ export class ExpandableFileActionsComponent implements OnChanges {
private readonly _toaster: Toaster,
private readonly _permissionsService: PermissionsService,
private readonly _dialog: IqserDialog,
private readonly _componentLogService: ComponentLogService,
) {}
ngOnChanges(changes: SimpleChanges) {
@ -129,12 +125,4 @@ export class ExpandableFileActionsComponent implements OnChanges {
params: { downloadHref: `${this.#appBaseHref}/main/downloads` },
});
}
downloadComponentAsJSON() {
return firstValueFrom(this._componentLogService.exportJSON(this.file.dossierTemplateId, this.file.dossierId, this.file));
}
async downloadComponentAsXML() {
return firstValueFrom(this._componentLogService.exportXML(this.file.dossierTemplateId, this.file.dossierId, this.file));
}
}

View File

@ -0,0 +1,13 @@
import { Injectable, signal } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class ActiveListingEntityService {
readonly #activeEntity = signal<string>('');
readonly activeEntity = this.#activeEntity.asReadonly();
updateEntity(entity: string = '') {
this.#activeEntity.set(entity);
}
}

View File

@ -272,9 +272,6 @@
"watermarks": "Wasserzeichen"
},
"analysis-disabled": "",
"annotation": {
"pending": "(Analyse steht aus)"
},
"annotation-actions": {
"accept-recommendation": {
"label": "Empfehlung annehmen"
@ -330,14 +327,14 @@
"error": "Rekategorisierung des Bilds fehlgeschlagen: {error}",
"success": "Bild wurde einer neuen Kategorie zugeordnet."
},
"remove": {
"error": "Entfernen der Schwärzung fehlgeschlagen: {error}",
"success": "Schwärzung wurde entfernt"
},
"remove-hint": {
"error": "Entfernen des Hinweises fehlgeschlagen: {error}",
"success": "Hinweis wurde entfernt"
},
"remove": {
"error": "Entfernen der Schwärzung fehlgeschlagen: {error}",
"success": "Schwärzung wurde entfernt"
},
"undo": {
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
"success": "Rücksetzung erfolgreich"
@ -350,15 +347,15 @@
"remove-highlights": {
"label": "Ausgewählte Markierungen entfernen"
},
"resize": {
"label": "Größe ändern"
},
"resize-accept": {
"label": "Neue Größe speichern"
},
"resize-cancel": {
"label": "Größenänderung abbrechen"
},
"resize": {
"label": "Größe ändern"
},
"see-references": {
"label": "Referenzen anzeigen"
},
@ -392,6 +389,9 @@
"skipped": "Ignorierte Schwärzung",
"text-highlight": "Markierung"
},
"annotation": {
"pending": "(Analyse steht aus)"
},
"annotations": "Annotationen",
"archived-dossiers-listing": {
"no-data": {
@ -535,9 +535,8 @@
"title": "{length} {length, plural, one{Komponente} other{Komponenten}}"
},
"component-download": {
"disabled-tooltip": "",
"json": "",
"tooltip": "",
"report": "",
"xml": ""
},
"component-management": {
@ -637,18 +636,14 @@
"warning": "Warnung: Wiederherstellung des Benutzers nicht möglich."
},
"confirmation-dialog": {
"approve-file": {
"question": "Dieses Dokument enthält ungesehene Änderungen, die sich durch die Reanalyse ergeben haben.<br><br>Möchten Sie es trotzdem freigeben?",
"title": "Warnung!"
},
"approve-file-without-analysis": {
"confirmationText": "Ohne Analyse freigeben",
"denyText": "Abbrechen",
"question": "Analyse zur Erkennung neuer Schwärzungen erforderlich.",
"title": "Warnung!"
},
"approve-multiple-files": {
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen, die im Zuge einer Reanalyse hinzugefügt wurden.<br><br>Möchen Sie die Dateien wirklich freigeben?",
"approve-file": {
"question": "Dieses Dokument enthält ungesehene Änderungen, die sich durch die Reanalyse ergeben haben.<br><br>Möchten Sie es trotzdem freigeben?",
"title": "Warnung!"
},
"approve-multiple-files-without-analysis": {
@ -657,6 +652,10 @@
"question": "Für mindestens eine Datei ist ein Analyselauf zur Erkennung neuer Schwärzungen erforderlich.",
"title": "Warnung"
},
"approve-multiple-files": {
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen, die im Zuge einer Reanalyse hinzugefügt wurden.<br><br>Möchen Sie die Dateien wirklich freigeben?",
"title": "Warnung!"
},
"assign-file-to-me": {
"question": {
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft.<br><br>Möchten Sie sich die Datei dennoch zuweisen?",
@ -1026,13 +1025,14 @@
"recent": "Neu ({hours} h)",
"unassigned": "Keinem Bearbeiter zugewiesen"
},
"reanalyse": {
"action": "Datei analysieren"
},
"reanalyse-dossier": {
"error": "Einplanung der Dateien für die Reanalyse fehlgeschlagen. Bitte versuchen Sie es noch einmal.",
"success": "Dateien für Reanalyse vorgesehen."
},
"reanalyse": {
"action": "Datei analysieren"
},
"report-download": "",
"start-auto-analysis": "Auto-Analyse aktivieren",
"stop-auto-analysis": "Auto-Analyse anhalten",
"table-col-names": {
@ -1102,14 +1102,6 @@
"total-documents": "Dokumente",
"total-people": "<strong>{count}</strong> {count, plural, one{Benutzer} other {Benutzer}}"
},
"dossier-templates": {
"label": "Dossier-Vorlagen",
"status": {
"active": "Aktiv",
"inactive": "Inaktiv",
"incomplete": "Unvollständig"
}
},
"dossier-templates-listing": {
"action": {
"clone": "Vorlage klonen",
@ -1144,6 +1136,14 @@
"title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}"
}
},
"dossier-templates": {
"label": "Dossier-Vorlagen",
"status": {
"active": "Aktiv",
"inactive": "Inaktiv",
"incomplete": "Unvollständig"
}
},
"dossier-watermark-selector": {
"heading": "Wasserzeichen auf Dokumenten",
"no-watermark": "Kein Wasserzeichen in der Dossier-Vorlage verfügbar:<br>Bitten Sie Ihren Admin, eines zu konfigurieren.",
@ -1339,15 +1339,6 @@
"title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}"
}
},
"entity": {
"info": {
"actions": {
"revert": "Zurücksetzen",
"save": "Änderungen speichern"
},
"heading": "Entität bearbeiten"
}
},
"entity-rules-screen": {
"error": {
"generic": "Fehler: Aktualisierung der Entitätsregeln fehlgeschlagen."
@ -1362,19 +1353,28 @@
"warning-text": "Warnung: experimentelle Funktion!",
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} in Regeln gefunden"
},
"entity": {
"info": {
"actions": {
"revert": "Zurücksetzen",
"save": "Änderungen speichern"
},
"heading": "Entität bearbeiten"
}
},
"error": {
"deleted-entity": {
"dossier": {
"action": "Zurück zur Übersicht",
"label": "Dieses Dossier wurde gelöscht!"
},
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
},
"file-dossier": {
"action": "Zurück zur Übersicht",
"label": "Das Dossier dieser Datei wurde gelöscht!"
},
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
}
},
"file-preview": {
@ -1392,12 +1392,6 @@
},
"exact-date": "{day}. {month} {year} um {hour}:{minute} Uhr",
"file": "Datei",
"file-attribute": {
"update": {
"error": "Aktualisierung des Werts für das Datei-Attribut fehlgeschlagen. Bitte versuchen Sie es noch einmal.",
"success": "Der Wert für das Dateiattribut wurde erfolgreich aktualisiert."
}
},
"file-attribute-encoding-types": {
"ascii": "ASCII",
"iso": "ISO-8859-1",
@ -1408,6 +1402,12 @@
"number": "Nummer",
"text": "Freier Text"
},
"file-attribute": {
"update": {
"error": "Aktualisierung des Werts für das Datei-Attribut fehlgeschlagen. Bitte versuchen Sie es noch einmal.",
"success": "Der Wert für das Dateiattribut wurde erfolgreich aktualisiert."
}
},
"file-attributes-configurations": {
"cancel": "Abbrechen",
"form": {
@ -1625,15 +1625,6 @@
"csv": "Die Datei-Attribute wurden erfolgreich aus der hochgeladenen CSV-Datei importiert."
}
},
"filter": {
"analysis": "Analyse erforderlich",
"comment": "Kommentare",
"hint": "Nur Hinweise",
"image": "Bilder",
"none": "Keine Annotationen",
"redaction": "Schwärzungen",
"updated": "Aktualisiert"
},
"filter-menu": {
"filter-options": "Filteroptionen",
"filter-types": "Filter",
@ -1643,6 +1634,15 @@
"unseen-pages": "Nur Annotationen auf ungesehenen Seiten",
"with-comments": "Nur Annotationen mit Kommentaren"
},
"filter": {
"analysis": "Analyse erforderlich",
"comment": "Kommentare",
"hint": "Nur Hinweise",
"image": "Bilder",
"none": "Keine Annotationen",
"redaction": "Schwärzungen",
"updated": "Aktualisiert"
},
"filters": {
"assigned-people": "Bearbeiter",
"documents-status": "Dokumentenstatus",
@ -1921,13 +1921,6 @@
"user-promoted-to-approver": "<b>{user}</b> wurde im Dossier <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> zum Genehmiger ernannt!",
"user-removed-as-dossier-member": "<b>{user}</b> wurde als Mitglied von: <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> entfernt!"
},
"notifications": {
"button-text": "Benachrichtigungen",
"deleted-dossier": "Gelöschtes Dossier",
"label": "Benachrichtigungen",
"mark-all-as-read": "Alle als gelesen markieren",
"mark-as": "Als {type, select, read{gelesen} unread{ungelesen} other{}} markieren"
},
"notifications-screen": {
"category": {
"email-notifications": "E-Mail-Benachrichtigungen",
@ -1941,6 +1934,7 @@
"dossier": "Benachrichtigungen zu Dossiers",
"other": "Andere Benachrichtigungen"
},
"options-title": "Wählen Sie aus, bei welchen Aktivitäten Sie benachrichtigt werden möchten",
"options": {
"ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen werde",
"ASSIGN_REVIEWER": "Wenn ich einem Dokument als Prüfer zugewiesen werde",
@ -1958,7 +1952,6 @@
"USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde",
"USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere"
},
"options-title": "Wählen Sie aus, bei welchen Aktivitäten Sie benachrichtigt werden möchten",
"schedule": {
"daily": "Tägliche Zusammenfassung",
"instant": "Sofort",
@ -1966,6 +1959,13 @@
},
"title": "Benachrichtigungseinstellungen"
},
"notifications": {
"button-text": "Benachrichtigungen",
"deleted-dossier": "Gelöschtes Dossier",
"label": "Benachrichtigungen",
"mark-all-as-read": "Alle als gelesen markieren",
"mark-as": "Als {type, select, read{gelesen} unread{ungelesen} other{}} markieren"
},
"ocr": {
"confirmation-dialog": {
"cancel": "Abbrechen",
@ -2057,16 +2057,16 @@
"warnings-label": "Dialoge und Meldungen",
"warnings-subtitle": "„Nicht mehr anzeigen“-Optionen"
},
"processing": {
"basic": "Verarbeitung läuft",
"ocr": "OCR"
},
"processing-status": {
"ocr": "OCR",
"pending": "Ausstehend",
"processed": "Verarbeitet",
"processing": "Verarbeitung läuft"
},
"processing": {
"basic": "Verarbeitung läuft",
"ocr": "OCR"
},
"readonly": "Lesemodus",
"readonly-archived": "Lesemodus (archiviert)",
"redact-text": {
@ -2302,12 +2302,6 @@
"red-user-admin": "Benutzeradmin",
"regular": "regulärer Benutzer"
},
"search": {
"active-dossiers": "Dokumente in aktiven Dossiers",
"all-dossiers": "Alle Dokumente",
"placeholder": "Dokumente durchsuchen...",
"this-dossier": "In diesem Dossier"
},
"search-screen": {
"cols": {
"assignee": "Bearbeiter",
@ -2331,6 +2325,12 @@
"no-match": "Der Suchbegriff wurde in keinem der Dokumente gefunden.",
"table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}"
},
"search": {
"active-dossiers": "Dokumente in aktiven Dossiers",
"all-dossiers": "Alle Dokumente",
"placeholder": "Dokumente durchsuchen...",
"this-dossier": "In diesem Dossier"
},
"seconds": "Sekunden",
"size": "Größe",
"smtp-auth-config": {
@ -2586,4 +2586,4 @@
}
},
"yesterday": "Gestern"
}
}

View File

@ -535,9 +535,8 @@
"title": "{length} {length, plural, one{component} other{components}}"
},
"component-download": {
"disabled-tooltip": "",
"json": "",
"tooltip": "",
"report": "",
"xml": ""
},
"component-management": {
@ -1033,6 +1032,7 @@
"reanalyse": {
"action": "Analyze file"
},
"report-download": "",
"start-auto-analysis": "Enable auto-analysis",
"stop-auto-analysis": "Stop auto-analysis",
"table-col-names": {
@ -2586,4 +2586,4 @@
}
},
"yesterday": "Yesterday"
}
}

View File

@ -272,9 +272,6 @@
"watermarks": "Watermarks"
},
"analysis-disabled": "Analysis disabled",
"annotation": {
"pending": "(Pending analysis)"
},
"annotation-actions": {
"accept-recommendation": {
"label": "Empfehlung annehmen"
@ -330,14 +327,14 @@
"error": "Rekategorisierung des Bildes gescheitert: {error}",
"success": "Bild wurde einer neuen Kategorie zugeordnet."
},
"remove": {
"error": "Fehler beim Entfernen der Schwärzung: {error}",
"success": "Schwärzung entfernt!"
},
"remove-hint": {
"error": "Failed to remove hint: {error}",
"success": "Hint removed!"
},
"remove": {
"error": "Fehler beim Entfernen der Schwärzung: {error}",
"success": "Schwärzung entfernt!"
},
"undo": {
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
"success": "erfolgreich Rückgängig gemacht"
@ -350,15 +347,15 @@
"remove-highlights": {
"label": "Remove selected earmarks"
},
"resize": {
"label": "Größe ändern"
},
"resize-accept": {
"label": "Größe speichern"
},
"resize-cancel": {
"label": "Größenänderung abbrechen"
},
"resize": {
"label": "Größe ändern"
},
"see-references": {
"label": "See references"
},
@ -392,6 +389,9 @@
"skipped": "Übersprungen",
"text-highlight": "Earmark"
},
"annotation": {
"pending": "(Pending analysis)"
},
"annotations": "Annotations",
"archived-dossiers-listing": {
"no-data": {
@ -535,9 +535,8 @@
"title": "{length} {length, plural, one{component} other{components}}"
},
"component-download": {
"disabled-tooltip": "All files must be processed to be able to export the components as JSON or XML",
"json": "Download as JSON",
"tooltip": "Component download",
"report": "",
"xml": "Download as XML"
},
"component-management": {
@ -637,18 +636,14 @@
"warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!"
},
"confirmation-dialog": {
"approve-file": {
"question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
"title": "Warnung!"
},
"approve-file-without-analysis": {
"confirmationText": "Approve without analysis",
"denyText": "Cancel",
"question": "Analysis required to detect new components.",
"title": "Warning!"
},
"approve-multiple-files": {
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?",
"approve-file": {
"question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
"title": "Warnung!"
},
"approve-multiple-files-without-analysis": {
@ -657,6 +652,10 @@
"question": "Analysis required to detect new components for at least one file.",
"title": "Warning"
},
"approve-multiple-files": {
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?",
"title": "Warnung!"
},
"assign-file-to-me": {
"question": {
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?",
@ -1026,13 +1025,14 @@
"recent": "Neu ({hours} h)",
"unassigned": "Niemandem zugewiesen"
},
"reanalyse": {
"action": "Datei analysieren"
},
"reanalyse-dossier": {
"error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.",
"success": "Dateien für Reanalyse vorgesehen."
},
"reanalyse": {
"action": "Datei analysieren"
},
"report-download": "",
"start-auto-analysis": "Enable auto-analysis",
"stop-auto-analysis": "Stop auto-analysis",
"table-col-names": {
@ -1102,14 +1102,6 @@
"total-documents": "Anzahl der Dokumente",
"total-people": "<strong>{count}</strong> {count, plural, one{user} other {users}}"
},
"dossier-templates": {
"label": "Dossier-Vorlagen",
"status": {
"active": "Active",
"inactive": "Inactive",
"incomplete": "Incomplete"
}
},
"dossier-templates-listing": {
"action": {
"clone": "Clone template",
@ -1144,6 +1136,14 @@
"title": "{length} dossier {length, plural, one{template} other{templates}}"
}
},
"dossier-templates": {
"label": "Dossier-Vorlagen",
"status": {
"active": "Active",
"inactive": "Inactive",
"incomplete": "Incomplete"
}
},
"dossier-watermark-selector": {
"heading": "Watermarks on documents",
"no-watermark": "There is no watermark defined for the dossier template.<br>Contact your app admin to define one.",
@ -1339,15 +1339,6 @@
"title": "{length} {length, plural, one{entity} other{entities}}"
}
},
"entity": {
"info": {
"actions": {
"revert": "Revert",
"save": "Save changes"
},
"heading": "Edit entity"
}
},
"entity-rules-screen": {
"error": {
"generic": "Something went wrong... Entity rules update failed!"
@ -1362,19 +1353,28 @@
"warning-text": "Warning: experimental feature!",
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules"
},
"entity": {
"info": {
"actions": {
"revert": "Revert",
"save": "Save changes"
},
"heading": "Edit entity"
}
},
"error": {
"deleted-entity": {
"dossier": {
"action": "Zurück zur Übersicht",
"label": "Dieses Dossier wurde gelöscht!"
},
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
},
"file-dossier": {
"action": "Zurück zur Übersicht",
"label": "Das Dossier dieser Datei wurde gelöscht!"
},
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
}
},
"file-preview": {
@ -1392,12 +1392,6 @@
},
"exact-date": "{day} {month} {year} um {hour}:{minute} Uhr",
"file": "Datei",
"file-attribute": {
"update": {
"error": "Failed to update file attribute value!",
"success": "File attribute value has been updated successfully!"
}
},
"file-attribute-encoding-types": {
"ascii": "ASCII",
"iso": "ISO-8859-1",
@ -1408,6 +1402,12 @@
"number": "Nummer",
"text": "Freier Text"
},
"file-attribute": {
"update": {
"error": "Failed to update file attribute value!",
"success": "File attribute value has been updated successfully!"
}
},
"file-attributes-configurations": {
"cancel": "Cancel",
"form": {
@ -1550,7 +1550,7 @@
"jump-to-next": "Springe zu Nächster",
"jump-to-previous": "Springe zu Vorheriger",
"label": "Arbeitsvorrat",
"no-annotations": "There are no available annotations.",
"no-annotations": "There are no annotations for the selected component.",
"page-is": "Diese Seite ist",
"reset": "reset",
"select": "Auswählen",
@ -1625,15 +1625,6 @@
"csv": "File attributes were imported successfully from uploaded CSV file."
}
},
"filter": {
"analysis": "Analyse erforderlich",
"comment": "Kommentare",
"hint": "Nut Hinweise",
"image": "Bilder",
"none": "Keine Anmerkungen",
"redaction": "Geschwärzt",
"updated": "Aktualisiert"
},
"filter-menu": {
"filter-options": "Filteroptionen",
"filter-types": "Filter",
@ -1643,6 +1634,15 @@
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
"with-comments": "Nur Anmerkungen mit Kommentaren"
},
"filter": {
"analysis": "Analyse erforderlich",
"comment": "Kommentare",
"hint": "Nut Hinweise",
"image": "Bilder",
"none": "Keine Anmerkungen",
"redaction": "Geschwärzt",
"updated": "Aktualisiert"
},
"filters": {
"assigned-people": "Beauftragt",
"documents-status": "Documents state",
@ -1921,13 +1921,6 @@
"user-promoted-to-approver": "<b>{user}</b> wurde im Dossier <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> zum Genehmiger ernannt!",
"user-removed-as-dossier-member": "<b>{user}</b> wurde als Mitglied von: <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> entfernt!"
},
"notifications": {
"button-text": "Notifications",
"deleted-dossier": "Deleted dossier",
"label": "Benachrichtigungen",
"mark-all-as-read": "Alle als gelesen markieren",
"mark-as": "Mark as {type, select, read{read} unread{unread} other{}}"
},
"notifications-screen": {
"category": {
"email-notifications": "E-Mail Benachrichtigungen",
@ -1941,6 +1934,7 @@
"dossier": "Dossierbezogene Benachrichtigungen",
"other": "Andere Benachrichtigungen"
},
"options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten",
"options": {
"ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin",
"ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin",
@ -1958,7 +1952,6 @@
"USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde",
"USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere"
},
"options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten",
"schedule": {
"daily": "Tägliche Zusammenfassung",
"instant": "Sofortig",
@ -1966,6 +1959,13 @@
},
"title": "Benachrichtigungseinstellungen"
},
"notifications": {
"button-text": "Notifications",
"deleted-dossier": "Deleted dossier",
"label": "Benachrichtigungen",
"mark-all-as-read": "Alle als gelesen markieren",
"mark-as": "Mark as {type, select, read{read} unread{unread} other{}}"
},
"ocr": {
"confirmation-dialog": {
"cancel": "Cancel",
@ -2057,16 +2057,16 @@
"warnings-label": "Prompts and dialogs",
"warnings-subtitle": "Do not show again options"
},
"processing": {
"basic": "Processing",
"ocr": "OCR"
},
"processing-status": {
"ocr": "OCR",
"pending": "Pending",
"processed": "Processed",
"processing": "Processing"
},
"processing": {
"basic": "Processing",
"ocr": "OCR"
},
"readonly": "Lesemodus",
"readonly-archived": "Read only (archived)",
"redact-text": {
@ -2302,12 +2302,6 @@
"red-user-admin": "Benutzer-Admin",
"regular": "Regulär"
},
"search": {
"active-dossiers": "ganze Plattform",
"all-dossiers": "all documents",
"placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen",
"this-dossier": "in diesem Dossier"
},
"search-screen": {
"cols": {
"assignee": "Bevollmächtigter",
@ -2331,6 +2325,12 @@
"no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.",
"table-header": "{length} search {length, plural, one{result} other{results}}"
},
"search": {
"active-dossiers": "ganze Plattform",
"all-dossiers": "all documents",
"placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen",
"this-dossier": "in diesem Dossier"
},
"seconds": "seconds",
"size": "Size",
"smtp-auth-config": {
@ -2586,4 +2586,4 @@
}
},
"yesterday": "Gestern"
}
}

View File

@ -535,9 +535,8 @@
"title": "{length} {length, plural, one{component} other{components}}"
},
"component-download": {
"disabled-tooltip": "All files must be processed to be able to export the components as JSON or XML",
"json": "Download as JSON",
"tooltip": "Component download",
"report": "Report",
"xml": "Download as XML"
},
"component-management": {
@ -986,7 +985,7 @@
"processing-documents": "{count} processing {count, plural, one{document} other{documents}}"
}
},
"download-file": "Report download",
"download-file": "Download",
"download-file-disabled": "You need to be approver in the dossier and the {count, plural, one{file needs} other{files need}} to be initially processed in order to download.",
"file-listing": {
"file-entry": {
@ -1033,6 +1032,7 @@
"reanalyse": {
"action": "Analyze file"
},
"report-download": "Report download",
"start-auto-analysis": "Enable auto-analysis",
"stop-auto-analysis": "Stop auto-analysis",
"table-col-names": {
@ -1168,7 +1168,7 @@
"download-includes": "Choose what is included at download:",
"download-status": {
"error": "The download preparation failed, please recheck the selected files and download option settings.",
"queued": "Your download has been queued, you can see all your requested downloads here: <a href=\"{downloadHref}\">My downloads<a/>."
"queued": "Your download has been queued, you can find all your requested downloads here: <a href=\"{downloadHref}\">My downloads<a/>."
},
"download-type": {
"annotated": "Annotated PDF",
@ -1533,7 +1533,7 @@
},
"last-assignee": "Last assignee",
"no-data": {
"title": "There have been no changes to this page."
"title": "There are no annotations on this page."
},
"quick-nav": {
"jump-first": "Jump to first page",
@ -1550,7 +1550,7 @@
"jump-to-next": "Jump to next",
"jump-to-previous": "Jump to previous",
"label": "Workload",
"no-annotations": "There are no available annotations.",
"no-annotations": "There are no annotations for the selected component.",
"page-is": "This page is",
"reset": "reset",
"select": "Select",
@ -2586,4 +2586,4 @@
}
},
"yesterday": "Yesterday"
}
}

@ -1 +1 @@
Subproject commit 80fceb45dd4c860024e675d7d9ae77afd3482db9
Subproject commit 66277814c5e2d224f78dad5e28c94ac4d084409b