Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19c3154130 | ||
|
|
52dfb13a15 | ||
|
|
534f84bdba | ||
|
|
a7be372068 | ||
|
|
28cdf481ea | ||
|
|
64a446ebaf | ||
|
|
7afbc38e03 | ||
|
|
a881da891d | ||
|
|
9e6c466c4b | ||
|
|
db294fc909 |
@ -15,7 +15,7 @@ import { ifNotLoggedIn } from '@guards/if-not-logged-in.guard';
|
|||||||
import { TrashGuard } from '@guards/trash.guard';
|
import { TrashGuard } from '@guards/trash.guard';
|
||||||
import { CompositeRouteGuard, DEFAULT_REDIRECT_KEY, IqserPermissionsGuard, IqserRoutes, orderedAsyncGuards } from '@iqser/common-ui';
|
import { CompositeRouteGuard, DEFAULT_REDIRECT_KEY, IqserPermissionsGuard, IqserRoutes, orderedAsyncGuards } from '@iqser/common-ui';
|
||||||
import { TenantSelectComponent } from '@iqser/common-ui/lib/tenants';
|
import { TenantSelectComponent } from '@iqser/common-ui/lib/tenants';
|
||||||
import { hasAnyRoleGuard, IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
import { doesNotHaveAnyRole, hasAnyRole, IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
||||||
import { CustomRouteReuseStrategy } from '@iqser/common-ui/lib/utils';
|
import { CustomRouteReuseStrategy } from '@iqser/common-ui/lib/utils';
|
||||||
import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE, FILE_ID } from '@red/domain';
|
import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE, FILE_ID } from '@red/domain';
|
||||||
import { RedRoleGuard } from '@users/red-role.guard';
|
import { RedRoleGuard } from '@users/red-role.guard';
|
||||||
@ -211,14 +211,14 @@ const routes: IqserRoutes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ':tenant/main',
|
path: ':tenant/main',
|
||||||
canActivate: [orderedAsyncGuards([ifLoggedIn(), mainGuard()])],
|
canActivate: [orderedAsyncGuards([ifLoggedIn(), hasAnyRole(), mainGuard()])],
|
||||||
component: BaseScreenComponent,
|
component: BaseScreenComponent,
|
||||||
children: mainRoutes,
|
children: mainRoutes,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ':tenant/auth-error',
|
path: ':tenant/auth-error',
|
||||||
component: AuthErrorComponent,
|
component: AuthErrorComponent,
|
||||||
canActivate: [hasAnyRoleGuard()],
|
canActivate: [doesNotHaveAnyRole()],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '**',
|
path: '**',
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<iqser-page-header
|
<iqser-page-header
|
||||||
(closeAction)="routerHistoryService.navigateToLastDossiersScreen()"
|
(closeAction)="routerHistoryService.navigateToLastDossiersScreen()"
|
||||||
[buttonConfigs]="buttonConfigs"
|
|
||||||
[pageLabel]="'license-information' | translate"
|
[pageLabel]="'license-information' | translate"
|
||||||
[showCloseButton]="currentUser.isUser && permissionsService.has$(roles.dossiers.read) | async"
|
[showCloseButton]="currentUser.isUser && permissionsService.has$(roles.dossiers.read) | async"
|
||||||
></iqser-page-header>
|
></iqser-page-header>
|
||||||
|
|||||||
@ -1,9 +1,6 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { getConfig, IqserPermissionsService } from '@iqser/common-ui';
|
||||||
import { List } from '@common-ui/utils';
|
|
||||||
import { ButtonConfig, getConfig, IconButtonTypes, IqserPermissionsService } from '@iqser/common-ui';
|
|
||||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
|
||||||
import type { AppConfig, User } from '@red/domain';
|
import type { AppConfig, User } from '@red/domain';
|
||||||
import { LicenseService } from '@services/license.service';
|
import { LicenseService } from '@services/license.service';
|
||||||
import { RouterHistoryService } from '@services/router-history.service';
|
import { RouterHistoryService } from '@services/router-history.service';
|
||||||
@ -18,38 +15,10 @@ export class LicenseScreenComponent {
|
|||||||
protected readonly roles = Roles;
|
protected readonly roles = Roles;
|
||||||
protected readonly currentUser = getCurrentUser<User>();
|
protected readonly currentUser = getCurrentUser<User>();
|
||||||
protected readonly currentYear = new Date().getFullYear();
|
protected readonly currentYear = new Date().getFullYear();
|
||||||
protected readonly buttonConfigs: List<ButtonConfig> = [
|
|
||||||
{
|
|
||||||
label: _('license-info-screen.email-report'),
|
|
||||||
action: (): void => this.sendMail(),
|
|
||||||
type: IconButtonTypes.primary,
|
|
||||||
helpModeKey: 'license_information',
|
|
||||||
hide: !this.permissionsService.has(Roles.license.readReport),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
readonly licenseService: LicenseService,
|
readonly licenseService: LicenseService,
|
||||||
readonly permissionsService: IqserPermissionsService,
|
readonly permissionsService: IqserPermissionsService,
|
||||||
readonly routerHistoryService: RouterHistoryService,
|
readonly routerHistoryService: RouterHistoryService,
|
||||||
private readonly _translateService: TranslateService,
|
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
sendMail(): void {
|
|
||||||
const licenseCustomer = this.licenseService.selectedLicense.licensedTo;
|
|
||||||
const subject = this._translateService.instant('license-info-screen.email.title', {
|
|
||||||
licenseCustomer,
|
|
||||||
}) as string;
|
|
||||||
const lineBreak = '%0D%0A';
|
|
||||||
const body = [
|
|
||||||
this._translateService.instant('license-info-screen.email.body.analyzed', {
|
|
||||||
pages: this.licenseService.selectedLicenseReport.numberOfAnalyzedPages,
|
|
||||||
}),
|
|
||||||
this._translateService.instant('license-info-screen.email.body.licensed', {
|
|
||||||
pages: this.licenseService.totalLicensedNumberOfPages,
|
|
||||||
}),
|
|
||||||
].join(lineBreak);
|
|
||||||
const mail = this.licenseService.selectedLicense.licensedToEmail;
|
|
||||||
window.location.href = `mailto:${mail}?subject=${subject}&body=${body}`;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,10 +6,23 @@
|
|||||||
[viewModeSelection]="viewModeSelection"
|
[viewModeSelection]="viewModeSelection"
|
||||||
>
|
>
|
||||||
<ng-container slot="right">
|
<ng-container slot="right">
|
||||||
|
<iqser-circle-button
|
||||||
|
*allow="roles.getRss"
|
||||||
|
[attr.help-mode-key]="'component_download'"
|
||||||
|
[icon]="'red:extract'"
|
||||||
|
[tooltip]="
|
||||||
|
((downloadComponentLogsDisabled$ | async) ? 'component-download.disabled-tooltip' : 'component-download.tooltip')
|
||||||
|
| translate
|
||||||
|
"
|
||||||
|
[matMenuTriggerFor]="bulkComponentDownloadMenu"
|
||||||
|
[disabled]="downloadComponentLogsDisabled$ | async"
|
||||||
|
[dropdownButton]="true"
|
||||||
|
></iqser-circle-button>
|
||||||
|
|
||||||
<redaction-file-download-btn
|
<redaction-file-download-btn
|
||||||
[attr.help-mode-key]="'download_dossier_in_dossier'"
|
[attr.help-mode-key]="'download_dossier_in_dossier'"
|
||||||
[buttonId]="'download-files-btn'"
|
[buttonId]="'download-files-btn'"
|
||||||
[disabled]="downloadBtnDisabled$ | async"
|
[disabled]="downloadFilesDisabled$ | async"
|
||||||
[dossier]="dossier"
|
[dossier]="dossier"
|
||||||
[files]="entitiesService.all$ | async"
|
[files]="entitiesService.all$ | async"
|
||||||
></redaction-file-download-btn>
|
></redaction-file-download-btn>
|
||||||
@ -49,3 +62,8 @@
|
|||||||
<ng-template #viewModeSelection>
|
<ng-template #viewModeSelection>
|
||||||
<redaction-view-mode-selection iqserDisableStopPropagation></redaction-view-mode-selection>
|
<redaction-view-mode-selection iqserDisableStopPropagation></redaction-view-mode-selection>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
|
<mat-menu #bulkComponentDownloadMenu="matMenu">
|
||||||
|
<button [innerHTML]="'component-download.json' | translate" (click)="downloadComponentAsJSON()" mat-menu-item></button>
|
||||||
|
<button [innerHTML]="'component-download.xml' | translate" (click)="downloadComponentAsXML()" mat-menu-item></button>
|
||||||
|
</mat-menu>
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import { Roles } from '@users/roles';
|
|||||||
import { SortingService } from '@iqser/common-ui/lib/sorting';
|
import { SortingService } from '@iqser/common-ui/lib/sorting';
|
||||||
import { List, some } from '@iqser/common-ui/lib/utils';
|
import { List, some } from '@iqser/common-ui/lib/utils';
|
||||||
import { TenantsService } from '@iqser/common-ui/lib/tenants';
|
import { TenantsService } from '@iqser/common-ui/lib/tenants';
|
||||||
|
import { ComponentLogService } from '@services/files/component-log.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-dossier-overview-screen-header [dossier] [upload]',
|
selector: 'redaction-dossier-overview-screen-header [dossier] [upload]',
|
||||||
@ -25,7 +26,8 @@ export class DossierOverviewScreenHeaderComponent implements OnInit {
|
|||||||
readonly circleButtonTypes = CircleButtonTypes;
|
readonly circleButtonTypes = CircleButtonTypes;
|
||||||
readonly roles = Roles;
|
readonly roles = Roles;
|
||||||
actionConfigs: List<ActionConfig>;
|
actionConfigs: List<ActionConfig>;
|
||||||
readonly downloadBtnDisabled$: Observable<boolean>;
|
readonly downloadFilesDisabled$: Observable<boolean>;
|
||||||
|
readonly downloadComponentLogsDisabled$: Observable<boolean>;
|
||||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -41,11 +43,15 @@ export class DossierOverviewScreenHeaderComponent implements OnInit {
|
|||||||
private readonly _reanalysisService: ReanalysisService,
|
private readonly _reanalysisService: ReanalysisService,
|
||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
private readonly _primaryFileAttributeService: PrimaryFileAttributeService,
|
private readonly _primaryFileAttributeService: PrimaryFileAttributeService,
|
||||||
|
private readonly _componentLogService: ComponentLogService,
|
||||||
) {
|
) {
|
||||||
const someNotProcessed$ = this.entitiesService.all$.pipe(some(file => !file.lastProcessed));
|
const someNotProcessed$ = this.entitiesService.all$.pipe(some(file => !file.lastProcessed));
|
||||||
this.downloadBtnDisabled$ = combineLatest([this.listingService.areSomeSelected$, someNotProcessed$]).pipe(
|
this.downloadFilesDisabled$ = combineLatest([this.listingService.areSomeSelected$, someNotProcessed$]).pipe(
|
||||||
map(([someSelected, someNotProcessed]) => someSelected || someNotProcessed),
|
map(([someSelected, someNotProcessed]) => someSelected || someNotProcessed),
|
||||||
);
|
);
|
||||||
|
this.downloadComponentLogsDisabled$ = combineLatest([this.entitiesService.allLength$, someNotProcessed$]).pipe(
|
||||||
|
map(([length, someNotProcessed]) => !length || someNotProcessed),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
@ -92,4 +98,12 @@ export class DossierOverviewScreenHeaderComponent implements OnInit {
|
|||||||
];
|
];
|
||||||
saveAsCSV(fileName, entities, fileFields, mapper);
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,35 +64,21 @@ export class StructuredComponentManagementDialogComponent extends BaseDialogComp
|
|||||||
|
|
||||||
exportJSON() {
|
exportJSON() {
|
||||||
return firstValueFrom(
|
return firstValueFrom(
|
||||||
this._componentLogService.exportJSON(
|
this._componentLogService.exportJSON(this.data.file.dossierTemplateId, this.data.file.dossierId, this.data.file),
|
||||||
this.data.file.dossierTemplateId,
|
|
||||||
this.data.file.dossierId,
|
|
||||||
this.data.file.fileId,
|
|
||||||
this.data.file.filename,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
exportXML() {
|
exportXML() {
|
||||||
return firstValueFrom(
|
return firstValueFrom(
|
||||||
this._componentLogService.exportXML(
|
this._componentLogService.exportXML(this.data.file.dossierTemplateId, this.data.file.dossierId, this.data.file),
|
||||||
this.data.file.dossierTemplateId,
|
|
||||||
this.data.file.dossierId,
|
|
||||||
this.data.file.fileId,
|
|
||||||
this.data.file.filename,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async exportAllInDossier() {
|
async exportAllInDossier() {
|
||||||
const allFilesInDossier = this._filesMapService.get(this.data.file.dossierId);
|
const allFilesInDossier = this._filesMapService.get(this.data.file.dossierId);
|
||||||
for (const file of allFilesInDossier) {
|
for (const file of allFilesInDossier) {
|
||||||
await firstValueFrom(
|
await firstValueFrom(this._componentLogService.exportJSON(this.data.file.dossierTemplateId, file.dossierId, file));
|
||||||
this._componentLogService.exportJSON(this.data.file.dossierTemplateId, file.dossierId, file.fileId, file.filename),
|
await firstValueFrom(this._componentLogService.exportXML(this.data.file.dossierTemplateId, file.dossierId, file));
|
||||||
);
|
|
||||||
await firstValueFrom(
|
|
||||||
this._componentLogService.exportXML(this.data.file.dossierTemplateId, file.dossierId, file.fileId, file.filename),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -760,11 +760,11 @@ export class FilePreviewScreenComponent
|
|||||||
.subscribe();
|
.subscribe();
|
||||||
|
|
||||||
const selectedTextEffect = this._documentViewer.selectedText$.pipe(
|
const selectedTextEffect = this._documentViewer.selectedText$.pipe(
|
||||||
tap(selectedText => {
|
tap(() => {
|
||||||
const canPerformActions = this.pdfProxyService.canPerformActions();
|
const canPerformActions = this.pdfProxyService.canPerformActions();
|
||||||
const isCurrentPageExcluded = this.state.file().isPageExcluded(this.pdf.currentPage());
|
const isCurrentPageExcluded = this.state.file().isPageExcluded(this.pdf.currentPage());
|
||||||
|
|
||||||
if ((selectedText.length > 2 || this._isJapaneseString(selectedText)) && canPerformActions && !isCurrentPageExcluded) {
|
if (canPerformActions && !isCurrentPageExcluded) {
|
||||||
this.pdf.enable(textActions);
|
this.pdf.enable(textActions);
|
||||||
} else {
|
} else {
|
||||||
this.pdf.disable(textActions);
|
this.pdf.disable(textActions);
|
||||||
@ -852,10 +852,6 @@ export class FilePreviewScreenComponent
|
|||||||
this._annotationManager.select(annotations);
|
this._annotationManager.select(annotations);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _isJapaneseString(text: string) {
|
|
||||||
return text.match(/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/);
|
|
||||||
}
|
|
||||||
|
|
||||||
#restoreOldFilters() {
|
#restoreOldFilters() {
|
||||||
combineLatest([
|
combineLatest([
|
||||||
this._filterService.getGroup$('primaryFilters').pipe(first(filterGroup => !!filterGroup?.filters.length)),
|
this._filterService.getGroup$('primaryFilters').pipe(first(filterGroup => !!filterGroup?.filters.length)),
|
||||||
|
|||||||
@ -253,10 +253,6 @@ export class PdfProxyService {
|
|||||||
this._pdf.instance.UI.enableTools([AnnotationToolNames.AnnotationCreateRectangle]);
|
this._pdf.instance.UI.enableTools([AnnotationToolNames.AnnotationCreateRectangle]);
|
||||||
this._pdf.enable(TEXT_POPUPS_TO_TOGGLE);
|
this._pdf.enable(TEXT_POPUPS_TO_TOGGLE);
|
||||||
this._viewerHeaderService.enable(HEADER_ITEMS_TO_TOGGLE);
|
this._viewerHeaderService.enable(HEADER_ITEMS_TO_TOGGLE);
|
||||||
|
|
||||||
if (this._documentViewer.selectedText.length > 2) {
|
|
||||||
this._pdf.enable([TextPopups.REDACT_TEXT, TextPopups.ADD_HINT, TextPopups.ADD_FALSE_POSITIVE]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#getManualRedaction(quads: Record<string, Quad[]>, text?: string, convertQuads = false): IManualRedactionEntry {
|
#getManualRedaction(quads: Record<string, Quad[]>, text?: string, convertQuads = false): IManualRedactionEntry {
|
||||||
|
|||||||
@ -12,7 +12,6 @@ import { DossierDictionariesMapService } from '@services/entity-services/dossier
|
|||||||
import { List } from '@iqser/common-ui/lib/utils';
|
import { List } from '@iqser/common-ui/lib/utils';
|
||||||
import { IMAGE_CATEGORIES } from '../../modules/file-preview/utils/constants';
|
import { IMAGE_CATEGORIES } from '../../modules/file-preview/utils/constants';
|
||||||
|
|
||||||
const MIN_WORD_LENGTH = 2;
|
|
||||||
const IMAGE_TYPES = ['image', 'formula', 'ocr'];
|
const IMAGE_TYPES = ['image', 'formula', 'ocr'];
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
@ -100,20 +99,13 @@ export class DictionaryService extends EntitiesService<IDictionary, Dictionary>
|
|||||||
) {
|
) {
|
||||||
const entriesToAdd: Array<string> = [];
|
const entriesToAdd: Array<string> = [];
|
||||||
const initialEntriesSet = new Set(initialEntries);
|
const initialEntriesSet = new Set(initialEntries);
|
||||||
let hasInvalidRows = false;
|
|
||||||
for (let i = 0; i < entries.length; i++) {
|
for (let i = 0; i < entries.length; i++) {
|
||||||
const entry = entries.at(i);
|
const entry = entries.at(i);
|
||||||
if (!entry.trim() || initialEntriesSet.has(entry)) {
|
if (!entry.trim() || initialEntriesSet.has(entry)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
hasInvalidRows ||= entry.length < MIN_WORD_LENGTH;
|
|
||||||
entriesToAdd.push(entry);
|
entriesToAdd.push(entry);
|
||||||
}
|
}
|
||||||
if (hasInvalidRows) {
|
|
||||||
this._toaster.error(_('dictionary-overview.error.entries-too-short'));
|
|
||||||
|
|
||||||
throw new Error('Entries too short');
|
|
||||||
}
|
|
||||||
const deletedEntries: Array<string> = [];
|
const deletedEntries: Array<string> = [];
|
||||||
const entriesSet = new Set(entries);
|
const entriesSet = new Set(entries);
|
||||||
for (let i = 0; i < initialEntries.length; i++) {
|
for (let i = 0; i < initialEntries.length; i++) {
|
||||||
@ -260,7 +252,15 @@ export class DictionaryService extends EntitiesService<IDictionary, Dictionary>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!manualTypeExists) {
|
if (!manualTypeExists) {
|
||||||
dictionaries.push(new Dictionary({ hexColor: FALLBACK_COLOR, type: SuperTypes.ManualRedaction }, true));
|
dictionaries.push(
|
||||||
|
new Dictionary(
|
||||||
|
{
|
||||||
|
hexColor: FALLBACK_COLOR,
|
||||||
|
type: SuperTypes.ManualRedaction,
|
||||||
|
},
|
||||||
|
true,
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dictionaries;
|
return dictionaries;
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { catchError, map, tap } from 'rxjs/operators';
|
|||||||
import { Observable, of } from 'rxjs';
|
import { Observable, of } from 'rxjs';
|
||||||
import { HttpHeaders } from '@angular/common/http';
|
import { HttpHeaders } from '@angular/common/http';
|
||||||
import { saveAs } from 'file-saver';
|
import { saveAs } from 'file-saver';
|
||||||
import { ComponentDetails, ComponentLogEntry, IComponentLogData, IComponentLogEntry } from '@red/domain';
|
import { ComponentDetails, ComponentLogEntry, IComponentLogData, IComponentLogEntry, IFile } from '@red/domain';
|
||||||
import { mapEach } from '@common-ui/utils';
|
import { mapEach } from '@common-ui/utils';
|
||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
@ -25,6 +25,15 @@ export class ComponentLogService extends GenericService<void> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#bulkComponentLogRequest(dossierTemplateId: string, dossierId: string, includeDetails = false): Observable<IComponentLogData> {
|
||||||
|
return this._http.get<IComponentLogData>(
|
||||||
|
`/api/dossier-templates/${dossierTemplateId}/dossiers/${dossierId}/files/bulk/get-components`,
|
||||||
|
{
|
||||||
|
params: { includeDetails },
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
getComponentLogData(dossierTemplateId: string, dossierId: string, fileId: string): Observable<ComponentLogEntry[]> {
|
getComponentLogData(dossierTemplateId: string, dossierId: string, fileId: string): Observable<ComponentLogEntry[]> {
|
||||||
return this.#componentLogRequest(dossierTemplateId, dossierId, fileId).pipe(
|
return this.#componentLogRequest(dossierTemplateId, dossierId, fileId).pipe(
|
||||||
map(data => data.componentDetails),
|
map(data => data.componentDetails),
|
||||||
@ -42,29 +51,34 @@ export class ComponentLogService extends GenericService<void> {
|
|||||||
return this._post({ components }, `componentLog/override/revert/${dossierId}/${fileId}`);
|
return this._post({ components }, `componentLog/override/revert/${dossierId}/${fileId}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
exportJSON(dossierTemplateId: string, dossierId: string, fileId: string, name: string): Observable<IComponentLogData> {
|
exportJSON(dossierTemplateId: string, dossierId: string, file?: IFile): Observable<IComponentLogData> {
|
||||||
return this.#componentLogRequest(dossierTemplateId, dossierId, fileId, false).pipe(
|
const request$ = file?.fileId
|
||||||
|
? this.#componentLogRequest(dossierTemplateId, dossierId, file?.fileId, false)
|
||||||
|
: this.#bulkComponentLogRequest(dossierTemplateId, dossierId);
|
||||||
|
return request$.pipe(
|
||||||
tap(data => {
|
tap(data => {
|
||||||
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
|
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
|
||||||
saveAs(blob, name + '.component_log.json');
|
saveAs(blob, (file?.filename ? `${file.filename}}.` : '') + 'component_log.json');
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
exportXML(dossierTemplateId, dossierId: string, fileId: string, name: string): Observable<string> {
|
exportXML(dossierTemplateId, dossierId: string, file?: IFile): Observable<string> {
|
||||||
return this.#getComponentLogDataAsXML(dossierTemplateId, dossierId, fileId).pipe(
|
return this.#getComponentLogDataAsXML(dossierTemplateId, dossierId, file).pipe(
|
||||||
tap(data => {
|
tap(data => {
|
||||||
const blob = new Blob([data], { type: 'application/xml' });
|
const blob = new Blob([data], { type: 'application/xml' });
|
||||||
saveAs(blob, name + '.component_log.xml');
|
saveAs(blob, (file?.filename ? `${file.filename}}.` : '') + 'component_log.xml');
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#getComponentLogDataAsXML(dossierTemplateId: string, dossierId: string, fileId: string) {
|
#getComponentLogDataAsXML(dossierTemplateId: string, dossierId: string, file?: IFile) {
|
||||||
let headers = new HttpHeaders();
|
let headers = new HttpHeaders();
|
||||||
headers = headers.set('accept', 'application/xml');
|
headers = headers.set('accept', 'application/xml');
|
||||||
|
|
||||||
return this._http.get(`/api/dossier-templates/${dossierTemplateId}/dossiers/${dossierId}/files/${fileId}/components`, {
|
const pathSuffix = file?.fileId ? `${file.fileId}/components` : 'bulk/get-components';
|
||||||
|
|
||||||
|
return this._http.get(`/api/dossier-templates/${dossierTemplateId}/dossiers/${dossierId}/files/${pathSuffix}`, {
|
||||||
headers: headers,
|
headers: headers,
|
||||||
responseType: 'text',
|
responseType: 'text',
|
||||||
observe: 'body',
|
observe: 'body',
|
||||||
|
|||||||
@ -616,5 +616,9 @@
|
|||||||
{
|
{
|
||||||
"elementKey": "editor_exclude_pages",
|
"elementKey": "editor_exclude_pages",
|
||||||
"documentKey": "editor_exclude_pages"
|
"documentKey": "editor_exclude_pages"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elementKey": "component_download",
|
||||||
|
"documentKey": "component_download"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -56,8 +56,7 @@
|
|||||||
},
|
},
|
||||||
"add-edit-clone-dossier-template": {
|
"add-edit-clone-dossier-template": {
|
||||||
"error": {
|
"error": {
|
||||||
"conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen.",
|
"conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen."
|
||||||
"generic": "Fehler beim Erstellen der Dossiervorlage."
|
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"apply-updates-default": {
|
"apply-updates-default": {
|
||||||
@ -256,9 +255,6 @@
|
|||||||
"user-management": "User Management",
|
"user-management": "User Management",
|
||||||
"watermarks": "Watermarks"
|
"watermarks": "Watermarks"
|
||||||
},
|
},
|
||||||
"annotation": {
|
|
||||||
"pending": "(Pending Analysis)"
|
|
||||||
},
|
|
||||||
"annotation-actions": {
|
"annotation-actions": {
|
||||||
"accept-recommendation": {
|
"accept-recommendation": {
|
||||||
"label": "Empfehlung annehmen"
|
"label": "Empfehlung annehmen"
|
||||||
@ -341,14 +337,14 @@
|
|||||||
"error": "Rekategorisierung des Bildes gescheitert: {error}",
|
"error": "Rekategorisierung des Bildes gescheitert: {error}",
|
||||||
"success": "Bild wurde einer neuen Kategorie zugeordnet."
|
"success": "Bild wurde einer neuen Kategorie zugeordnet."
|
||||||
},
|
},
|
||||||
"remove": {
|
|
||||||
"error": "Fehler beim Entfernen der Schwärzung: {error}",
|
|
||||||
"success": "Schwärzung entfernt!"
|
|
||||||
},
|
|
||||||
"remove-hint": {
|
"remove-hint": {
|
||||||
"error": "Failed to remove hint: {error}",
|
"error": "Failed to remove hint: {error}",
|
||||||
"success": "Hint removed!"
|
"success": "Hint removed!"
|
||||||
},
|
},
|
||||||
|
"remove": {
|
||||||
|
"error": "Fehler beim Entfernen der Schwärzung: {error}",
|
||||||
|
"success": "Schwärzung entfernt!"
|
||||||
|
},
|
||||||
"request-change-legal-basis": {
|
"request-change-legal-basis": {
|
||||||
"error": "Fehler beim Vorschlagen der Änderung der Begründung:",
|
"error": "Fehler beim Vorschlagen der Änderung der Begründung:",
|
||||||
"success": "Die Änderung der in der Anmerkung genannten Begründung wurde beantragt."
|
"success": "Die Änderung der in der Anmerkung genannten Begründung wurde beantragt."
|
||||||
@ -365,14 +361,14 @@
|
|||||||
"error": "Fehler beim Vorschlagen der Neukategorisierung des Bilds: {error}",
|
"error": "Fehler beim Vorschlagen der Neukategorisierung des Bilds: {error}",
|
||||||
"success": "Bild-Neuklassifizierung angefordert."
|
"success": "Bild-Neuklassifizierung angefordert."
|
||||||
},
|
},
|
||||||
"request-remove": {
|
|
||||||
"error": "Fehler beim Erstellen des Vorschlags für das Entfernen der Schwärzung: {error}",
|
|
||||||
"success": "Entfernen der Schwärzung wurde vorgeschlagen!"
|
|
||||||
},
|
|
||||||
"request-remove-hint": {
|
"request-remove-hint": {
|
||||||
"error": "Failed to request removal of hint: {error}",
|
"error": "Failed to request removal of hint: {error}",
|
||||||
"success": "Requested to remove hint!"
|
"success": "Requested to remove hint!"
|
||||||
},
|
},
|
||||||
|
"request-remove": {
|
||||||
|
"error": "Fehler beim Erstellen des Vorschlags für das Entfernen der Schwärzung: {error}",
|
||||||
|
"success": "Entfernen der Schwärzung wurde vorgeschlagen!"
|
||||||
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"error": "Vorschlag einer Schwärzung wurde nicht gespeichert: {error}",
|
"error": "Vorschlag einer Schwärzung wurde nicht gespeichert: {error}",
|
||||||
"success": "Vorschlag einer Schwärzung gespeichert"
|
"success": "Vorschlag einer Schwärzung gespeichert"
|
||||||
@ -389,15 +385,15 @@
|
|||||||
"remove-highlights": {
|
"remove-highlights": {
|
||||||
"label": "Remove Selected Earmarks"
|
"label": "Remove Selected Earmarks"
|
||||||
},
|
},
|
||||||
"resize": {
|
|
||||||
"label": "Größe ändern"
|
|
||||||
},
|
|
||||||
"resize-accept": {
|
"resize-accept": {
|
||||||
"label": "Größe speichern"
|
"label": "Größe speichern"
|
||||||
},
|
},
|
||||||
"resize-cancel": {
|
"resize-cancel": {
|
||||||
"label": "Größenänderung abbrechen"
|
"label": "Größenänderung abbrechen"
|
||||||
},
|
},
|
||||||
|
"resize": {
|
||||||
|
"label": "Größe ändern"
|
||||||
|
},
|
||||||
"see-references": {
|
"see-references": {
|
||||||
"label": "See References"
|
"label": "See References"
|
||||||
},
|
},
|
||||||
@ -439,6 +435,9 @@
|
|||||||
"suggestion-resize": "Vorgeschlagene Größenänderung",
|
"suggestion-resize": "Vorgeschlagene Größenänderung",
|
||||||
"text-highlight": "Earmark"
|
"text-highlight": "Earmark"
|
||||||
},
|
},
|
||||||
|
"annotation": {
|
||||||
|
"pending": "(Pending Analysis)"
|
||||||
|
},
|
||||||
"archived-dossiers-listing": {
|
"archived-dossiers-listing": {
|
||||||
"no-data": {
|
"no-data": {
|
||||||
"title": "No archived dossiers."
|
"title": "No archived dossiers."
|
||||||
@ -558,6 +557,12 @@
|
|||||||
"title": "Aktion bestätigen"
|
"title": "Aktion bestätigen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"component-download": {
|
||||||
|
"disabled-tooltip": "",
|
||||||
|
"json": "",
|
||||||
|
"tooltip": "",
|
||||||
|
"xml": ""
|
||||||
|
},
|
||||||
"component-log-dialog": {
|
"component-log-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"cancel-edit": "Cancel",
|
"cancel-edit": "Cancel",
|
||||||
@ -638,18 +643,14 @@
|
|||||||
"warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!"
|
"warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!"
|
||||||
},
|
},
|
||||||
"confirmation-dialog": {
|
"confirmation-dialog": {
|
||||||
"approve-file": {
|
|
||||||
"question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
|
|
||||||
"title": "Warnung!"
|
|
||||||
},
|
|
||||||
"approve-file-without-analysis": {
|
"approve-file-without-analysis": {
|
||||||
"confirmationText": "Approve without analysis",
|
"confirmationText": "Approve without analysis",
|
||||||
"denyText": "Cancel",
|
"denyText": "Cancel",
|
||||||
"question": "Analysis required to detect new redactions.",
|
"question": "Analysis required to detect new redactions.",
|
||||||
"title": "Warning!"
|
"title": "Warning!"
|
||||||
},
|
},
|
||||||
"approve-multiple-files": {
|
"approve-file": {
|
||||||
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?",
|
"question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
|
||||||
"title": "Warnung!"
|
"title": "Warnung!"
|
||||||
},
|
},
|
||||||
"approve-multiple-files-without-analysis": {
|
"approve-multiple-files-without-analysis": {
|
||||||
@ -658,6 +659,10 @@
|
|||||||
"question": "Analysis required to detect new redactions for at least one file.",
|
"question": "Analysis required to detect new redactions for at least one file.",
|
||||||
"title": "Warning"
|
"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": {
|
"assign-file-to-me": {
|
||||||
"question": {
|
"question": {
|
||||||
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?",
|
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?",
|
||||||
@ -758,7 +763,6 @@
|
|||||||
"download": "Download current entries",
|
"download": "Download current entries",
|
||||||
"error": {
|
"error": {
|
||||||
"400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.",
|
"400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.",
|
||||||
"entries-too-short": "Einige Einträge im Wörterbuch unterschreiten die Mindestlänge von 2 Zeichen. Diese sind rot markiert.",
|
|
||||||
"generic": "Es ist ein Fehler aufgetreten ... Das Wörterbuch konnte nicht aktualisiert werden!"
|
"generic": "Es ist ein Fehler aufgetreten ... Das Wörterbuch konnte nicht aktualisiert werden!"
|
||||||
},
|
},
|
||||||
"revert-changes": "Rückgängig machen",
|
"revert-changes": "Rückgängig machen",
|
||||||
@ -1003,13 +1007,13 @@
|
|||||||
"recent": "Neu ({hours} h)",
|
"recent": "Neu ({hours} h)",
|
||||||
"unassigned": "Niemandem zugewiesen"
|
"unassigned": "Niemandem zugewiesen"
|
||||||
},
|
},
|
||||||
"reanalyse": {
|
|
||||||
"action": "Datei analysieren"
|
|
||||||
},
|
|
||||||
"reanalyse-dossier": {
|
"reanalyse-dossier": {
|
||||||
"error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.",
|
"error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.",
|
||||||
"success": "Dateien für Reanalyse vorgesehen."
|
"success": "Dateien für Reanalyse vorgesehen."
|
||||||
},
|
},
|
||||||
|
"reanalyse": {
|
||||||
|
"action": "Datei analysieren"
|
||||||
|
},
|
||||||
"start-auto-analysis": "Enable auto-analysis",
|
"start-auto-analysis": "Enable auto-analysis",
|
||||||
"stop-auto-analysis": "Stop auto-analysis",
|
"stop-auto-analysis": "Stop auto-analysis",
|
||||||
"table-col-names": {
|
"table-col-names": {
|
||||||
@ -1078,14 +1082,6 @@
|
|||||||
"total-documents": "Anzahl der Dokumente",
|
"total-documents": "Anzahl der Dokumente",
|
||||||
"total-people": "<strong>{count}</strong> {count, plural, one{User} other {Users}}"
|
"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": {
|
"dossier-templates-listing": {
|
||||||
"action": {
|
"action": {
|
||||||
"clone": "Clone Template",
|
"clone": "Clone Template",
|
||||||
@ -1121,6 +1117,14 @@
|
|||||||
"title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}"
|
"title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dossier-templates": {
|
||||||
|
"label": "Dossier-Vorlagen",
|
||||||
|
"status": {
|
||||||
|
"active": "Active",
|
||||||
|
"inactive": "Inactive",
|
||||||
|
"incomplete": "Incomplete"
|
||||||
|
}
|
||||||
|
},
|
||||||
"dossier-watermark-selector": {
|
"dossier-watermark-selector": {
|
||||||
"heading": "Watermarks on documents",
|
"heading": "Watermarks on documents",
|
||||||
"no-watermark": "There is no watermark defined for the dossier template.<br>Contact your app admin to define one.",
|
"no-watermark": "There is no watermark defined for the dossier template.<br>Contact your app admin to define one.",
|
||||||
@ -1304,15 +1308,6 @@
|
|||||||
"title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}"
|
"title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"entity": {
|
|
||||||
"info": {
|
|
||||||
"actions": {
|
|
||||||
"revert": "Revert",
|
|
||||||
"save": "Save Changes"
|
|
||||||
},
|
|
||||||
"heading": "Edit Entity"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"entity-rules-screen": {
|
"entity-rules-screen": {
|
||||||
"error": {
|
"error": {
|
||||||
"generic": "Something went wrong... Entity rules update failed!"
|
"generic": "Something went wrong... Entity rules update failed!"
|
||||||
@ -1326,19 +1321,28 @@
|
|||||||
"title": "Entity Rule Editor",
|
"title": "Entity Rule Editor",
|
||||||
"warning-text": "Warning: experimental feature!"
|
"warning-text": "Warning: experimental feature!"
|
||||||
},
|
},
|
||||||
|
"entity": {
|
||||||
|
"info": {
|
||||||
|
"actions": {
|
||||||
|
"revert": "Revert",
|
||||||
|
"save": "Save Changes"
|
||||||
|
},
|
||||||
|
"heading": "Edit Entity"
|
||||||
|
}
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"deleted-entity": {
|
"deleted-entity": {
|
||||||
"dossier": {
|
"dossier": {
|
||||||
"action": "Zurück zur Übersicht",
|
"action": "Zurück zur Übersicht",
|
||||||
"label": "Dieses Dossier wurde gelöscht!"
|
"label": "Dieses Dossier wurde gelöscht!"
|
||||||
},
|
},
|
||||||
"file": {
|
|
||||||
"action": "Zurück zum Dossier",
|
|
||||||
"label": "Diese Datei wurde gelöscht!"
|
|
||||||
},
|
|
||||||
"file-dossier": {
|
"file-dossier": {
|
||||||
"action": "Zurück zur Übersicht",
|
"action": "Zurück zur Übersicht",
|
||||||
"label": "Das Dossier dieser Datei wurde gelöscht!"
|
"label": "Das Dossier dieser Datei wurde gelöscht!"
|
||||||
|
},
|
||||||
|
"file": {
|
||||||
|
"action": "Zurück zum Dossier",
|
||||||
|
"label": "Diese Datei wurde gelöscht!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"file-preview": {
|
"file-preview": {
|
||||||
@ -1356,12 +1360,6 @@
|
|||||||
},
|
},
|
||||||
"exact-date": "{day} {month} {year} um {hour}:{minute} Uhr",
|
"exact-date": "{day} {month} {year} um {hour}:{minute} Uhr",
|
||||||
"file": "Datei",
|
"file": "Datei",
|
||||||
"file-attribute": {
|
|
||||||
"update": {
|
|
||||||
"error": "Failed to update file attribute value!",
|
|
||||||
"success": "File attribute value has been updated successfully!"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"file-attribute-encoding-types": {
|
"file-attribute-encoding-types": {
|
||||||
"ascii": "ASCII",
|
"ascii": "ASCII",
|
||||||
"iso": "ISO-8859-1",
|
"iso": "ISO-8859-1",
|
||||||
@ -1372,6 +1370,12 @@
|
|||||||
"number": "Nummer",
|
"number": "Nummer",
|
||||||
"text": "Freier Text"
|
"text": "Freier Text"
|
||||||
},
|
},
|
||||||
|
"file-attribute": {
|
||||||
|
"update": {
|
||||||
|
"error": "Failed to update file attribute value!",
|
||||||
|
"success": "File attribute value has been updated successfully!"
|
||||||
|
}
|
||||||
|
},
|
||||||
"file-attributes-configurations": {
|
"file-attributes-configurations": {
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"form": {
|
"form": {
|
||||||
@ -1585,6 +1589,15 @@
|
|||||||
"csv": "File attributes were imported successfully from uploaded CSV file."
|
"csv": "File attributes were imported successfully from uploaded CSV file."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"filter-menu": {
|
||||||
|
"filter-options": "Filteroptionen",
|
||||||
|
"filter-types": "Filter",
|
||||||
|
"label": "Filter",
|
||||||
|
"pages-without-annotations": "Only pages without annotations",
|
||||||
|
"redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen",
|
||||||
|
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
|
||||||
|
"with-comments": "Nur Anmerkungen mit Kommentaren"
|
||||||
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"analysis": "Analyse erforderlich",
|
"analysis": "Analyse erforderlich",
|
||||||
"comment": "Kommentare",
|
"comment": "Kommentare",
|
||||||
@ -1595,15 +1608,6 @@
|
|||||||
"suggestion": "Vorgeschlagene Schwärzung",
|
"suggestion": "Vorgeschlagene Schwärzung",
|
||||||
"updated": "Aktualisiert"
|
"updated": "Aktualisiert"
|
||||||
},
|
},
|
||||||
"filter-menu": {
|
|
||||||
"filter-options": "Filteroptionen",
|
|
||||||
"filter-types": "Filter",
|
|
||||||
"label": "Filter",
|
|
||||||
"pages-without-annotations": "Only pages without annotations",
|
|
||||||
"redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen",
|
|
||||||
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
|
|
||||||
"with-comments": "Nur Anmerkungen mit Kommentaren"
|
|
||||||
},
|
|
||||||
"filters": {
|
"filters": {
|
||||||
"assigned-people": "Beauftragt",
|
"assigned-people": "Beauftragt",
|
||||||
"documents-status": "Documents State",
|
"documents-status": "Documents State",
|
||||||
@ -1671,13 +1675,6 @@
|
|||||||
},
|
},
|
||||||
"title": "SMTP-Konto konfigurieren"
|
"title": "SMTP-Konto konfigurieren"
|
||||||
},
|
},
|
||||||
"generic-errors": {
|
|
||||||
"400": "The sent request is not valid.",
|
|
||||||
"403": "Access to the requested resource is not allowed.",
|
|
||||||
"404": "The requested resource could not be found.",
|
|
||||||
"409": "The request is incompatible with the current state.",
|
|
||||||
"500": "The server encountered an unexpected condition that prevented it from fulfilling the request."
|
|
||||||
},
|
|
||||||
"help-mode": {
|
"help-mode": {
|
||||||
"bottom-text": "Hilfe-Modus",
|
"bottom-text": "Hilfe-Modus",
|
||||||
"button-text": "Help Mode (H)",
|
"button-text": "Help Mode (H)",
|
||||||
@ -1789,14 +1786,6 @@
|
|||||||
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon",
|
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon",
|
||||||
"copyright-claim-title": "Copyright",
|
"copyright-claim-title": "Copyright",
|
||||||
"custom-app-title": "Name der Anwendung",
|
"custom-app-title": "Name der Anwendung",
|
||||||
"email": {
|
|
||||||
"body": {
|
|
||||||
"analyzed": "Im aktuellen Lizenzzeitraum insgesamt analysierte Seiten: {pages}.",
|
|
||||||
"licensed": "Lizenzierte Seiten: {pages}."
|
|
||||||
},
|
|
||||||
"title": "Lizenzbericht {licenseCustomer}"
|
|
||||||
},
|
|
||||||
"email-report": "E-Mail-Bericht",
|
|
||||||
"end-user-license-text": "Die Nutzung dieses Produkts unterliegt den Bedingungen der Endbenutzer-Lizenzvereinbarung für den RedactManager, sofern darin nichts anderweitig festgelegt.",
|
"end-user-license-text": "Die Nutzung dieses Produkts unterliegt den Bedingungen der Endbenutzer-Lizenzvereinbarung für den RedactManager, sofern darin nichts anderweitig festgelegt.",
|
||||||
"end-user-license-title": "Endbenutzer-Lizenzvereinbarung",
|
"end-user-license-title": "Endbenutzer-Lizenzvereinbarung",
|
||||||
"licensing-details": {
|
"licensing-details": {
|
||||||
@ -1889,13 +1878,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-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!"
|
"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": {
|
"notifications-screen": {
|
||||||
"category": {
|
"category": {
|
||||||
"email-notifications": "E-Mail Benachrichtigungen",
|
"email-notifications": "E-Mail Benachrichtigungen",
|
||||||
@ -1909,6 +1891,7 @@
|
|||||||
"dossier": "Dossierbezogene Benachrichtigungen",
|
"dossier": "Dossierbezogene Benachrichtigungen",
|
||||||
"other": "Andere Benachrichtigungen"
|
"other": "Andere Benachrichtigungen"
|
||||||
},
|
},
|
||||||
|
"options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten",
|
||||||
"options": {
|
"options": {
|
||||||
"ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin",
|
"ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin",
|
||||||
"ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin",
|
"ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin",
|
||||||
@ -1926,7 +1909,6 @@
|
|||||||
"USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde",
|
"USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde",
|
||||||
"USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere"
|
"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": {
|
"schedule": {
|
||||||
"daily": "Tägliche Zusammenfassung",
|
"daily": "Tägliche Zusammenfassung",
|
||||||
"instant": "Sofortig",
|
"instant": "Sofortig",
|
||||||
@ -1934,6 +1916,13 @@
|
|||||||
},
|
},
|
||||||
"title": "Benachrichtigungseinstellungen"
|
"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": {
|
"ocr": {
|
||||||
"confirmation-dialog": {
|
"confirmation-dialog": {
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
@ -2025,16 +2014,16 @@
|
|||||||
"warnings-subtitle": "Do not show again options",
|
"warnings-subtitle": "Do not show again options",
|
||||||
"warnings-title": "Prompts and Dialogs Settings"
|
"warnings-title": "Prompts and Dialogs Settings"
|
||||||
},
|
},
|
||||||
"processing": {
|
|
||||||
"basic": "Processing",
|
|
||||||
"ocr": "OCR"
|
|
||||||
},
|
|
||||||
"processing-status": {
|
"processing-status": {
|
||||||
"ocr": "OCR",
|
"ocr": "OCR",
|
||||||
"pending": "Pending",
|
"pending": "Pending",
|
||||||
"processed": "Processed",
|
"processed": "Processed",
|
||||||
"processing": "Processing"
|
"processing": "Processing"
|
||||||
},
|
},
|
||||||
|
"processing": {
|
||||||
|
"basic": "Processing",
|
||||||
|
"ocr": "OCR"
|
||||||
|
},
|
||||||
"readonly": "Lesemodus",
|
"readonly": "Lesemodus",
|
||||||
"readonly-archived": "Read only (archived)",
|
"readonly-archived": "Read only (archived)",
|
||||||
"redact-text": {
|
"redact-text": {
|
||||||
@ -2264,12 +2253,6 @@
|
|||||||
"red-user-admin": "Benutzer-Admin",
|
"red-user-admin": "Benutzer-Admin",
|
||||||
"regular": "Regulär"
|
"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": {
|
"search-screen": {
|
||||||
"cols": {
|
"cols": {
|
||||||
"assignee": "Bevollmächtigter",
|
"assignee": "Bevollmächtigter",
|
||||||
@ -2293,6 +2276,12 @@
|
|||||||
"no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.",
|
"no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.",
|
||||||
"table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}"
|
"table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}"
|
||||||
},
|
},
|
||||||
|
"search": {
|
||||||
|
"active-dossiers": "ganze Plattform",
|
||||||
|
"all-dossiers": "all documents",
|
||||||
|
"placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen",
|
||||||
|
"this-dossier": "in diesem Dossier"
|
||||||
|
},
|
||||||
"seconds": "seconds",
|
"seconds": "seconds",
|
||||||
"size": "Size",
|
"size": "Size",
|
||||||
"smtp-auth-config": {
|
"smtp-auth-config": {
|
||||||
|
|||||||
@ -56,8 +56,7 @@
|
|||||||
},
|
},
|
||||||
"add-edit-clone-dossier-template": {
|
"add-edit-clone-dossier-template": {
|
||||||
"error": {
|
"error": {
|
||||||
"conflict": "Failed to create dossier template: a dossier template with the same name already exists.",
|
"conflict": "Failed to create dossier template: a dossier template with the same name already exists."
|
||||||
"generic": "Failed to create dossier template."
|
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"apply-updates-default": {
|
"apply-updates-default": {
|
||||||
@ -558,6 +557,12 @@
|
|||||||
"title": "Confirm Action"
|
"title": "Confirm Action"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"component-download": {
|
||||||
|
"disabled-tooltip": "",
|
||||||
|
"json": "",
|
||||||
|
"tooltip": "",
|
||||||
|
"xml": ""
|
||||||
|
},
|
||||||
"component-log-dialog": {
|
"component-log-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"cancel-edit": "Cancel",
|
"cancel-edit": "Cancel",
|
||||||
@ -758,7 +763,6 @@
|
|||||||
"download": "Download current entries",
|
"download": "Download current entries",
|
||||||
"error": {
|
"error": {
|
||||||
"400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.",
|
"400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.",
|
||||||
"entries-too-short": "Some entries of the dictionary are below the minimum length of 2. These are highlighted with red!",
|
|
||||||
"generic": "Something went wrong... Dictionary update failed!"
|
"generic": "Something went wrong... Dictionary update failed!"
|
||||||
},
|
},
|
||||||
"revert-changes": "Revert",
|
"revert-changes": "Revert",
|
||||||
@ -1782,14 +1786,6 @@
|
|||||||
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon",
|
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon",
|
||||||
"copyright-claim-title": "Copyright Claim",
|
"copyright-claim-title": "Copyright Claim",
|
||||||
"custom-app-title": "Custom Application Title",
|
"custom-app-title": "Custom Application Title",
|
||||||
"email-report": "Email Report",
|
|
||||||
"email": {
|
|
||||||
"body": {
|
|
||||||
"analyzed": "Total Analyzed Pages in current license period: {pages}.",
|
|
||||||
"licensed": "Licensed Pages: {pages}."
|
|
||||||
},
|
|
||||||
"title": "License Report {licenseCustomer}"
|
|
||||||
},
|
|
||||||
"end-user-license-text": "The use of this product is subject to the terms of the RedactManager End User License Agreement, unless otherwise specified therein.",
|
"end-user-license-text": "The use of this product is subject to the terms of the RedactManager End User License Agreement, unless otherwise specified therein.",
|
||||||
"end-user-license-title": "End User License Agreement",
|
"end-user-license-title": "End User License Agreement",
|
||||||
"licensing-details": {
|
"licensing-details": {
|
||||||
@ -2545,12 +2541,5 @@
|
|||||||
"select": "Select"
|
"select": "Select"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yesterday": "Yesterday",
|
"yesterday": "Yesterday"
|
||||||
"generic-errors": {
|
|
||||||
"400": "The sent request is not valid.",
|
|
||||||
"403": "Access to the requested resource is not allowed.",
|
|
||||||
"404": "The requested resource could not be found.",
|
|
||||||
"409": "The request is incompatible with the current state.",
|
|
||||||
"500": "The server encountered an unexpected condition that prevented it from fulfilling the request."
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,8 +56,7 @@
|
|||||||
},
|
},
|
||||||
"add-edit-clone-dossier-template": {
|
"add-edit-clone-dossier-template": {
|
||||||
"error": {
|
"error": {
|
||||||
"conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen.",
|
"conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen."
|
||||||
"generic": "Fehler beim Erstellen der Dossiervorlage."
|
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"apply-updates-default": {
|
"apply-updates-default": {
|
||||||
@ -558,6 +557,12 @@
|
|||||||
"title": "Aktion bestätigen"
|
"title": "Aktion bestätigen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"component-download": {
|
||||||
|
"disabled-tooltip": "",
|
||||||
|
"json": "",
|
||||||
|
"tooltip": "",
|
||||||
|
"xml": ""
|
||||||
|
},
|
||||||
"component-log-dialog": {
|
"component-log-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"cancel-edit": "Cancel",
|
"cancel-edit": "Cancel",
|
||||||
@ -758,7 +763,6 @@
|
|||||||
"download": "",
|
"download": "",
|
||||||
"error": {
|
"error": {
|
||||||
"400": "",
|
"400": "",
|
||||||
"entries-too-short": "Einige Einträge im Wörterbuch unterschreiten die Mindestlänge von 2 Zeichen. Diese sind rot markiert.",
|
|
||||||
"generic": "Es ist ein Fehler aufgetreten ... Das Wörterbuch konnte nicht aktualisiert werden!"
|
"generic": "Es ist ein Fehler aufgetreten ... Das Wörterbuch konnte nicht aktualisiert werden!"
|
||||||
},
|
},
|
||||||
"revert-changes": "Rückgängig machen",
|
"revert-changes": "Rückgängig machen",
|
||||||
@ -1782,14 +1786,6 @@
|
|||||||
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon AG (powered by IQSER)",
|
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon AG (powered by IQSER)",
|
||||||
"copyright-claim-title": "Copyright",
|
"copyright-claim-title": "Copyright",
|
||||||
"custom-app-title": "Name der Anwendung",
|
"custom-app-title": "Name der Anwendung",
|
||||||
"email-report": "E-Mail-Bericht",
|
|
||||||
"email": {
|
|
||||||
"body": {
|
|
||||||
"analyzed": "Im aktuellen Lizenzzeitraum insgesamt analysierte Seiten: {pages}.",
|
|
||||||
"licensed": "Lizenzierte Seiten: {pages}."
|
|
||||||
},
|
|
||||||
"title": "Lizenzbericht {licenseCustomer}"
|
|
||||||
},
|
|
||||||
"end-user-license-text": "Die Nutzung dieses Produkts unterliegt den Bedingungen der Endbenutzer-Lizenzvereinbarung für den RedactManager, sofern darin nichts anderweitig festgelegt.",
|
"end-user-license-text": "Die Nutzung dieses Produkts unterliegt den Bedingungen der Endbenutzer-Lizenzvereinbarung für den RedactManager, sofern darin nichts anderweitig festgelegt.",
|
||||||
"end-user-license-title": "Endbenutzer-Lizenzvereinbarung",
|
"end-user-license-title": "Endbenutzer-Lizenzvereinbarung",
|
||||||
"licensing-details": {
|
"licensing-details": {
|
||||||
@ -2545,12 +2541,5 @@
|
|||||||
"select": "Wählen"
|
"select": "Wählen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yesterday": "Gestern",
|
"yesterday": "Gestern"
|
||||||
"generic-errors": {
|
|
||||||
"400": "",
|
|
||||||
"403": "",
|
|
||||||
"404": "",
|
|
||||||
"409": "",
|
|
||||||
"500": ""
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,8 +56,7 @@
|
|||||||
},
|
},
|
||||||
"add-edit-clone-dossier-template": {
|
"add-edit-clone-dossier-template": {
|
||||||
"error": {
|
"error": {
|
||||||
"conflict": "Failed to create dossier template: a dossier template with the same name already exists.",
|
"conflict": "Failed to create dossier template: a dossier template with the same name already exists."
|
||||||
"generic": "Failed to create dossier template."
|
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"apply-updates-default": {
|
"apply-updates-default": {
|
||||||
@ -558,6 +557,12 @@
|
|||||||
"title": "Confirm Action"
|
"title": "Confirm Action"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"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",
|
||||||
|
"xml": "Download as XML"
|
||||||
|
},
|
||||||
"component-log-dialog": {
|
"component-log-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"cancel-edit": "Cancel",
|
"cancel-edit": "Cancel",
|
||||||
@ -747,7 +752,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dev-mode": "DEV",
|
"dev-mode": "DEV",
|
||||||
"dictionary": "Dictionary",
|
"dictionary": "Type",
|
||||||
"dictionary-overview": {
|
"dictionary-overview": {
|
||||||
"compare": {
|
"compare": {
|
||||||
"compare": "Compare",
|
"compare": "Compare",
|
||||||
@ -758,7 +763,6 @@
|
|||||||
"download": "Download current entries",
|
"download": "Download current entries",
|
||||||
"error": {
|
"error": {
|
||||||
"400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.",
|
"400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.",
|
||||||
"entries-too-short": "Some entries of the dictionary are below the minimum length of 2. These are highlighted with red!",
|
|
||||||
"generic": "Something went wrong... Dictionary update failed!"
|
"generic": "Something went wrong... Dictionary update failed!"
|
||||||
},
|
},
|
||||||
"revert-changes": "Revert",
|
"revert-changes": "Revert",
|
||||||
@ -963,7 +967,7 @@
|
|||||||
"processing-documents": "{count} processing {count, plural, one{document} other{documents}}"
|
"processing-documents": "{count} processing {count, plural, one{document} other{documents}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"download-file": "Download",
|
"download-file": "Report 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.",
|
"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-listing": {
|
||||||
"file-entry": {
|
"file-entry": {
|
||||||
@ -1782,14 +1786,6 @@
|
|||||||
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon",
|
"copyright-claim-text": "Copyright © 2020 - {currentYear} knecon",
|
||||||
"copyright-claim-title": "Copyright Claim",
|
"copyright-claim-title": "Copyright Claim",
|
||||||
"custom-app-title": "Custom Application Title",
|
"custom-app-title": "Custom Application Title",
|
||||||
"email-report": "Email Report",
|
|
||||||
"email": {
|
|
||||||
"body": {
|
|
||||||
"analyzed": "Total Analyzed Pages in current license period: {pages}.",
|
|
||||||
"licensed": "Licensed Pages: {pages}."
|
|
||||||
},
|
|
||||||
"title": "License Report {licenseCustomer}"
|
|
||||||
},
|
|
||||||
"end-user-license-text": "The use of this product is subject to the terms of the DocuMine End User License Agreement, unless otherwise specified therein.",
|
"end-user-license-text": "The use of this product is subject to the terms of the DocuMine End User License Agreement, unless otherwise specified therein.",
|
||||||
"end-user-license-title": "End User License Agreement",
|
"end-user-license-title": "End User License Agreement",
|
||||||
"licensing-details": {
|
"licensing-details": {
|
||||||
@ -2545,12 +2541,5 @@
|
|||||||
"select": "Select"
|
"select": "Select"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yesterday": "Yesterday",
|
"yesterday": "Yesterday"
|
||||||
"generic-errors": {
|
|
||||||
"400": "The sent request is not valid.",
|
|
||||||
"403": "Access to the requested resource is not allowed.",
|
|
||||||
"404": "The requested resource could not be found.",
|
|
||||||
"409": "The request is incompatible with the current state.",
|
|
||||||
"500": "The server encountered an unexpected condition that prevented it from fulfilling the request."
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit a6383c1dbc840115897a31567c3f5633ba78b43a
|
Subproject commit 3776e8ecefba36b39c47567f86b451f5440e75f7
|
||||||
Loading…
x
Reference in New Issue
Block a user