RED-4032: Assignment permissions
This commit is contained in:
parent
ab1399c45a
commit
14193347fb
@ -47,6 +47,9 @@ export class AssignReviewerApproverDialogComponent {
|
||||
|
||||
get userOptions() {
|
||||
const unassignUser = this._canUnassignFiles && this.data.withUnassignedOption ? [undefined] : [];
|
||||
if (!this.permissionsService.canAssignUser(this.data.files, this.dossier)) {
|
||||
return [...unassignUser];
|
||||
}
|
||||
return this.data.mode === 'approver'
|
||||
? [...this.dossier.approverIds, ...unassignUser]
|
||||
: [...this.dossier.memberIds, ...unassignUser];
|
||||
|
||||
@ -3,13 +3,13 @@ import { List } from '@iqser/common-ui';
|
||||
import { ActivatedRouteSnapshot, IsActiveMatchOptions, NavigationEnd, Router } from '@angular/router';
|
||||
import { BehaviorSubject, Observable, of } from 'rxjs';
|
||||
import { filter, pluck } from 'rxjs/operators';
|
||||
import { FilesMapService } from '@services/files/files-map.service';
|
||||
import { FilesMapService } from './files/files-map.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, FILE_ID } from '@red/domain';
|
||||
import { DossiersService } from '@services/dossiers/dossiers.service';
|
||||
import { dossiersServiceResolver } from '@services/entity-services/dossiers.service.provider';
|
||||
import { FeaturesService } from '@services/features.service';
|
||||
import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service';
|
||||
import { DossiersService } from './dossiers/dossiers.service';
|
||||
import { dossiersServiceResolver } from './entity-services/dossiers.service.provider';
|
||||
import { FeaturesService } from './features.service';
|
||||
import { DashboardStatsService } from './dossier-templates/dashboard-stats.service';
|
||||
|
||||
export type RouterLinkActiveOptions = { exact: boolean } | IsActiveMatchOptions;
|
||||
export type BreadcrumbDisplayType = 'text' | 'dropdown';
|
||||
|
||||
@ -4,7 +4,7 @@ import { Injectable, Injector } from '@angular/core';
|
||||
import { NGXLogger } from 'ngx-logger';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map, switchMap, tap } from 'rxjs/operators';
|
||||
import { DossierStatesService } from '@services/entity-services/dossier-states.service';
|
||||
import { DossierStatesService } from '../entity-services/dossier-states.service';
|
||||
|
||||
const templatesSorter = (a: DashboardStats, b: DashboardStats) => {
|
||||
if (a.numberOfActiveDossiers > 0 && b.numberOfActiveDossiers === 0) {
|
||||
|
||||
@ -6,7 +6,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ActiveDossiersService } from './active-dossiers.service';
|
||||
import { DossiersService } from './dossiers.service';
|
||||
import { FilesMapService } from '../files/files-map.service';
|
||||
import { FeaturesService } from '@services/features.service';
|
||||
import { FeaturesService } from '../features.service';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class ArchivedDossiersService extends DossiersService {
|
||||
|
||||
@ -7,7 +7,7 @@ import { DossierStatsService } from './dossier-stats.service';
|
||||
import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { NGXLogger } from 'ngx-logger';
|
||||
import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service';
|
||||
import { DashboardStatsService } from '../dossier-templates/dashboard-stats.service';
|
||||
|
||||
const CONFLICT_MSG = _('add-dossier-dialog.errors.dossier-already-exists');
|
||||
const GENERIC_MSG = _('add-dossier-dialog.errors.generic');
|
||||
|
||||
@ -2,9 +2,9 @@ import { Injectable, Injector } from '@angular/core';
|
||||
import { EntitiesService, mapEach, RequiredParam, Toaster, Validate } from '@iqser/common-ui';
|
||||
import { DossierState, IDossierState } from '@red/domain';
|
||||
import { EMPTY, forkJoin, Observable, switchMap } from 'rxjs';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
import { DossierTemplatesService } from '../dossier-templates/dossier-templates.service';
|
||||
import { catchError, defaultIfEmpty, tap } from 'rxjs/operators';
|
||||
import { DossierStatesMapService } from '@services/entity-services/dossier-states-map.service';
|
||||
import { DossierStatesMapService } from '../entity-services/dossier-states-map.service';
|
||||
import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
|
||||
|
||||
@ -6,11 +6,11 @@ import { forkJoin, map, Observable, of } from 'rxjs';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ConfigService } from '../config.service';
|
||||
import { PermissionsService } from '../permissions.service';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { UserService } from '@services/user.service';
|
||||
import { ActiveDossiersService } from '../dossiers/active-dossiers.service';
|
||||
import { UserService } from '../user.service';
|
||||
import { flatMap } from 'lodash-es';
|
||||
import { DossierStatsService } from '@services/dossiers/dossier-stats.service';
|
||||
import { FilesService } from '@services/files/files.service';
|
||||
import { DossierStatsService } from '../dossiers/dossier-stats.service';
|
||||
import { FilesService } from '../files/files.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
|
||||
@ -6,11 +6,11 @@ import { Dossier, INotification, Notification, NotificationTypes } from '@red/do
|
||||
import { map, switchMap, tap } from 'rxjs/operators';
|
||||
import { notificationsTranslations } from '@translations/notifications-translations';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { UserService } from '@services/user.service';
|
||||
import { UserService } from './user.service';
|
||||
import dayjs from 'dayjs';
|
||||
import { CHANGED_CHECK_INTERVAL } from '@utils/constants';
|
||||
import { BASE_HREF } from '../tokens';
|
||||
import { DossiersCacheService } from '@services/dossiers/dossiers-cache.service';
|
||||
import { DossiersCacheService } from './dossiers/dossiers-cache.service';
|
||||
|
||||
const INCLUDE_SEEN = false;
|
||||
|
||||
|
||||
@ -285,10 +285,8 @@ export class PermissionsService {
|
||||
return dossier.isActive && !file.excludedFromAutomaticAnalysis && this.isFileAssignee(file) && !file.isApproved;
|
||||
}
|
||||
|
||||
private _canAssignToSelf(file: File, dossier: Dossier): boolean {
|
||||
const precondition =
|
||||
dossier.isActive && this.isDossierMember(dossier) && !this.isFileAssignee(file) && !file.isError && !file.isProcessing;
|
||||
return precondition && (file.isNew || file.isUnderReview || (file.isUnderApproval && this.isApprover(dossier)));
|
||||
private _assignmentPrecondition(file: File, dossier: Dossier): boolean {
|
||||
return dossier.isActive && !file.isError && !file.isProcessing;
|
||||
}
|
||||
|
||||
private _canSetUnderApproval(file: File, dossier: Dossier): boolean {
|
||||
@ -303,14 +301,19 @@ export class PermissionsService {
|
||||
return dossier.isActive && file.canBeApproved && this.isFileAssignee(file);
|
||||
}
|
||||
|
||||
private _canAssignToSelf(file: File, dossier: Dossier): boolean {
|
||||
const precondition = this._assignmentPrecondition(file, dossier) && !this.isFileAssignee(file);
|
||||
return precondition && (this.isApprover(dossier) || (this.isDossierMember(dossier) && (file.isNew || file.isUnderReview)));
|
||||
}
|
||||
|
||||
private _canAssignUser(file: File, dossier: Dossier) {
|
||||
const precondition = dossier.isActive && !file.isProcessing && !file.isError && !file.isApproved && this.isApprover(dossier);
|
||||
const precondition = this._assignmentPrecondition(file, dossier);
|
||||
|
||||
if (precondition) {
|
||||
if ((file.isNew || file.isUnderReview) && dossier.hasReviewers) {
|
||||
if ((file.isNew || file.isUnderReview) && dossier.hasReviewers && this.isDossierMember(dossier)) {
|
||||
return true;
|
||||
}
|
||||
if (file.isUnderApproval && dossier.approverIds.length > 1) {
|
||||
if (file.isUnderApproval && dossier.approverIds.length > 1 && this.isApprover(dossier)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -318,7 +321,7 @@ export class PermissionsService {
|
||||
}
|
||||
|
||||
private _canUnassignUser(file: File, dossier: Dossier) {
|
||||
return dossier.isActive && (file.isUnderReview || file.isUnderApproval) && (this.isFileAssignee(file) || this.isApprover(dossier));
|
||||
return this._assignmentPrecondition(file, dossier) && !!file.assignee && (this.isApprover(dossier) || this.isFileAssignee(file));
|
||||
}
|
||||
|
||||
private _canSetToNew(file: File, dossier: Dossier): boolean {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user