RED-3796: Handle inactive dossier templates

This commit is contained in:
Adina Țeudan 2022-06-07 16:06:49 +03:00
parent 914eac0ca0
commit c3bf6c08ae
7 changed files with 36 additions and 19 deletions

View File

@ -69,7 +69,7 @@
</div>
<iqser-icon-button
(action)="newDossier()"
*ngIf="permissionsService.canCreateDossier()"
*ngIf="permissionsService.canCreateDossier(dossierTemplate)"
[label]="'dashboard.empty-template.new-dossier' | translate"
[type]="iconButtonTypes.primary"
icon="iqser:plus"

View File

@ -1,6 +1,6 @@
import { Injectable, TemplateRef } from '@angular/core';
import { ButtonConfig, IFilterGroup, INestedFilter, keyChecker, NestedFilter, TableColumnConfig } from '@iqser/common-ui';
import { Dossier, StatusSorter, User, WorkflowFileStatus } from '@red/domain';
import { Dossier, DossierTemplate, StatusSorter, User, WorkflowFileStatus } from '@red/domain';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { TranslateService } from '@ngx-translate/core';
import { UserPreferenceService } from '@services/user-preference.service';
@ -40,12 +40,12 @@ export class ConfigService {
return this._userService.currentUser;
}
buttonsConfig(dossierTemplateId: string): ButtonConfig[] {
buttonsConfig(dossierTemplate: DossierTemplate): ButtonConfig[] {
return [
{
label: _('dossier-listing.add-new'),
action: () => 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',

View File

@ -12,13 +12,13 @@
<iqser-table
(noDataAction)="openAddDossierDialog()"
[hasScrollButton]="true"
[helpModeKey]="'dossier'"
[itemSize]="85"
[noDataButtonLabel]="'dossier-listing.no-data.action' | translate"
[noDataText]="'dossier-listing.no-data.title' | translate"
[noMatchText]="'dossier-listing.no-match.title' | translate"
[showNoDataButton]="permissionsService.canCreateDossier()"
[showNoDataButton]="permissionsService.canCreateDossier(dossierTemplate)"
[tableColumnConfigs]="tableColumnConfigs"
[helpModeKey]="'dossier'"
noDataIcon="red:folder"
></iqser-table>
</div>
@ -30,7 +30,7 @@
</section>
<ng-template #needsWorkFilterTemplate let-filter="filter">
<redaction-type-filter [dossierTemplateId]="dossierTemplateId" [filter]="filter"></redaction-type-filter>
<redaction-type-filter [dossierTemplateId]="dossierTemplate.id" [filter]="filter"></redaction-type-filter>
</ng-template>
<ng-template #tableItemTemplate let-dossier="entity">

View File

@ -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<Dossier> 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<Dossier> 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<void> {
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();
}

View File

@ -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 {

View File

@ -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<CountByStatus>;
@ -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;

View File

@ -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;
}