RED-3796: Handle inactive dossier templates
This commit is contained in:
parent
914eac0ca0
commit
c3bf6c08ae
@ -69,7 +69,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<iqser-icon-button
|
<iqser-icon-button
|
||||||
(action)="newDossier()"
|
(action)="newDossier()"
|
||||||
*ngIf="permissionsService.canCreateDossier()"
|
*ngIf="permissionsService.canCreateDossier(dossierTemplate)"
|
||||||
[label]="'dashboard.empty-template.new-dossier' | translate"
|
[label]="'dashboard.empty-template.new-dossier' | translate"
|
||||||
[type]="iconButtonTypes.primary"
|
[type]="iconButtonTypes.primary"
|
||||||
icon="iqser:plus"
|
icon="iqser:plus"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Injectable, TemplateRef } from '@angular/core';
|
import { Injectable, TemplateRef } from '@angular/core';
|
||||||
import { ButtonConfig, IFilterGroup, INestedFilter, keyChecker, NestedFilter, TableColumnConfig } from '@iqser/common-ui';
|
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 { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { UserPreferenceService } from '@services/user-preference.service';
|
import { UserPreferenceService } from '@services/user-preference.service';
|
||||||
@ -40,12 +40,12 @@ export class ConfigService {
|
|||||||
return this._userService.currentUser;
|
return this._userService.currentUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
buttonsConfig(dossierTemplateId: string): ButtonConfig[] {
|
buttonsConfig(dossierTemplate: DossierTemplate): ButtonConfig[] {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
label: _('dossier-listing.add-new'),
|
label: _('dossier-listing.add-new'),
|
||||||
action: () => this._openAddDossierDialog(dossierTemplateId),
|
action: () => this._openAddDossierDialog(dossierTemplate.id),
|
||||||
hide: !this._permissionsService.canCreateDossier(),
|
hide: !this._permissionsService.canCreateDossier(dossierTemplate),
|
||||||
icon: 'iqser:plus',
|
icon: 'iqser:plus',
|
||||||
type: 'primary',
|
type: 'primary',
|
||||||
helpModeKey: 'new_dossier_button',
|
helpModeKey: 'new_dossier_button',
|
||||||
|
|||||||
@ -12,13 +12,13 @@
|
|||||||
<iqser-table
|
<iqser-table
|
||||||
(noDataAction)="openAddDossierDialog()"
|
(noDataAction)="openAddDossierDialog()"
|
||||||
[hasScrollButton]="true"
|
[hasScrollButton]="true"
|
||||||
|
[helpModeKey]="'dossier'"
|
||||||
[itemSize]="85"
|
[itemSize]="85"
|
||||||
[noDataButtonLabel]="'dossier-listing.no-data.action' | translate"
|
[noDataButtonLabel]="'dossier-listing.no-data.action' | translate"
|
||||||
[noDataText]="'dossier-listing.no-data.title' | translate"
|
[noDataText]="'dossier-listing.no-data.title' | translate"
|
||||||
[noMatchText]="'dossier-listing.no-match.title' | translate"
|
[noMatchText]="'dossier-listing.no-match.title' | translate"
|
||||||
[showNoDataButton]="permissionsService.canCreateDossier()"
|
[showNoDataButton]="permissionsService.canCreateDossier(dossierTemplate)"
|
||||||
[tableColumnConfigs]="tableColumnConfigs"
|
[tableColumnConfigs]="tableColumnConfigs"
|
||||||
[helpModeKey]="'dossier'"
|
|
||||||
noDataIcon="red:folder"
|
noDataIcon="red:folder"
|
||||||
></iqser-table>
|
></iqser-table>
|
||||||
</div>
|
</div>
|
||||||
@ -30,7 +30,7 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<ng-template #needsWorkFilterTemplate let-filter="filter">
|
<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>
|
||||||
|
|
||||||
<ng-template #tableItemTemplate let-dossier="entity">
|
<ng-template #tableItemTemplate let-dossier="entity">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
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 { PermissionsService } from '@services/permissions.service';
|
||||||
import { ButtonConfig, DefaultListingServices, ListingComponent, OnAttach, TableComponent } from '@iqser/common-ui';
|
import { ButtonConfig, DefaultListingServices, ListingComponent, OnAttach, TableComponent } from '@iqser/common-ui';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
@ -9,6 +9,7 @@ import { tap } from 'rxjs/operators';
|
|||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { UserPreferenceService } from '@services/user-preference.service';
|
import { UserPreferenceService } from '@services/user-preference.service';
|
||||||
import { SharedDialogService } from '@shared/services/dialog.service';
|
import { SharedDialogService } from '@shared/services/dialog.service';
|
||||||
|
import { DossierTemplatesService } from '../../../services/dossier-templates/dossier-templates.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './dossiers-listing-screen.component.html',
|
templateUrl: './dossiers-listing-screen.component.html',
|
||||||
@ -20,7 +21,7 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> im
|
|||||||
readonly tableColumnConfigs = this._configService.tableConfig;
|
readonly tableColumnConfigs = this._configService.tableConfig;
|
||||||
readonly tableHeaderLabel = _('dossier-listing.table-header.title');
|
readonly tableHeaderLabel = _('dossier-listing.table-header.title');
|
||||||
readonly buttonConfigs: ButtonConfig[];
|
readonly buttonConfigs: ButtonConfig[];
|
||||||
readonly dossierTemplateId: string;
|
readonly dossierTemplate: DossierTemplate;
|
||||||
@ViewChild('needsWorkFilterTemplate', {
|
@ViewChild('needsWorkFilterTemplate', {
|
||||||
read: TemplateRef,
|
read: TemplateRef,
|
||||||
static: true,
|
static: true,
|
||||||
@ -36,22 +37,24 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> im
|
|||||||
private readonly _dialogService: SharedDialogService,
|
private readonly _dialogService: SharedDialogService,
|
||||||
private readonly _activeDossiersService: ActiveDossiersService,
|
private readonly _activeDossiersService: ActiveDossiersService,
|
||||||
private readonly _userPreferenceService: UserPreferenceService,
|
private readonly _userPreferenceService: UserPreferenceService,
|
||||||
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
) {
|
) {
|
||||||
super(_injector);
|
super(_injector);
|
||||||
this.dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID);
|
const dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID);
|
||||||
this.buttonConfigs = this._configService.buttonsConfig(this.dossierTemplateId);
|
this.dossierTemplate = this._dossierTemplatesService.find(dossierTemplateId);
|
||||||
this.entitiesService.setEntities(this._activeDossiersService.all.filter(d => d.dossierTemplateId === this.dossierTemplateId));
|
this.buttonConfigs = this._configService.buttonsConfig(this.dossierTemplate);
|
||||||
|
this.entitiesService.setEntities(this._activeDossiersService.all.filter(d => d.dossierTemplateId === this.dossierTemplate.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
openAddDossierDialog(): void {
|
openAddDossierDialog(): void {
|
||||||
this._dialogService.openDialog('addDossier', null, { dossierTemplateId: this.dossierTemplateId });
|
this._dialogService.openDialog('addDossier', null, { dossierTemplateId: this.dossierTemplate.id });
|
||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit(): Promise<void> {
|
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.entitiesService.all$.pipe(tap(() => this._computeAllFilters())).subscribe();
|
||||||
this.addSubscription = this._activeDossiersService.all$
|
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();
|
.subscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,15 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { UserService } from './user.service';
|
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 { FilesMapService } from '@services/files/files-map.service';
|
||||||
import { FeaturesService } from '@services/features.service';
|
import { FeaturesService } from '@services/features.service';
|
||||||
|
|
||||||
@ -196,8 +205,8 @@ export class PermissionsService {
|
|||||||
return this.isOwner(dossier) || (this.isManager() && this.isDossierMember(dossier));
|
return this.isOwner(dossier) || (this.isManager() && this.isDossierMember(dossier));
|
||||||
}
|
}
|
||||||
|
|
||||||
canCreateDossier(): boolean {
|
canCreateDossier(dossierTemplate: { dossierTemplateStatus: DossierTemplateStatus }): boolean {
|
||||||
return this.isManager();
|
return dossierTemplate.dossierTemplateStatus === DossierTemplateStatuses.ACTIVE && this.isManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
canArchiveDossier(dossier: Dossier): boolean {
|
canArchiveDossier(dossier: Dossier): boolean {
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { IListable, List } from '@iqser/common-ui';
|
import { IListable, List } from '@iqser/common-ui';
|
||||||
import { CountByStatus, CountPerProcessingStatus, CountPerWorkflowStatus, IDashboardStats } from './dashboard-stats';
|
import { CountByStatus, CountPerProcessingStatus, CountPerWorkflowStatus, IDashboardStats } from './dashboard-stats';
|
||||||
import { DonutChartConfig, StatusSorter } from '../shared';
|
import { DonutChartConfig, StatusSorter } from '../shared';
|
||||||
|
import { DossierTemplateStatus } from './constants';
|
||||||
|
|
||||||
export class DashboardStats implements IListable, IDashboardStats {
|
export class DashboardStats implements IListable, IDashboardStats {
|
||||||
readonly dossierCountByStatus: List<CountByStatus>;
|
readonly dossierCountByStatus: List<CountByStatus>;
|
||||||
@ -19,6 +20,7 @@ export class DashboardStats implements IListable, IDashboardStats {
|
|||||||
readonly numberOfSoftDeletedFiles: number;
|
readonly numberOfSoftDeletedFiles: number;
|
||||||
readonly dossiersChartConfig: DonutChartConfig[];
|
readonly dossiersChartConfig: DonutChartConfig[];
|
||||||
readonly documentsChartConfig: DonutChartConfig[];
|
readonly documentsChartConfig: DonutChartConfig[];
|
||||||
|
readonly dossierTemplateStatus: DossierTemplateStatus;
|
||||||
|
|
||||||
constructor(stats: IDashboardStats) {
|
constructor(stats: IDashboardStats) {
|
||||||
this.dossierCountByStatus = stats.dossierCountByStatus;
|
this.dossierCountByStatus = stats.dossierCountByStatus;
|
||||||
@ -35,6 +37,7 @@ export class DashboardStats implements IListable, IDashboardStats {
|
|||||||
this.numberOfPages = stats.numberOfPages;
|
this.numberOfPages = stats.numberOfPages;
|
||||||
this.numberOfPeople = stats.numberOfPeople;
|
this.numberOfPeople = stats.numberOfPeople;
|
||||||
this.numberOfSoftDeletedFiles = stats.numberOfSoftDeletedFiles;
|
this.numberOfSoftDeletedFiles = stats.numberOfSoftDeletedFiles;
|
||||||
|
this.dossierTemplateStatus = stats.dossierTemplateStatus;
|
||||||
|
|
||||||
this.dossiersChartConfig = this.#dossiersChartConfig;
|
this.dossiersChartConfig = this.#dossiersChartConfig;
|
||||||
this.documentsChartConfig = this.#documentsChartConfig;
|
this.documentsChartConfig = this.#documentsChartConfig;
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { ProcessingFileStatus, WorkflowFileStatus } from '../files';
|
import { ProcessingFileStatus, WorkflowFileStatus } from '../files';
|
||||||
import { List } from '@iqser/common-ui';
|
import { List } from '@iqser/common-ui';
|
||||||
|
import { DossierTemplateStatus } from './constants';
|
||||||
|
|
||||||
interface Counter {
|
interface Counter {
|
||||||
readonly count: number;
|
readonly count: number;
|
||||||
@ -32,4 +33,5 @@ export interface IDashboardStats {
|
|||||||
readonly numberOfPages: number;
|
readonly numberOfPages: number;
|
||||||
readonly numberOfPeople: number;
|
readonly numberOfPeople: number;
|
||||||
readonly numberOfSoftDeletedFiles: number;
|
readonly numberOfSoftDeletedFiles: number;
|
||||||
|
readonly dossierTemplateStatus: DossierTemplateStatus;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user