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],
|
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>();
|
||||||
|
#dossier: Dossier;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
readonly iqserPermissionsService: IqserPermissionsService,
|
readonly iqserPermissionsService: IqserPermissionsService,
|
||||||
@ -61,13 +61,13 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
|||||||
readonly configService: ConfigService,
|
readonly configService: ConfigService,
|
||||||
) {
|
) {
|
||||||
super(_dialogRef, true);
|
super(_dialogRef, true);
|
||||||
this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe(
|
this.dossier$ = this._dossiersService.getEntityChanged$(this._data.dossierId).pipe(
|
||||||
tap(dossier => {
|
tap(dossier => {
|
||||||
this._dossier = dossier;
|
this.#dossier = dossier;
|
||||||
this._initializeNavItems();
|
this._initializeNavItems();
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
this.activeNav = _data.section || 'dossierInfo';
|
this.activeNav = this._data.section || 'dossierInfo';
|
||||||
}
|
}
|
||||||
|
|
||||||
get activeNavItem(): NavItem {
|
get activeNavItem(): NavItem {
|
||||||
@ -94,11 +94,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
|||||||
|
|
||||||
get showActionButtons(): boolean {
|
get showActionButtons(): boolean {
|
||||||
return (
|
return (
|
||||||
(['dossierDictionary'].includes(this.activeNav) && this._permissionsService.canEditDossierDictionary(this._dossier)) ||
|
(['dossierDictionary'].includes(this.activeNav) && this._permissionsService.canEditDossierDictionary(this.#dossier)) ||
|
||||||
(['members'].includes(this.activeNav) &&
|
(['members'].includes(this.activeNav) &&
|
||||||
this.#currentUser.isManager &&
|
this.#currentUser.isManager &&
|
||||||
this.iqserPermissionsService.has(Roles.dossiers.edit)) ||
|
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() {
|
ngAfterViewInit() {
|
||||||
if (!this._dossier.ownerId) {
|
if (!this.#dossier.ownerId) {
|
||||||
this._toaster.error(_('edit-dossier-dialog.missing-owner'));
|
this._toaster.error(_('edit-dossier-dialog.missing-owner'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
|||||||
this._loadingService.stop();
|
this._loadingService.stop();
|
||||||
|
|
||||||
if (result.success) {
|
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) {
|
if (result.success && options?.closeAfterSave) {
|
||||||
@ -159,21 +159,21 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
|
|||||||
key: 'dossierInfo',
|
key: 'dossierInfo',
|
||||||
title: _('edit-dossier-dialog.nav-items.general-info'),
|
title: _('edit-dossier-dialog.nav-items.general-info'),
|
||||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dossier-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',
|
helpModeKey: 'edit_dossier_dossier_info_DIALOG',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'downloadPackage',
|
key: 'downloadPackage',
|
||||||
title: _('edit-dossier-dialog.nav-items.choose-download'),
|
title: _('edit-dossier-dialog.nav-items.choose-download'),
|
||||||
sideNavTitle: _('edit-dossier-dialog.nav-items.download-package'),
|
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',
|
helpModeKey: 'edit_dossier_download_package_DIALOG',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'dossierDictionary',
|
key: 'dossierDictionary',
|
||||||
sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'),
|
sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'),
|
||||||
title: _('edit-dossier-dialog.nav-items.dossier-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',
|
helpModeKey: 'edit_dossier_dossier_dictionary_DIALOG',
|
||||||
hide: this.configService.values.IS_DOCUMINE,
|
hide: this.configService.values.IS_DOCUMINE,
|
||||||
},
|
},
|
||||||
@ -181,13 +181,13 @@ 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',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'dossierAttributes',
|
key: 'dossierAttributes',
|
||||||
title: _('edit-dossier-dialog.nav-items.dossier-attributes'),
|
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',
|
helpModeKey: 'edit_dossier_dossier_attributes_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