RED-4788: fix workflow view permissions
This commit is contained in:
parent
33cc449f09
commit
4797888aa7
@ -1,6 +1,7 @@
|
||||
import { Injectable, TemplateRef } from '@angular/core';
|
||||
import {
|
||||
ActionConfig,
|
||||
getParam,
|
||||
IFilterGroup,
|
||||
INestedFilter,
|
||||
keyChecker,
|
||||
@ -15,7 +16,7 @@ import {
|
||||
import {
|
||||
annotationDefaultColorConfig,
|
||||
AnnotationShapeMap,
|
||||
Dossier,
|
||||
DOSSIER_ID,
|
||||
File,
|
||||
IFileAttributeConfig,
|
||||
ProcessingType,
|
||||
@ -39,10 +40,12 @@ import { DefaultColorsService } from '@services/entity-services/default-colors.s
|
||||
import { map } from 'rxjs/operators';
|
||||
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { DossiersService } from '@services/dossiers/dossiers.service';
|
||||
|
||||
@Injectable()
|
||||
export class ConfigService {
|
||||
readonly listingMode$: Observable<ListingMode>;
|
||||
readonly dossierId = getParam(DOSSIER_ID);
|
||||
private readonly _listingMode$ = new BehaviorSubject<ListingMode>(ListingModes.table);
|
||||
|
||||
constructor(
|
||||
@ -55,6 +58,7 @@ export class ConfigService {
|
||||
private readonly _defaultColorsService: DefaultColorsService,
|
||||
private readonly _dictionariesMapService: DictionariesMapService,
|
||||
private readonly _userPreferenceService: UserPreferenceService,
|
||||
private readonly _dossiersService: DossiersService,
|
||||
) {
|
||||
this.listingMode$ = this._listingMode$.asObservable();
|
||||
|
||||
@ -71,14 +75,18 @@ export class ConfigService {
|
||||
this._userPreferenceService.saveFilesListingMode(listingMode);
|
||||
}
|
||||
|
||||
workflowConfig(dossier: Dossier): WorkflowConfig<File, WorkflowFileStatus> {
|
||||
get #dossier() {
|
||||
return this._dossiersService.find(this.dossierId);
|
||||
}
|
||||
|
||||
workflowConfig(): WorkflowConfig<File, WorkflowFileStatus> {
|
||||
const { NEW, UNDER_REVIEW, UNDER_APPROVAL, APPROVED } = WorkflowFileStatuses;
|
||||
|
||||
const newColumn: WorkflowColumn<File, typeof NEW> = {
|
||||
label: workflowFileStatusTranslations[NEW],
|
||||
key: NEW,
|
||||
enterFn: files => this._bulkActionsService.setToNew(files),
|
||||
enterPredicate: files => this._permissionsService.canSetToNew(files, dossier),
|
||||
enterPredicate: files => this._permissionsService.canSetToNew(files, this.#dossier),
|
||||
color: '#D3D5DA',
|
||||
entities: new BehaviorSubject([]),
|
||||
};
|
||||
@ -93,11 +101,15 @@ export class ConfigService {
|
||||
await this._bulkActionsService.assignToMe(files);
|
||||
}
|
||||
},
|
||||
enterPredicate: files =>
|
||||
this._permissionsService.canSetUnderReview(files, dossier) ||
|
||||
this._permissionsService.canAssignToSelf(files, dossier) ||
|
||||
this._permissionsService.canAssignUser(files, dossier) ||
|
||||
this._permissionsService.canUndoApproval(files, dossier),
|
||||
enterPredicate: files => {
|
||||
const dossier = this.#dossier;
|
||||
return (
|
||||
this._permissionsService.canSetUnderReview(files, dossier) ||
|
||||
this._permissionsService.canAssignToSelf(files, dossier) ||
|
||||
this._permissionsService.canAssignUser(files, dossier) ||
|
||||
this._permissionsService.canUndoApproval(files, dossier)
|
||||
);
|
||||
},
|
||||
key: UNDER_REVIEW,
|
||||
color: '#FDBD00',
|
||||
entities: new BehaviorSubject([]),
|
||||
@ -106,8 +118,12 @@ export class ConfigService {
|
||||
const underApprovalColumn: WorkflowColumn<File, typeof UNDER_APPROVAL> = {
|
||||
label: workflowFileStatusTranslations[UNDER_APPROVAL],
|
||||
enterFn: files => this._bulkActionsService.setToUnderApproval(files),
|
||||
enterPredicate: files =>
|
||||
this._permissionsService.canSetUnderApproval(files, dossier) || this._permissionsService.canUndoApproval(files, dossier),
|
||||
enterPredicate: files => {
|
||||
const dossier = this.#dossier;
|
||||
return (
|
||||
this._permissionsService.canSetUnderApproval(files, dossier) || this._permissionsService.canUndoApproval(files, dossier)
|
||||
);
|
||||
},
|
||||
key: UNDER_APPROVAL,
|
||||
color: '#374C81',
|
||||
entities: new BehaviorSubject([]),
|
||||
@ -116,8 +132,12 @@ export class ConfigService {
|
||||
const approvedColumn: WorkflowColumn<File, typeof APPROVED> = {
|
||||
label: workflowFileStatusTranslations[APPROVED],
|
||||
enterFn: files => this._bulkActionsService.approve(files),
|
||||
enterPredicate: files =>
|
||||
this._permissionsService.isReadyForApproval(files, dossier) && this._permissionsService.canBeApproved(files, dossier),
|
||||
enterPredicate: files => {
|
||||
const dossier = this.#dossier;
|
||||
return (
|
||||
this._permissionsService.isReadyForApproval(files, dossier) && this._permissionsService.canBeApproved(files, dossier)
|
||||
);
|
||||
},
|
||||
key: APPROVED,
|
||||
color: '#48C9F7',
|
||||
entities: new BehaviorSubject([]),
|
||||
|
||||
@ -90,7 +90,7 @@ export class DossierOverviewScreenComponent extends ListingComponent<File> imple
|
||||
super();
|
||||
this.dossier$ = _dossiersService.getEntityChanged$(this.dossierId).pipe(tap(dossier => (this.#currentDossier = dossier)));
|
||||
this.#currentDossier = _dossiersService.find(this.dossierId);
|
||||
this.workflowConfig = configService.workflowConfig(this.#currentDossier);
|
||||
this.workflowConfig = configService.workflowConfig();
|
||||
this.dossierTemplateId = this.#currentDossier.dossierTemplateId;
|
||||
this.files$ = merge(this.#files$, this.#dossierFilesChange$).pipe(shareLast());
|
||||
this._updateFileAttributes();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user