RED-8872: Disable editing team members for dossier in inactive template

This commit is contained in:
Adina Țeudan 2024-05-15 16:30:22 +03:00
parent 0d5a05e9da
commit 0b8a163d0c
3 changed files with 16 additions and 13 deletions

View File

@ -35,8 +35,6 @@ interface NavItem {
providers: [dossiersServiceProvider],
})
export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit {
readonly #currentUser = getCurrentUser<User>();
private _dossier: Dossier;
readonly roles = Roles;
navItems: NavItem[] = [];
readonly iconButtonTypes = IconButtonTypes;
@ -47,6 +45,8 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
@ViewChild(EditDossierDictionaryComponent) dictionaryComponent: EditDossierDictionaryComponent;
@ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent;
@ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent;
readonly #currentUser = getCurrentUser<User>();
private _dossier: Dossier;
constructor(
readonly iqserPermissionsService: IqserPermissionsService,
@ -181,7 +181,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
key: 'members',
title: _('edit-dossier-dialog.nav-items.team-members'),
sideNavTitle: _('edit-dossier-dialog.nav-items.members'),
readonly: !this._permissionsService.canEditTeamMembers(),
readonly: !this._permissionsService.canEditTeamMembers(this._dossier),
helpModeKey: 'edit_dossier_members_DIALOG',
},
{

View File

@ -19,26 +19,26 @@ import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-doss
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class EditDossierTeamComponent implements EditDossierSectionInterface, OnChanges {
readonly #userService = inject(UserService);
readonly #dossiersService = inject(DossiersService);
readonly #permissionsService = inject(PermissionsService);
readonly #filesService = inject(FilesService);
form = this.#getForm();
readonly #formValue$ = this.form.valueChanges;
searchQuery = '';
@Input() dossier: Dossier;
membersSelectOptions: string[] = [];
readonly isDocumine = getConfig().IS_DOCUMINE;
readonly #userService = inject(UserService);
readonly ownersSelectOptions = this.#userService.all.filter(u => u.isManager).map(m => m.id);
readonly #dossiersService = inject(DossiersService);
readonly #permissionsService = inject(PermissionsService);
readonly #filesService = inject(FilesService);
readonly #formValue$ = this.form.valueChanges;
readonly selectedReviewers$ = this.#formValue$.pipe(map(v => v.members.filter(m => !v.approvers.includes(m))));
readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers));
readonly isDocumine = getConfig().IS_DOCUMINE;
get valid(): boolean {
return this.form.valid;
}
get disabled() {
return !this.#permissionsService.canEditTeamMembers() || !this.form.get('owner').value;
return !this.#permissionsService.canEditTeamMembers(this.dossier) || !this.form.get('owner').value;
}
get hasOwner() {
@ -175,7 +175,7 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
#resetForm() {
this.form.reset(
{
owner: { value: this.dossier.ownerId, disabled: !this.#permissionsService.canEditTeamMembers() },
owner: { value: this.dossier.ownerId, disabled: !this.#permissionsService.canEditTeamMembers(this.dossier) },
approvers: this.#sortByName([...this.dossier.approverIds]),
members: this.#sortByName([...this.dossier.memberIds]),
} as unknown,

View File

@ -18,6 +18,7 @@ import { FilesMapService } from '@services/files/files-map.service';
import { Roles } from '@users/roles';
import { UserPreferenceService } from '@users/user-preference.service';
import { UserService } from '@users/user.service';
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
@Injectable({ providedIn: 'root' })
export class PermissionsService {
@ -29,6 +30,7 @@ export class PermissionsService {
private readonly _featuresService: FeaturesService,
private readonly _userPreferenceService: UserPreferenceService,
private readonly _iqserPermissionsService: IqserPermissionsService,
private readonly _dossierTemplatesService: DossierTemplatesService,
) {}
get #userId(): string {
@ -313,8 +315,9 @@ export class PermissionsService {
return dossier.isActive && this.isOwner(dossier) && this._iqserPermissionsService.has(Roles.dossierAttributes.write);
}
canEditTeamMembers(): boolean {
return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager();
canEditTeamMembers(dossier: Dossier): boolean {
const dossierTemplate = this._dossierTemplatesService.find(dossier.dossierTemplateId);
return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager() && dossierTemplate.isActive;
}
isAdmin(): boolean {