RED-9866: remove version limit on ARCHIVE DOSSIER feature.
This commit is contained in:
parent
954fba26f7
commit
8d970779f5
@ -16,7 +16,7 @@ import { CompositeRouteGuard, DEFAULT_REDIRECT_KEY, IqserPermissionsGuard, Iqser
|
|||||||
import { TenantSelectComponent } from '@iqser/common-ui/lib/tenants';
|
import { TenantSelectComponent } from '@iqser/common-ui/lib/tenants';
|
||||||
import { doesNotHaveAnyRole, hasAnyRole, IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
import { doesNotHaveAnyRole, hasAnyRole, IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
||||||
import { CustomRouteReuseStrategy } from '@iqser/common-ui/lib/utils';
|
import { CustomRouteReuseStrategy } from '@iqser/common-ui/lib/utils';
|
||||||
import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE, FILE_ID } from '@red/domain';
|
import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ROUTE, FILE_ID } from '@red/domain';
|
||||||
import { RedRoleGuard } from '@users/red-role.guard';
|
import { RedRoleGuard } from '@users/red-role.guard';
|
||||||
import { Roles } from '@users/roles';
|
import { Roles } from '@users/roles';
|
||||||
import { mainGuard } from '@utils/main.guard';
|
import { mainGuard } from '@utils/main.guard';
|
||||||
@ -81,7 +81,6 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
|||||||
canActivate: [CompositeRouteGuard, loadArchivedDossiersGuard()],
|
canActivate: [CompositeRouteGuard, loadArchivedDossiersGuard()],
|
||||||
data: {
|
data: {
|
||||||
routeGuards: [FeaturesGuard],
|
routeGuards: [FeaturesGuard],
|
||||||
features: [DOSSIERS_ARCHIVE],
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -8,8 +8,7 @@ import { SpotlightSearchAction } from '@components/spotlight-search/spotlight-se
|
|||||||
import { filter, map, startWith } from 'rxjs/operators';
|
import { filter, map, startWith } from 'rxjs/operators';
|
||||||
import { getConfig, IqserPermissionsService } from '@iqser/common-ui';
|
import { getConfig, IqserPermissionsService } from '@iqser/common-ui';
|
||||||
import { BreadcrumbsService } from '@services/breadcrumbs.service';
|
import { BreadcrumbsService } from '@services/breadcrumbs.service';
|
||||||
import { FeaturesService } from '@services/features.service';
|
import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from '@red/domain';
|
||||||
import { ARCHIVE_ROUTE, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE } from '@red/domain';
|
|
||||||
import { Roles } from '@users/roles';
|
import { Roles } from '@users/roles';
|
||||||
import { REDDocumentViewer } from '../../modules/pdf-viewer/services/document-viewer.service';
|
import { REDDocumentViewer } from '../../modules/pdf-viewer/services/document-viewer.service';
|
||||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||||
@ -36,7 +35,6 @@ export class BaseScreenComponent {
|
|||||||
{
|
{
|
||||||
text: this._translateService.instant('search.active-dossiers'),
|
text: this._translateService.instant('search.active-dossiers'),
|
||||||
icon: 'red:enter',
|
icon: 'red:enter',
|
||||||
hide: () => !this._featuresService.isEnabled(DOSSIERS_ARCHIVE),
|
|
||||||
action: (query): void => this.#search(query, [], true),
|
action: (query): void => this.#search(query, [], true),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -58,7 +56,6 @@ export class BaseScreenComponent {
|
|||||||
private readonly _router: Router,
|
private readonly _router: Router,
|
||||||
activatedRoute: ActivatedRoute,
|
activatedRoute: ActivatedRoute,
|
||||||
private readonly _translateService: TranslateService,
|
private readonly _translateService: TranslateService,
|
||||||
private readonly _featuresService: FeaturesService,
|
|
||||||
readonly permissionsService: IqserPermissionsService,
|
readonly permissionsService: IqserPermissionsService,
|
||||||
readonly userService: UserService,
|
readonly userService: UserService,
|
||||||
readonly userPreferenceService: UserPreferenceService,
|
readonly userPreferenceService: UserPreferenceService,
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<section>
|
<section>
|
||||||
<iqser-page-header [buttonConfigs]="buttonConfigs" [helpModeKey]="'dossier'">
|
<iqser-page-header [buttonConfigs]="buttonConfigs" [helpModeKey]="'dossier'">
|
||||||
<ng-container *ngIf="isArchiveEnabled" slot="beforeFilters">
|
<ng-container slot="beforeFilters">
|
||||||
<redaction-dossiers-type-switch></redaction-dossiers-type-switch>
|
<redaction-dossiers-type-switch></redaction-dossiers-type-switch>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</iqser-page-header>
|
</iqser-page-header>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { ChangeDetectionStrategy, Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
||||||
import { Dossier, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DossierTemplate } 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 {
|
import {
|
||||||
ButtonConfig,
|
ButtonConfig,
|
||||||
@ -19,7 +19,6 @@ import { UserPreferenceService } from '@users/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';
|
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||||
import { OnAttach } from '@iqser/common-ui/lib/utils';
|
import { OnAttach } from '@iqser/common-ui/lib/utils';
|
||||||
import { FeaturesService } from '@services/features.service';
|
|
||||||
import { DossiersTypeSwitchComponent } from '@shared/components/dossiers-type-switch/dossiers-type-switch.component';
|
import { DossiersTypeSwitchComponent } from '@shared/components/dossiers-type-switch/dossiers-type-switch.component';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { DossiersListingDetailsComponent } from '../components/dossiers-listing-details/dossiers-listing-details.component';
|
import { DossiersListingDetailsComponent } from '../components/dossiers-listing-details/dossiers-listing-details.component';
|
||||||
@ -51,7 +50,6 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> im
|
|||||||
readonly buttonConfigs: ButtonConfig[];
|
readonly buttonConfigs: ButtonConfig[];
|
||||||
readonly dossierTemplate: DossierTemplate;
|
readonly dossierTemplate: DossierTemplate;
|
||||||
readonly computeFilters$ = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters()));
|
readonly computeFilters$ = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters()));
|
||||||
readonly isArchiveEnabled = this._featuresService.isEnabled(DOSSIERS_ARCHIVE);
|
|
||||||
@ViewChild('needsWorkFilterTemplate', {
|
@ViewChild('needsWorkFilterTemplate', {
|
||||||
read: TemplateRef,
|
read: TemplateRef,
|
||||||
static: true,
|
static: true,
|
||||||
@ -68,7 +66,6 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> im
|
|||||||
private readonly _userPreferenceService: UserPreferenceService,
|
private readonly _userPreferenceService: UserPreferenceService,
|
||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
readonly dossierTemplatesService: DossierTemplatesService,
|
readonly dossierTemplatesService: DossierTemplatesService,
|
||||||
private readonly _featuresService: FeaturesService,
|
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
const 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);
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import {
|
|||||||
SearchPositions,
|
SearchPositions,
|
||||||
TableColumnConfig,
|
TableColumnConfig,
|
||||||
} from '@iqser/common-ui';
|
} from '@iqser/common-ui';
|
||||||
import { combineLatest, Observable, of } from 'rxjs';
|
import { combineLatest, Observable } from 'rxjs';
|
||||||
import { debounceTime, map, startWith, switchMap, tap } from 'rxjs/operators';
|
import { debounceTime, map, startWith, switchMap, tap } from 'rxjs/operators';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
@ -16,7 +16,6 @@ import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|||||||
import { RouterHistoryService } from '@services/router-history.service';
|
import { RouterHistoryService } from '@services/router-history.service';
|
||||||
import {
|
import {
|
||||||
Dossier,
|
Dossier,
|
||||||
DOSSIERS_ARCHIVE,
|
|
||||||
DossierTemplate,
|
DossierTemplate,
|
||||||
IMatchedDocument,
|
IMatchedDocument,
|
||||||
ISearchListItem,
|
ISearchListItem,
|
||||||
@ -26,7 +25,6 @@ import {
|
|||||||
} from '@red/domain';
|
} from '@red/domain';
|
||||||
import { FilesMapService } from '@services/files/files-map.service';
|
import { FilesMapService } from '@services/files/files-map.service';
|
||||||
import { PlatformSearchService } from '@services/entity-services/platform-search.service';
|
import { PlatformSearchService } from '@services/entity-services/platform-search.service';
|
||||||
import { FeaturesService } from '@services/features.service';
|
|
||||||
import { DossiersCacheService } from '@services/dossiers/dossiers-cache.service';
|
import { DossiersCacheService } from '@services/dossiers/dossiers-cache.service';
|
||||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||||
import { UserService } from '@users/user.service';
|
import { UserService } from '@users/user.service';
|
||||||
@ -68,7 +66,6 @@ export default class SearchScreenComponent extends ListingComponent<ISearchListI
|
|||||||
private readonly _translateService: TranslateService,
|
private readonly _translateService: TranslateService,
|
||||||
private readonly _filesMapService: FilesMapService,
|
private readonly _filesMapService: FilesMapService,
|
||||||
private readonly _platformSearchService: PlatformSearchService,
|
private readonly _platformSearchService: PlatformSearchService,
|
||||||
private readonly _featuresService: FeaturesService,
|
|
||||||
private readonly _dossierTemplateService: DossierTemplatesService,
|
private readonly _dossierTemplateService: DossierTemplatesService,
|
||||||
private readonly _userService: UserService,
|
private readonly _userService: UserService,
|
||||||
) {
|
) {
|
||||||
@ -134,14 +131,8 @@ export default class SearchScreenComponent extends ListingComponent<ISearchListI
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
get #enabledArchive(): boolean {
|
|
||||||
return this._featuresService.isEnabled(DOSSIERS_ARCHIVE);
|
|
||||||
}
|
|
||||||
|
|
||||||
get #filtersChanged$(): Observable<[string[], WorkflowFileStatus, string, string[], boolean]> {
|
get #filtersChanged$(): Observable<[string[], WorkflowFileStatus, string, string[], boolean]> {
|
||||||
const onlyActiveDossiers$ = this.#enabledArchive
|
const onlyActiveDossiers$ = this.filterService.getSingleFilter('onlyActiveDossiers').pipe(map(f => !!f.checked));
|
||||||
? this.filterService.getSingleFilter('onlyActiveDossiers').pipe(map(f => !!f.checked))
|
|
||||||
: of(true);
|
|
||||||
const filterGroups$ = this.filterService.filterGroups$;
|
const filterGroups$ = this.filterService.filterGroups$;
|
||||||
return combineLatest([filterGroups$, onlyActiveDossiers$]).pipe(
|
return combineLatest([filterGroups$, onlyActiveDossiers$]).pipe(
|
||||||
map(([groups, onlyActive]) => {
|
map(([groups, onlyActive]) => {
|
||||||
@ -225,10 +216,8 @@ export default class SearchScreenComponent extends ListingComponent<ISearchListI
|
|||||||
|
|
||||||
this.filterService.addFilterGroups([dossierNameFilter, workflowStatusFilter, assigneeFilter]);
|
this.filterService.addFilterGroups([dossierNameFilter, workflowStatusFilter, assigneeFilter]);
|
||||||
const onlyActiveLabel = this._translateService.instant('search-screen.filters.only-active');
|
const onlyActiveLabel = this._translateService.instant('search-screen.filters.only-active');
|
||||||
if (this.#enabledArchive) {
|
|
||||||
this.filterService.addSingleFilter({ id: 'onlyActiveDossiers', label: onlyActiveLabel, checked: this.#routeOnlyActive });
|
this.filterService.addSingleFilter({ id: 'onlyActiveDossiers', label: onlyActiveLabel, checked: this.#routeOnlyActive });
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#addTemplateFilter(templates: DossierTemplate[]) {
|
#addTemplateFilter(templates: DossierTemplate[]) {
|
||||||
const templatesIds = this.#routeDossierTemplateIds;
|
const templatesIds = this.#routeDossierTemplateIds;
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
import { inject, Injectable } from '@angular/core';
|
import { inject, Injectable } from '@angular/core';
|
||||||
import { ARCHIVE_ROUTE, Dossier, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE } from '@red/domain';
|
import { ARCHIVE_ROUTE, Dossier, DOSSIERS_ROUTE } from '@red/domain';
|
||||||
import { catchError, switchMap, tap } from 'rxjs/operators';
|
import { catchError, switchMap, tap } from 'rxjs/operators';
|
||||||
import { Observable, of } from 'rxjs';
|
import { Observable, of } from 'rxjs';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { ActiveDossiersService } from './active-dossiers.service';
|
import { ActiveDossiersService } from './active-dossiers.service';
|
||||||
import { DossiersService } from './dossiers.service';
|
import { DossiersService } from './dossiers.service';
|
||||||
import { FilesMapService } from '../files/files-map.service';
|
import { FilesMapService } from '../files/files-map.service';
|
||||||
import { FeaturesService } from '../features.service';
|
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
@ -15,7 +14,6 @@ export class ArchivedDossiersService extends DossiersService {
|
|||||||
protected readonly _defaultModelPath = 'archived-dossiers';
|
protected readonly _defaultModelPath = 'archived-dossiers';
|
||||||
readonly #activeDossiersService = inject(ActiveDossiersService);
|
readonly #activeDossiersService = inject(ActiveDossiersService);
|
||||||
readonly #filesMapService = inject(FilesMapService);
|
readonly #filesMapService = inject(FilesMapService);
|
||||||
readonly #featuresService = inject(FeaturesService);
|
|
||||||
readonly #router = inject(Router);
|
readonly #router = inject(Router);
|
||||||
|
|
||||||
archive(dossiers: Dossier[]): Observable<unknown> {
|
archive(dossiers: Dossier[]): Observable<unknown> {
|
||||||
@ -46,7 +44,7 @@ export class ArchivedDossiersService extends DossiersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadAll(): Observable<Dossier[]> {
|
loadAll(): Observable<Dossier[]> {
|
||||||
return this.#featuresService.isEnabled(DOSSIERS_ARCHIVE) ? super.loadAll() : of([]);
|
return super.loadAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
#removeFromActiveDossiers(archivedDossiersIds: string[]): void {
|
#removeFromActiveDossiers(archivedDossiersIds: string[]): void {
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import {
|
|||||||
DashboardStats,
|
DashboardStats,
|
||||||
Dictionary,
|
Dictionary,
|
||||||
Dossier,
|
Dossier,
|
||||||
DOSSIERS_ARCHIVE,
|
|
||||||
DossierTemplate,
|
DossierTemplate,
|
||||||
File,
|
File,
|
||||||
IComment,
|
IComment,
|
||||||
@ -13,7 +12,6 @@ import {
|
|||||||
WorkflowFileStatus,
|
WorkflowFileStatus,
|
||||||
WorkflowFileStatuses,
|
WorkflowFileStatuses,
|
||||||
} from '@red/domain';
|
} from '@red/domain';
|
||||||
import { FeaturesService } from '@services/features.service';
|
|
||||||
import { FilesMapService } from '@services/files/files-map.service';
|
import { FilesMapService } from '@services/files/files-map.service';
|
||||||
import { Roles } from '@users/roles';
|
import { Roles } from '@users/roles';
|
||||||
import { UserPreferenceService } from '@users/user-preference.service';
|
import { UserPreferenceService } from '@users/user-preference.service';
|
||||||
@ -27,7 +25,6 @@ export class PermissionsService {
|
|||||||
constructor(
|
constructor(
|
||||||
private readonly _userService: UserService,
|
private readonly _userService: UserService,
|
||||||
private readonly _filesMapService: FilesMapService,
|
private readonly _filesMapService: FilesMapService,
|
||||||
private readonly _featuresService: FeaturesService,
|
|
||||||
private readonly _userPreferenceService: UserPreferenceService,
|
private readonly _userPreferenceService: UserPreferenceService,
|
||||||
private readonly _iqserPermissionsService: IqserPermissionsService,
|
private readonly _iqserPermissionsService: IqserPermissionsService,
|
||||||
private readonly _dossierTemplatesService: DossierTemplatesService,
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
@ -290,12 +287,7 @@ export class PermissionsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
canArchiveDossier(dossier: Dossier): boolean {
|
canArchiveDossier(dossier: Dossier): boolean {
|
||||||
return (
|
return this._iqserPermissionsService.has(Roles.dossiers.archived) && dossier.isActive && this.isOwner(dossier);
|
||||||
this._iqserPermissionsService.has(Roles.dossiers.archived) &&
|
|
||||||
this._featuresService.isEnabled(DOSSIERS_ARCHIVE) &&
|
|
||||||
dossier.isActive &&
|
|
||||||
this.isOwner(dossier)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
canEditDossier(dossier: Dossier): boolean {
|
canEditDossier(dossier: Dossier): boolean {
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
{
|
{
|
||||||
"features": [
|
"features": []
|
||||||
{
|
|
||||||
"name": "DOSSIERS_ARCHIVE",
|
|
||||||
"minVersion": "3.3.0"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
export const DOSSIER_ID = 'dossierId';
|
export const DOSSIER_ID = 'dossierId';
|
||||||
export const DOSSIERS_ARCHIVE = 'DOSSIERS_ARCHIVE';
|
|
||||||
|
|
||||||
export const ARCHIVE_ROUTE = 'archive';
|
export const ARCHIVE_ROUTE = 'archive';
|
||||||
export const DOSSIERS_ROUTE = 'dossiers';
|
export const DOSSIERS_ROUTE = 'dossiers';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user