diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts index 7338c9590..6df62c19a 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts @@ -74,7 +74,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS (await firstValueFrom(this._reportTemplateController.getAvailableReportTemplates(this.dossier.dossierTemplateId))) || []; this.form = this._getForm(); - if (!this._permissionsService.canEditDossier()) { + if (!this._permissionsService.canEditDossier(this.dossier)) { this.form.disable(); } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index 486375e34..1b2cfceed 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, Inject, Injector, ViewChild } from '@angular/core'; +import { AfterViewInit, ChangeDetectorRef, Component, Inject, Injector, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Dossier } from '@red/domain'; import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; @@ -15,6 +15,7 @@ import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component'; import { PermissionsService } from '@services/permissions.service'; +import { UserService } from '@services/user.service'; type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes' | 'deletedDocuments'; @@ -22,7 +23,7 @@ type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'member templateUrl: './edit-dossier-dialog.component.html', styleUrls: ['./edit-dossier-dialog.component.scss'], }) -export class EditDossierDialogComponent extends BaseDialogComponent { +export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit { readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[]; readonly iconButtonTypes = IconButtonTypes; activeNav: Section; @@ -34,7 +35,8 @@ export class EditDossierDialogComponent extends BaseDialogComponent { @ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent; @ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent; @ViewChild(EditDossierDeletedDocumentsComponent) deletedDocumentsComponent: EditDossierDeletedDocumentsComponent; - private _dossierName: string; + + private _dossier: Dossier; constructor( private readonly _toaster: Toaster, @@ -42,6 +44,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent { private readonly _changeRef: ChangeDetectorRef, private readonly _loadingService: LoadingService, private readonly _permissionsService: PermissionsService, + private readonly _userService: UserService, protected readonly _injector: Injector, protected readonly _dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) @@ -82,12 +85,16 @@ export class EditDossierDialogComponent extends BaseDialogComponent { }, ]; - this.dossier$ = this._dossiersService - .getEntityChanged$(_data.dossierId) - .pipe(tap(dossier => (this._dossierName = dossier.dossierName))); + this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe(tap(dossier => (this._dossier = dossier))); this.activeNav = _data.section || 'dossierInfo'; } + ngAfterViewInit() { + if (!this._dossier.ownerId) { + this._toaster.error(_('edit-dossier-dialog.missing-owner')); + } + } + get activeNavItem(): { key: string; title?: string } { return this.navItems.find(item => item.key === this.activeNav); } @@ -112,7 +119,10 @@ export class EditDossierDialogComponent extends BaseDialogComponent { } get showActionButtons(): boolean { - return !['deletedDocuments'].includes(this.activeNav) && this._permissionsService.canEditDossier(); + return ( + (['members'].includes(this.activeNav) && this._userService.currentUser.isManager) || + (!['deletedDocuments'].includes(this.activeNav) && this._permissionsService.canEditDossier(this._dossier)) + ); } get changed(): boolean { @@ -133,7 +143,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent { this._loadingService.stop(); if (result.success) { - this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossierName } }); + this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossier.dossierName } }); } if (result.success && options?.closeAfterSave) { diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html index 5d2809aec..5d2053801 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html @@ -9,33 +9,37 @@ -
- -
- + +
+ +
- + +
+ +
+ +
{{ 'assign-dossier-owner.dialog.no-reviewers' | translate }}
-
{{ 'assign-dossier-owner.dialog.select-below' | translate }}
diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts index 9f92db656..3b9acd23b 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts @@ -6,6 +6,7 @@ import { Dossier, IDossierRequest } from '@red/domain'; import { AutoUnsubscribe } from '@iqser/common-ui'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { BehaviorSubject, firstValueFrom } from 'rxjs'; +import { PermissionsService } from '@services/permissions.service'; @Component({ selector: 'redaction-edit-dossier-team', @@ -19,14 +20,16 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos @Input() dossier: Dossier; - readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id); membersSelectOptions: string[] = []; + + readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id); readonly selectedReviewers$ = new BehaviorSubject([]); constructor( readonly userService: UserService, private readonly _formBuilder: FormBuilder, private readonly _dossiersService: DossiersService, + private readonly _permissionsService: PermissionsService, ) { super(); } @@ -48,7 +51,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos } get disabled() { - return !this.userService.currentUser.isManager; + return !this.userService.currentUser.isManager || !this.form.get('owner').value; } get changed() { @@ -149,7 +152,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos owner: [ { value: this.dossier?.ownerId, - disabled: this.disabled, + disabled: !this.userService.currentUser.isManager, }, Validators.required, ], diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html index aebea6535..0af613641 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html @@ -53,7 +53,7 @@ diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index 4925acddb..55bc3065e 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -69,7 +69,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti ngOnInit() { this._filterInvalidDossierTemplates(); this.form = this._getForm(); - if (!this.permissionsService.canEditDossier()) { + if (!this.permissionsService.canEditDossier(this.dossier)) { this.form.disable(); } this.hasDueDate = !!this.dossier.dueDate; diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 6d8baf3ee..5dd6f6c51 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -128,8 +128,8 @@ export class PermissionsService { return dossier.ownerId === this._userService.currentUser.id; } - canEditDossier(user = this._userService.currentUser) { - return user.isManager; + canEditDossier(dossier: Dossier, user = this._userService.currentUser): boolean { + return user.isManager && !!dossier?.ownerId; } isAdmin(user = this._userService.currentUser): boolean { diff --git a/apps/red-ui/src/assets/i18n/de.json b/apps/red-ui/src/assets/i18n/de.json index e1926fb1b..6bfc8c910 100644 --- a/apps/red-ui/src/assets/i18n/de.json +++ b/apps/red-ui/src/assets/i18n/de.json @@ -146,15 +146,6 @@ "plural": "" }, "annotation-actions": { - "resize": { - "label": "Größe ändern" - }, - "resize-accept": { - "label": "Größe speichern" - }, - "resize-cancel": { - "label": "Größenänderung abbrechen" - }, "accept-recommendation": { "label": "Empfehlung annehmen" }, @@ -959,6 +950,7 @@ } }, "header": "{dossierName} bearbeiten", + "missing-owner": "", "nav-items": { "choose-download": "Wählen Sie die Dokumente für Ihr Download-Paket aus:", "deleted-documents": "Gelöschte Dokumente", diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index 7f6941b71..f7c37d5ac 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -296,7 +296,6 @@ "suggestion-add": "Suggested redaction", "suggestion-add-dictionary": "Suggested dictionary add", "suggestion-change-legal-basis": "Suggested change legal basis", - "suggestion-force-redaction": "Suggestion force redaction", "suggestion-force-redaction": "Suggestion force hint", "suggestion-recategorize-image": "Suggested recategorize image", "suggestion-remove": "Suggested local removal", @@ -970,6 +969,7 @@ } }, "header": "Edit {dossierName}", + "missing-owner": "You cannot edit the dossier because the owner is missing!", "nav-items": { "choose-download": "Choose what is included at download:", "deleted-documents": "Deleted Documents", diff --git a/package.json b/package.json index 4b17263d9..da8c108e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.204.0", + "version": "3.205.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 08d817c51..0b87eb374 100644 Binary files a/paligo-theme.tar.gz and b/paligo-theme.tar.gz differ