diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html index b104af22a..f9c4a5cb7 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html @@ -1,14 +1,14 @@
-
+
- + - {{ userId | name : { defaultValue: 'initials-avatar.unassigned' | translate } }} + {{ userId | name: { defaultValue: 'initials-avatar.unassigned' | translate } }} diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts index 2ac3bf1ea..0ebc1e6f9 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts @@ -1,15 +1,15 @@ import { Component, Inject } from '@angular/core'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { UserService } from '@users/user.service'; -import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; import { FormBuilder, Validators } from '@angular/forms'; -import { File, User, WorkflowFileStatus, WorkflowFileStatuses } from '@red/domain'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { FilesService } from '@services/files/files.service'; -import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; -import { PermissionsService } from '@services/permissions.service'; -import { moveElementInArray } from '@utils/functions'; +import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; import { getCurrentUser } from '@iqser/common-ui/lib/users'; +import { File, User, WorkflowFileStatus, WorkflowFileStatuses } from '@red/domain'; +import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; +import { FilesService } from '@services/files/files.service'; +import { PermissionsService } from '@services/permissions.service'; +import { UserService } from '@users/user.service'; +import { moveElementInArray } from '@utils/functions'; class DialogData { targetStatus: WorkflowFileStatus; @@ -23,10 +23,11 @@ class DialogData { templateUrl: './assign-reviewer-approver-dialog.component.html', }) export class AssignReviewerApproverDialogComponent { + readonly #dossier = this._activeDossiersService.find(this.data.files[0].dossierId); + readonly #isApprover = this.permissionsService.isApprover(this.#dossier); readonly iconButtonTypes = IconButtonTypes; readonly currentUser = getCurrentUser(); readonly mode = this.#mode; - readonly dossier = this._activeDossiersService.find(this.data.files[0].dossierId); readonly userOptions = this.#userOptions; readonly form = this.#form; @@ -70,32 +71,42 @@ export class AssignReviewerApproverDialogComponent { get #userOptions() { const unassignUser = this.#canUnassignUser && this.data.withUnassignedOption ? ['undefined'] : []; - const cannotAssignUser = !this.permissionsService.canAssignUser(this.data.files, this.dossier); + const cannotAssignUser = !this.permissionsService.canAssignUser(this.data.files, this.#dossier); if (this.mode === 'reviewer') { - if (this.dossier.hasReviewers && cannotAssignUser) { + if (this.#dossier.hasReviewers && cannotAssignUser) { return [...unassignUser]; } - return this.#customSort([...this.dossier.memberIds, ...unassignUser]); + return this.#customSort([...this.#dossier.memberIds, ...unassignUser]); } - if (this.dossier.approverIds.length > 1 && cannotAssignUser) { + if (this.#dossier.approverIds.length > 1 && cannotAssignUser) { return [...unassignUser]; } - return this.#customSort([...this.dossier.approverIds, ...unassignUser]); + return this.#customSort([...this.#dossier.approverIds, ...unassignUser]); } get #canUnassignUser() { - return this.permissionsService.canUnassignUser(this.data.files, this.dossier); + return this.permissionsService.canUnassignUser(this.data.files, this.#dossier); } - get #user(): string { + get #user() { if (this.data.files.every(file => !file.assignee)) { return null; } - return this.data.files.length === 1 ? this.data.files[0].assignee : this.currentUser.id; + + if (this.mode === 'reviewer') { + return this.data.files.length === 1 ? this.data.files[0].assignee : this.currentUser.id; + } + + const assignee = this.data.files[0].assignee; + if (this.data.files.length === 1 && this.permissionsService.isApprover(this.#dossier, assignee)) { + return assignee; + } + + return this.#isApprover ? this.currentUser.id : this.userOptions.at(0); } get #form() { @@ -129,7 +140,9 @@ export class AssignReviewerApproverDialogComponent { #customSort(ids: string[]) { let sorted = ids.sort((a, b) => this.userService.getName(a).localeCompare(this.userService.getName(b))); - sorted = moveElementInArray(sorted, this.currentUser.id, 0); + if (this.mode === 'reviewer' || (this.mode === 'approver' && this.#isApprover)) { + sorted = moveElementInArray(sorted, this.currentUser.id, 0); + } if (sorted.includes('undefined')) { sorted = moveElementInArray(sorted, 'undefined', 1); diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 9d38cb118..e842766e4 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -232,8 +232,8 @@ export class PermissionsService { return dossier.ownerId === this.#userId; } - isApprover(dossier: Dossier): boolean { - return dossier.approverIds.indexOf(this.#userId) >= 0; + isApprover(dossier: Dossier, userId = this.#userId): boolean { + return dossier.approverIds.indexOf(userId) >= 0; } isDossierMember(dossier: IDossier): boolean {