Edit dossier permissions
This commit is contained in:
parent
d4cbf647ad
commit
6fecb84aa5
@ -50,7 +50,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa
|
||||
}
|
||||
|
||||
get disabled(): boolean {
|
||||
return !this._permissionsService.isOwner(this.dossier);
|
||||
return !this._permissionsService.canHardDeleteOrRestore(this.dossier);
|
||||
}
|
||||
|
||||
get valid(): boolean {
|
||||
|
||||
@ -164,7 +164,10 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
||||
}
|
||||
|
||||
private _canPerformActions(file: File): boolean {
|
||||
return this._userService.currentUser.isManager || this._permissionsService.canDeleteFile(file);
|
||||
return (
|
||||
this._permissionsService.canHardDeleteOrRestore(this.dossier) &&
|
||||
(this._userService.currentUser.isManager || this._permissionsService.canDeleteFile(file))
|
||||
);
|
||||
}
|
||||
|
||||
private _canRestore(file: File, restoreDate: string): boolean {
|
||||
|
||||
@ -57,8 +57,8 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa
|
||||
|
||||
async ngOnInit() {
|
||||
this._loadingService.start();
|
||||
this.canEdit = this._permissionsService.canEditDossier(this.dossier);
|
||||
this.canEditDisplayName = this._permissionsService.isOwner(this.dossier);
|
||||
this.canEdit = this._permissionsService.canEditDossierDictionary(this.dossier);
|
||||
this.canEditDisplayName = this._permissionsService.canEditDossierDictionaryDisplayName(this.dossier);
|
||||
await this._updateDossierDictionary();
|
||||
this.form = this._getForm();
|
||||
this._loadingService.stop();
|
||||
@ -121,7 +121,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa
|
||||
addToDictionaryAction: [
|
||||
{
|
||||
value: this.dossierDictionary.addToDictionaryAction,
|
||||
disabled: !this._permissionsService.isOwner(this.dossier),
|
||||
disabled: !this._permissionsService.canEditDossierDictionaryAddAction(this.dossier),
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@ -1,17 +1,31 @@
|
||||
<form *ngIf="form" [formGroup]="form">
|
||||
<redaction-select
|
||||
[label]="'report-type.label' | translate: { length: reportTypesLength }"
|
||||
[optionTemplate]="reportTemplateOptionTemplate"
|
||||
[options]="availableReportTypes"
|
||||
[valueMapper]="reportTemplateValueMapper"
|
||||
class="mr-16"
|
||||
formControlName="reportTemplateIds"
|
||||
></redaction-select>
|
||||
<redaction-select
|
||||
[label]="'download-type.label' | translate: { length: downloadFileTypesLength }"
|
||||
[options]="downloadTypes"
|
||||
formControlName="downloadFileTypes"
|
||||
></redaction-select>
|
||||
<div>
|
||||
<redaction-select
|
||||
[label]="'report-type.label' | translate: { length: reportTypesLength }"
|
||||
[optionTemplate]="reportTemplateOptionTemplate"
|
||||
[options]="availableReportTypes"
|
||||
[valueMapper]="reportTemplateValueMapper"
|
||||
class="mr-16"
|
||||
formControlName="reportTemplateIds"
|
||||
></redaction-select>
|
||||
<redaction-select
|
||||
[label]="'download-type.label' | translate: { length: downloadFileTypesLength }"
|
||||
[options]="downloadTypes"
|
||||
formControlName="downloadFileTypes"
|
||||
></redaction-select>
|
||||
</div>
|
||||
|
||||
<div class="mt-32 mb-14">
|
||||
<mat-checkbox class="watermark" color="primary" formControlName="watermarkEnabled">
|
||||
{{ 'edit-dossier-dialog.general-info.form.watermark' | translate }}
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<mat-checkbox class="watermark-preview" color="primary" formControlName="watermarkPreviewEnabled">
|
||||
{{ 'edit-dossier-dialog.general-info.form.watermark-preview' | translate }}
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<ng-template #reportTemplateOptionTemplate let-option="option">
|
||||
|
||||
@ -10,4 +10,9 @@ redaction-select {
|
||||
form {
|
||||
height: calc(100% - 44px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
> div {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,9 +40,17 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
|
||||
return this.form.controls['downloadFileTypes']?.value?.length || 0;
|
||||
}
|
||||
|
||||
get changed() {
|
||||
if (this.form) {
|
||||
for (const key of Object.keys(this.form.getRawValue())) {
|
||||
get changed(): boolean {
|
||||
if (!this.form) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const key of Object.keys(this.form.getRawValue())) {
|
||||
if (key.startsWith('watermark')) {
|
||||
if (this.dossier[key] !== this.form.get(key).value) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (this.dossier[key].length !== this.form.get(key).value.length) {
|
||||
return true;
|
||||
}
|
||||
@ -86,6 +94,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
|
||||
...this.dossier,
|
||||
downloadFileTypes: this.form.get('downloadFileTypes').value,
|
||||
reportTemplateIds: this.form.get('reportTemplateIds').value,
|
||||
watermarkEnabled: this.form.get('watermarkEnabled').value,
|
||||
watermarkPreviewEnabled: this.form.get('watermarkPreviewEnabled').value,
|
||||
};
|
||||
|
||||
const updatedDossier = await firstValueFrom(this._dossiersService.createOrUpdate(dossier));
|
||||
@ -96,6 +106,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
|
||||
this.form.reset({
|
||||
downloadFileTypes: this.dossier.downloadFileTypes,
|
||||
reportTemplateIds: this.dossier.reportTemplateIds,
|
||||
watermarkEnabled: this.dossier.watermarkEnabled,
|
||||
watermarkPreviewEnabled: this.dossier.watermarkPreviewEnabled,
|
||||
});
|
||||
}
|
||||
|
||||
@ -104,6 +116,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
|
||||
{
|
||||
reportTemplateIds: [this.dossier.reportTemplateIds],
|
||||
downloadFileTypes: [this.dossier.downloadFileTypes],
|
||||
watermarkEnabled: [this.dossier.watermarkEnabled],
|
||||
watermarkPreviewEnabled: [this.dossier.watermarkPreviewEnabled],
|
||||
},
|
||||
{
|
||||
validators: control =>
|
||||
|
||||
@ -5,13 +5,10 @@
|
||||
|
||||
<div class="dialog-content">
|
||||
<iqser-side-nav [title]="'edit-dossier-dialog.side-nav-title' | translate">
|
||||
<div
|
||||
(click)="changeTab(item.key)"
|
||||
*ngFor="let item of navItems"
|
||||
[class.active]="item.key === activeNav"
|
||||
[translate]="item.sideNavTitle || item.title"
|
||||
class="item"
|
||||
></div>
|
||||
<div (click)="changeTab(item.key)" *ngFor="let item of navItems" [class.active]="item.key === activeNav" class="item">
|
||||
{{ item.sideNavTitle || item.title | translate }}
|
||||
<mat-icon *ngIf="item.readonly" svgIcon="red:read-only"></mat-icon>
|
||||
</div>
|
||||
</iqser-side-nav>
|
||||
|
||||
<div>
|
||||
@ -53,9 +50,9 @@
|
||||
(click)="save()"
|
||||
[disabled]="disabled || !valid || !changed"
|
||||
color="primary"
|
||||
id="editDossierSaveButton"
|
||||
mat-flat-button
|
||||
type="button"
|
||||
id="editDossierSaveButton"
|
||||
>
|
||||
{{ 'edit-dossier-dialog.actions.save' | translate }}
|
||||
</button>
|
||||
@ -72,5 +69,5 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<iqser-circle-button class="dialog-close" icon="iqser:close" (action)="close()" id="editDossierCloseButton"></iqser-circle-button>
|
||||
<iqser-circle-button (action)="close()" class="dialog-close" icon="iqser:close" id="editDossierCloseButton"></iqser-circle-button>
|
||||
</section>
|
||||
|
||||
@ -26,7 +26,7 @@ type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'member
|
||||
providers: [dossiersServiceProvider],
|
||||
})
|
||||
export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit {
|
||||
readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[];
|
||||
navItems: { key: Section; title?: string; sideNavTitle?: string; readonly?: boolean }[] = [];
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
activeNav: Section;
|
||||
readonly dossier$: Observable<Dossier>;
|
||||
@ -56,38 +56,12 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
||||
},
|
||||
) {
|
||||
super(_injector, _dialogRef, true);
|
||||
this.navItems = [
|
||||
{
|
||||
key: 'dossierInfo',
|
||||
title: _('edit-dossier-dialog.nav-items.general-info'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dossier-info'),
|
||||
},
|
||||
{
|
||||
key: 'downloadPackage',
|
||||
title: _('edit-dossier-dialog.nav-items.choose-download'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.download-package'),
|
||||
},
|
||||
{
|
||||
key: 'dossierDictionary',
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'),
|
||||
title: _('edit-dossier-dialog.nav-items.dossier-dictionary'),
|
||||
},
|
||||
{
|
||||
key: 'members',
|
||||
title: _('edit-dossier-dialog.nav-items.team-members'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.members'),
|
||||
},
|
||||
{
|
||||
key: 'dossierAttributes',
|
||||
title: _('edit-dossier-dialog.nav-items.dossier-attributes'),
|
||||
},
|
||||
{
|
||||
key: 'deletedDocuments',
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.deleted-documents'),
|
||||
},
|
||||
];
|
||||
|
||||
this.dossier$ = this._activeDossiersService.getEntityChanged$(_data.dossierId).pipe(tap(dossier => (this._dossier = dossier)));
|
||||
this.dossier$ = this._activeDossiersService.getEntityChanged$(_data.dossierId).pipe(
|
||||
tap(dossier => {
|
||||
this._dossier = dossier;
|
||||
this._initializeNavItems();
|
||||
}),
|
||||
);
|
||||
this.activeNav = _data.section || 'dossierInfo';
|
||||
}
|
||||
|
||||
@ -173,4 +147,41 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
||||
this.activeNav = key;
|
||||
}
|
||||
}
|
||||
|
||||
private _initializeNavItems(): void {
|
||||
this.navItems = [
|
||||
{
|
||||
key: 'dossierInfo',
|
||||
title: _('edit-dossier-dialog.nav-items.general-info'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dossier-info'),
|
||||
readonly: !this._dossier.isActive,
|
||||
},
|
||||
{
|
||||
key: 'downloadPackage',
|
||||
title: _('edit-dossier-dialog.nav-items.choose-download'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.download-package'),
|
||||
},
|
||||
{
|
||||
key: 'dossierDictionary',
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'),
|
||||
title: _('edit-dossier-dialog.nav-items.dossier-dictionary'),
|
||||
readonly: !this._permissionsService.canEditDossierDictionary(this._dossier),
|
||||
},
|
||||
{
|
||||
key: 'members',
|
||||
title: _('edit-dossier-dialog.nav-items.team-members'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.members'),
|
||||
},
|
||||
{
|
||||
key: 'dossierAttributes',
|
||||
title: _('edit-dossier-dialog.nav-items.dossier-attributes'),
|
||||
readonly: !this._permissionsService.canEditDossierAttributes(this._dossier),
|
||||
},
|
||||
{
|
||||
key: 'deletedDocuments',
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.deleted-documents'),
|
||||
readonly: !this._permissionsService.canHardDeleteOrRestore(this._dossier),
|
||||
},
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,18 +38,6 @@
|
||||
type="text"
|
||||
></textarea>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<mat-checkbox class="watermark" color="primary" formControlName="watermarkEnabled">
|
||||
{{ 'edit-dossier-dialog.general-info.form.watermark' | translate }}
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<mat-checkbox class="watermark-preview" color="primary" formControlName="watermarkPreviewEnabled">
|
||||
{{ 'edit-dossier-dialog.general-info.form.watermark-preview' | translate }}
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex fields-container">
|
||||
|
||||
@ -105,8 +105,6 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
|
||||
dossierTemplateId: this.dossier.dossierTemplateId,
|
||||
dossierStatusId: this.dossier.dossierStatusId,
|
||||
description: this.dossier.description,
|
||||
watermarkEnabled: this.dossier.watermarkEnabled,
|
||||
watermarkPreviewEnabled: this.dossier.watermarkPreviewEnabled,
|
||||
dueDate: this.dossier.dueDate,
|
||||
});
|
||||
}
|
||||
@ -116,8 +114,6 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
|
||||
...this.dossier,
|
||||
dossierName: this.form.get('dossierName').value,
|
||||
description: this.form.get('description').value,
|
||||
watermarkEnabled: this.form.get('watermarkEnabled').value,
|
||||
watermarkPreviewEnabled: this.form.get('watermarkPreviewEnabled').value,
|
||||
dueDate: this.hasDueDate ? this.form.get('dueDate').value : undefined,
|
||||
dossierTemplateId: this.form.get(DOSSIER_TEMPLATE_ID).value,
|
||||
dossierStatusId: this.form.get('dossierStatusId').value,
|
||||
@ -171,8 +167,6 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
|
||||
dossierStatusId: [formFieldWithArchivedCheck(this.dossier.dossierStatusId)],
|
||||
description: [formFieldWithArchivedCheck(this.dossier.description)],
|
||||
dueDate: [formFieldWithArchivedCheck(this.dossier.dueDate)],
|
||||
watermarkEnabled: [this.dossier.watermarkEnabled],
|
||||
watermarkPreviewEnabled: [this.dossier.watermarkPreviewEnabled],
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -75,6 +75,10 @@ export class PermissionsService {
|
||||
return files.reduce((acc, _file) => this._canDeleteFile(_file, dossier) && acc, true);
|
||||
}
|
||||
|
||||
canHardDeleteOrRestore(dossier: Dossier): boolean {
|
||||
return dossier.isActive;
|
||||
}
|
||||
|
||||
canOcrFile(file: File | File[]): boolean {
|
||||
const files = file instanceof File ? [file] : file;
|
||||
const dossier = this._getDossier(files[0]);
|
||||
@ -170,6 +174,22 @@ export class PermissionsService {
|
||||
return user.isManager && !!dossier?.ownerId;
|
||||
}
|
||||
|
||||
canEditDossierDictionary(dossier: Dossier, user = this._userService.currentUser): boolean {
|
||||
return dossier.isActive && this.canEditDossier(dossier, user);
|
||||
}
|
||||
|
||||
canEditDossierDictionaryDisplayName(dossier: Dossier, user = this._userService.currentUser): boolean {
|
||||
return dossier.isActive && this.isOwner(dossier, user);
|
||||
}
|
||||
|
||||
canEditDossierDictionaryAddAction(dossier: Dossier, user = this._userService.currentUser): boolean {
|
||||
return dossier.isActive && this.isOwner(dossier, user);
|
||||
}
|
||||
|
||||
canEditDossierAttributes(dossier: Dossier, user = this._userService.currentUser): boolean {
|
||||
return dossier.isActive && this.isOwner(dossier, user);
|
||||
}
|
||||
|
||||
isAdmin(user = this._userService.currentUser): boolean {
|
||||
return user.isAdmin;
|
||||
}
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 242789330301767bc38fe62651ea777297159bb3
|
||||
Subproject commit d141625d5f3c8f0c57b10f3e341af26ac64402b9
|
||||
Loading…
x
Reference in New Issue
Block a user