use files service and dossiers service
This commit is contained in:
parent
91efc6fd0e
commit
967574146e
@ -1,13 +1,13 @@
|
|||||||
import { Component, Inject } from '@angular/core';
|
import { Component, Inject } from '@angular/core';
|
||||||
import { StatusControllerService } from '@redaction/red-ui-http';
|
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import { Toaster } from '@iqser/common-ui';
|
import { Toaster } from '@iqser/common-ui';
|
||||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||||
import { File } from '@models/file/file';
|
import { File } from '@models/file/file';
|
||||||
import { Dossier } from '../../../../state/model/dossier';
|
import { Dossier } from '@state/model/dossier';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
import { FilesService } from '../../services/files.service';
|
||||||
|
|
||||||
class DialogData {
|
class DialogData {
|
||||||
mode: 'approver' | 'reviewer';
|
mode: 'approver' | 'reviewer';
|
||||||
@ -28,8 +28,8 @@ export class AssignReviewerApproverDialogComponent {
|
|||||||
readonly userService: UserService,
|
readonly userService: UserService,
|
||||||
private readonly _toaster: Toaster,
|
private readonly _toaster: Toaster,
|
||||||
private readonly _formBuilder: FormBuilder,
|
private readonly _formBuilder: FormBuilder,
|
||||||
private readonly _statusControllerService: StatusControllerService,
|
|
||||||
private readonly _appStateService: AppStateService,
|
private readonly _appStateService: AppStateService,
|
||||||
|
private readonly _filesService: FilesService,
|
||||||
private readonly _dialogRef: MatDialogRef<AssignReviewerApproverDialogComponent>,
|
private readonly _dialogRef: MatDialogRef<AssignReviewerApproverDialogComponent>,
|
||||||
@Inject(MAT_DIALOG_DATA) readonly data: DialogData
|
@Inject(MAT_DIALOG_DATA) readonly data: DialogData
|
||||||
) {
|
) {
|
||||||
@ -69,16 +69,17 @@ export class AssignReviewerApproverDialogComponent {
|
|||||||
const selectedUser = this.selectedSingleUser;
|
const selectedUser = this.selectedSingleUser;
|
||||||
|
|
||||||
if (this.data.mode === 'reviewer') {
|
if (this.data.mode === 'reviewer') {
|
||||||
await this._statusControllerService
|
console.log('assign reviewer');
|
||||||
.setFileReviewerForList(
|
await this._filesService
|
||||||
|
.setReviewerFor(
|
||||||
this.data.files.map(f => f.fileId),
|
this.data.files.map(f => f.fileId),
|
||||||
this._appStateService.activeDossierId,
|
this._appStateService.activeDossierId,
|
||||||
selectedUser
|
selectedUser
|
||||||
)
|
)
|
||||||
.toPromise();
|
.toPromise();
|
||||||
} else {
|
} else {
|
||||||
await this._statusControllerService
|
await this._filesService
|
||||||
.setStatusUnderApprovalForList(
|
.setUnderApprovalFor(
|
||||||
this.data.files.map(f => f.fileId),
|
this.data.files.map(f => f.fileId),
|
||||||
selectedUser,
|
selectedUser,
|
||||||
this._appStateService.activeDossierId
|
this._appStateService.activeDossierId
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import {
|
|||||||
SortingOrders,
|
SortingOrders,
|
||||||
TableColumnConfig
|
TableColumnConfig
|
||||||
} from '@iqser/common-ui';
|
} from '@iqser/common-ui';
|
||||||
import { FileManagementControllerService, IFile, StatusControllerService } from '@redaction/red-ui-http';
|
import { FileManagementControllerService, IFile } from '@redaction/red-ui-http';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
import { ConfigService } from '@services/config.service';
|
import { ConfigService } from '@services/config.service';
|
||||||
@ -20,6 +20,7 @@ import { distinctUntilChanged, map } from 'rxjs/operators';
|
|||||||
import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
|
import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
|
||||||
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
|
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
|
import { FilesService } from '../../../services/files.service';
|
||||||
|
|
||||||
interface FileListItem extends IFile, IListable {
|
interface FileListItem extends IFile, IListable {
|
||||||
readonly canRestore: boolean;
|
readonly canRestore: boolean;
|
||||||
@ -52,9 +53,9 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
protected readonly _injector: Injector,
|
protected readonly _injector: Injector,
|
||||||
private readonly _statusController: StatusControllerService,
|
|
||||||
private readonly _fileManagementController: FileManagementControllerService,
|
private readonly _fileManagementController: FileManagementControllerService,
|
||||||
private readonly _appStateService: AppStateService,
|
private readonly _appStateService: AppStateService,
|
||||||
|
private readonly _filesService: FilesService,
|
||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
private readonly _configService: ConfigService,
|
private readonly _configService: ConfigService,
|
||||||
private readonly _dialogService: DossiersDialogService
|
private readonly _dialogService: DossiersDialogService
|
||||||
@ -90,7 +91,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
|||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this._configureTableColumns();
|
this._configureTableColumns();
|
||||||
this._loadingService.start();
|
this._loadingService.start();
|
||||||
const files = await this._statusController.getDeletedFileStatus(this.dossier.id).toPromise();
|
const files = await this._filesService.getDeletedFilesFor(this.dossier.id).toPromise();
|
||||||
this.entitiesService.setEntities(this._toListItems(files));
|
this.entitiesService.setEntities(this._toListItems(files));
|
||||||
this.sortingService.setSortingOption({
|
this.sortingService.setSortingOption({
|
||||||
column: 'softDeleted',
|
column: 'softDeleted',
|
||||||
|
|||||||
@ -26,13 +26,7 @@ import { PermissionsService } from '@services/permissions.service';
|
|||||||
import { timer } from 'rxjs';
|
import { timer } from 'rxjs';
|
||||||
import { UserPreferenceService } from '@services/user-preference.service';
|
import { UserPreferenceService } from '@services/user-preference.service';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import {
|
import { FileManagementControllerService, FileStatus, List, UserPreferenceControllerService } from '@redaction/red-ui-http';
|
||||||
FileManagementControllerService,
|
|
||||||
FileStatus,
|
|
||||||
List,
|
|
||||||
StatusControllerService,
|
|
||||||
UserPreferenceControllerService
|
|
||||||
} from '@redaction/red-ui-http';
|
|
||||||
import { PdfViewerDataService } from '../../services/pdf-viewer-data.service';
|
import { PdfViewerDataService } from '../../services/pdf-viewer-data.service';
|
||||||
import { download } from '@utils/file-download-utils';
|
import { download } from '@utils/file-download-utils';
|
||||||
import { ViewMode } from '@models/file/view-mode';
|
import { ViewMode } from '@models/file/view-mode';
|
||||||
@ -46,6 +40,7 @@ import { handleFilterDelta } from '@utils/filter-utils';
|
|||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { FileActionsComponent } from '../../components/file-actions/file-actions.component';
|
import { FileActionsComponent } from '../../components/file-actions/file-actions.component';
|
||||||
import { User } from '@models/user';
|
import { User } from '@models/user';
|
||||||
|
import { FilesService } from '../../services/files.service';
|
||||||
import Annotation = Core.Annotations.Annotation;
|
import Annotation = Core.Annotations.Annotation;
|
||||||
|
|
||||||
const ALL_HOTKEY_ARRAY = ['Escape', 'F', 'f'];
|
const ALL_HOTKEY_ARRAY = ['Escape', 'F', 'f'];
|
||||||
@ -99,7 +94,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni
|
|||||||
private readonly _annotationDrawService: AnnotationDrawService,
|
private readonly _annotationDrawService: AnnotationDrawService,
|
||||||
private readonly _fileActionService: FileActionService,
|
private readonly _fileActionService: FileActionService,
|
||||||
private readonly _fileDownloadService: PdfViewerDataService,
|
private readonly _fileDownloadService: PdfViewerDataService,
|
||||||
private readonly _statusControllerService: StatusControllerService,
|
private readonly _filesService: FilesService,
|
||||||
private readonly _ngZone: NgZone,
|
private readonly _ngZone: NgZone,
|
||||||
private readonly _fileManagementControllerService: FileManagementControllerService,
|
private readonly _fileManagementControllerService: FileManagementControllerService,
|
||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
@ -501,7 +496,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni
|
|||||||
const reviewerName = this.userService.getNameForId(reviewerId);
|
const reviewerName = this.userService.getNameForId(reviewerId);
|
||||||
|
|
||||||
const { dossierId, fileId, filename } = this.fileData.file;
|
const { dossierId, fileId, filename } = this.fileData.file;
|
||||||
await this._statusControllerService.setFileReviewer(dossierId, fileId, reviewerId).toPromise();
|
await this._filesService.setReviewerFor([fileId], dossierId, reviewerId).toPromise();
|
||||||
|
|
||||||
this._toaster.info(_('assignment.reviewer'), { params: { reviewerName, filename } });
|
this._toaster.info(_('assignment.reviewer'), { params: { reviewerName, filename } });
|
||||||
await this.appStateService.reloadActiveFile();
|
await this.appStateService.reloadActiveFile();
|
||||||
|
|||||||
@ -150,8 +150,8 @@ export class SearchScreenComponent extends ListingComponent<ListItem> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _toListItem({ dossierId, fileId, unmatchedTerms, highlights }: MatchedDocument): ListItem {
|
private _toListItem({ dossierId, fileId, unmatchedTerms, highlights }: MatchedDocument): ListItem {
|
||||||
const fileWrapper = this._appStateService.getFileById(dossierId, fileId);
|
const file = this._appStateService.getFileById(dossierId, fileId);
|
||||||
if (!fileWrapper) {
|
if (!file) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,11 +160,11 @@ export class SearchScreenComponent extends ListingComponent<ListItem> implements
|
|||||||
dossierId,
|
dossierId,
|
||||||
unmatched: unmatchedTerms || null,
|
unmatched: unmatchedTerms || null,
|
||||||
highlights,
|
highlights,
|
||||||
status: fileWrapper.status,
|
status: file.status,
|
||||||
numberOfPages: fileWrapper.numberOfPages,
|
numberOfPages: file.numberOfPages,
|
||||||
dossierName: this._appStateService.getDossierById(dossierId).dossierName,
|
dossierName: this._appStateService.getDossierById(dossierId).dossierName,
|
||||||
filename: fileWrapper.filename,
|
filename: file.filename,
|
||||||
searchKey: fileWrapper.filename,
|
searchKey: file.filename,
|
||||||
routerLink: `/main/dossiers/${dossierId}/file/${fileId}`
|
routerLink: `/main/dossiers/${dossierId}/file/${fileId}`
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,45 +1,61 @@
|
|||||||
import { Injectable, Injector } from "@angular/core";
|
import { Injectable, Injector } from '@angular/core';
|
||||||
import { IDossier } from "@redaction/red-ui-http";
|
import { IDossier } from '@redaction/red-ui-http';
|
||||||
import { EntitiesService, FilterService, SearchService } from "@iqser/common-ui";
|
import { EntitiesService, List, QueryParam } from '@iqser/common-ui';
|
||||||
import { Dossier } from "@state/model/dossier";
|
import { Dossier } from '@state/model/dossier';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
import { TEMPORARY_INJECTOR } from './injector';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
/**
|
export interface IDossiersStats {
|
||||||
* This should be removed when refactoring is done
|
totalPeople: number;
|
||||||
* @param injector
|
totalAnalyzedPages: number;
|
||||||
* @constructor
|
}
|
||||||
*/
|
|
||||||
const TEMPORARY_INJECTOR = injector =>
|
|
||||||
Injector.create({
|
|
||||||
providers: [
|
|
||||||
{ provide: FilterService, useClass: FilterService },
|
|
||||||
{ provide: SearchService, useClass: SearchService }
|
|
||||||
],
|
|
||||||
parent: injector
|
|
||||||
});
|
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||||
|
readonly stats$ = this.all$.pipe(map(entities => this._computeStats(entities)));
|
||||||
|
|
||||||
constructor(protected readonly _injector: Injector) {
|
constructor(protected readonly _injector: Injector) {
|
||||||
super(TEMPORARY_INJECTOR(_injector), 'dossier');
|
super(TEMPORARY_INJECTOR(_injector), 'dossier');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get(): Observable<IDossier[]>;
|
||||||
|
get(dossierId: string): Observable<IDossier>;
|
||||||
|
get(dossierId?: string): Observable<IDossier | IDossier[]> {
|
||||||
|
return dossierId ? super._getOne([dossierId]) : super.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
createOrUpdate(dossier: IDossier): Promise<IDossier> {
|
createOrUpdate(dossier: IDossier): Promise<IDossier> {
|
||||||
return this.post(dossier).toPromise();
|
return this._post(dossier).toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
getDeleted(): Promise<IDossier[]> {
|
getDeleted(): Promise<IDossier[]> {
|
||||||
return this.getAll<IDossier>('deleted-dossiers').toPromise();
|
return this.getAll('deleted-dossiers').toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
restore(dossierIds: Array<string>): Promise<unknown> {
|
restore(dossierIds: List): Promise<unknown> {
|
||||||
const body = dossierIds.map<[string, string]>(id => ['dossierId', id]);
|
return this._post(dossierIds, 'deleted-dossiers/restore').toPromise();
|
||||||
return this.post(body, 'deleted-dossiers/restore').toPromise();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hardDelete(dossierIds: Array<string>): Promise<unknown> {
|
hardDelete(dossierIds: List): Promise<unknown> {
|
||||||
const body = dossierIds.map<[string, string]>(id => ['dossierId', id]);
|
const body = dossierIds.map<QueryParam>(id => ({ key: 'dossierId', value: id }));
|
||||||
return this.delete(body, 'deleted-dossiers/hard-delete').toPromise();
|
return this.delete(body, 'deleted-dossiers/hard-delete').toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _computeStats(entities: List<Dossier>): IDossiersStats {
|
||||||
|
let totalAnalyzedPages = 0;
|
||||||
|
const totalPeople = new Set<string>();
|
||||||
|
|
||||||
|
entities.forEach(dossier => {
|
||||||
|
dossier.memberIds?.forEach(m => totalPeople.add(m));
|
||||||
|
totalAnalyzedPages += dossier.totalNumberOfPages;
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
totalPeople: totalPeople.size,
|
||||||
|
totalAnalyzedPages
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import { ReanalysisControllerService, StatusControllerService } from '@redaction/red-ui-http';
|
import { ReanalysisControllerService } from '@redaction/red-ui-http';
|
||||||
import { File } from '@models/file/file';
|
import { File } from '@models/file/file';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
import { DossiersDialogService } from './dossiers-dialog.service';
|
import { DossiersDialogService } from './dossiers-dialog.service';
|
||||||
import { ConfirmationDialogInput } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
|
import { ConfirmationDialogInput } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
import { FilesService } from './files.service';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@ -15,7 +16,7 @@ export class FileActionService {
|
|||||||
private readonly _dialogService: DossiersDialogService,
|
private readonly _dialogService: DossiersDialogService,
|
||||||
private readonly _permissionsService: PermissionsService,
|
private readonly _permissionsService: PermissionsService,
|
||||||
private readonly _userService: UserService,
|
private readonly _userService: UserService,
|
||||||
private readonly _statusControllerService: StatusControllerService,
|
private readonly _fileService: FilesService,
|
||||||
private readonly _reanalysisControllerService: ReanalysisControllerService,
|
private readonly _reanalysisControllerService: ReanalysisControllerService,
|
||||||
private readonly _appStateService: AppStateService
|
private readonly _appStateService: AppStateService
|
||||||
) {}
|
) {}
|
||||||
@ -54,7 +55,7 @@ export class FileActionService {
|
|||||||
approverId = this._appStateService.activeDossier.approverIds[0];
|
approverId = this._appStateService.activeDossier.approverIds[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._statusControllerService.setStatusUnderApprovalForList(
|
return this._fileService.setUnderApprovalFor(
|
||||||
files.map(f => f.fileId),
|
files.map(f => f.fileId),
|
||||||
approverId,
|
approverId,
|
||||||
this._appStateService.activeDossierId
|
this._appStateService.activeDossierId
|
||||||
@ -62,14 +63,14 @@ export class FileActionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setFilesApproved(files: File[]) {
|
setFilesApproved(files: File[]) {
|
||||||
return this._statusControllerService.setStatusApprovedForList(
|
return this._fileService.setApprovedFor(
|
||||||
files.map(f => f.fileId),
|
files.map(f => f.fileId),
|
||||||
this._appStateService.activeDossierId
|
this._appStateService.activeDossierId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
setFilesUnderReview(files: File[]) {
|
setFilesUnderReview(files: File[]) {
|
||||||
return this._statusControllerService.setStatusUnderReviewForList(
|
return this._fileService.setUnderReviewFor(
|
||||||
files.map(f => f.fileId),
|
files.map(f => f.fileId),
|
||||||
this._appStateService.activeDossierId
|
this._appStateService.activeDossierId
|
||||||
);
|
);
|
||||||
@ -98,8 +99,8 @@ export class FileActionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _assignReviewerToCurrentUser(files: File[], callback?: Function) {
|
private async _assignReviewerToCurrentUser(files: File[], callback?: Function) {
|
||||||
await this._statusControllerService
|
await this._fileService
|
||||||
.setFileReviewerForList(
|
.setReviewerFor(
|
||||||
files.map(f => f.fileId),
|
files.map(f => f.fileId),
|
||||||
this._appStateService.activeDossierId,
|
this._appStateService.activeDossierId,
|
||||||
this._userService.currentUser.id
|
this._userService.currentUser.id
|
||||||
|
|||||||
@ -0,0 +1,79 @@
|
|||||||
|
import { Injectable, Injector } from '@angular/core';
|
||||||
|
import { EntitiesService, List, RequiredParam, Validate } from '@iqser/common-ui';
|
||||||
|
import { IFile } from '@redaction/red-ui-http';
|
||||||
|
import { File } from '@models/file/file';
|
||||||
|
import { TEMPORARY_INJECTOR } from './injector';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class FilesService extends EntitiesService<File, IFile> {
|
||||||
|
constructor(protected readonly _injector: Injector) {
|
||||||
|
super(TEMPORARY_INJECTOR(_injector), 'status');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the status for all files.
|
||||||
|
*/
|
||||||
|
get(): Observable<IFile[]>;
|
||||||
|
/**
|
||||||
|
* Gets the status for a file from a dossier.
|
||||||
|
*/
|
||||||
|
get(dossierId: string, fileId: string): Observable<IFile>;
|
||||||
|
get(dossierId?: string, fileId?: string) {
|
||||||
|
if (dossierId && fileId) {
|
||||||
|
return super._getOne([dossierId, fileId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
getFor(dossierId: string): Observable<IFile[]>;
|
||||||
|
getFor(dossierIds: List): Observable<Record<string, IFile[]>>;
|
||||||
|
getFor(args: string | List) {
|
||||||
|
if (typeof args === 'string') {
|
||||||
|
return super.getAll(`${this._defaultModelPath}/${args}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._post<Record<string, IFile[]>>(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Validate()
|
||||||
|
setUnderApprovalFor(@RequiredParam() body: List, @RequiredParam() approverId: string, @RequiredParam() dossierId: string) {
|
||||||
|
const url = `${this._defaultModelPath}/underapproval/${dossierId}/bulk`;
|
||||||
|
return this._post<unknown>(body, url, [{ key: 'approverId', value: approverId }]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assigns a reviewer for a list of files.
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
setReviewerFor(@RequiredParam() filesIds: List, @RequiredParam() dossierId: string, @RequiredParam() reviewerId: string) {
|
||||||
|
return this._post<unknown>(filesIds, `${this._defaultModelPath}/${dossierId}/bulk/${reviewerId}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the status APPROVED for a list of files.
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
setApprovedFor(@RequiredParam() filesIds: List, @RequiredParam() dossierId: string) {
|
||||||
|
return this._post<unknown>(filesIds, `${this._defaultModelPath}/approved/${dossierId}/bulk`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the status UNDER_REVIEW for a list of files.
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
setUnderReviewFor(@RequiredParam() filesIds: List, @RequiredParam() dossierId: string) {
|
||||||
|
return this._post<unknown>(filesIds, `${this._defaultModelPath}/underreview/${dossierId}/bulk`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the deleted files for a dossier.
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
getDeletedFilesFor(@RequiredParam() dossierId: string): Observable<IFile[]> {
|
||||||
|
return this.getAll(`${this._defaultModelPath}/softdeleted/${dossierId}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
apps/red-ui/src/app/modules/dossier/services/injector.ts
Normal file
16
apps/red-ui/src/app/modules/dossier/services/injector.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { Injector } from "@angular/core";
|
||||||
|
import { FilterService, SearchService } from "@iqser/common-ui";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This should be removed when refactoring is done
|
||||||
|
* @param injector
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
export const TEMPORARY_INJECTOR = injector =>
|
||||||
|
Injector.create({
|
||||||
|
providers: [
|
||||||
|
{ provide: FilterService, useClass: FilterService },
|
||||||
|
{ provide: SearchService, useClass: SearchService }
|
||||||
|
],
|
||||||
|
parent: injector
|
||||||
|
});
|
||||||
@ -6,8 +6,7 @@ import {
|
|||||||
FileAttributesControllerService,
|
FileAttributesControllerService,
|
||||||
IDossier,
|
IDossier,
|
||||||
IFile,
|
IFile,
|
||||||
ReanalysisControllerService,
|
ReanalysisControllerService
|
||||||
StatusControllerService
|
|
||||||
} from '@redaction/red-ui-http';
|
} from '@redaction/red-ui-http';
|
||||||
import { Toaster } from '@iqser/common-ui';
|
import { Toaster } from '@iqser/common-ui';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
@ -23,6 +22,7 @@ import { DossierTemplate } from '@models/file/dossier-template';
|
|||||||
import { DossiersService } from '../modules/dossier/services/dossiers.service';
|
import { DossiersService } from '../modules/dossier/services/dossiers.service';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { UserPreferenceService } from '@services/user-preference.service';
|
import { UserPreferenceService } from '@services/user-preference.service';
|
||||||
|
import { FilesService } from '../modules/dossier/services/files.service';
|
||||||
|
|
||||||
export interface AppState {
|
export interface AppState {
|
||||||
dossiers: Dossier[];
|
dossiers: Dossier[];
|
||||||
@ -32,7 +32,6 @@ export interface AppState {
|
|||||||
activeDossierTemplateId: string;
|
activeDossierTemplateId: string;
|
||||||
activeDictionaryType: string;
|
activeDictionaryType: string;
|
||||||
totalAnalysedPages?: number;
|
totalAnalysedPages?: number;
|
||||||
totalDocuments?: number;
|
|
||||||
totalPeople?: number;
|
totalPeople?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,12 +50,12 @@ export class AppStateService {
|
|||||||
private readonly _router: Router,
|
private readonly _router: Router,
|
||||||
private readonly _userService: UserService,
|
private readonly _userService: UserService,
|
||||||
private readonly _dossiersService: DossiersService,
|
private readonly _dossiersService: DossiersService,
|
||||||
|
private readonly _filesService: FilesService,
|
||||||
private readonly _toaster: Toaster,
|
private readonly _toaster: Toaster,
|
||||||
private readonly _reanalysisControllerService: ReanalysisControllerService,
|
private readonly _reanalysisControllerService: ReanalysisControllerService,
|
||||||
private readonly _translateService: TranslateService,
|
private readonly _translateService: TranslateService,
|
||||||
private readonly _dictionaryControllerService: DictionaryControllerService,
|
private readonly _dictionaryControllerService: DictionaryControllerService,
|
||||||
private readonly _dossierTemplateControllerService: DossierTemplateControllerService,
|
private readonly _dossierTemplateControllerService: DossierTemplateControllerService,
|
||||||
private readonly _statusControllerService: StatusControllerService,
|
|
||||||
private readonly _fileAttributesService: FileAttributesControllerService,
|
private readonly _fileAttributesService: FileAttributesControllerService,
|
||||||
private readonly _userPreferenceService: UserPreferenceService
|
private readonly _userPreferenceService: UserPreferenceService
|
||||||
) {
|
) {
|
||||||
@ -222,7 +221,7 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mappedDossiers = dossiers.map(p => new Dossier(p, this._getExistingFiles(p.dossierId)));
|
const mappedDossiers = dossiers.map(p => new Dossier(p, this._getExistingFiles(p.dossierId)));
|
||||||
const fileData = await this._statusControllerService.getFileStatusForDossiers(mappedDossiers.map(p => p.id)).toPromise();
|
const fileData = await this._filesService.getFor(mappedDossiers.map(p => p.id)).toPromise();
|
||||||
|
|
||||||
for (const dossierId of Object.keys(fileData)) {
|
for (const dossierId of Object.keys(fileData)) {
|
||||||
const dossier = mappedDossiers.find(p => p.id === dossierId);
|
const dossier = mappedDossiers.find(p => p.id === dossierId);
|
||||||
@ -239,7 +238,7 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
const oldProcessedDate = this.activeFile.lastProcessed;
|
const oldProcessedDate = this.activeFile.lastProcessed;
|
||||||
const dossierTemplateId = this.activeFile.dossierTemplateId;
|
const dossierTemplateId = this.activeFile.dossierTemplateId;
|
||||||
const iFile = await this._statusControllerService.getFileStatus(this.activeDossierId, this.activeFileId).toPromise();
|
const iFile = await this._filesService.get(this.activeDossierId, this.activeFileId).toPromise();
|
||||||
iFile.dossierTemplateId = dossierTemplateId;
|
iFile.dossierTemplateId = dossierTemplateId;
|
||||||
|
|
||||||
const activeFile = new File(
|
const activeFile = new File(
|
||||||
@ -258,7 +257,7 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getFiles(dossier: Dossier = this.activeDossier, emitEvents = true) {
|
async getFiles(dossier: Dossier = this.activeDossier, emitEvents = true) {
|
||||||
const files = await this._statusControllerService.getDossierStatus(dossier.id).toPromise();
|
const files = await this._filesService.getFor(dossier.id).toPromise();
|
||||||
|
|
||||||
return this._processFiles(dossier, files, emitEvents);
|
return this._processFiles(dossier, files, emitEvents);
|
||||||
}
|
}
|
||||||
@ -725,17 +724,14 @@ export class AppStateService {
|
|||||||
|
|
||||||
private _computeStats() {
|
private _computeStats() {
|
||||||
let totalAnalysedPages = 0;
|
let totalAnalysedPages = 0;
|
||||||
let totalDocuments = 0;
|
|
||||||
const totalPeople = new Set<string>();
|
const totalPeople = new Set<string>();
|
||||||
|
|
||||||
this.allDossiers.forEach(d => {
|
this.allDossiers.forEach(d => {
|
||||||
totalDocuments += d.files.length;
|
|
||||||
d.memberIds?.forEach(m => totalPeople.add(m));
|
d.memberIds?.forEach(m => totalPeople.add(m));
|
||||||
totalAnalysedPages += d.totalNumberOfPages;
|
totalAnalysedPages += d.totalNumberOfPages;
|
||||||
});
|
});
|
||||||
|
|
||||||
this._appState.totalPeople = totalPeople.size;
|
this._appState.totalPeople = totalPeople.size;
|
||||||
this._appState.totalAnalysedPages = totalAnalysedPages;
|
this._appState.totalAnalysedPages = totalAnalysedPages;
|
||||||
this._appState.totalDocuments = totalDocuments;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import { RedactionLogControllerService } from './api/redactionLogController.serv
|
|||||||
import { ReportTemplateControllerService } from './api/reportTemplateController.service';
|
import { ReportTemplateControllerService } from './api/reportTemplateController.service';
|
||||||
import { RulesControllerService } from './api/rulesController.service';
|
import { RulesControllerService } from './api/rulesController.service';
|
||||||
import { SmtpConfigurationControllerService } from './api/smtpConfigurationController.service';
|
import { SmtpConfigurationControllerService } from './api/smtpConfigurationController.service';
|
||||||
import { StatusControllerService } from './api/statusController.service';
|
|
||||||
import { UploadControllerService } from './api/uploadController.service';
|
import { UploadControllerService } from './api/uploadController.service';
|
||||||
import { UserControllerService } from './api/userController.service';
|
import { UserControllerService } from './api/userController.service';
|
||||||
import { UserPreferenceControllerService } from './api/userPreferenceController.service';
|
import { UserPreferenceControllerService } from './api/userPreferenceController.service';
|
||||||
@ -53,7 +52,6 @@ import { NotificationControllerService } from './api/notificationController.serv
|
|||||||
ReportTemplateControllerService,
|
ReportTemplateControllerService,
|
||||||
RulesControllerService,
|
RulesControllerService,
|
||||||
SmtpConfigurationControllerService,
|
SmtpConfigurationControllerService,
|
||||||
StatusControllerService,
|
|
||||||
UploadControllerService,
|
UploadControllerService,
|
||||||
UserControllerService,
|
UserControllerService,
|
||||||
UserPreferenceControllerService,
|
UserPreferenceControllerService,
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import { ReanalysisControllerService } from './reanalysisController.service';
|
|||||||
import { RedactionLogControllerService } from './redactionLogController.service';
|
import { RedactionLogControllerService } from './redactionLogController.service';
|
||||||
import { DossierTemplateControllerService } from './dossierTemplateController.service';
|
import { DossierTemplateControllerService } from './dossierTemplateController.service';
|
||||||
import { RulesControllerService } from './rulesController.service';
|
import { RulesControllerService } from './rulesController.service';
|
||||||
import { StatusControllerService } from './statusController.service';
|
|
||||||
import { UserControllerService } from './userController.service';
|
import { UserControllerService } from './userController.service';
|
||||||
import { UserPreferenceControllerService } from './userPreferenceController.service';
|
import { UserPreferenceControllerService } from './userPreferenceController.service';
|
||||||
import { VersionsControllerService } from './versionsController.service';
|
import { VersionsControllerService } from './versionsController.service';
|
||||||
@ -98,7 +97,6 @@ export const APIS = [
|
|||||||
RedactionLogControllerService,
|
RedactionLogControllerService,
|
||||||
DossierTemplateControllerService,
|
DossierTemplateControllerService,
|
||||||
RulesControllerService,
|
RulesControllerService,
|
||||||
StatusControllerService,
|
|
||||||
UserControllerService,
|
UserControllerService,
|
||||||
UserPreferenceControllerService,
|
UserPreferenceControllerService,
|
||||||
VersionsControllerService,
|
VersionsControllerService,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user