updated edit dossier modal to be in read-only mode when there is not owner set

This commit is contained in:
Valentin 2022-02-06 18:39:05 +02:00
parent f23779350a
commit 3db3a6a1c4
7 changed files with 49 additions and 38 deletions

View File

@ -74,7 +74,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
(await firstValueFrom(this._reportTemplateController.getAvailableReportTemplates(this.dossier.dossierTemplateId))) || []; (await firstValueFrom(this._reportTemplateController.getAvailableReportTemplates(this.dossier.dossierTemplateId))) || [];
this.form = this._getForm(); this.form = this._getForm();
if (!this._permissionsService.canEditDossier()) { if (!this._permissionsService.canEditDossier(this.dossier)) {
this.form.disable(); this.form.disable();
} }
} }

View File

@ -15,6 +15,7 @@ import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators'; import { tap } from 'rxjs/operators';
import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component'; import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component';
import { PermissionsService } from '@services/permissions.service'; import { PermissionsService } from '@services/permissions.service';
import { UserService } from '@services/user.service';
type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes' | 'deletedDocuments'; type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes' | 'deletedDocuments';
@ -34,7 +35,8 @@ export class EditDossierDialogComponent extends BaseDialogComponent {
@ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent; @ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent;
@ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent; @ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent;
@ViewChild(EditDossierDeletedDocumentsComponent) deletedDocumentsComponent: EditDossierDeletedDocumentsComponent; @ViewChild(EditDossierDeletedDocumentsComponent) deletedDocumentsComponent: EditDossierDeletedDocumentsComponent;
private _dossierName: string;
private _dossier: Dossier;
constructor( constructor(
private readonly _toaster: Toaster, private readonly _toaster: Toaster,
@ -42,6 +44,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent {
private readonly _changeRef: ChangeDetectorRef, private readonly _changeRef: ChangeDetectorRef,
private readonly _loadingService: LoadingService, private readonly _loadingService: LoadingService,
private readonly _permissionsService: PermissionsService, private readonly _permissionsService: PermissionsService,
private readonly _userService: UserService,
protected readonly _injector: Injector, protected readonly _injector: Injector,
protected readonly _dialogRef: MatDialogRef<EditDossierDialogComponent>, protected readonly _dialogRef: MatDialogRef<EditDossierDialogComponent>,
@Inject(MAT_DIALOG_DATA) @Inject(MAT_DIALOG_DATA)
@ -82,9 +85,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent {
}, },
]; ];
this.dossier$ = this._dossiersService this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe(tap(dossier => (this._dossier = dossier)));
.getEntityChanged$(_data.dossierId)
.pipe(tap(dossier => (this._dossierName = dossier.dossierName)));
this.activeNav = _data.section || 'dossierInfo'; this.activeNav = _data.section || 'dossierInfo';
} }
@ -112,7 +113,10 @@ export class EditDossierDialogComponent extends BaseDialogComponent {
} }
get showActionButtons(): boolean { 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 { get changed(): boolean {
@ -133,7 +137,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent {
this._loadingService.stop(); this._loadingService.stop();
if (result.success) { 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) { if (result.success && options?.closeAfterSave) {

View File

@ -9,33 +9,37 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="all-caps-label mt-16" translate="assign-dossier-owner.dialog.approvers"></div>
<redaction-team-members
(remove)="toggleSelected($event)"
[canAdd]="false"
[canRemove]="!disabled"
[dossierId]="dossier.dossierId"
[largeSpacing]="true"
[memberIds]="selectedApproversList"
[perLine]="13"
[unremovableMembers]="[selectedOwnerId]"
></redaction-team-members>
<div class="all-caps-label mt-16" translate="assign-dossier-owner.dialog.reviewers"></div> <ng-container *ngIf="selectedApproversList.length">
<redaction-team-members <div class="all-caps-label mt-16" translate="assign-dossier-owner.dialog.approvers"></div>
(remove)="toggleSelected($event)" <redaction-team-members
[canAdd]="false" (remove)="toggleSelected($event)"
[canRemove]="!disabled" [canAdd]="false"
[dossierId]="dossier.dossierId" [canRemove]="!disabled"
[largeSpacing]="true" [dossierId]="dossier.dossierId"
[memberIds]="selectedReviewers$ | async" [largeSpacing]="true"
[perLine]="13" [memberIds]="selectedApproversList"
[unremovableMembers]="[selectedOwnerId]" [perLine]="13"
></redaction-team-members> [unremovableMembers]="[selectedOwnerId]"
></redaction-team-members>
</ng-container>
<ng-container *ngIf="(selectedReviewers$ | async).length === 0"> <ng-container *ngIf="(selectedReviewers$ | async)?.length">
<div class="all-caps-label mt-16" translate="assign-dossier-owner.dialog.reviewers"></div>
<redaction-team-members
(remove)="toggleSelected($event)"
[canAdd]="false"
[canRemove]="!disabled"
[dossierId]="dossier.dossierId"
[largeSpacing]="true"
[memberIds]="selectedReviewers$ | async"
[perLine]="13"
[unremovableMembers]="[selectedOwnerId]"
></redaction-team-members>
</ng-container>
<ng-container *ngIf="!userService.currentUser.isManager">
<div class="info mt-4">{{ 'assign-dossier-owner.dialog.no-reviewers' | translate }}</div> <div class="info mt-4">{{ 'assign-dossier-owner.dialog.no-reviewers' | translate }}</div>
<div *ngIf="!disabled" class="info">{{ 'assign-dossier-owner.dialog.select-below' | translate }}</div>
</ng-container> </ng-container>
<ng-container *ngIf="!disabled"> <ng-container *ngIf="!disabled">

View File

@ -6,6 +6,7 @@ import { Dossier, IDossierRequest } from '@red/domain';
import { AutoUnsubscribe } from '@iqser/common-ui'; import { AutoUnsubscribe } from '@iqser/common-ui';
import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface';
import { BehaviorSubject, firstValueFrom } from 'rxjs'; import { BehaviorSubject, firstValueFrom } from 'rxjs';
import { PermissionsService } from '@services/permissions.service';
@Component({ @Component({
selector: 'redaction-edit-dossier-team', selector: 'redaction-edit-dossier-team',
@ -19,14 +20,16 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos
@Input() dossier: Dossier; @Input() dossier: Dossier;
readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id);
membersSelectOptions: string[] = []; membersSelectOptions: string[] = [];
readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id);
readonly selectedReviewers$ = new BehaviorSubject<string[]>([]); readonly selectedReviewers$ = new BehaviorSubject<string[]>([]);
constructor( constructor(
readonly userService: UserService, readonly userService: UserService,
private readonly _formBuilder: FormBuilder, private readonly _formBuilder: FormBuilder,
private readonly _dossiersService: DossiersService, private readonly _dossiersService: DossiersService,
private readonly _permissionsService: PermissionsService,
) { ) {
super(); super();
} }
@ -48,7 +51,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos
} }
get disabled() { get disabled() {
return !this.userService.currentUser.isManager; return !this.userService.currentUser.isManager || !this.form.get('owner').value;
} }
get changed() { get changed() {
@ -149,7 +152,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos
owner: [ owner: [
{ {
value: this.dossier?.ownerId, value: this.dossier?.ownerId,
disabled: this.disabled, disabled: !this.userService.currentUser.isManager,
}, },
Validators.required, Validators.required,
], ],

View File

@ -53,7 +53,7 @@
<mat-checkbox <mat-checkbox
(change)="hasDueDate = !hasDueDate" (change)="hasDueDate = !hasDueDate"
[checked]="hasDueDate" [checked]="hasDueDate"
[disabled]="!permissionsService.canEditDossier()" [disabled]="!permissionsService.canEditDossier(dossier)"
class="filter-menu-checkbox" class="filter-menu-checkbox"
color="primary" color="primary"
> >

View File

@ -69,7 +69,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
ngOnInit() { ngOnInit() {
this._filterInvalidDossierTemplates(); this._filterInvalidDossierTemplates();
this.form = this._getForm(); this.form = this._getForm();
if (!this.permissionsService.canEditDossier()) { if (!this.permissionsService.canEditDossier(this.dossier)) {
this.form.disable(); this.form.disable();
} }
this.hasDueDate = !!this.dossier.dueDate; this.hasDueDate = !!this.dossier.dueDate;

View File

@ -123,8 +123,8 @@ export class PermissionsService {
return dossier.ownerId === this._userService.currentUser.id; return dossier.ownerId === this._userService.currentUser.id;
} }
canEditDossier(user = this._userService.currentUser) { canEditDossier(dossier: Dossier, user = this._userService.currentUser): boolean {
return user.isManager; return user.isManager && !!dossier?.ownerId;
} }
isAdmin(user = this._userService.currentUser): boolean { isAdmin(user = this._userService.currentUser): boolean {