RED-3796: Handle inactive dossier templates
This commit is contained in:
parent
914eac0ca0
commit
c3bf6c08ae
@ -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"
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user