Merge branch 'RED-8872' into 'master'
RED-8872: Disable editing team members for dossier in inactive template Closes RED-8872 See merge request redactmanager/red-ui!416
This commit is contained in:
commit
a7009beed5
@ -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>();
|
||||
#dossier: Dossier;
|
||||
|
||||
constructor(
|
||||
readonly iqserPermissionsService: IqserPermissionsService,
|
||||
@ -61,13 +61,13 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
||||
readonly configService: ConfigService,
|
||||
) {
|
||||
super(_dialogRef, true);
|
||||
this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe(
|
||||
this.dossier$ = this._dossiersService.getEntityChanged$(this._data.dossierId).pipe(
|
||||
tap(dossier => {
|
||||
this._dossier = dossier;
|
||||
this.#dossier = dossier;
|
||||
this._initializeNavItems();
|
||||
}),
|
||||
);
|
||||
this.activeNav = _data.section || 'dossierInfo';
|
||||
this.activeNav = this._data.section || 'dossierInfo';
|
||||
}
|
||||
|
||||
get activeNavItem(): NavItem {
|
||||
@ -94,11 +94,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
||||
|
||||
get showActionButtons(): boolean {
|
||||
return (
|
||||
(['dossierDictionary'].includes(this.activeNav) && this._permissionsService.canEditDossierDictionary(this._dossier)) ||
|
||||
(['dossierDictionary'].includes(this.activeNav) && this._permissionsService.canEditDossierDictionary(this.#dossier)) ||
|
||||
(['members'].includes(this.activeNav) &&
|
||||
this.#currentUser.isManager &&
|
||||
this.iqserPermissionsService.has(Roles.dossiers.edit)) ||
|
||||
this._permissionsService.canEditDossier(this._dossier)
|
||||
this._permissionsService.canEditDossier(this.#dossier)
|
||||
);
|
||||
}
|
||||
|
||||
@ -115,7 +115,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
if (!this._dossier.ownerId) {
|
||||
if (!this.#dossier.ownerId) {
|
||||
this._toaster.error(_('edit-dossier-dialog.missing-owner'));
|
||||
}
|
||||
}
|
||||
@ -126,7 +126,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
||||
this._loadingService.stop();
|
||||
|
||||
if (result.success) {
|
||||
this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossier.dossierName } });
|
||||
this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.#dossier.dossierName } });
|
||||
}
|
||||
|
||||
if (result.success && options?.closeAfterSave) {
|
||||
@ -159,21 +159,21 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
||||
key: 'dossierInfo',
|
||||
title: _('edit-dossier-dialog.nav-items.general-info'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dossier-info'),
|
||||
readonly: !this._dossier.isActive || !this._permissionsService.canEditDossier(this._dossier),
|
||||
readonly: !this.#dossier.isActive || !this._permissionsService.canEditDossier(this.#dossier),
|
||||
helpModeKey: 'edit_dossier_dossier_info_DIALOG',
|
||||
},
|
||||
{
|
||||
key: 'downloadPackage',
|
||||
title: _('edit-dossier-dialog.nav-items.choose-download'),
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.download-package'),
|
||||
readonly: !this._permissionsService.canEditDossier(this._dossier),
|
||||
readonly: !this._permissionsService.canEditDossier(this.#dossier),
|
||||
helpModeKey: 'edit_dossier_download_package_DIALOG',
|
||||
},
|
||||
{
|
||||
key: 'dossierDictionary',
|
||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'),
|
||||
title: _('edit-dossier-dialog.nav-items.dossier-dictionary'),
|
||||
readonly: !this._permissionsService.canEditDossierDictionary(this._dossier),
|
||||
readonly: !this._permissionsService.canEditDossierDictionary(this.#dossier),
|
||||
helpModeKey: 'edit_dossier_dossier_dictionary_DIALOG',
|
||||
hide: this.configService.values.IS_DOCUMINE,
|
||||
},
|
||||
@ -181,13 +181,13 @@ 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',
|
||||
},
|
||||
{
|
||||
key: 'dossierAttributes',
|
||||
title: _('edit-dossier-dialog.nav-items.dossier-attributes'),
|
||||
readonly: !this._permissionsService.canEditDossierAttributes(this._dossier),
|
||||
readonly: !this._permissionsService.canEditDossierAttributes(this.#dossier),
|
||||
helpModeKey: 'edit_dossier_dossier_attributes_DIALOG',
|
||||
},
|
||||
];
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user