RED-6143: Redo dossier template settings / dialogs
This commit is contained in:
parent
da4c9e6331
commit
c7658527d5
@ -8,7 +8,6 @@ import { EntitiesListingScreenComponent } from './screens/entities-listing/entit
|
|||||||
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
|
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
|
||||||
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
|
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
|
||||||
import { DossierTemplateBreadcrumbsComponent } from './shared/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
|
import { DossierTemplateBreadcrumbsComponent } from './shared/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
|
||||||
import { AddEditCloneDossierTemplateDialogComponent } from './dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component';
|
|
||||||
import { AddEntityDialogComponent } from './dialogs/add-entity-dialog/add-entity-dialog.component';
|
import { AddEntityDialogComponent } from './dialogs/add-entity-dialog/add-entity-dialog.component';
|
||||||
import { EditColorDialogComponent } from './dialogs/edit-color-dialog/edit-color-dialog.component';
|
import { EditColorDialogComponent } from './dialogs/edit-color-dialog/edit-color-dialog.component';
|
||||||
import { AdminDialogService } from './services/admin-dialog.service';
|
import { AdminDialogService } from './services/admin-dialog.service';
|
||||||
@ -57,9 +56,10 @@ import { DossierTemplateActionsComponent } from './shared/components/dossier-tem
|
|||||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||||
import { SelectComponent } from '@shared/components/select/select.component';
|
import { SelectComponent } from '@shared/components/select/select.component';
|
||||||
import { PaginationComponent } from '@common-ui/pagination/pagination.component';
|
import { PaginationComponent } from '@common-ui/pagination/pagination.component';
|
||||||
|
import { AddCloneDossierTemplateDialogComponent } from './dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component';
|
||||||
|
|
||||||
const dialogs = [
|
const dialogs = [
|
||||||
AddEditCloneDossierTemplateDialogComponent,
|
AddCloneDossierTemplateDialogComponent,
|
||||||
AddEntityDialogComponent,
|
AddEntityDialogComponent,
|
||||||
EditColorDialogComponent,
|
EditColorDialogComponent,
|
||||||
SmtpAuthDialogComponent,
|
SmtpAuthDialogComponent,
|
||||||
|
|||||||
@ -0,0 +1,53 @@
|
|||||||
|
<section class="dialog">
|
||||||
|
<div [innerHTML]="'add-clone-dossier-template.title' | translate: translateParams" class="dialog-header heading-l"></div>
|
||||||
|
|
||||||
|
<form [formGroup]="form">
|
||||||
|
<div class="dialog-content">
|
||||||
|
<div class="iqser-input-group required w-300">
|
||||||
|
<label [translate]="'add-edit-clone-dossier-template.form.name'"></label>
|
||||||
|
<input
|
||||||
|
[placeholder]="'add-edit-clone-dossier-template.form.name-placeholder' | translate"
|
||||||
|
formControlName="name"
|
||||||
|
name="name"
|
||||||
|
type="text"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="iqser-input-group w-400">
|
||||||
|
<label [translate]="'add-edit-clone-dossier-template.form.description'"></label>
|
||||||
|
<textarea
|
||||||
|
[placeholder]="'add-edit-clone-dossier-template.form.description-placeholder' | translate"
|
||||||
|
formControlName="description"
|
||||||
|
name="description"
|
||||||
|
rows="4"
|
||||||
|
type="text"
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dialog-actions">
|
||||||
|
<iqser-icon-button
|
||||||
|
(action)="save()"
|
||||||
|
[buttonId]="'saveButton'"
|
||||||
|
[disabled]="disabled"
|
||||||
|
[label]="'add-clone-dossier-template.save' | translate: translateParams"
|
||||||
|
[type]="iconButtonTypes.primary"
|
||||||
|
></iqser-icon-button>
|
||||||
|
|
||||||
|
<iqser-icon-button
|
||||||
|
(action)="save({ nextAction: true })"
|
||||||
|
[buttonId]="'saveButton'"
|
||||||
|
[disabled]="disabled"
|
||||||
|
[label]="'add-clone-dossier-template.save-and-edit' | translate"
|
||||||
|
[type]="iconButtonTypes.dark"
|
||||||
|
></iqser-icon-button>
|
||||||
|
|
||||||
|
<iqser-help-button
|
||||||
|
*ngIf="!isDocumine && !!dossierTemplate"
|
||||||
|
[helpButtonKey]="'edit_clone_delete_dossier_templates'"
|
||||||
|
></iqser-help-button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<iqser-circle-button (action)="close()" class="dialog-close" icon="iqser:close"></iqser-circle-button>
|
||||||
|
</section>
|
||||||
@ -0,0 +1,101 @@
|
|||||||
|
import { HttpStatusCode } from '@angular/common/http';
|
||||||
|
import { Component, Inject } from '@angular/core';
|
||||||
|
import { Validators } from '@angular/forms';
|
||||||
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||||
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
import { BaseDialogComponent, getConfig, SaveOptions } from '@iqser/common-ui';
|
||||||
|
import { DossierTemplate } from '@red/domain';
|
||||||
|
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
|
export interface CloneTemplateData {
|
||||||
|
dossierTemplateId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
templateUrl: './add-clone-dossier-template-dialog.component.html',
|
||||||
|
styleUrls: ['./add-clone-dossier-template-dialog.component.scss'],
|
||||||
|
})
|
||||||
|
export class AddCloneDossierTemplateDialogComponent extends BaseDialogComponent {
|
||||||
|
readonly dossierTemplate?: DossierTemplate;
|
||||||
|
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||||
|
readonly translateParams: { type: string; dossierTemplateName?: string };
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
|
private readonly _router: Router,
|
||||||
|
protected readonly _dialogRef: MatDialogRef<AddCloneDossierTemplateDialogComponent>,
|
||||||
|
@Inject(MAT_DIALOG_DATA) readonly data: CloneTemplateData,
|
||||||
|
) {
|
||||||
|
super(_dialogRef);
|
||||||
|
this.dossierTemplate = this._dossierTemplatesService.find(this.data.dossierTemplateId);
|
||||||
|
|
||||||
|
this.translateParams = {
|
||||||
|
type: this.dossierTemplate ? 'clone' : 'create',
|
||||||
|
dossierTemplateName: this.dossierTemplate?.name,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.form = this.#getForm();
|
||||||
|
this.initialFormValue = this.form.getRawValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
override get disabled(): boolean {
|
||||||
|
// Ignore 'changed' value, doesn't make sense in this context
|
||||||
|
return !this.valid || this._hasErrors();
|
||||||
|
}
|
||||||
|
|
||||||
|
async save(options?: SaveOptions): Promise<void> {
|
||||||
|
let dossierTemplate: DossierTemplate;
|
||||||
|
this._loadingService.start();
|
||||||
|
const body = {
|
||||||
|
...this.dossierTemplate,
|
||||||
|
...this.form.getRawValue(),
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
if (this.dossierTemplate) {
|
||||||
|
dossierTemplate = await this._dossierTemplatesService.clone(this.dossierTemplate.id, body);
|
||||||
|
} else {
|
||||||
|
dossierTemplate = await this._dossierTemplatesService.createOrUpdate(body);
|
||||||
|
}
|
||||||
|
if (options?.nextAction) {
|
||||||
|
await this._router.navigate([dossierTemplate.routerLink]);
|
||||||
|
}
|
||||||
|
this._dialogRef.close(true);
|
||||||
|
} catch (error) {
|
||||||
|
if (error.status === HttpStatusCode.Conflict) {
|
||||||
|
this._toaster.error(_('add-edit-clone-dossier-template.error.conflict'), { error });
|
||||||
|
} else {
|
||||||
|
this._toaster.rawError(error.error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._loadingService.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
#getForm() {
|
||||||
|
return this._formBuilder.group({
|
||||||
|
name: [this.dossierTemplate ? this.#getCloneName(this.dossierTemplate) : undefined, Validators.required],
|
||||||
|
description: [this.dossierTemplate?.description],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#getCloneName(initialTemplate: DossierTemplate): string {
|
||||||
|
const templateName = initialTemplate.name.trim();
|
||||||
|
let nameOfClonedTemplate: string = templateName.split('Copy of ').filter(n => n)[0];
|
||||||
|
nameOfClonedTemplate = nameOfClonedTemplate.split(/\(\s*\d+\s*\)$/)[0].trim();
|
||||||
|
const allTemplatesNames = this._dossierTemplatesService.all.map(t => t.name);
|
||||||
|
|
||||||
|
let clonesCount = 0;
|
||||||
|
for (const name of allTemplatesNames) {
|
||||||
|
const splitName = name.split(nameOfClonedTemplate);
|
||||||
|
const suffixRegExp = new RegExp(/^\(\s*\d+\s*\)$/);
|
||||||
|
if (splitName[0] === 'Copy of ' && (splitName[1].trim().match(suffixRegExp) || splitName[1] === '')) {
|
||||||
|
clonesCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clonesCount >= 1) {
|
||||||
|
return `Copy of ${nameOfClonedTemplate} (${clonesCount})`;
|
||||||
|
}
|
||||||
|
return `Copy of ${nameOfClonedTemplate}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,162 +0,0 @@
|
|||||||
<section class="dialog">
|
|
||||||
<div [innerHTML]="'add-edit-clone-dossier-template.title' | translate: translateParams" class="dialog-header heading-l"></div>
|
|
||||||
|
|
||||||
<form [formGroup]="form">
|
|
||||||
<div class="dialog-content">
|
|
||||||
<div class="iqser-input-group required w-300">
|
|
||||||
<label [translate]="'add-edit-clone-dossier-template.form.name'"></label>
|
|
||||||
<input
|
|
||||||
[placeholder]="'add-edit-clone-dossier-template.form.name-placeholder' | translate"
|
|
||||||
formControlName="name"
|
|
||||||
name="name"
|
|
||||||
type="text"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="iqser-input-group w-400">
|
|
||||||
<label [translate]="'add-edit-clone-dossier-template.form.description'"></label>
|
|
||||||
<textarea
|
|
||||||
[placeholder]="'add-edit-clone-dossier-template.form.description-placeholder' | translate"
|
|
||||||
formControlName="description"
|
|
||||||
name="description"
|
|
||||||
rows="4"
|
|
||||||
type="text"
|
|
||||||
></textarea>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="validity">
|
|
||||||
<div>
|
|
||||||
<mat-checkbox (change)="toggleHasValid('from')" [checked]="hasValidFrom" class="filter-menu-checkbox" color="primary">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.valid-from' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
|
|
||||||
<mat-checkbox (change)="toggleHasValid('to')" [checked]="hasValidTo" class="filter-menu-checkbox" color="primary">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.valid-to' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div class="iqser-input-group datepicker-wrapper">
|
|
||||||
<ng-container *ngIf="hasValidFrom">
|
|
||||||
<input
|
|
||||||
(dateChange)="applyValidityIntervalConstraints()"
|
|
||||||
[matDatepicker]="fromPicker"
|
|
||||||
formControlName="validFrom"
|
|
||||||
placeholder="dd/mm/yy"
|
|
||||||
/>
|
|
||||||
<mat-datepicker-toggle [for]="fromPicker" matSuffix>
|
|
||||||
<mat-icon matDatepickerToggleIcon svgIcon="iqser:calendar"></mat-icon>
|
|
||||||
</mat-datepicker-toggle>
|
|
||||||
<mat-datepicker #fromPicker></mat-datepicker>
|
|
||||||
</ng-container>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="iqser-input-group datepicker-wrapper">
|
|
||||||
<ng-container *ngIf="hasValidTo">
|
|
||||||
<input
|
|
||||||
(dateChange)="applyValidityIntervalConstraints()"
|
|
||||||
[matDatepicker]="toPicker"
|
|
||||||
formControlName="validTo"
|
|
||||||
placeholder="dd/mm/yy"
|
|
||||||
/>
|
|
||||||
<mat-datepicker-toggle [for]="toPicker" matSuffix>
|
|
||||||
<mat-icon matDatepickerToggleIcon svgIcon="iqser:calendar"></mat-icon>
|
|
||||||
</mat-datepicker-toggle>
|
|
||||||
<mat-datepicker #toPicker></mat-datepicker>
|
|
||||||
</ng-container>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="!isDocumine">
|
|
||||||
<p class="heading download-includes">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.apply-updates-default.heading' | translate }}
|
|
||||||
</p>
|
|
||||||
<div class="iqser-input-group">
|
|
||||||
<mat-checkbox color="primary" formControlName="applyDictionaryUpdatesToAllDossiersByDefault">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.apply-updates-default.description' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="!isDocumine" class="flex">
|
|
||||||
<div class="half-flex-basis">
|
|
||||||
<p class="heading download-includes">{{ 'download-includes' | translate }}</p>
|
|
||||||
|
|
||||||
<div class="flex">
|
|
||||||
<redaction-select
|
|
||||||
[label]="
|
|
||||||
'download-type.label'
|
|
||||||
| translate
|
|
||||||
: {
|
|
||||||
length: form.controls['downloadFileTypes'].value.length
|
|
||||||
}
|
|
||||||
"
|
|
||||||
[options]="downloadTypes"
|
|
||||||
formControlName="downloadFileTypes"
|
|
||||||
></redaction-select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="half-flex-basis w-full pl-75">
|
|
||||||
<p class="heading download-includes">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.upload-settings.heading' | translate }}
|
|
||||||
</p>
|
|
||||||
<div class="iqser-input-group">
|
|
||||||
<mat-checkbox color="primary" formControlName="ocrByDefault">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.upload-settings.ocr-by-default' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
</div>
|
|
||||||
<div class="iqser-input-group">
|
|
||||||
<mat-checkbox color="primary" formControlName="removeWatermark">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.upload-settings.remove-watermark' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="!isDocumine">
|
|
||||||
<p class="heading download-includes">{{ 'add-edit-clone-dossier-template.form.hidden-text.heading' | translate }}</p>
|
|
||||||
<div class="hidden-elements">
|
|
||||||
<div class="iqser-input-group">
|
|
||||||
<mat-checkbox color="primary" formControlName="keepHiddenText">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.hidden-text.title' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
<div class="info mt-4">{{ 'add-edit-clone-dossier-template.form.hidden-text.description' | translate }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="iqser-input-group">
|
|
||||||
<mat-checkbox color="primary" formControlName="keepImageMetadata">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.image-metadata.title' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
<div class="info mt-4">{{ 'add-edit-clone-dossier-template.form.image-metadata.description' | translate }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="iqser-input-group">
|
|
||||||
<mat-checkbox color="primary" formControlName="keepOverlappingObjects">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.overlapping-elements.title' | translate }}
|
|
||||||
</mat-checkbox>
|
|
||||||
<div class="info mt-4">
|
|
||||||
{{ 'add-edit-clone-dossier-template.form.overlapping-elements.description' | translate }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="dialog-actions">
|
|
||||||
<iqser-icon-button
|
|
||||||
(action)="save()"
|
|
||||||
[disabled]="disabled"
|
|
||||||
[label]="'add-edit-clone-dossier-template.save' | translate"
|
|
||||||
[type]="iconButtonTypes.primary"
|
|
||||||
[buttonId]="'saveButton'"
|
|
||||||
></iqser-icon-button>
|
|
||||||
|
|
||||||
<iqser-help-button
|
|
||||||
*ngIf="!isDocumine && !!dossierTemplate"
|
|
||||||
[helpButtonKey]="'edit_clone_delete_dossier_templates'"
|
|
||||||
></iqser-help-button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<iqser-circle-button (action)="close()" class="dialog-close" icon="iqser:close"></iqser-circle-button>
|
|
||||||
</section>
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
.validity {
|
|
||||||
width: 230px;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
> div {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
margin-top: 16px;
|
|
||||||
|
|
||||||
mat-checkbox {
|
|
||||||
margin-right: 16px;
|
|
||||||
height: 100%;
|
|
||||||
align-items: center;
|
|
||||||
display: flex;
|
|
||||||
min-height: 42px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.iqser-input-group {
|
|
||||||
min-height: 42px;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
redaction-select {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.download-includes {
|
|
||||||
margin: 16px 0 10px;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden-elements {
|
|
||||||
display: flex;
|
|
||||||
gap: 40px;
|
|
||||||
|
|
||||||
.iqser-input-group {
|
|
||||||
margin-top: 0;
|
|
||||||
flex: 1;
|
|
||||||
|
|
||||||
mat-checkbox {
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info {
|
|
||||||
margin-left: 24px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.half-flex-basis {
|
|
||||||
flex-basis: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pl-75 {
|
|
||||||
padding: 0 0 0 75px;
|
|
||||||
}
|
|
||||||
@ -1,173 +0,0 @@
|
|||||||
import { HttpStatusCode } from '@angular/common/http';
|
|
||||||
import { Component, Inject } from '@angular/core';
|
|
||||||
import { AbstractControl, Validators } from '@angular/forms';
|
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|
||||||
import { BaseDialogComponent, getConfig } from '@iqser/common-ui';
|
|
||||||
import { DossierTemplate, IDossierTemplate } from '@red/domain';
|
|
||||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
|
||||||
import { downloadTypesTranslations } from '@translations/download-types-translations';
|
|
||||||
import { applyIntervalConstraints } from '@utils/date-inputs-utils';
|
|
||||||
import dayjs, { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
interface EditCloneTemplateData {
|
|
||||||
dossierTemplateId: string;
|
|
||||||
clone?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const downloadTypes = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(type => ({
|
|
||||||
key: type,
|
|
||||||
label: downloadTypesTranslations[type],
|
|
||||||
}));
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
templateUrl: './add-edit-clone-dossier-template-dialog.component.html',
|
|
||||||
styleUrls: ['./add-edit-clone-dossier-template-dialog.component.scss'],
|
|
||||||
})
|
|
||||||
export class AddEditCloneDossierTemplateDialogComponent extends BaseDialogComponent {
|
|
||||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
|
||||||
hasValidFrom: boolean;
|
|
||||||
hasValidTo: boolean;
|
|
||||||
readonly downloadTypes = downloadTypes;
|
|
||||||
readonly dossierTemplate: DossierTemplate;
|
|
||||||
private _previousValidFrom: Dayjs;
|
|
||||||
private _previousValidTo: Dayjs;
|
|
||||||
private _lastValidFrom: Dayjs;
|
|
||||||
private _lastValidTo: Dayjs;
|
|
||||||
|
|
||||||
get disabled(): boolean {
|
|
||||||
if (!this.data?.clone) {
|
|
||||||
return super.disabled;
|
|
||||||
}
|
|
||||||
return !this.valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
get translateParams() {
|
|
||||||
return {
|
|
||||||
type: this.dossierTemplate ? (this.data.clone ? 'clone' : 'edit') : 'create',
|
|
||||||
name: this.dossierTemplate?.name,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
private readonly _dossierTemplatesService: DossierTemplatesService,
|
|
||||||
protected readonly _dialogRef: MatDialogRef<AddEditCloneDossierTemplateDialogComponent>,
|
|
||||||
@Inject(MAT_DIALOG_DATA) readonly data: EditCloneTemplateData,
|
|
||||||
) {
|
|
||||||
super(_dialogRef, !!data && !data.clone);
|
|
||||||
this.dossierTemplate = this._dossierTemplatesService.find(this.data?.dossierTemplateId);
|
|
||||||
this.form = this.#getForm();
|
|
||||||
this.initialFormValue = this.form.getRawValue();
|
|
||||||
this.hasValidFrom = !!this.dossierTemplate?.validFrom;
|
|
||||||
this.hasValidTo = !!this.dossierTemplate?.validTo;
|
|
||||||
|
|
||||||
this._previousValidFrom = this._lastValidFrom = this.form.get('validFrom').value;
|
|
||||||
this._previousValidTo = this._lastValidTo = this.form.get('validTo').value;
|
|
||||||
}
|
|
||||||
|
|
||||||
toggleHasValid(extremity: string) {
|
|
||||||
if (extremity === 'from') {
|
|
||||||
this.hasValidFrom = !this.hasValidFrom;
|
|
||||||
this.form.controls['validFrom'].setValue(this.hasValidFrom ? this._lastValidFrom : null);
|
|
||||||
} else {
|
|
||||||
this.hasValidTo = !this.hasValidTo;
|
|
||||||
this.form.controls['validTo'].setValue(this.hasValidTo ? this._lastValidTo : null);
|
|
||||||
}
|
|
||||||
this.applyValidityIntervalConstraints();
|
|
||||||
}
|
|
||||||
|
|
||||||
async save() {
|
|
||||||
this._loadingService.start();
|
|
||||||
const dossierTemplate = {
|
|
||||||
dossierTemplateId: this.dossierTemplate?.dossierTemplateId,
|
|
||||||
...this.form.getRawValue(),
|
|
||||||
validFrom: this.hasValidFrom ? this.form.get('validFrom').value : null,
|
|
||||||
validTo: this.hasValidTo ? this.form.get('validTo').value : null,
|
|
||||||
} as IDossierTemplate;
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (this.data?.clone) {
|
|
||||||
await this._dossierTemplatesService.clone(this.dossierTemplate.id, dossierTemplate);
|
|
||||||
} else {
|
|
||||||
await this._dossierTemplatesService.createOrUpdate(dossierTemplate);
|
|
||||||
}
|
|
||||||
this._dialogRef.close(true);
|
|
||||||
} catch (error) {
|
|
||||||
if (error.status === HttpStatusCode.Conflict) {
|
|
||||||
this._toaster.error(_('add-edit-clone-dossier-template.error.conflict'), { error });
|
|
||||||
} else {
|
|
||||||
this._toaster.rawError(error.error.message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._loadingService.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
applyValidityIntervalConstraints(): void {
|
|
||||||
const formValue = this.form.value;
|
|
||||||
applyIntervalConstraints(formValue, this._previousValidFrom, this._previousValidTo, this.form, 'validFrom', 'validTo');
|
|
||||||
|
|
||||||
this._previousValidFrom = this.form.get('validFrom').value;
|
|
||||||
this._previousValidTo = this.form.get('validTo').value;
|
|
||||||
this._lastValidFrom = this._previousValidFrom || this._lastValidFrom;
|
|
||||||
this._lastValidTo = this._previousValidTo || this._lastValidTo;
|
|
||||||
}
|
|
||||||
|
|
||||||
#getForm() {
|
|
||||||
return this._formBuilder.group({
|
|
||||||
name: [this.#getCloneName(), Validators.required],
|
|
||||||
description: [this.dossierTemplate?.description],
|
|
||||||
validFrom: [
|
|
||||||
this.dossierTemplate?.validFrom ? dayjs(this.dossierTemplate?.validFrom) : null,
|
|
||||||
this.#requiredIfValidator(() => this.hasValidFrom),
|
|
||||||
],
|
|
||||||
validTo: [
|
|
||||||
this.dossierTemplate?.validTo ? dayjs(this.dossierTemplate?.validTo) : null,
|
|
||||||
this.#requiredIfValidator(() => this.hasValidTo),
|
|
||||||
],
|
|
||||||
applyDictionaryUpdatesToAllDossiersByDefault: [this.dossierTemplate?.applyDictionaryUpdatesToAllDossiersByDefault],
|
|
||||||
ocrByDefault: [this.dossierTemplate?.ocrByDefault],
|
|
||||||
removeWatermark: [this.dossierTemplate?.removeWatermark],
|
|
||||||
downloadFileTypes: [this.dossierTemplate?.downloadFileTypes || ['PREVIEW', 'REDACTED']],
|
|
||||||
keepHiddenText: [this.dossierTemplate?.keepHiddenText],
|
|
||||||
keepImageMetadata: [this.dossierTemplate?.keepImageMetadata],
|
|
||||||
keepOverlappingObjects: [this.dossierTemplate?.keepOverlappingObjects],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#getCloneName(): string {
|
|
||||||
if (!this.data?.clone) {
|
|
||||||
return this.dossierTemplate?.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
const templateName = this.dossierTemplate.name.trim();
|
|
||||||
let nameOfClonedTemplate: string = templateName.split('Copy of ').filter(n => n)[0];
|
|
||||||
nameOfClonedTemplate = nameOfClonedTemplate.split(/\(\s*\d+\s*\)$/)[0].trim();
|
|
||||||
const allTemplatesNames = this._dossierTemplatesService.all.map(t => t.name);
|
|
||||||
|
|
||||||
let clonesCount = 0;
|
|
||||||
for (const name of allTemplatesNames) {
|
|
||||||
const splitName = name.split(nameOfClonedTemplate);
|
|
||||||
const suffixRegExp = new RegExp(/^\(\s*\d+\s*\)$/);
|
|
||||||
if (splitName[0] === 'Copy of ' && (splitName[1].trim().match(suffixRegExp) || splitName[1] === '')) {
|
|
||||||
clonesCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clonesCount >= 1) {
|
|
||||||
return `Copy of ${nameOfClonedTemplate} (${clonesCount})`;
|
|
||||||
}
|
|
||||||
return `Copy of ${nameOfClonedTemplate}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
#requiredIfValidator(predicate) {
|
|
||||||
return (formControl: AbstractControl) => {
|
|
||||||
if (!formControl.parent) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (predicate()) {
|
|
||||||
return Validators.required(formControl);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -63,7 +63,7 @@ export class DossierTemplatesListingScreenComponent extends ListingComponent<Dos
|
|||||||
}
|
}
|
||||||
|
|
||||||
openAddDossierTemplateDialog() {
|
openAddDossierTemplateDialog() {
|
||||||
this._dialogService.openDialog('addEditCloneDossierTemplate');
|
this._dialogService.openDialog('addCloneDossierTemplate', {});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _deleteTemplates(templateIds = this.listingService.selected.map(d => d.dossierTemplateId)) {
|
private async _deleteTemplates(templateIds = this.listingService.selected.map(d => d.dossierTemplateId)) {
|
||||||
|
|||||||
@ -0,0 +1,54 @@
|
|||||||
|
<div *ngIf="componentContext$ | async as ctx">
|
||||||
|
<ng-container *ngIf="ctx.dossierTemplate && ctx.stats">
|
||||||
|
<div class="heading-xl mb-24">{{ ctx.dossierTemplate.name }}</div>
|
||||||
|
|
||||||
|
<div class="info-wrapper">
|
||||||
|
<div class="created-by-wrapper">
|
||||||
|
<div [translate]="'dossier-template-info-screen.created-by'" class="all-caps-label mb-8"></div>
|
||||||
|
|
||||||
|
<iqser-initials-avatar
|
||||||
|
[user]="ctx.dossierTemplate.createdBy || 'system'"
|
||||||
|
[withName]="true"
|
||||||
|
size="large"
|
||||||
|
></iqser-initials-avatar>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="small-label stats-subtitle mt-0">
|
||||||
|
<div>
|
||||||
|
<mat-icon svgIcon="red:status"></mat-icon>
|
||||||
|
{{ translations[ctx.dossierTemplate.dossierTemplateStatus] | translate }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<mat-icon svgIcon="red:dictionary"></mat-icon>
|
||||||
|
{{ 'dossier-template-info-screen.entities' | translate: { count: ctx.stats.numberOfDictionaries } }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="ctx.dossierTemplate.validFrom && ctx.dossierTemplate.validFrom | date: 'd MMM yyyy' as validFrom">
|
||||||
|
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
||||||
|
<span [innerHTML]="'dossier-template-info-screen.valid-from' | translate: { date: validFrom }"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="ctx.dossierTemplate.dateAdded | date: 'd MMM yyyy' as createdOn">
|
||||||
|
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
||||||
|
<span [innerHTML]="'dossier-template-info-screen.created-on' | translate: { date: createdOn }"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<mat-icon svgIcon="red:entries"></mat-icon>
|
||||||
|
{{ 'dossier-template-info-screen.entries' | translate: { count: ctx.stats.numberOfEntries } }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="ctx.dossierTemplate.validTo && ctx.dossierTemplate.validTo | date: 'd MMM yyyy' as validTo">
|
||||||
|
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
||||||
|
<span [innerHTML]="'dossier-template-info-screen.valid-to' | translate: { date: validTo }"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="ctx.dossierTemplate.dateModified | date: 'd MMM yyyy' as dateModified">
|
||||||
|
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
||||||
|
<span [innerHTML]="'dossier-template-info-screen.modified-on' | translate: { date: dateModified }"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
@use 'common-mixins';
|
||||||
|
|
||||||
|
.stats-subtitle {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, max-content);
|
||||||
|
grid-row-gap: 8px;
|
||||||
|
grid-column-gap: 8px;
|
||||||
|
height: fit-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-wrapper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.created-by-wrapper {
|
||||||
|
border-right: 1px solid var(--iqser-separator);
|
||||||
|
padding-right: 24px;
|
||||||
|
margin-right: 24px;
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
import { Component, Input, OnInit } from '@angular/core';
|
||||||
|
import { ContextComponent } from '@iqser/common-ui/lib/utils';
|
||||||
|
import { type DossierTemplate, type DossierTemplateStats } from '@red/domain';
|
||||||
|
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||||
|
import { DossierTemplateStatsService } from '@services/entity-services/dossier-template-stats.service';
|
||||||
|
import { dossierTemplateStatusTranslations } from '@translations/dossier-template-status-translations';
|
||||||
|
|
||||||
|
interface Context {
|
||||||
|
readonly dossierTemplate: DossierTemplate;
|
||||||
|
readonly stats: DossierTemplateStats;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'redaction-dossier-template-details',
|
||||||
|
templateUrl: './dossier-template-details.component.html',
|
||||||
|
styleUrls: ['./dossier-template-details.component.scss'],
|
||||||
|
})
|
||||||
|
export class DossierTemplateDetailsComponent extends ContextComponent<Context> implements OnInit {
|
||||||
|
readonly translations = dossierTemplateStatusTranslations;
|
||||||
|
|
||||||
|
@Input({ required: true }) dossierTemplateId: string;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
|
private readonly _dossierTemplateStatsService: DossierTemplateStatsService,
|
||||||
|
) {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
super._initContext({
|
||||||
|
dossierTemplate: this._dossierTemplatesService.getEntityChanged$(this.dossierTemplateId),
|
||||||
|
stats: this._dossierTemplateStatsService.watch$(this.dossierTemplateId),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,150 @@
|
|||||||
|
<div class="content-container" iqserHasScrollbar>
|
||||||
|
<form [formGroup]="form" class="dialog">
|
||||||
|
<div class="dialog-content">
|
||||||
|
<redaction-dossier-template-details [dossierTemplateId]="dossierTemplateId"></redaction-dossier-template-details>
|
||||||
|
|
||||||
|
<div class="heading-md mt-24 mb-8" translate="dossier-template-info-screen.title"></div>
|
||||||
|
|
||||||
|
<div class="iqser-input-group required w-300">
|
||||||
|
<label [translate]="'add-edit-clone-dossier-template.form.name'"></label>
|
||||||
|
<input
|
||||||
|
[placeholder]="'add-edit-clone-dossier-template.form.name-placeholder' | translate"
|
||||||
|
formControlName="name"
|
||||||
|
name="name"
|
||||||
|
type="text"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="iqser-input-group w-full">
|
||||||
|
<label [translate]="'add-edit-clone-dossier-template.form.description'"></label>
|
||||||
|
<textarea
|
||||||
|
[placeholder]="'add-edit-clone-dossier-template.form.description-placeholder' | translate"
|
||||||
|
formControlName="description"
|
||||||
|
name="description"
|
||||||
|
rows="4"
|
||||||
|
type="text"
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="validity mt-12">
|
||||||
|
<div>
|
||||||
|
<mat-checkbox (change)="toggleHasValid('from')" [checked]="hasValidFrom()" color="primary">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.valid-from' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<div class="iqser-input-group datepicker-wrapper">
|
||||||
|
<ng-container *ngIf="hasValidFrom()">
|
||||||
|
<input
|
||||||
|
(dateChange)="applyValidityIntervalConstraints()"
|
||||||
|
[matDatepicker]="fromPicker"
|
||||||
|
formControlName="validFrom"
|
||||||
|
placeholder="dd/mm/yy"
|
||||||
|
/>
|
||||||
|
<mat-datepicker-toggle [for]="fromPicker" matSuffix>
|
||||||
|
<mat-icon matDatepickerToggleIcon svgIcon="iqser:calendar"></mat-icon>
|
||||||
|
</mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #fromPicker></mat-datepicker>
|
||||||
|
</ng-container>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<mat-checkbox (change)="toggleHasValid('to')" [checked]="hasValidTo()" color="primary">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.valid-to' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
<div class="iqser-input-group datepicker-wrapper">
|
||||||
|
<ng-container *ngIf="hasValidTo()">
|
||||||
|
<input
|
||||||
|
(dateChange)="applyValidityIntervalConstraints()"
|
||||||
|
[matDatepicker]="toPicker"
|
||||||
|
formControlName="validTo"
|
||||||
|
placeholder="dd/mm/yy"
|
||||||
|
/>
|
||||||
|
<mat-datepicker-toggle [for]="toPicker" matSuffix>
|
||||||
|
<mat-icon matDatepickerToggleIcon svgIcon="iqser:calendar"></mat-icon>
|
||||||
|
</mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #toPicker></mat-datepicker>
|
||||||
|
</ng-container>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="!isDocumine" class="mt-24">
|
||||||
|
<div class="heading">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.apply-updates-default.heading' | translate }}
|
||||||
|
</div>
|
||||||
|
<div class="iqser-input-group">
|
||||||
|
<mat-checkbox color="primary" formControlName="applyDictionaryUpdatesToAllDossiersByDefault">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.apply-updates-default.description' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-24">
|
||||||
|
<div class="heading mb-14">{{ 'download-includes' | translate }}</div>
|
||||||
|
|
||||||
|
<redaction-select
|
||||||
|
[label]="
|
||||||
|
'download-type.label'
|
||||||
|
| translate
|
||||||
|
: {
|
||||||
|
length: form.controls['downloadFileTypes'].value.length
|
||||||
|
}
|
||||||
|
"
|
||||||
|
[options]="downloadTypes"
|
||||||
|
formControlName="downloadFileTypes"
|
||||||
|
></redaction-select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="!isDocumine" class="mt-24">
|
||||||
|
<div class="heading">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.upload-settings.heading' | translate }}
|
||||||
|
</div>
|
||||||
|
<div class="iqser-input-group">
|
||||||
|
<mat-checkbox color="primary" formControlName="ocrByDefault">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.upload-settings.ocr-by-default' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
</div>
|
||||||
|
<div class="iqser-input-group">
|
||||||
|
<mat-checkbox color="primary" formControlName="removeWatermark">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.upload-settings.remove-watermark' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="!isDocumine" class="mt-24 hidden-elements">
|
||||||
|
<div class="heading">{{ 'add-edit-clone-dossier-template.form.hidden-text.heading' | translate }}</div>
|
||||||
|
<div class="iqser-input-group">
|
||||||
|
<mat-checkbox color="primary" formControlName="keepHiddenText">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.hidden-text.title' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
<div class="info">{{ 'add-edit-clone-dossier-template.form.hidden-text.description' | translate }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="iqser-input-group">
|
||||||
|
<mat-checkbox color="primary" formControlName="keepImageMetadata">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.image-metadata.title' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
<div class="info">{{ 'add-edit-clone-dossier-template.form.image-metadata.description' | translate }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="iqser-input-group">
|
||||||
|
<mat-checkbox color="primary" formControlName="keepOverlappingObjects">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.overlapping-elements.title' | translate }}
|
||||||
|
</mat-checkbox>
|
||||||
|
<div class="info">
|
||||||
|
{{ 'add-edit-clone-dossier-template.form.overlapping-elements.description' | translate }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dialog-actions">
|
||||||
|
<iqser-icon-button
|
||||||
|
(action)="save()"
|
||||||
|
[buttonId]="'saveButton'"
|
||||||
|
[disabled]="disabled"
|
||||||
|
[label]="'add-edit-clone-dossier-template.save' | translate"
|
||||||
|
[type]="iconButtonTypes.primary"
|
||||||
|
></iqser-icon-button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
@use 'common-mixins';
|
||||||
|
|
||||||
|
//:host {
|
||||||
|
// display: flex;
|
||||||
|
// flex-grow: 1;
|
||||||
|
// overflow: hidden;
|
||||||
|
//}
|
||||||
|
|
||||||
|
.content-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: var(--iqser-alt-background);
|
||||||
|
overflow: auto;
|
||||||
|
@include common-mixins.scroll-bar;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats-subtitle {
|
||||||
|
margin-top: 16px;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, max-content);
|
||||||
|
grid-row-gap: 8px;
|
||||||
|
grid-column-gap: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.validity {
|
||||||
|
display: flex;
|
||||||
|
min-height: 42px;
|
||||||
|
gap: 40px;
|
||||||
|
|
||||||
|
> div {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
redaction-select {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden-elements .info {
|
||||||
|
margin-left: 24px;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
@ -0,0 +1,139 @@
|
|||||||
|
import { Component, OnInit, signal, untracked, WritableSignal } from '@angular/core';
|
||||||
|
import { BaseFormComponent, getConfig, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
|
||||||
|
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||||
|
import { DOSSIER_TEMPLATE_ID, type DossierTemplate, IDossierTemplate } from '@red/domain';
|
||||||
|
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||||
|
import { dossierTemplateStatusTranslations } from '@translations/dossier-template-status-translations';
|
||||||
|
import dayjs, { Dayjs } from 'dayjs';
|
||||||
|
import { HttpStatusCode } from '@angular/common/http';
|
||||||
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
import { applyIntervalConstraints } from '@utils/date-inputs-utils';
|
||||||
|
import { AbstractControl, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||||
|
import { downloadTypesTranslations } from '@translations/download-types-translations';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
const downloadTypes = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(type => ({
|
||||||
|
key: type,
|
||||||
|
label: downloadTypesTranslations[type],
|
||||||
|
}));
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
templateUrl: './dossier-template-info-screen.component.html',
|
||||||
|
styleUrls: ['./dossier-template-info-screen.component.scss'],
|
||||||
|
})
|
||||||
|
export class DossierTemplateInfoScreenComponent extends BaseFormComponent implements OnInit {
|
||||||
|
readonly translations = dossierTemplateStatusTranslations;
|
||||||
|
readonly iconButtonTypes = IconButtonTypes;
|
||||||
|
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||||
|
readonly downloadTypes = downloadTypes;
|
||||||
|
|
||||||
|
readonly dossierTemplate$: Observable<DossierTemplate>;
|
||||||
|
readonly dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||||
|
readonly hasValidFrom: WritableSignal<boolean>;
|
||||||
|
readonly hasValidTo: WritableSignal<boolean>;
|
||||||
|
private _previousValidFrom: Dayjs;
|
||||||
|
private _previousValidTo: Dayjs;
|
||||||
|
private _lastValidFrom: Dayjs;
|
||||||
|
private _lastValidTo: Dayjs;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
|
private readonly _loadingService: LoadingService,
|
||||||
|
private readonly _toaster: Toaster,
|
||||||
|
private readonly _formBuilder: UntypedFormBuilder,
|
||||||
|
) {
|
||||||
|
super();
|
||||||
|
this.dossierTemplate$ = this._dossierTemplatesService.get(this.dossierTemplateId);
|
||||||
|
this.form = this.#getForm(this._dossierTemplatesService.find(this.dossierTemplateId));
|
||||||
|
this.initialFormValue = this.form.getRawValue();
|
||||||
|
|
||||||
|
this.hasValidFrom = signal(!!this.form.get('validFrom').value);
|
||||||
|
this.hasValidTo = signal(!!this.form.get('validTo').value);
|
||||||
|
|
||||||
|
this._previousValidFrom = this._lastValidFrom = this.form.get('validFrom').value;
|
||||||
|
this._previousValidTo = this._lastValidTo = this.form.get('validTo').value;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this._loadingService.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleHasValid(extremity: 'from' | 'to') {
|
||||||
|
if (extremity === 'from') {
|
||||||
|
const prevValue = untracked(this.hasValidFrom);
|
||||||
|
this.hasValidFrom.set(!prevValue);
|
||||||
|
this.form.controls['validFrom'].setValue(!prevValue ? this._lastValidFrom : null);
|
||||||
|
} else {
|
||||||
|
const prevValue = untracked(this.hasValidTo);
|
||||||
|
this.hasValidTo.set(!prevValue);
|
||||||
|
this.form.controls['validTo'].setValue(!prevValue ? this._lastValidTo : null);
|
||||||
|
}
|
||||||
|
this.applyValidityIntervalConstraints();
|
||||||
|
}
|
||||||
|
|
||||||
|
async save() {
|
||||||
|
this._loadingService.start();
|
||||||
|
const dossierTemplate = {
|
||||||
|
dossierTemplateId: this.dossierTemplateId,
|
||||||
|
...this.form.getRawValue(),
|
||||||
|
validFrom: this.hasValidFrom() ? this.form.get('validFrom').value : null,
|
||||||
|
validTo: this.hasValidTo() ? this.form.get('validTo').value : null,
|
||||||
|
} as IDossierTemplate;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await this._dossierTemplatesService.createOrUpdate(dossierTemplate);
|
||||||
|
this.initialFormValue = this.form.getRawValue();
|
||||||
|
} catch (error) {
|
||||||
|
if (error.status === HttpStatusCode.Conflict) {
|
||||||
|
this._toaster.error(_('add-edit-clone-dossier-template.error.conflict'), { error });
|
||||||
|
} else {
|
||||||
|
this._toaster.rawError(error.error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._loadingService.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
applyValidityIntervalConstraints(): void {
|
||||||
|
const formValue = this.form.value;
|
||||||
|
applyIntervalConstraints(formValue, this._previousValidFrom, this._previousValidTo, this.form, 'validFrom', 'validTo');
|
||||||
|
|
||||||
|
this._previousValidFrom = this.form.get('validFrom').value;
|
||||||
|
this._previousValidTo = this.form.get('validTo').value;
|
||||||
|
this._lastValidFrom = this._previousValidFrom || this._lastValidFrom;
|
||||||
|
this._lastValidTo = this._previousValidTo || this._lastValidTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
#getForm(dossierTemplate: DossierTemplate) {
|
||||||
|
return this._formBuilder.group({
|
||||||
|
name: [dossierTemplate.name, Validators.required],
|
||||||
|
description: [dossierTemplate?.description],
|
||||||
|
validFrom: [
|
||||||
|
dossierTemplate?.validFrom ? dayjs(dossierTemplate?.validFrom) : null,
|
||||||
|
this.#requiredIfValidator(() => this.hasValidFrom()),
|
||||||
|
],
|
||||||
|
validTo: [
|
||||||
|
dossierTemplate?.validTo ? dayjs(dossierTemplate?.validTo) : null,
|
||||||
|
this.#requiredIfValidator(() => this.hasValidTo()),
|
||||||
|
],
|
||||||
|
applyDictionaryUpdatesToAllDossiersByDefault: [dossierTemplate?.applyDictionaryUpdatesToAllDossiersByDefault],
|
||||||
|
ocrByDefault: [dossierTemplate?.ocrByDefault],
|
||||||
|
removeWatermark: [dossierTemplate?.removeWatermark],
|
||||||
|
downloadFileTypes: [dossierTemplate?.downloadFileTypes || ['PREVIEW', 'REDACTED']],
|
||||||
|
keepHiddenText: [dossierTemplate?.keepHiddenText],
|
||||||
|
keepImageMetadata: [dossierTemplate?.keepImageMetadata],
|
||||||
|
keepOverlappingObjects: [dossierTemplate?.keepOverlappingObjects],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#requiredIfValidator(predicate: () => boolean) {
|
||||||
|
return (formControl: AbstractControl) => {
|
||||||
|
if (!formControl.parent) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (predicate()) {
|
||||||
|
return Validators.required(formControl);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,16 +1,18 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { DossierTemplateInfoScreenComponent } from './info-screen/dossier-template-info-screen.component';
|
import { DossierTemplateInfoScreenComponent } from './dossier-template-info-screen/dossier-template-info-screen.component';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { SharedModule } from '@shared/shared.module';
|
import { SharedModule } from '@shared/shared.module';
|
||||||
import { HasScrollbarDirective, IqserHelpModeModule } from '@iqser/common-ui';
|
import { CircleButtonComponent, HasScrollbarDirective, IconButtonComponent, IqserHelpModeModule } from '@iqser/common-ui';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||||
|
import { SelectComponent } from '@shared/components/select/select.component';
|
||||||
|
import { DossierTemplateDetailsComponent } from './dossier-template-details/dossier-template-details.component';
|
||||||
|
|
||||||
const routes = [{ path: '', component: DossierTemplateInfoScreenComponent }];
|
const routes = [{ path: '', component: DossierTemplateInfoScreenComponent }];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [DossierTemplateInfoScreenComponent],
|
declarations: [DossierTemplateInfoScreenComponent, DossierTemplateDetailsComponent],
|
||||||
imports: [
|
imports: [
|
||||||
RouterModule.forChild(routes),
|
RouterModule.forChild(routes),
|
||||||
CommonModule,
|
CommonModule,
|
||||||
@ -19,6 +21,9 @@ const routes = [{ path: '', component: DossierTemplateInfoScreenComponent }];
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
IqserHelpModeModule,
|
IqserHelpModeModule,
|
||||||
HasScrollbarDirective,
|
HasScrollbarDirective,
|
||||||
|
CircleButtonComponent,
|
||||||
|
IconButtonComponent,
|
||||||
|
SelectComponent,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class DossierTemplateInfoModule {}
|
export class DossierTemplateInfoModule {}
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
<div *ngIf="componentContext$ | async as ctx" class="content-container" iqserHasScrollbar>
|
|
||||||
<div class="heading-xl">{{ ctx.dossierTemplate.name }}</div>
|
|
||||||
|
|
||||||
<div [translate]="'dossier-template-info-screen.created-by'" class="all-caps-label mt-24 mb-8"></div>
|
|
||||||
|
|
||||||
<iqser-initials-avatar [user]="ctx.dossierTemplate.createdBy || 'system'" [withName]="true" size="large"></iqser-initials-avatar>
|
|
||||||
|
|
||||||
<div class="small-label stats-subtitle">
|
|
||||||
<div>
|
|
||||||
<mat-icon svgIcon="red:status"></mat-icon>
|
|
||||||
{{ translations[ctx.dossierTemplate.dossierTemplateStatus] | translate }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<mat-icon svgIcon="red:dictionary"></mat-icon>
|
|
||||||
{{ 'dossier-template-info-screen.entities' | translate : { count: ctx.stats.numberOfDictionaries } }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="ctx.dossierTemplate.validTo && ctx.dossierTemplate.validFrom | date : 'd MMM yyyy' as validFrom">
|
|
||||||
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
|
||||||
<span [innerHTML]="'dossier-template-info-screen.valid-from' | translate : { date: validFrom }"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="ctx.dossierTemplate.dateAdded | date : 'd MMM yyyy' as createdOn">
|
|
||||||
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
|
||||||
<span [innerHTML]="'dossier-template-info-screen.created-on' | translate : { date: createdOn }"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<mat-icon svgIcon="red:entries"></mat-icon>
|
|
||||||
{{ 'dossier-template-info-screen.entries' | translate : { count: ctx.stats.numberOfEntries } }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="ctx.dossierTemplate.validFrom && ctx.dossierTemplate.validTo | date : 'd MMM yyyy' as validTo">
|
|
||||||
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
|
||||||
<span [innerHTML]="'dossier-template-info-screen.valid-to' | translate : { date: validTo }"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="ctx.dossierTemplate.dateModified | date : 'd MMM yyyy' as dateModified">
|
|
||||||
<mat-icon svgIcon="iqser:calendar"></mat-icon>
|
|
||||||
<span [innerHTML]="'dossier-template-info-screen.modified-on' | translate : { date: dateModified }"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="template-description">{{ ctx.dossierTemplate.description }}</div>
|
|
||||||
</div>
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
@use 'common-mixins';
|
|
||||||
|
|
||||||
:host {
|
|
||||||
display: flex;
|
|
||||||
flex-grow: 1;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content-container {
|
|
||||||
flex: 1;
|
|
||||||
padding: 30px;
|
|
||||||
overflow: auto;
|
|
||||||
@include common-mixins.scroll-bar;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-top: 40px;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.stats-subtitle {
|
|
||||||
margin-top: 16px;
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(3, max-content);
|
|
||||||
grid-row-gap: 8px;
|
|
||||||
grid-column-gap: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.template-description {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
import { Component, inject, OnInit } from '@angular/core';
|
|
||||||
import { LoadingService } from '@iqser/common-ui';
|
|
||||||
import { ContextComponent, getParam } from '@iqser/common-ui/lib/utils';
|
|
||||||
import { DOSSIER_TEMPLATE_ID, type DossierTemplate, type DossierTemplateStats } from '@red/domain';
|
|
||||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
|
||||||
import { DossierTemplateStatsService } from '@services/entity-services/dossier-template-stats.service';
|
|
||||||
import { dossierTemplateStatusTranslations } from '@translations/dossier-template-status-translations';
|
|
||||||
|
|
||||||
interface Context {
|
|
||||||
readonly dossierTemplate: DossierTemplate;
|
|
||||||
readonly stats: DossierTemplateStats;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
templateUrl: './dossier-template-info-screen.component.html',
|
|
||||||
styleUrls: ['./dossier-template-info-screen.component.scss'],
|
|
||||||
})
|
|
||||||
export class DossierTemplateInfoScreenComponent extends ContextComponent<Context> implements OnInit {
|
|
||||||
readonly #loadingService = inject(LoadingService);
|
|
||||||
readonly translations = dossierTemplateStatusTranslations;
|
|
||||||
|
|
||||||
constructor(dossierTemplatesService: DossierTemplatesService, dossierTemplateStatsService: DossierTemplateStatsService) {
|
|
||||||
super();
|
|
||||||
const dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
|
||||||
super._initContext({
|
|
||||||
dossierTemplate: dossierTemplatesService.getEntityChanged$(dossierTemplateId),
|
|
||||||
stats: dossierTemplateStatsService.watch$(dossierTemplateId),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
this.#loadingService.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,7 +1,6 @@
|
|||||||
import { Injectable, TemplateRef } from '@angular/core';
|
import { Injectable, TemplateRef } from '@angular/core';
|
||||||
import { MatDialog } from '@angular/material/dialog';
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
import { AddEntityDialogComponent } from '../dialogs/add-entity-dialog/add-entity-dialog.component';
|
import { AddEntityDialogComponent } from '../dialogs/add-entity-dialog/add-entity-dialog.component';
|
||||||
import { AddEditCloneDossierTemplateDialogComponent } from '../dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component';
|
|
||||||
import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component';
|
import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component';
|
||||||
import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component';
|
import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component';
|
||||||
import { AddEditUserDialogComponent } from '../dialogs/add-edit-user-dialog/add-edit-user-dialog.component';
|
import { AddEditUserDialogComponent } from '../dialogs/add-edit-user-dialog/add-edit-user-dialog.component';
|
||||||
@ -23,6 +22,7 @@ import { IDossierAttributeConfig, IFileAttributeConfig, IReportTemplate } from '
|
|||||||
import { ReportTemplateService } from '@services/report-template.service';
|
import { ReportTemplateService } from '@services/report-template.service';
|
||||||
import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component';
|
import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component';
|
||||||
import { AuditInfoDialogComponent } from '../dialogs/audit-info-dialog/audit-info-dialog.component';
|
import { AuditInfoDialogComponent } from '../dialogs/audit-info-dialog/audit-info-dialog.component';
|
||||||
|
import { AddCloneDossierTemplateDialogComponent } from '../dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component';
|
||||||
|
|
||||||
type DialogType =
|
type DialogType =
|
||||||
| 'confirm'
|
| 'confirm'
|
||||||
@ -30,7 +30,7 @@ type DialogType =
|
|||||||
| 'editColor'
|
| 'editColor'
|
||||||
| 'addEditUser'
|
| 'addEditUser'
|
||||||
| 'smtpAuthConfig'
|
| 'smtpAuthConfig'
|
||||||
| 'addEditCloneDossierTemplate'
|
| 'addCloneDossierTemplate'
|
||||||
| 'auditInfo'
|
| 'auditInfo'
|
||||||
| 'uploadDictionary'
|
| 'uploadDictionary'
|
||||||
| 'configureCertificate';
|
| 'configureCertificate';
|
||||||
@ -58,9 +58,9 @@ export class AdminDialogService extends DialogService<DialogType> {
|
|||||||
component: SmtpAuthDialogComponent,
|
component: SmtpAuthDialogComponent,
|
||||||
dialogConfig: { autoFocus: true },
|
dialogConfig: { autoFocus: true },
|
||||||
},
|
},
|
||||||
addEditCloneDossierTemplate: {
|
addCloneDossierTemplate: {
|
||||||
component: AddEditCloneDossierTemplateDialogComponent,
|
component: AddCloneDossierTemplateDialogComponent,
|
||||||
dialogConfig: { width: '950px', autoFocus: true },
|
dialogConfig: { autoFocus: true },
|
||||||
},
|
},
|
||||||
uploadDictionary: {
|
uploadDictionary: {
|
||||||
component: UploadDictionaryDialogComponent,
|
component: UploadDictionaryDialogComponent,
|
||||||
|
|||||||
@ -8,15 +8,15 @@
|
|||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
|
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="openEditCloneDossierTemplateDialog(true)"
|
(action)="openCloneDossierTemplateDialog()"
|
||||||
[buttonId]="'copy-dossier-template-btn'"
|
[buttonId]="'copy-dossier-template-btn'"
|
||||||
[tooltip]="'dossier-templates-listing.action.clone' | translate"
|
[tooltip]="'dossier-templates-listing.action.clone' | translate"
|
||||||
icon="iqser:copy"
|
icon="iqser:copy"
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
|
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="openEditCloneDossierTemplateDialog()"
|
|
||||||
[buttonId]="'edit-dossier-template-btn'"
|
[buttonId]="'edit-dossier-template-btn'"
|
||||||
|
[routerLink]="dossierTemplate.routerLink"
|
||||||
[tooltip]="'dossier-templates-listing.action.edit' | translate"
|
[tooltip]="'dossier-templates-listing.action.edit' | translate"
|
||||||
icon="iqser:edit"
|
icon="iqser:edit"
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { NgIf } from '@angular/common';
|
import { NgIf } from '@angular/common';
|
||||||
import { Component, Input, OnInit } from '@angular/core';
|
import { Component, Input, OnInit } from '@angular/core';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router, RouterLink } from '@angular/router';
|
||||||
import { CircleButtonComponent, IqserHelpModeModule, LoadingService } from '@iqser/common-ui';
|
import { CircleButtonComponent, IqserHelpModeModule, LoadingService } from '@iqser/common-ui';
|
||||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { DOSSIER_TEMPLATE_ID, type User } from '@red/domain';
|
import { DOSSIER_TEMPLATE_ID, DossierTemplate, type User } from '@red/domain';
|
||||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||||
import { firstValueFrom } from 'rxjs';
|
import { firstValueFrom } from 'rxjs';
|
||||||
import { AdminDialogService } from '../../../services/admin-dialog.service';
|
import { AdminDialogService } from '../../../services/admin-dialog.service';
|
||||||
@ -14,12 +14,13 @@ import { AdminDialogService } from '../../../services/admin-dialog.service';
|
|||||||
templateUrl: './dossier-template-actions.component.html',
|
templateUrl: './dossier-template-actions.component.html',
|
||||||
styleUrls: ['./dossier-template-actions.component.scss'],
|
styleUrls: ['./dossier-template-actions.component.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgIf, IqserHelpModeModule, CircleButtonComponent, TranslateModule],
|
imports: [NgIf, IqserHelpModeModule, CircleButtonComponent, TranslateModule, RouterLink],
|
||||||
})
|
})
|
||||||
export class DossierTemplateActionsComponent implements OnInit {
|
export class DossierTemplateActionsComponent implements OnInit {
|
||||||
@Input() dossierTemplateId: string;
|
@Input() dossierTemplateId: string;
|
||||||
|
|
||||||
readonly currentUser = getCurrentUser<User>();
|
readonly currentUser = getCurrentUser<User>();
|
||||||
|
dossierTemplate: DossierTemplate;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _router: Router,
|
private readonly _router: Router,
|
||||||
@ -31,10 +32,11 @@ export class DossierTemplateActionsComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.dossierTemplateId ??= this._route.snapshot.paramMap.get(DOSSIER_TEMPLATE_ID);
|
this.dossierTemplateId ??= this._route.snapshot.paramMap.get(DOSSIER_TEMPLATE_ID);
|
||||||
|
this.dossierTemplate = this._dossierTemplatesService.find(this.dossierTemplateId);
|
||||||
}
|
}
|
||||||
|
|
||||||
openEditCloneDossierTemplateDialog(clone: boolean = false) {
|
openCloneDossierTemplateDialog() {
|
||||||
this._dialogService.openDialog('addEditCloneDossierTemplate', { dossierTemplateId: this.dossierTemplateId, clone });
|
this._dialogService.openDialog('addCloneDossierTemplate', { dossierTemplateId: this.dossierTemplateId });
|
||||||
}
|
}
|
||||||
|
|
||||||
openDeleteDossierTemplateDialog() {
|
openDeleteDossierTemplateDialog() {
|
||||||
|
|||||||
@ -106,14 +106,14 @@
|
|||||||
<div class="dialog-actions">
|
<div class="dialog-actions">
|
||||||
<iqser-icon-button
|
<iqser-icon-button
|
||||||
(action)="save()"
|
(action)="save()"
|
||||||
|
[buttonId]="'saveButton'"
|
||||||
[disabled]="disabled"
|
[disabled]="disabled"
|
||||||
[label]="'add-dossier-dialog.actions.save' | translate"
|
[label]="'add-dossier-dialog.actions.save' | translate"
|
||||||
[type]="iconButtonTypes.primary"
|
[type]="iconButtonTypes.primary"
|
||||||
[buttonId]="'saveButton'"
|
|
||||||
></iqser-icon-button>
|
></iqser-icon-button>
|
||||||
|
|
||||||
<iqser-icon-button
|
<iqser-icon-button
|
||||||
(action)="save({ addMembers: true })"
|
(action)="save({ nextAction: true })"
|
||||||
[buttonId]="'createDossierEditTeamButton'"
|
[buttonId]="'createDossierEditTeamButton'"
|
||||||
[disabled]="disabled"
|
[disabled]="disabled"
|
||||||
[label]="'add-dossier-dialog.actions.save-and-add-members' | translate"
|
[label]="'add-dossier-dialog.actions.save-and-add-members' | translate"
|
||||||
|
|||||||
@ -79,7 +79,7 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On
|
|||||||
const savedDossier = await firstValueFrom(this._activeDossiersService.createOrUpdate(this.#formToObject()));
|
const savedDossier = await firstValueFrom(this._activeDossiersService.createOrUpdate(this.#formToObject()));
|
||||||
if (savedDossier) {
|
if (savedDossier) {
|
||||||
await this._router.navigate([savedDossier.routerLink]);
|
await this._router.navigate([savedDossier.routerLink]);
|
||||||
if (options?.addMembers) {
|
if (options?.nextAction) {
|
||||||
this._dialogService.openDialog('editDossier', {
|
this._dialogService.openDialog('editDossier', {
|
||||||
dossierId: savedDossier.id,
|
dossierId: savedDossier.id,
|
||||||
section: 'members',
|
section: 'members',
|
||||||
|
|||||||
@ -70,13 +70,15 @@ export class DossierTemplatesService extends EntitiesService<IDossierTemplate, D
|
|||||||
}
|
}
|
||||||
|
|
||||||
async createOrUpdate(body: IDossierTemplate) {
|
async createOrUpdate(body: IDossierTemplate) {
|
||||||
await firstValueFrom(this._post(body));
|
const dossierTemplate = await firstValueFrom(this._post(body));
|
||||||
return await firstValueFrom(this.loadAll());
|
await firstValueFrom(this.loadAll());
|
||||||
|
return this.find(dossierTemplate.dossierTemplateId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async clone(dossierTemplateId: string, body: IDossierTemplate) {
|
async clone(dossierTemplateId: string, body: IDossierTemplate) {
|
||||||
await firstValueFrom(this._post(body, `${this._defaultModelPath}/${dossierTemplateId}/clone`));
|
const dossierTemplate = await firstValueFrom(this._post(body, `${this._defaultModelPath}/${dossierTemplateId}/clone`));
|
||||||
return await firstValueFrom(this.loadAll());
|
await firstValueFrom(this.loadAll());
|
||||||
|
return this.find(dossierTemplate.dossierTemplateId);
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshDossierTemplate(dossierTemplateId: string): Observable<any> {
|
refreshDossierTemplate(dossierTemplateId: string): Observable<any> {
|
||||||
|
|||||||
@ -26,6 +26,11 @@
|
|||||||
"title": "Add annotation"
|
"title": "Add annotation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"add-clone-dossier-template": {
|
||||||
|
"save": "",
|
||||||
|
"save-and-edit": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
"add-dossier-dialog": {
|
"add-dossier-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"save": "Speichern",
|
"save": "Speichern",
|
||||||
@ -87,8 +92,7 @@
|
|||||||
"valid-from": "Gültig ab",
|
"valid-from": "Gültig ab",
|
||||||
"valid-to": "Gültig bis"
|
"valid-to": "Gültig bis"
|
||||||
},
|
},
|
||||||
"save": "Dossier-Vorlage speichern",
|
"save": "Dossier-Vorlage speichern"
|
||||||
"title": "{type, select, edit{Dossier-Vorlage {name} bearbeiten} create{Dossier-Vorlage erstellen} clone{} other{}}"
|
|
||||||
},
|
},
|
||||||
"add-edit-dossier-attribute": {
|
"add-edit-dossier-attribute": {
|
||||||
"error": {
|
"error": {
|
||||||
@ -250,9 +254,6 @@
|
|||||||
"watermarks": "Watermarks"
|
"watermarks": "Watermarks"
|
||||||
},
|
},
|
||||||
"analysis-disabled": "",
|
"analysis-disabled": "",
|
||||||
"annotation": {
|
|
||||||
"pending": "(Pending analysis)"
|
|
||||||
},
|
|
||||||
"annotation-actions": {
|
"annotation-actions": {
|
||||||
"accept-recommendation": {
|
"accept-recommendation": {
|
||||||
"label": "Empfehlung annehmen"
|
"label": "Empfehlung annehmen"
|
||||||
@ -307,14 +308,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!"
|
||||||
|
},
|
||||||
"undo": {
|
"undo": {
|
||||||
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
|
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
|
||||||
"success": "erfolgreich Rückgängig gemacht"
|
"success": "erfolgreich Rückgängig gemacht"
|
||||||
@ -327,15 +328,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"
|
||||||
},
|
},
|
||||||
@ -367,6 +368,9 @@
|
|||||||
"skipped": "Übersprungen",
|
"skipped": "Übersprungen",
|
||||||
"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."
|
||||||
@ -572,18 +576,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": {
|
||||||
@ -592,6 +592,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?",
|
||||||
@ -681,6 +685,25 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dev-mode": "DEV",
|
"dev-mode": "DEV",
|
||||||
|
"dialog-defaults-form": {
|
||||||
|
"extra-option-label": "",
|
||||||
|
"hint": {
|
||||||
|
"add-dialog": "",
|
||||||
|
"remove-dialog": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"recommendation": {
|
||||||
|
"remove-dialog": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"redaction": {
|
||||||
|
"add-dialog": "",
|
||||||
|
"remove-dialog": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"system-default": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
"dictionary": "Wörterbuch",
|
"dictionary": "Wörterbuch",
|
||||||
"dictionary-overview": {
|
"dictionary-overview": {
|
||||||
"compare": {
|
"compare": {
|
||||||
@ -936,13 +959,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": {
|
||||||
@ -1000,6 +1023,7 @@
|
|||||||
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
||||||
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
||||||
"modified-on": "Modified on: {date}",
|
"modified-on": "Modified on: {date}",
|
||||||
|
"title": "",
|
||||||
"valid-from": "Valid from: {date}",
|
"valid-from": "Valid from: {date}",
|
||||||
"valid-to": "Valid to: {date}"
|
"valid-to": "Valid to: {date}"
|
||||||
},
|
},
|
||||||
@ -1011,14 +1035,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",
|
||||||
@ -1054,6 +1070,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.",
|
||||||
@ -1249,15 +1273,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!"
|
||||||
@ -1272,19 +1287,28 @@
|
|||||||
"warning-text": "Warning: experimental feature!",
|
"warning-text": "Warning: experimental feature!",
|
||||||
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules"
|
"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": {
|
"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": {
|
||||||
@ -1302,12 +1326,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",
|
||||||
@ -1318,6 +1336,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": {
|
||||||
@ -1536,15 +1560,6 @@
|
|||||||
"csv": "File attributes were imported successfully from uploaded CSV file."
|
"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-menu": {
|
||||||
"filter-options": "Filteroptionen",
|
"filter-options": "Filteroptionen",
|
||||||
"filter-types": "Filter",
|
"filter-types": "Filter",
|
||||||
@ -1554,6 +1569,15 @@
|
|||||||
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
|
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
|
||||||
"with-comments": "Nur Anmerkungen mit Kommentaren"
|
"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": {
|
"filters": {
|
||||||
"assigned-people": "Beauftragt",
|
"assigned-people": "Beauftragt",
|
||||||
"documents-status": "Documents state",
|
"documents-status": "Documents state",
|
||||||
@ -1824,13 +1848,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",
|
||||||
@ -1844,6 +1861,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",
|
||||||
@ -1861,7 +1879,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",
|
||||||
@ -1869,6 +1886,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",
|
||||||
@ -1960,16 +1984,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": {
|
||||||
@ -2193,12 +2217,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",
|
||||||
@ -2222,6 +2240,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": {
|
||||||
|
|||||||
@ -26,6 +26,11 @@
|
|||||||
"title": "Add annotation"
|
"title": "Add annotation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"add-clone-dossier-template": {
|
||||||
|
"save": "{type, select, clone{Clone} other{Save}}",
|
||||||
|
"save-and-edit": "{type, select, clone{Clone} other{Save}} and edit",
|
||||||
|
"title": "{type, select, clone{Clone {dossierTemplateName}} other{Create dossier template}}"
|
||||||
|
},
|
||||||
"add-dossier-dialog": {
|
"add-dossier-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
@ -87,8 +92,7 @@
|
|||||||
"valid-from": "Valid from",
|
"valid-from": "Valid from",
|
||||||
"valid-to": "Valid to"
|
"valid-to": "Valid to"
|
||||||
},
|
},
|
||||||
"save": "Save dossier template",
|
"save": "Save dossier template"
|
||||||
"title": "{type, select, edit{Edit {name}} create{Create} clone{Clone} other{}} dossier template"
|
|
||||||
},
|
},
|
||||||
"add-edit-dossier-attribute": {
|
"add-edit-dossier-attribute": {
|
||||||
"error": {
|
"error": {
|
||||||
@ -1019,6 +1023,7 @@
|
|||||||
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
||||||
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
||||||
"modified-on": "Modified on: {date}",
|
"modified-on": "Modified on: {date}",
|
||||||
|
"title": "Edit dossier template",
|
||||||
"valid-from": "Valid from: {date}",
|
"valid-from": "Valid from: {date}",
|
||||||
"valid-to": "Valid to: {date}"
|
"valid-to": "Valid to: {date}"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -26,6 +26,11 @@
|
|||||||
"title": "Add annotation"
|
"title": "Add annotation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"add-clone-dossier-template": {
|
||||||
|
"save": "",
|
||||||
|
"save-and-edit": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
"add-dossier-dialog": {
|
"add-dossier-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"save": "Speichern",
|
"save": "Speichern",
|
||||||
@ -87,8 +92,7 @@
|
|||||||
"valid-from": "Gültig ab",
|
"valid-from": "Gültig ab",
|
||||||
"valid-to": "Gültig bis"
|
"valid-to": "Gültig bis"
|
||||||
},
|
},
|
||||||
"save": "Dossier-Vorlage speichern",
|
"save": "Dossier-Vorlage speichern"
|
||||||
"title": "{type, select, edit{Dossier-Vorlage {name} bearbeiten} create{Dossier-Vorlage erstellen} clone{} other{}}"
|
|
||||||
},
|
},
|
||||||
"add-edit-dossier-attribute": {
|
"add-edit-dossier-attribute": {
|
||||||
"error": {
|
"error": {
|
||||||
@ -250,9 +254,6 @@
|
|||||||
"watermarks": "Watermarks"
|
"watermarks": "Watermarks"
|
||||||
},
|
},
|
||||||
"analysis-disabled": "Analysis disabled",
|
"analysis-disabled": "Analysis disabled",
|
||||||
"annotation": {
|
|
||||||
"pending": "(Pending analysis)"
|
|
||||||
},
|
|
||||||
"annotation-actions": {
|
"annotation-actions": {
|
||||||
"accept-recommendation": {
|
"accept-recommendation": {
|
||||||
"label": "Empfehlung annehmen"
|
"label": "Empfehlung annehmen"
|
||||||
@ -307,14 +308,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!"
|
||||||
|
},
|
||||||
"undo": {
|
"undo": {
|
||||||
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
|
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
|
||||||
"success": "erfolgreich Rückgängig gemacht"
|
"success": "erfolgreich Rückgängig gemacht"
|
||||||
@ -327,15 +328,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"
|
||||||
},
|
},
|
||||||
@ -367,6 +368,9 @@
|
|||||||
"skipped": "Übersprungen",
|
"skipped": "Übersprungen",
|
||||||
"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."
|
||||||
@ -572,18 +576,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 components.",
|
"question": "Analysis required to detect new components.",
|
||||||
"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": {
|
||||||
@ -592,6 +592,10 @@
|
|||||||
"question": "Analysis required to detect new components for at least one file.",
|
"question": "Analysis required to detect new components 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?",
|
||||||
@ -681,6 +685,25 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dev-mode": "DEV",
|
"dev-mode": "DEV",
|
||||||
|
"dialog-defaults-form": {
|
||||||
|
"extra-option-label": "",
|
||||||
|
"hint": {
|
||||||
|
"add-dialog": "",
|
||||||
|
"remove-dialog": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"recommendation": {
|
||||||
|
"remove-dialog": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"redaction": {
|
||||||
|
"add-dialog": "",
|
||||||
|
"remove-dialog": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"system-default": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
"dictionary": "Wörterbuch",
|
"dictionary": "Wörterbuch",
|
||||||
"dictionary-overview": {
|
"dictionary-overview": {
|
||||||
"compare": {
|
"compare": {
|
||||||
@ -936,13 +959,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": {
|
||||||
@ -1000,6 +1023,7 @@
|
|||||||
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
||||||
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
||||||
"modified-on": "Modified on: {date}",
|
"modified-on": "Modified on: {date}",
|
||||||
|
"title": "",
|
||||||
"valid-from": "Valid from: {date}",
|
"valid-from": "Valid from: {date}",
|
||||||
"valid-to": "Valid to: {date}"
|
"valid-to": "Valid to: {date}"
|
||||||
},
|
},
|
||||||
@ -1011,14 +1035,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",
|
||||||
@ -1054,6 +1070,14 @@
|
|||||||
"title": "{length} dossier {length, plural, one{template} other{templates}}"
|
"title": "{length} dossier {length, plural, one{template} other{templates}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"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.",
|
||||||
@ -1249,15 +1273,6 @@
|
|||||||
"title": "{length} {length, plural, one{entity} other{entities}}"
|
"title": "{length} {length, plural, one{entity} other{entities}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"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!"
|
||||||
@ -1272,19 +1287,28 @@
|
|||||||
"warning-text": "Warning: experimental feature!",
|
"warning-text": "Warning: experimental feature!",
|
||||||
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules"
|
"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": {
|
"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": {
|
||||||
@ -1302,12 +1326,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",
|
||||||
@ -1318,6 +1336,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": {
|
||||||
@ -1536,15 +1560,6 @@
|
|||||||
"csv": "File attributes were imported successfully from uploaded CSV file."
|
"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-menu": {
|
||||||
"filter-options": "Filteroptionen",
|
"filter-options": "Filteroptionen",
|
||||||
"filter-types": "Filter",
|
"filter-types": "Filter",
|
||||||
@ -1554,6 +1569,15 @@
|
|||||||
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
|
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
|
||||||
"with-comments": "Nur Anmerkungen mit Kommentaren"
|
"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": {
|
"filters": {
|
||||||
"assigned-people": "Beauftragt",
|
"assigned-people": "Beauftragt",
|
||||||
"documents-status": "Documents state",
|
"documents-status": "Documents state",
|
||||||
@ -1824,13 +1848,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",
|
||||||
@ -1844,6 +1861,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",
|
||||||
@ -1861,7 +1879,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",
|
||||||
@ -1869,6 +1886,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",
|
||||||
@ -1960,16 +1984,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": {
|
||||||
@ -2193,12 +2217,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",
|
||||||
@ -2222,6 +2240,12 @@
|
|||||||
"no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.",
|
"no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.",
|
||||||
"table-header": "{length} search {length, plural, one{result} other{results}}"
|
"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",
|
"seconds": "seconds",
|
||||||
"size": "Size",
|
"size": "Size",
|
||||||
"smtp-auth-config": {
|
"smtp-auth-config": {
|
||||||
|
|||||||
@ -26,6 +26,11 @@
|
|||||||
"title": "Add annotation"
|
"title": "Add annotation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"add-clone-dossier-template": {
|
||||||
|
"save": "{type, select, clone{Clone} other{Save}}",
|
||||||
|
"save-and-edit": "{type, select, clone{Clone} other{Save}} and edit",
|
||||||
|
"title": "{type, select, clone{Clone {dossierTemplateName}} other{Create dossier template}}"
|
||||||
|
},
|
||||||
"add-dossier-dialog": {
|
"add-dossier-dialog": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
@ -87,8 +92,7 @@
|
|||||||
"valid-from": "Valid from",
|
"valid-from": "Valid from",
|
||||||
"valid-to": "Valid to"
|
"valid-to": "Valid to"
|
||||||
},
|
},
|
||||||
"save": "Save dossier template",
|
"save": "Save dossier template"
|
||||||
"title": "{type, select, edit{Edit {name}} create{Create} clone{Clone} other{}} dossier template"
|
|
||||||
},
|
},
|
||||||
"add-edit-dossier-attribute": {
|
"add-edit-dossier-attribute": {
|
||||||
"error": {
|
"error": {
|
||||||
@ -1019,6 +1023,7 @@
|
|||||||
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
"entities": "{count} {count, plural, one{entity} other{entities}}",
|
||||||
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
"entries": "{count} {count, plural, one{entry} other{entries}}",
|
||||||
"modified-on": "Modified on: {date}",
|
"modified-on": "Modified on: {date}",
|
||||||
|
"title": "Edit dossier template",
|
||||||
"valid-from": "Valid from: {date}",
|
"valid-from": "Valid from: {date}",
|
||||||
"valid-to": "Valid to: {date}"
|
"valid-to": "Valid to: {date}"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit e737d134ad76d247570ed06e7bd21c4d4225c318
|
Subproject commit 6f288516e3efa36ec9f1f9eb02d0374c988d3432
|
||||||
@ -60,8 +60,4 @@ export class DossierTemplate implements IDossierTemplate, IListable {
|
|||||||
get routerLink(): string {
|
get routerLink(): string {
|
||||||
return `/main/admin/dossier-templates/${this.dossierTemplateId}`;
|
return `/main/admin/dossier-templates/${this.dossierTemplateId}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
get dossiersRouterLink(): string {
|
|
||||||
return `/main/${this.dossierTemplateId}/dossiers`;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user