From 82cce6cbbd2c27ee11c1fdce0eb2042aa318fec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Fri, 24 Jun 2022 00:21:22 +0300 Subject: [PATCH] RED-4217: Filter files by processing type --- .../dossier-details.component.html | 6 ++- .../dossier-details.component.ts | 7 +++- .../dossier-overview/config.service.ts | 17 +++++++-- libs/common-ui | 2 +- .../lib/dossier-stats/dossier-stats.model.ts | 37 +++++-------------- libs/red-domain/src/lib/files/file.model.ts | 21 +++++++++++ libs/red-domain/src/lib/files/types.ts | 21 +++++++++++ 7 files changed, 77 insertions(+), 34 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.html b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.html index 500e7f372..259d1af20 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.html +++ b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.html @@ -48,7 +48,11 @@
- +
diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts index 85f3bebd8..3539b3133 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts @@ -6,6 +6,7 @@ import { DossierAttributeWithValue, DossierStats, IDossierRequest, + ProcessingTypes, StatusSorter, User, } from '@red/domain'; @@ -85,27 +86,31 @@ export class DossierDetailsComponent { #calculateStatusConfig(stats: DossierStats): ProgressBarConfigModel[] { return [ { + id: ProcessingTypes.pending, label: _('processing-status.pending'), total: stats.numberOfFiles, count: stats.processingStats.pending, icon: 'red:reanalyse', }, { + id: ProcessingTypes.ocr, label: _('processing-status.ocr'), total: stats.numberOfFiles, count: stats.processingStats.ocr, icon: 'iqser:ocr', }, { + id: ProcessingTypes.processing, label: _('processing-status.processing'), total: stats.numberOfFiles, count: stats.processingStats.processing, icon: 'red:reanalyse', }, { + id: ProcessingTypes.processed, label: _('processing-status.processed'), total: stats.numberOfFiles, - count: stats.processingStats.proccesed, + count: stats.processingStats.processed, icon: 'red:ready-for-approval', }, ].filter(config => config.count > 0); diff --git a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts index 7ea4cf40a..832b3e914 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts @@ -11,7 +11,7 @@ import { TableColumnConfig, WorkflowConfig, } from '@iqser/common-ui'; -import { Dossier, File, IFileAttributeConfig, StatusSorter, WorkflowFileStatus, WorkflowFileStatuses } from '@red/domain'; +import { Dossier, File, IFileAttributeConfig, ProcessingType, StatusSorter, WorkflowFileStatus, WorkflowFileStatuses } from '@red/domain'; import { workflowFileStatusTranslations } from '@translations/file-status-translations'; import { PermissionsService } from '@services/permissions.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -170,6 +170,7 @@ export class ConfigService { const allDistinctPeople = new Set(); const allDistinctAddedDates = new Set(); const allDistinctNeedsWork = new Set(); + const allDistinctProcessingTypes = new Set(); const dynamicFilters = new Map>(); @@ -205,6 +206,8 @@ export class ConfigService { allDistinctNeedsWork.add('comment'); } + allDistinctProcessingTypes.add(file.processingType); + // extract values for dynamic filters fileAttributeConfigs.forEach(config => { if (config.filterable) { @@ -287,6 +290,14 @@ export class ConfigService { matchAll: true, }); + const processingTypesFilters = [...allDistinctProcessingTypes].map(item => new NestedFilter({ id: item, label: item })); + filterGroups.push({ + slug: 'processingTypeFilters', + filters: processingTypesFilters, + checker: (file: File, filter: INestedFilter) => file.processingType === filter.id, + hide: true, + }); + dynamicFilters.forEach((filterValue: Set, filterKey: string) => { const id = filterKey.split(':')[0]; const key = filterKey.split(':')[1]; @@ -334,9 +345,7 @@ export class ConfigService { } _recentlyModifiedChecker = (file: File) => - dayjs(file.lastUpdated) - .add(this._appConfigService.values.RECENT_PERIOD_IN_HOURS as number, 'hours') - .isAfter(dayjs()); + dayjs(file.lastUpdated).add(this._appConfigService.values.RECENT_PERIOD_IN_HOURS, 'hours').isAfter(dayjs()); _assignedToMeChecker = (file: File) => file.assignee === this._userService.currentUser.id; diff --git a/libs/common-ui b/libs/common-ui index 6a1625828..f9e248833 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 6a1625828d76d76a624845376f6aa564cc02c026 +Subproject commit f9e24883381ddbf93df5074ec1c176973db44ed1 diff --git a/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts b/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts index 1aa89a44e..f6821b4c4 100644 --- a/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts +++ b/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts @@ -1,34 +1,17 @@ import { IDossierStats } from './dossier-stats'; import { FileCountPerProcessingStatus, FileCountPerWorkflowStatus } from './types'; -import { isProcessingStatuses, ProcessingFileStatus, ProcessingFileStatuses } from '../files'; +import { isProcessingStatuses, OCR_STATES, PENDING_STATES, PROCESSED_STATES, PROCESSING_STATES, ProcessingFileStatus } from '../files'; -const PENDING_STATES: ProcessingFileStatus[] = [ - ProcessingFileStatuses.ANALYSE, - ProcessingFileStatuses.ERROR, - ProcessingFileStatuses.FULLREPROCESS, - ProcessingFileStatuses.REPROCESS, - ProcessingFileStatuses.UNPROCESSED, -]; +export const ProcessingTypes = { + pending: 'pending', + ocr: 'ocr', + processing: 'processing', + processed: 'processed', +} as const; -const PROCESSING_STATES: ProcessingFileStatus[] = [ - ProcessingFileStatuses.IMAGE_ANALYZING, - ProcessingFileStatuses.INDEXING, - ProcessingFileStatuses.NER_ANALYZING, - ProcessingFileStatuses.PROCESSING, - ProcessingFileStatuses.SURROUNDING_TEXT_PROCESSING, - ProcessingFileStatuses.FULL_PROCESSING, -]; +export type ProcessingType = keyof typeof ProcessingTypes; -const PROCESSED_STATES: ProcessingFileStatus[] = [ProcessingFileStatuses.PROCESSED]; - -const OCR_STATES: ProcessingFileStatus[] = [ProcessingFileStatuses.OCR_PROCESSING]; - -interface ProcessingStats { - pending: number; - ocr: number; - processing: number; - proccesed: number; -} +export type ProcessingStats = Record; export class DossierStats implements IDossierStats { readonly dossierId: string; @@ -71,7 +54,7 @@ export class DossierStats implements IDossierStats { get #processingStats(): ProcessingStats { return { pending: this.#getTotal(PENDING_STATES), - proccesed: this.#getTotal(PROCESSED_STATES), + processed: this.#getTotal(PROCESSED_STATES), processing: this.#getTotal(PROCESSING_STATES), ocr: this.#getTotal(OCR_STATES), }; diff --git a/libs/red-domain/src/lib/files/file.model.ts b/libs/red-domain/src/lib/files/file.model.ts index 30d02bb63..54f4ad208 100644 --- a/libs/red-domain/src/lib/files/file.model.ts +++ b/libs/red-domain/src/lib/files/file.model.ts @@ -3,6 +3,9 @@ import { StatusSorter } from '../shared'; import { isFullProcessingStatuses, isProcessingStatuses, + OCR_STATES, + PENDING_STATES, + PROCESSING_STATES, ProcessingFileStatus, ProcessingFileStatuses, WorkflowFileStatus, @@ -11,6 +14,7 @@ import { import { IFile } from './file'; import { FileAttributes } from '../file-attributes'; import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from '../dossiers'; +import { ProcessingType, ProcessingTypes } from '../dossier-stats'; export class File extends Entity implements IFile { readonly added?: string; @@ -73,6 +77,8 @@ export class File extends Entity implements IFile { readonly canBeOpened: boolean; readonly canBeOCRed: boolean; + readonly processingType: ProcessingType; + constructor(file: IFile, readonly reviewerName: string) { super(file); this.added = file.added; @@ -138,6 +144,8 @@ export class File extends Entity implements IFile { this.fileAttributes = file.fileAttributes && file.fileAttributes.attributeIdToValue ? file.fileAttributes : { attributeIdToValue: {} }; + + this.processingType = this.#processingType; } get deleted(): boolean { @@ -157,6 +165,19 @@ export class File extends Entity implements IFile { return this.canBeOpened ? `/main/${this.dossierTemplateId}/${routerPath}/${this.dossierId}/file/${this.fileId}` : undefined; } + get #processingType(): ProcessingType { + if (PENDING_STATES.includes(this.processingStatus)) { + return ProcessingTypes.pending; + } + if (PROCESSING_STATES.includes(this.processingStatus)) { + return ProcessingTypes.processing; + } + if (OCR_STATES.includes(this.processingStatus)) { + return ProcessingTypes.ocr; + } + return ProcessingTypes.processed; + } + isPageExcluded(page: number): boolean { return this.excludedPages.includes(page); } diff --git a/libs/red-domain/src/lib/files/types.ts b/libs/red-domain/src/lib/files/types.ts index 11b758caa..ab6879e37 100644 --- a/libs/red-domain/src/lib/files/types.ts +++ b/libs/red-domain/src/lib/files/types.ts @@ -66,3 +66,24 @@ export interface StatusBarConfig { } export type StatusBarConfigs = List; + +export const PENDING_STATES: ProcessingFileStatus[] = [ + ProcessingFileStatuses.ANALYSE, + ProcessingFileStatuses.ERROR, + ProcessingFileStatuses.FULLREPROCESS, + ProcessingFileStatuses.REPROCESS, + ProcessingFileStatuses.UNPROCESSED, +]; + +export const PROCESSING_STATES: ProcessingFileStatus[] = [ + ProcessingFileStatuses.IMAGE_ANALYZING, + ProcessingFileStatuses.INDEXING, + ProcessingFileStatuses.NER_ANALYZING, + ProcessingFileStatuses.PROCESSING, + ProcessingFileStatuses.SURROUNDING_TEXT_PROCESSING, + ProcessingFileStatuses.FULL_PROCESSING, +]; + +export const PROCESSED_STATES: ProcessingFileStatus[] = [ProcessingFileStatuses.PROCESSED]; + +export const OCR_STATES: ProcessingFileStatus[] = [ProcessingFileStatuses.OCR_PROCESSING];