RED-8872: Disable editing team members for dossier in inactive template
This commit is contained in:
parent
0d5a05e9da
commit
0b8a163d0c
@ -35,8 +35,6 @@ interface NavItem {
|
|||||||
providers: [dossiersServiceProvider],
|
providers: [dossiersServiceProvider],
|
||||||
})
|
})
|
||||||
export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit {
|
export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit {
|
||||||
readonly #currentUser = getCurrentUser<User>();
|
|
||||||
private _dossier: Dossier;
|
|
||||||
readonly roles = Roles;
|
readonly roles = Roles;
|
||||||
navItems: NavItem[] = [];
|
navItems: NavItem[] = [];
|
||||||
readonly iconButtonTypes = IconButtonTypes;
|
readonly iconButtonTypes = IconButtonTypes;
|
||||||
@ -47,6 +45,8 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
|||||||
@ViewChild(EditDossierDictionaryComponent) dictionaryComponent: EditDossierDictionaryComponent;
|
@ViewChild(EditDossierDictionaryComponent) dictionaryComponent: EditDossierDictionaryComponent;
|
||||||
@ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent;
|
@ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent;
|
||||||
@ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent;
|
@ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent;
|
||||||
|
readonly #currentUser = getCurrentUser<User>();
|
||||||
|
private _dossier: Dossier;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
readonly iqserPermissionsService: IqserPermissionsService,
|
readonly iqserPermissionsService: IqserPermissionsService,
|
||||||
@ -181,7 +181,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
|||||||
key: 'members',
|
key: 'members',
|
||||||
title: _('edit-dossier-dialog.nav-items.team-members'),
|
title: _('edit-dossier-dialog.nav-items.team-members'),
|
||||||
sideNavTitle: _('edit-dossier-dialog.nav-items.members'),
|
sideNavTitle: _('edit-dossier-dialog.nav-items.members'),
|
||||||
readonly: !this._permissionsService.canEditTeamMembers(),
|
readonly: !this._permissionsService.canEditTeamMembers(this._dossier),
|
||||||
helpModeKey: 'edit_dossier_members_DIALOG',
|
helpModeKey: 'edit_dossier_members_DIALOG',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,26 +19,26 @@ import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-doss
|
|||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class EditDossierTeamComponent implements EditDossierSectionInterface, OnChanges {
|
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();
|
form = this.#getForm();
|
||||||
readonly #formValue$ = this.form.valueChanges;
|
|
||||||
searchQuery = '';
|
searchQuery = '';
|
||||||
@Input() dossier: Dossier;
|
@Input() dossier: Dossier;
|
||||||
membersSelectOptions: string[] = [];
|
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 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 selectedReviewers$ = this.#formValue$.pipe(map(v => v.members.filter(m => !v.approvers.includes(m))));
|
||||||
readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers));
|
readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers));
|
||||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
|
||||||
|
|
||||||
get valid(): boolean {
|
get valid(): boolean {
|
||||||
return this.form.valid;
|
return this.form.valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
get disabled() {
|
get disabled() {
|
||||||
return !this.#permissionsService.canEditTeamMembers() || !this.form.get('owner').value;
|
return !this.#permissionsService.canEditTeamMembers(this.dossier) || !this.form.get('owner').value;
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasOwner() {
|
get hasOwner() {
|
||||||
@ -175,7 +175,7 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
|
|||||||
#resetForm() {
|
#resetForm() {
|
||||||
this.form.reset(
|
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]),
|
approvers: this.#sortByName([...this.dossier.approverIds]),
|
||||||
members: this.#sortByName([...this.dossier.memberIds]),
|
members: this.#sortByName([...this.dossier.memberIds]),
|
||||||
} as unknown,
|
} as unknown,
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import { FilesMapService } from '@services/files/files-map.service';
|
|||||||
import { Roles } from '@users/roles';
|
import { Roles } from '@users/roles';
|
||||||
import { UserPreferenceService } from '@users/user-preference.service';
|
import { UserPreferenceService } from '@users/user-preference.service';
|
||||||
import { UserService } from '@users/user.service';
|
import { UserService } from '@users/user.service';
|
||||||
|
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
export class PermissionsService {
|
export class PermissionsService {
|
||||||
@ -29,6 +30,7 @@ export class PermissionsService {
|
|||||||
private readonly _featuresService: FeaturesService,
|
private readonly _featuresService: FeaturesService,
|
||||||
private readonly _userPreferenceService: UserPreferenceService,
|
private readonly _userPreferenceService: UserPreferenceService,
|
||||||
private readonly _iqserPermissionsService: IqserPermissionsService,
|
private readonly _iqserPermissionsService: IqserPermissionsService,
|
||||||
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
get #userId(): string {
|
get #userId(): string {
|
||||||
@ -313,8 +315,9 @@ export class PermissionsService {
|
|||||||
return dossier.isActive && this.isOwner(dossier) && this._iqserPermissionsService.has(Roles.dossierAttributes.write);
|
return dossier.isActive && this.isOwner(dossier) && this._iqserPermissionsService.has(Roles.dossierAttributes.write);
|
||||||
}
|
}
|
||||||
|
|
||||||
canEditTeamMembers(): boolean {
|
canEditTeamMembers(dossier: Dossier): boolean {
|
||||||
return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager();
|
const dossierTemplate = this._dossierTemplatesService.find(dossier.dossierTemplateId);
|
||||||
|
return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager() && dossierTemplate.isActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
isAdmin(): boolean {
|
isAdmin(): boolean {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user