RED-9866: remove version limit on ARCHIVE DOSSIER feature.

This commit is contained in:
Nicoleta Panaghiu 2024-08-12 11:25:44 +03:00
parent 954fba26f7
commit 8d970779f5
9 changed files with 11 additions and 45 deletions

View File

@ -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],
}, },
}, },
{ {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,3 @@
{ {
"features": [ "features": []
{
"name": "DOSSIERS_ARCHIVE",
"minVersion": "3.3.0"
}
]
} }

View File

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