move create or update dossier to dossiers service
This commit is contained in:
parent
e32ee45d9c
commit
30ac738e1b
@ -1,11 +1,11 @@
|
||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||
import { IDossier } from '@redaction/red-ui-http';
|
||||
import { AppStateService } from '@state/app-state.service';
|
||||
import { DossierRequest, IDossier } from '@redaction/red-ui-http';
|
||||
import { UserService } from '@services/user.service';
|
||||
import { Toaster } from '@iqser/common-ui';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { Dossier } from '@state/model/dossier';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { DossiersService } from '../../services/dossiers.service';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-team-members-manager',
|
||||
@ -28,7 +28,7 @@ export class TeamMembersManagerComponent implements OnInit {
|
||||
readonly userService: UserService,
|
||||
private readonly _toaster: Toaster,
|
||||
private readonly _formBuilder: FormBuilder,
|
||||
private readonly _appStateService: AppStateService
|
||||
private readonly _dossiersService: DossiersService
|
||||
) {}
|
||||
|
||||
get selectedOwnerId(): string {
|
||||
@ -52,22 +52,17 @@ export class TeamMembersManagerComponent implements OnInit {
|
||||
}
|
||||
|
||||
async saveMembers() {
|
||||
let result;
|
||||
try {
|
||||
const ownerId = this.selectedOwnerId;
|
||||
const memberIds = this.selectedMembersList;
|
||||
const approverIds = this.selectedApproversList;
|
||||
const dw = {
|
||||
...this.dossier,
|
||||
memberIds,
|
||||
approverIds,
|
||||
ownerId
|
||||
};
|
||||
result = await this._appStateService.createOrUpdateDossier(dw);
|
||||
const dossier = {
|
||||
...this.dossier,
|
||||
memberIds: this.selectedMembersList,
|
||||
approverIds: this.selectedApproversList,
|
||||
ownerId: this.selectedOwnerId
|
||||
} as DossierRequest;
|
||||
|
||||
const result = await this._dossiersService.createOrUpdate(dossier).toPromise();
|
||||
if (result) {
|
||||
this.save.emit(result);
|
||||
this._updateChanged();
|
||||
} catch (error) {
|
||||
this._toaster.error(_('error.http.generic'), { params: error });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -83,7 +83,7 @@
|
||||
</button>
|
||||
|
||||
<iqser-icon-button
|
||||
(action)="saveDossierAndAddMembers()"
|
||||
(action)="saveDossier(true)"
|
||||
[disabled]="disabled"
|
||||
[label]="'add-dossier-dialog.actions.save-and-add-members' | translate"
|
||||
[type]="iconButtonTypes.dark"
|
||||
|
||||
@ -1,11 +1,18 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { MatDialogRef } from '@angular/material/dialog';
|
||||
import { DownloadFileType, IDossier, IDossierTemplate, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http';
|
||||
import {
|
||||
DossierRequest,
|
||||
DownloadFileType,
|
||||
IDossierTemplate,
|
||||
ReportTemplate,
|
||||
ReportTemplateControllerService
|
||||
} from '@redaction/red-ui-http';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { AppStateService } from '@state/app-state.service';
|
||||
import * as moment from 'moment';
|
||||
import { downloadTypesTranslations } from '../../../../translations/download-types-translations';
|
||||
import { IconButtonTypes } from '@iqser/common-ui';
|
||||
import { DossiersService } from '../../services/dossiers.service';
|
||||
|
||||
@Component({
|
||||
templateUrl: './add-dossier-dialog.component.html',
|
||||
@ -25,6 +32,7 @@ export class AddDossierDialogComponent {
|
||||
|
||||
constructor(
|
||||
private readonly _appStateService: AppStateService,
|
||||
private readonly _dossiersService: DossiersService,
|
||||
private readonly _formBuilder: FormBuilder,
|
||||
private readonly _reportTemplateController: ReportTemplateControllerService,
|
||||
readonly dialogRef: MatDialogRef<AddDossierDialogComponent>
|
||||
@ -67,17 +75,10 @@ export class AddDossierDialogComponent {
|
||||
|
||||
reportTemplateValueMapper = (reportTemplate: ReportTemplate) => reportTemplate.templateId;
|
||||
|
||||
async saveDossier() {
|
||||
const savedDossier = await this._appStateService.createOrUpdateDossier(this._formToObject());
|
||||
async saveDossier(addMembers = false) {
|
||||
const savedDossier = await this._dossiersService.createOrUpdate(this._formToObject()).toPromise();
|
||||
if (savedDossier) {
|
||||
this.dialogRef.close({ dossier: savedDossier });
|
||||
}
|
||||
}
|
||||
|
||||
async saveDossierAndAddMembers() {
|
||||
const savedDossier = await this._appStateService.createOrUpdateDossier(this._formToObject());
|
||||
if (savedDossier) {
|
||||
this.dialogRef.close({ addMembers: true, dossier: savedDossier });
|
||||
this.dialogRef.close({ dossier: savedDossier, addMembers });
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,7 +117,7 @@ export class AddDossierDialogComponent {
|
||||
});
|
||||
}
|
||||
|
||||
private _formToObject(): Partial<IDossier> {
|
||||
private _formToObject(): DossierRequest {
|
||||
return {
|
||||
dossierName: this.dossierForm.get('dossierName').value,
|
||||
description: this.dossierForm.get('description').value,
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||
import { DownloadFileType, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { AppStateService } from '@state/app-state.service';
|
||||
import { Dossier } from '@state/model/dossier';
|
||||
import { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||
import { downloadTypesTranslations } from '../../../../../translations/download-types-translations';
|
||||
import { DossiersService } from '../../../services/dossiers.service';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-edit-dossier-download-package',
|
||||
@ -23,7 +23,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
|
||||
@Output() readonly updateDossier = new EventEmitter();
|
||||
|
||||
constructor(
|
||||
private readonly _appStateService: AppStateService,
|
||||
private readonly _dossiersService: DossiersService,
|
||||
private readonly _reportTemplateController: ReportTemplateControllerService,
|
||||
private readonly _formBuilder: FormBuilder
|
||||
) {}
|
||||
@ -87,7 +87,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
|
||||
downloadFileTypes: this.dossierForm.get('downloadFileTypes').value,
|
||||
reportTemplateIds: this.dossierForm.get('reportTemplateIds').value
|
||||
};
|
||||
await this._appStateService.createOrUpdateDossier(dossier);
|
||||
await this._dossiersService.createOrUpdate(dossier).toPromise();
|
||||
this.updateDossier.emit();
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||
import { IDossierTemplate } from '@redaction/red-ui-http';
|
||||
import { DossierRequest, IDossierTemplate } from '@redaction/red-ui-http';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { AppStateService } from '@state/app-state.service';
|
||||
import * as moment from 'moment';
|
||||
@ -13,6 +13,7 @@ import { EditDossierDialogComponent } from '../edit-dossier-dialog.component';
|
||||
import { IconButtonTypes, Toaster } from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
|
||||
import { DossiersService } from '../../../services/dossiers.service';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-edit-dossier-general-info',
|
||||
@ -32,6 +33,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
|
||||
constructor(
|
||||
readonly permissionsService: PermissionsService,
|
||||
private readonly _appStateService: AppStateService,
|
||||
private readonly _dossiersService: DossiersService,
|
||||
private readonly _formBuilder: FormBuilder,
|
||||
private readonly _dialogService: DossiersDialogService,
|
||||
private readonly _router: Router,
|
||||
@ -100,8 +102,8 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
|
||||
watermarkEnabled: this.dossierForm.get('watermarkEnabled').value,
|
||||
dueDate: this.hasDueDate ? this.dossierForm.get('dueDate').value : undefined,
|
||||
dossierTemplateId: this.dossierForm.get('dossierTemplateId').value
|
||||
};
|
||||
await this._appStateService.createOrUpdateDossier(dossier);
|
||||
} as DossierRequest;
|
||||
await this._dossiersService.createOrUpdate(dossier).toPromise();
|
||||
this.updateDossier.emit();
|
||||
}
|
||||
|
||||
|
||||
@ -78,7 +78,7 @@ export class DossierDetailsComponent implements OnInit {
|
||||
this.owner = typeof user === 'string' ? this._userService.getRedUserById(user) : user;
|
||||
const activeDossier = this.dossiersService.activeDossier;
|
||||
const dossierRequest: DossierRequest = { ...activeDossier, dossierId: activeDossier.dossierId, ownerId: this.owner.id };
|
||||
await this.appStateService.createOrUpdateDossier(dossierRequest);
|
||||
await this.dossiersService.createOrUpdate(dossierRequest).toPromise();
|
||||
|
||||
const ownerName = this._userService.getNameForId(this.owner.id);
|
||||
const dossierName = activeDossier.dossierName;
|
||||
|
||||
@ -1,14 +1,15 @@
|
||||
import { Injectable, Injector } from '@angular/core';
|
||||
import { DossierRequest, IDossier } from '@redaction/red-ui-http';
|
||||
import { EntitiesService, List, QueryParam, RequiredParam, Validate } from '@iqser/common-ui';
|
||||
import { EntitiesService, List, QueryParam, RequiredParam, Toaster, Validate } from '@iqser/common-ui';
|
||||
import { Dossier } from '@state/model/dossier';
|
||||
import { filter, map } from 'rxjs/operators';
|
||||
import { catchError, filter, map, tap } from 'rxjs/operators';
|
||||
import { TEMPORARY_INJECTOR } from './injector';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
import { BehaviorSubject, Observable, of, Subject } from 'rxjs';
|
||||
import { ActivationEnd, Router } from '@angular/router';
|
||||
import { BaseScreenComponent } from '@components/base-screen/base-screen.component';
|
||||
import { File } from '@models/file/file';
|
||||
import { DictionaryService } from '@shared/services/dictionary.service';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
|
||||
export interface IDossiersStats {
|
||||
totalPeople: number;
|
||||
@ -16,6 +17,8 @@ export interface IDossiersStats {
|
||||
}
|
||||
|
||||
const getRelatedEvents = filter(event => event instanceof ActivationEnd && event.snapshot.component !== BaseScreenComponent);
|
||||
const DOSSIER_EXISTS_MSG = _('add-dossier-dialog.errors.dossier-already-exists');
|
||||
const GENERIC_MGS = _('add-dossier-dialog.errors.generic');
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@ -23,12 +26,14 @@ const getRelatedEvents = filter(event => event instanceof ActivationEnd && event
|
||||
export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
readonly stats$ = this.all$.pipe(map(entities => this._computeStats(entities)));
|
||||
readonly activeDossier$: Observable<Dossier | undefined>;
|
||||
readonly dossierChanged$ = new Subject<Dossier>();
|
||||
private readonly _activeDossier$ = new BehaviorSubject<Dossier | undefined>(undefined);
|
||||
|
||||
constructor(
|
||||
protected readonly _injector: Injector,
|
||||
private readonly _router: Router,
|
||||
private readonly _dictionaryService: DictionaryService
|
||||
private readonly _dictionaryService: DictionaryService,
|
||||
private readonly _toaster: Toaster
|
||||
) {
|
||||
super(TEMPORARY_INJECTOR(_injector), 'dossier');
|
||||
this.activeDossier$ = this._activeDossier$.asObservable();
|
||||
@ -72,22 +77,20 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
}
|
||||
|
||||
find(dossierId: string): Dossier | undefined;
|
||||
|
||||
find(dossierId: string, fileId: string): File | undefined;
|
||||
|
||||
find(dossierId: string, fileId?: string): Dossier | File | undefined {
|
||||
const getDossier = () => this.all.find(dossier => dossier.dossierId === dossierId);
|
||||
if (!fileId) {
|
||||
return getDossier();
|
||||
}
|
||||
|
||||
return getDossier().files.find(file => file.fileId === fileId);
|
||||
const dossier = this.all.find(item => item.dossierId === dossierId);
|
||||
return fileId ? dossier?.files.find(file => file.fileId === fileId) : dossier;
|
||||
}
|
||||
|
||||
replace(newDossier: Dossier) {
|
||||
const dossiers = this.all.filter(dossier => dossier.dossierId !== newDossier.dossierId);
|
||||
dossiers.push(newDossier);
|
||||
this.setEntities(dossiers);
|
||||
this.dossierChanged$.next(newDossier);
|
||||
if (newDossier.dossierId === this.activeDossierId) {
|
||||
this._activeDossier$.next(newDossier);
|
||||
}
|
||||
}
|
||||
|
||||
has(dossierId: string): boolean {
|
||||
@ -111,8 +114,15 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
}
|
||||
|
||||
@Validate()
|
||||
createOrUpdate(@RequiredParam() dossier: DossierRequest): Promise<IDossier> {
|
||||
return this._post(dossier).toPromise();
|
||||
createOrUpdate(@RequiredParam() dossier: DossierRequest): Observable<Dossier | undefined> {
|
||||
return this._post(dossier).pipe(
|
||||
map(updatedDossier => new Dossier(updatedDossier, this.find(updatedDossier.dossierId)?.files ?? [])),
|
||||
tap(newDossier => this.replace(newDossier)),
|
||||
catchError(error => {
|
||||
this._toaster.error(error.status === 409 ? DOSSIER_EXISTS_MSG : GENERIC_MGS);
|
||||
return of(undefined);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
getDeleted(): Promise<IDossier[]> {
|
||||
|
||||
@ -97,7 +97,7 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnInit, OnD
|
||||
this._setup();
|
||||
});
|
||||
|
||||
this.addSubscription = this.appStateService.dossierChanged$.subscribe(() => {
|
||||
this.addSubscription = this.dossiersService.dossierChanged$.subscribe(() => {
|
||||
this._setup();
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Colors, DossierRequest, IFile, ReanalysisControllerService } from '@redaction/red-ui-http';
|
||||
import { Colors, IFile, ReanalysisControllerService } from '@redaction/red-ui-http';
|
||||
import { Toaster } from '@iqser/common-ui';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { Event, NavigationEnd, ResolveStart, Router } from '@angular/router';
|
||||
@ -32,7 +32,6 @@ export interface AppState {
|
||||
export class AppStateService {
|
||||
readonly fileChanged$ = new Subject<File>();
|
||||
readonly fileReanalysed$ = new Subject<File>();
|
||||
readonly dossierChanged$ = new Subject<Dossier>();
|
||||
readonly dossierTemplateChanged$ = new Subject<DossierTemplate>();
|
||||
|
||||
private _appState: AppState;
|
||||
@ -269,26 +268,6 @@ export class AppStateService {
|
||||
);
|
||||
}
|
||||
|
||||
async createOrUpdateDossier(dossier: DossierRequest) {
|
||||
try {
|
||||
const updatedDossier = await this._dossiersService.createOrUpdate(dossier);
|
||||
let foundDossier = this._dossiersService.find(updatedDossier.dossierId);
|
||||
if (foundDossier) {
|
||||
foundDossier = new Dossier(updatedDossier, foundDossier.files);
|
||||
} else {
|
||||
foundDossier = new Dossier(updatedDossier, []);
|
||||
}
|
||||
|
||||
this._dossiersService.replace(foundDossier);
|
||||
this.dossierChanged$.next(foundDossier);
|
||||
return foundDossier;
|
||||
} catch (error) {
|
||||
this._toaster.error(
|
||||
error.status === 409 ? _('add-dossier-dialog.errors.dossier-already-exists') : _('add-dossier-dialog.errors.generic')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async reloadActiveDossierFiles() {
|
||||
if (this._dossiersService.activeDossierId) {
|
||||
await this.getFiles();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user