diff --git a/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.html b/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.html index 837856c2c..1f906ac14 100644 --- a/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.html +++ b/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.html @@ -69,7 +69,7 @@ this._openAddDossierDialog(dossierTemplateId), - hide: !this._permissionsService.canCreateDossier(), + action: () => this._openAddDossierDialog(dossierTemplate.id), + hide: !this._permissionsService.canCreateDossier(dossierTemplate), icon: 'iqser:plus', type: 'primary', helpModeKey: 'new_dossier_button', diff --git a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html index c03f1e73e..41d6fd32e 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html +++ b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html @@ -12,13 +12,13 @@ @@ -30,7 +30,7 @@ - + diff --git a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts index 120154962..b855c5db3 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit, TemplateRef, ViewChild } from '@angular/core'; -import { Dossier, DOSSIER_TEMPLATE_ID } from '@red/domain'; +import { Dossier, DOSSIER_TEMPLATE_ID, DossierTemplate } from '@red/domain'; import { PermissionsService } from '@services/permissions.service'; import { ButtonConfig, DefaultListingServices, ListingComponent, OnAttach, TableComponent } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -9,6 +9,7 @@ import { tap } from 'rxjs/operators'; import { Router } from '@angular/router'; import { UserPreferenceService } from '@services/user-preference.service'; import { SharedDialogService } from '@shared/services/dialog.service'; +import { DossierTemplatesService } from '../../../services/dossier-templates/dossier-templates.service'; @Component({ templateUrl: './dossiers-listing-screen.component.html', @@ -20,7 +21,7 @@ export class DossiersListingScreenComponent extends ListingComponent im readonly tableColumnConfigs = this._configService.tableConfig; readonly tableHeaderLabel = _('dossier-listing.table-header.title'); readonly buttonConfigs: ButtonConfig[]; - readonly dossierTemplateId: string; + readonly dossierTemplate: DossierTemplate; @ViewChild('needsWorkFilterTemplate', { read: TemplateRef, static: true, @@ -36,22 +37,24 @@ export class DossiersListingScreenComponent extends ListingComponent im private readonly _dialogService: SharedDialogService, private readonly _activeDossiersService: ActiveDossiersService, private readonly _userPreferenceService: UserPreferenceService, + private readonly _dossierTemplatesService: DossierTemplatesService, ) { super(_injector); - this.dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID); - this.buttonConfigs = this._configService.buttonsConfig(this.dossierTemplateId); - this.entitiesService.setEntities(this._activeDossiersService.all.filter(d => d.dossierTemplateId === this.dossierTemplateId)); + const dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID); + this.dossierTemplate = this._dossierTemplatesService.find(dossierTemplateId); + this.buttonConfigs = this._configService.buttonsConfig(this.dossierTemplate); + this.entitiesService.setEntities(this._activeDossiersService.all.filter(d => d.dossierTemplateId === this.dossierTemplate.id)); } openAddDossierDialog(): void { - this._dialogService.openDialog('addDossier', null, { dossierTemplateId: this.dossierTemplateId }); + this._dialogService.openDialog('addDossier', null, { dossierTemplateId: this.dossierTemplate.id }); } async ngOnInit(): Promise { - await this._userPreferenceService.saveLastDossierTemplate(this.dossierTemplateId); + await this._userPreferenceService.saveLastDossierTemplate(this.dossierTemplate.id); this.addSubscription = this.entitiesService.all$.pipe(tap(() => this._computeAllFilters())).subscribe(); this.addSubscription = this._activeDossiersService.all$ - .pipe(tap(dossiers => this.entitiesService.setEntities(dossiers.filter(d => d.dossierTemplateId === this.dossierTemplateId)))) + .pipe(tap(dossiers => this.entitiesService.setEntities(dossiers.filter(d => d.dossierTemplateId === this.dossierTemplate.id)))) .subscribe(); } diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 8462ab5b4..f0d138521 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -1,6 +1,15 @@ import { Injectable } from '@angular/core'; import { UserService } from './user.service'; -import { Dictionary, Dossier, DOSSIERS_ARCHIVE, File, IComment, IDossier } from '@red/domain'; +import { + Dictionary, + Dossier, + DOSSIERS_ARCHIVE, + DossierTemplateStatus, + DossierTemplateStatuses, + File, + IComment, + IDossier, +} from '@red/domain'; import { FilesMapService } from '@services/files/files-map.service'; import { FeaturesService } from '@services/features.service'; @@ -196,8 +205,8 @@ export class PermissionsService { return this.isOwner(dossier) || (this.isManager() && this.isDossierMember(dossier)); } - canCreateDossier(): boolean { - return this.isManager(); + canCreateDossier(dossierTemplate: { dossierTemplateStatus: DossierTemplateStatus }): boolean { + return dossierTemplate.dossierTemplateStatus === DossierTemplateStatuses.ACTIVE && this.isManager(); } canArchiveDossier(dossier: Dossier): boolean { diff --git a/libs/red-domain/src/lib/dossier-templates/dashboard-stats.model.ts b/libs/red-domain/src/lib/dossier-templates/dashboard-stats.model.ts index a44c9c7f7..204ebc8f0 100644 --- a/libs/red-domain/src/lib/dossier-templates/dashboard-stats.model.ts +++ b/libs/red-domain/src/lib/dossier-templates/dashboard-stats.model.ts @@ -1,6 +1,7 @@ import { IListable, List } from '@iqser/common-ui'; import { CountByStatus, CountPerProcessingStatus, CountPerWorkflowStatus, IDashboardStats } from './dashboard-stats'; import { DonutChartConfig, StatusSorter } from '../shared'; +import { DossierTemplateStatus } from './constants'; export class DashboardStats implements IListable, IDashboardStats { readonly dossierCountByStatus: List; @@ -19,6 +20,7 @@ export class DashboardStats implements IListable, IDashboardStats { readonly numberOfSoftDeletedFiles: number; readonly dossiersChartConfig: DonutChartConfig[]; readonly documentsChartConfig: DonutChartConfig[]; + readonly dossierTemplateStatus: DossierTemplateStatus; constructor(stats: IDashboardStats) { this.dossierCountByStatus = stats.dossierCountByStatus; @@ -35,6 +37,7 @@ export class DashboardStats implements IListable, IDashboardStats { this.numberOfPages = stats.numberOfPages; this.numberOfPeople = stats.numberOfPeople; this.numberOfSoftDeletedFiles = stats.numberOfSoftDeletedFiles; + this.dossierTemplateStatus = stats.dossierTemplateStatus; this.dossiersChartConfig = this.#dossiersChartConfig; this.documentsChartConfig = this.#documentsChartConfig; diff --git a/libs/red-domain/src/lib/dossier-templates/dashboard-stats.ts b/libs/red-domain/src/lib/dossier-templates/dashboard-stats.ts index 6233e2c5d..cf90e0545 100644 --- a/libs/red-domain/src/lib/dossier-templates/dashboard-stats.ts +++ b/libs/red-domain/src/lib/dossier-templates/dashboard-stats.ts @@ -1,5 +1,6 @@ import { ProcessingFileStatus, WorkflowFileStatus } from '../files'; import { List } from '@iqser/common-ui'; +import { DossierTemplateStatus } from './constants'; interface Counter { readonly count: number; @@ -32,4 +33,5 @@ export interface IDashboardStats { readonly numberOfPages: number; readonly numberOfPeople: number; readonly numberOfSoftDeletedFiles: number; + readonly dossierTemplateStatus: DossierTemplateStatus; }