diff --git a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts index 1ba3e00fc..75da1652e 100644 --- a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts @@ -22,6 +22,8 @@ import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digita import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component'; import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component'; import { UploadDictionaryDialogComponent } from '../dialogs/upload-dictionary-dialog/upload-dictionary-dialog.component'; +import { UserStatsService } from './user-stats.service'; +import { result } from 'lodash-es'; type DialogType = | 'confirm' @@ -73,19 +75,26 @@ export class AdminDialogService extends DialogService { private readonly _activeDossiersService: ActiveDossiersService, private readonly _loadingService: LoadingService, private readonly _userService: UserService, + private readonly _userStatsService: UserStatsService, private readonly _reportTemplateService: ReportTemplateService, ) { super(_dialog); } - deleteUsers(userIds: string[], cb?: () => Promise | void): void { + async deleteUsers(userIds: string[], cb?: () => Promise | void): Promise { + const userStats = await firstValueFrom(this._userStatsService.getOne(userIds[0])); + const data: IConfirmationDialogData = { title: _('confirm-delete-users.title'), question: _('confirm-delete-users.warning'), confirmationText: _('confirm-delete-users.delete'), denyText: _('confirm-delete-users.cancel'), titleColor: TitleColors.WARN, - translateParams: { usersCount: 1, dossiersCount: this._getUsersDossiersCount(userIds) }, + translateParams: { + usersCount: 1, + dossiersCount: userStats.numberOfDossierOwnerships, + documentsCount: userStats.numberOfAssignedFiles, + }, checkboxes: [ { value: false, label: _('confirm-delete-users.impacted-dossiers') }, { value: false, label: _('confirm-delete-users.impacted-documents') }, diff --git a/apps/red-ui/src/app/modules/admin/services/user-stats.service.ts b/apps/red-ui/src/app/modules/admin/services/user-stats.service.ts new file mode 100644 index 000000000..437648cac --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/services/user-stats.service.ts @@ -0,0 +1,10 @@ +import { StatsService } from '@iqser/common-ui'; +import { IUserStats, USER_ID, UserStats } from '@red/domain'; +import { Injectable } from '@angular/core'; + +@Injectable({ providedIn: 'root' }) +export class UserStatsService extends StatsService { + protected readonly _primaryKey = USER_ID; + protected readonly _entityClass = UserStats; + protected readonly _defaultModelPath = 'user-stats'; +} diff --git a/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts b/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts index 1a2856eea..139f9e126 100644 --- a/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts +++ b/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts @@ -1,6 +1,6 @@ import { inject, Injectable } from '@angular/core'; import { StatsService } from '@iqser/common-ui'; -import { DashboardStats, DOSSIER_ID, DossierStats, IDossierStats } from '@red/domain'; +import { DOSSIER_ID, DossierStats, IDossierStats } from '@red/domain'; import { Observable, of } from 'rxjs'; import { UserService } from '@users/user.service'; import { NGXLogger } from 'ngx-logger'; diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index be2d24c2d..e0115ef7e 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -642,7 +642,7 @@ "confirm-delete-users": { "cancel": "Keep {usersCount, plural, one{user} other{users}}", "delete": "Delete {usersCount, plural, one{user} other{users}}", - "impacted-documents": "All documents pending review from the {usersCount, plural, one{user} other{users}} will be impacted", + "impacted-documents": "{documentsCount} {documentsCount, plural, one{document} other{documents}} will be impacted", "impacted-dossiers": "{dossiersCount} {dossiersCount, plural, one{dossier} other{dossiers}} will be impacted", "title": "Delete {usersCount, plural, one{user} other{users}} from workspace", "toast-error": "Please confirm that you understand the consequences of this action.", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index a90fa21d7..faaf2073e 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -642,7 +642,7 @@ "confirm-delete-users": { "cancel": "Keep {usersCount, plural, one{user} other{users}}", "delete": "Delete {usersCount, plural, one{user} other{users}}", - "impacted-documents": "All documents pending review from the {usersCount, plural, one{user} other{users}} will be impacted", + "impacted-documents": "{documentsCount} {documentsCount, plural, one{document} other{documents}} will be impacted", "impacted-dossiers": "{dossiersCount} {dossiersCount, plural, one{dossier} other{dossiers}} will be impacted", "title": "Delete {usersCount, plural, one{user} other{users}} from workspace", "toast-error": "Please confirm that you understand the consequences of this action.", diff --git a/libs/common-ui b/libs/common-ui index 58382ddfe..fc8be33dc 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 58382ddfeed1d6d4d61f03abd1bbb0dd840afa94 +Subproject commit fc8be33dc6d33642ae207b6ae4c17a6ec254d11a diff --git a/libs/red-domain/src/lib/users/constants.ts b/libs/red-domain/src/lib/users/constants.ts new file mode 100644 index 000000000..f733950f5 --- /dev/null +++ b/libs/red-domain/src/lib/users/constants.ts @@ -0,0 +1 @@ +export const USER_ID = 'userId'; diff --git a/libs/red-domain/src/lib/users/index.ts b/libs/red-domain/src/lib/users/index.ts index b66d5cb35..50135cdbc 100644 --- a/libs/red-domain/src/lib/users/index.ts +++ b/libs/red-domain/src/lib/users/index.ts @@ -1,3 +1,6 @@ export * from './user.model'; export * from './profile'; export * from './types'; +export * from './user-stats'; +export * from './user-stats.model'; +export * from './constants'; diff --git a/libs/red-domain/src/lib/users/user-stats.model.ts b/libs/red-domain/src/lib/users/user-stats.model.ts new file mode 100644 index 000000000..da1b608ca --- /dev/null +++ b/libs/red-domain/src/lib/users/user-stats.model.ts @@ -0,0 +1,13 @@ +import { IUserStats } from './user-stats'; + +export class UserStats implements IUserStats { + readonly numberOfDossierMemberships: number; + readonly numberOfDossierOwnerships: number; + readonly numberOfAssignedFiles: number; + + constructor(userStats: IUserStats) { + this.numberOfAssignedFiles = userStats.numberOfAssignedFiles; + this.numberOfDossierOwnerships = userStats.numberOfAssignedFiles; + this.numberOfAssignedFiles = userStats.numberOfAssignedFiles; + } +} diff --git a/libs/red-domain/src/lib/users/user-stats.ts b/libs/red-domain/src/lib/users/user-stats.ts new file mode 100644 index 000000000..2613777f2 --- /dev/null +++ b/libs/red-domain/src/lib/users/user-stats.ts @@ -0,0 +1,5 @@ +export interface IUserStats { + numberOfDossierMemberships: number; + numberOfDossierOwnerships: number; + numberOfAssignedFiles: number; +}