From ed58124c11ab81f3a99322a2e6875aa1131660db Mon Sep 17 00:00:00 2001 From: "hamza.hramchi" <hamza.hramchi@xelians.fr> Date: Tue, 25 May 2021 10:58:22 +0200 Subject: [PATCH] FEAT #16982 TIME 0:45 create visa workflow service --- src/frontend/app/app.module.ts | 4 +- .../visa-workflow-models.component.html | 6 +- .../models/visa-workflow-models.component.ts | 103 +-------------- .../visa-workflow.component.html | 8 +- .../visa-workflow/visa-workflow.component.ts | 105 +-------------- .../app/service/visa-workflow.service.ts | 125 ++++++++++++++++++ 6 files changed, 142 insertions(+), 209 deletions(-) create mode 100644 src/frontend/app/service/visa-workflow.service.ts diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts index 872d7ed026..220963d982 100755 --- a/src/frontend/app/app.module.ts +++ b/src/frontend/app/app.module.ts @@ -91,6 +91,7 @@ import { NotificationService } from './service/notification.service'; import { SignaturesContentService } from './service/signatures.service'; import { FiltersService } from './service/filters.service'; import { SignatureMethodModalComponent } from './service/signature-method/signature-method-modal.component'; +import { VisaWorkflowService } from './service/visa-workflow.service'; // OTHERS import { ConfirmComponent } from './plugins/confirm.component'; @@ -197,7 +198,8 @@ registerLocaleData(localeFr, 'fr-FR'); NotificationService, { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, CookieService, - LatinisePipe + LatinisePipe, + VisaWorkflowService ], bootstrap: [AppComponent], schemas: [ CUSTOM_ELEMENTS_SCHEMA ] diff --git a/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.html b/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.html index 43a4eac100..d6143cc69c 100644 --- a/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.html +++ b/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.html @@ -2,15 +2,15 @@ <ion-list-header> <ion-label color="secondary">{{'lang.circuitModels' | translate}}</ion-label> </ion-list-header> - <ion-item button *ngFor="let model of visaWorkflowModels" (click)="loadVisaWorkflow(model)"> + <ion-item button *ngFor="let model of visaWorkflowService.visaWorkflowModels" (click)="loadVisaWorkflow(model)"> <ion-label>{{model.title}}</ion-label> <ion-buttons slot="end"> - <ion-button fill="clear" slot="icon-only" shape="round" color="danger" (click)="$event.stopPropagation();removeModel(model)"> + <ion-button fill="clear" slot="icon-only" shape="round" color="danger" (click)="$event.stopPropagation(); visaWorkflowService.removeModel(model)"> <ion-icon slot="icon-only" name="trash-outline"></ion-icon> </ion-button> </ion-buttons> </ion-item> - <ion-item button (click)="createModel()" [disabled]="currentWorkflow.length === 0"> + <ion-item button (click)="visaWorkflowService.createModel(currentWorkflow)" [disabled]="currentWorkflow.length === 0"> <ion-icon color="primary" slot="start" name="add-circle-outline"></ion-icon> <ion-label color="primary">{{'lang.newTemplate' | translate}}</ion-label> </ion-item> diff --git a/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.ts b/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.ts index 991ec474d6..788391036a 100644 --- a/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.ts +++ b/src/frontend/app/document/visa-workflow/models/visa-workflow-models.component.ts @@ -6,6 +6,7 @@ import { catchError, tap } from 'rxjs/operators'; import { of } from 'rxjs'; import { AuthService } from '../../../service/auth.service'; import { TranslateService } from '@ngx-translate/core'; +import { VisaWorkflowService } from '../../../service/visa-workflow.service'; @Component({ selector: 'app-visa-workflow-models', @@ -24,108 +25,12 @@ export class VisaWorkflowModelsComponent implements OnInit { public popoverController: PopoverController, public alertController: AlertController, public notificationService: NotificationService, - public authService: AuthService + public authService: AuthService, + public visaWorkflowService: VisaWorkflowService ) { } ngOnInit(): void { - this.getVisaUserModels(); - } - - async createModel() { - const alert = await this.alertController.create({ - header: this.translate.instant('lang.newTemplate'), - message: this.translate.instant('lang.newTemplateDesc'), - inputs: [ - { - name: 'title', - type: 'text', - placeholder: this.translate.instant('lang.label') + ' *', - }, - ], - buttons: [ - { - text: this.translate.instant('lang.cancel'), - role: 'cancel', - handler: () => { } - }, { - text: this.translate.instant('lang.validate'), - handler: (data: any) => { - if (data.title !== '') { - this.saveModel(data.title); - return true; - } else { - this.notificationService.error(this.translate.instant('lang.label') + ' ' + this.translate.instant('lang.mandatory')); - return false; - } - } - } - ] - }); - - await alert.present(); - } - - saveModel(title: string) { - const objToSend: any = { - title: title, - items: this.currentWorkflow.map((item: any) => ({ - userId: item.userId, - mode: this.authService.getWorkflowMode(item.role), - signatureMode: this.authService.getSignatureMode(item.role) - })) - }; - this.http.post('../rest/workflowTemplates', objToSend).pipe( - tap((res: any) => { - this.notificationService.success('lang.modelCreated'); - this.visaWorkflowModels.push({ id: res.id, title: title }); - }), - catchError(err => { - this.notificationService.handleErrors(err); - return of(false); - }) - ).subscribe(); - } - - async removeModel(model: any) { - const alert = await this.alertController.create({ - header: this.translate.instant('lang.delete'), - message: this.translate.instant('lang.deleteTemplate'), - buttons: [ - { - text: this.translate.instant('lang.no'), - role: 'cancel', - handler: () => { } - }, { - text: this.translate.instant('lang.yes'), - handler: () => { - this.http.delete(`../rest/workflowTemplates/${model.id}`).pipe( - tap(() => { - this.visaWorkflowModels = this.visaWorkflowModels.filter((item: any) => item.id !== model.id); - this.notificationService.success(`Modèle ${model.title} supprimé`); - }), - catchError(err => { - this.notificationService.handleErrors(err); - return of(false); - }) - ).subscribe(); - } - } - ] - }); - - await alert.present(); - } - - getVisaUserModels() { - this.http.get('../rest/workflowTemplates').pipe( - tap((data: any) => { - this.visaWorkflowModels = data.workflowTemplates; - }), - catchError(err => { - this.notificationService.handleErrors(err); - return of(false); - }) - ).subscribe(); + this.visaWorkflowService.getVisaUserModels(this.currentWorkflow); } loadVisaWorkflow(model: any) { diff --git a/src/frontend/app/document/visa-workflow/visa-workflow.component.html b/src/frontend/app/document/visa-workflow/visa-workflow.component.html index af899c7c83..a8342ff82c 100644 --- a/src/frontend/app/document/visa-workflow/visa-workflow.component.html +++ b/src/frontend/app/document/visa-workflow/visa-workflow.component.html @@ -31,19 +31,19 @@ <ion-label style="font-size: 14px;">{{'lang.newOtp' | translate}}</ion-label> </ion-item> <button mat-menu-item [matMenuTriggerFor]="model" - (menuOpened)="getVisaUserModels()">{{'lang.circuitModels' | translate}}</button> + (menuOpened)="visaWorkflowService.getVisaUserModels(visaWorkflow)">{{'lang.circuitModels' | translate}}</button> </mat-menu> <mat-menu #model="matMenu"> - <ion-item button lines="none" *ngFor="let model of visaWorkflowModels" (click)="loadVisaWorkflow(model)"> + <ion-item button lines="none" *ngFor="let model of visaWorkflowService.visaWorkflowModels" (click)="loadVisaWorkflow(model)"> <ion-label style="font-size: 14px;">{{model.title}}</ion-label> <ion-buttons slot="end"> <ion-button fill="clear" slot="icon-only" shape="round" color="danger" - (click)="$event.stopPropagation();removeModel(model)"> + (click)="$event.stopPropagation(); visaWorkflowService.removeModel(model)"> <ion-icon slot="icon-only" name="trash-outline"></ion-icon> </ion-button> </ion-buttons> </ion-item> - <ion-item button (click)="createModel()" [disabled]="visaWorkflow.length === 0 || notExternalUsers.length === 0"> + <ion-item button (click)="visaWorkflowService.createModel(visaWorkflow)" [disabled]="visaWorkflow.length === 0 || visaWorkflowService.notExternalUsers === 0"> <ion-label style="font-size: 14px;">{{'lang.newTemplate' | translate}}</ion-label> </ion-item> </mat-menu> diff --git a/src/frontend/app/document/visa-workflow/visa-workflow.component.ts b/src/frontend/app/document/visa-workflow/visa-workflow.component.ts index fd13fa2139..8775c73a7a 100644 --- a/src/frontend/app/document/visa-workflow/visa-workflow.component.ts +++ b/src/frontend/app/document/visa-workflow/visa-workflow.component.ts @@ -11,6 +11,7 @@ import { TranslateService } from '@ngx-translate/core'; import { OtpCreateComponent } from './otps/otp-create.component'; import { OtpService } from './otps/otp.service'; import { VisaWorkflowModelsComponent } from './models/visa-workflow-models.component'; +import { VisaWorkflowService } from '../../service/visa-workflow.service'; @Component({ selector: 'app-visa-workflow', @@ -32,8 +33,6 @@ export class VisaWorkflowComponent implements OnInit { header: 'Roles' }; roles: any[] = []; - visaWorkflowModels: any[] = []; - notExternalUsers: any[] = []; hasConnector: boolean = false; constructor( @@ -45,7 +44,8 @@ export class VisaWorkflowComponent implements OnInit { public notificationService: NotificationService, public modalController: ModalController, private otpService: OtpService, - public popoverController: PopoverController + public popoverController: PopoverController, + public visaWorkflowService: VisaWorkflowService ) { } async ngOnInit(): Promise<void> { @@ -241,92 +241,6 @@ export class VisaWorkflowComponent implements OnInit { } } - async createModel() { - const checkExternalUsers: number = this.visaWorkflow.filter((user: any) => user.userId === null).length; - const alert = await this.alertController.create({ - header: this.translate.instant('lang.newTemplate'), - message: this.translate.instant(checkExternalUsers === 0 ? 'lang.newTemplateDesc' : 'lang.newTemplateDescWithOtp'), - inputs: [ - { - name: 'title', - type: 'text', - placeholder: this.translate.instant('lang.label') + ' *', - }, - ], - buttons: [ - { - text: this.translate.instant('lang.cancel'), - role: 'cancel', - handler: () => { } - }, { - text: this.translate.instant('lang.validate'), - handler: (data: any) => { - if (data.title !== '') { - this.saveModel(data.title); - return true; - } else { - this.notificationService.error(this.translate.instant('lang.label') + ' ' + this.translate.instant('lang.mandatory')); - return false; - } - } - } - ] - }); - - await alert.present(); - } - - saveModel(title: string) { - const objToSend: any = { - title: title, - items: this.visaWorkflow.filter((user: any) => user.userId !== null).map((item: any) => ({ - userId: item.userId, - mode: this.authService.getWorkflowMode(item.role), - signatureMode: this.authService.getSignatureMode(item.role) - })) - }; - this.http.post('../rest/workflowTemplates', objToSend).pipe( - tap((res: any) => { - this.notificationService.success('lang.modelCreated'); - this.visaWorkflowModels.push({ id: res.id, title: title }); - }), - catchError(err => { - this.notificationService.handleErrors(err); - return of(false); - }) - ).subscribe(); - } - - async removeModel(model: any) { - const alert = await this.alertController.create({ - header: this.translate.instant('lang.delete'), - message: this.translate.instant('lang.deleteTemplate'), - buttons: [ - { - text: this.translate.instant('lang.no'), - role: 'cancel', - handler: () => { } - }, { - text: this.translate.instant('lang.yes'), - handler: () => { - this.http.delete(`../rest/workflowTemplates/${model.id}`).pipe( - tap(() => { - this.visaWorkflowModels = this.visaWorkflowModels.filter((item: any) => item.id !== model.id); - this.notificationService.success(`Modèle ${model.title} supprimé`); - }), - catchError(err => { - this.notificationService.handleErrors(err); - return of(false); - }) - ).subscribe(); - } - } - ] - }); - - await alert.present(); - } - loadVisaWorkflow(model: any) { this.http.get(`../rest/workflowTemplates/${model.id}`).pipe( tap((data: any) => { @@ -354,19 +268,6 @@ export class VisaWorkflowComponent implements OnInit { ).subscribe(); } - getVisaUserModels() { - this.http.get('../rest/workflowTemplates').pipe( - tap((data: any) => { - this.visaWorkflowModels = data.workflowTemplates; - this.notExternalUsers = this.visaWorkflow.filter((user: any) => user.userId !== null); - }), - catchError(err => { - this.notificationService.handleErrors(err); - return of(false); - }) - ).subscribe(); - } - getConnectors() { return new Promise((resolve) => { this.http.get('../rest/connectors').pipe( diff --git a/src/frontend/app/service/visa-workflow.service.ts b/src/frontend/app/service/visa-workflow.service.ts new file mode 100644 index 0000000000..049a81ba34 --- /dev/null +++ b/src/frontend/app/service/visa-workflow.service.ts @@ -0,0 +1,125 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { AlertController, ModalController, PopoverController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { of } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; +import { AuthService } from './auth.service'; +import { NotificationService } from './notification.service'; + +@Injectable() +export class VisaWorkflowService { + + visaWorkflowModels: any[] = []; + notExternalUsers: number = 0; + + constructor( + public http: HttpClient, + public authService: AuthService, + public alertController: AlertController, + private translate: TranslateService, + public notificationService: NotificationService, + public modalController: ModalController, + public popoverController: PopoverController, + + ) { } + + getVisaUserModels(visaWorkflow: any[]) { + this.http.get('../rest/workflowTemplates').pipe( + tap((data: any) => { + this.visaWorkflowModels = data.workflowTemplates; + this.notExternalUsers = visaWorkflow.filter((user: any) => user.userId !== null).length; + }), + catchError(err => { + this.notificationService.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + + async createModel(currentWorkflow: any[]) { + const alert = await this.alertController.create({ + header: this.translate.instant('lang.newTemplate'), + message: this.translate.instant('lang.newTemplateDesc'), + inputs: [ + { + name: 'title', + type: 'text', + placeholder: this.translate.instant('lang.label') + ' *', + }, + ], + buttons: [ + { + text: this.translate.instant('lang.cancel'), + role: 'cancel', + handler: () => { } + }, { + text: this.translate.instant('lang.validate'), + handler: (data: any) => { + if (data.title !== '') { + this.saveModel(data.title, currentWorkflow); + return true; + } else { + this.notificationService.error(this.translate.instant('lang.label') + ' ' + this.translate.instant('lang.mandatory')); + return false; + } + } + } + ] + }); + + await alert.present(); + } + + saveModel(title: string, currentWorkflow: any[]) { + const objToSend: any = { + title: title, + items: currentWorkflow.filter((user: any) => user.userId !== null).map((item: any) => ({ + userId: item.userId, + mode: this.authService.getWorkflowMode(item.role), + signatureMode: this.authService.getSignatureMode(item.role) + })) + }; + this.http.post('../rest/workflowTemplates', objToSend).pipe( + tap((res: any) => { + this.notificationService.success('lang.modelCreated'); + this.visaWorkflowModels.push({ id: res.id, title: title }); + }), + catchError(err => { + this.notificationService.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + + async removeModel(model: any) { + const alert = await this.alertController.create({ + header: this.translate.instant('lang.delete'), + message: this.translate.instant('lang.deleteTemplate'), + buttons: [ + { + text: this.translate.instant('lang.no'), + role: 'cancel', + handler: () => { } + }, { + text: this.translate.instant('lang.yes'), + handler: () => { + this.http.delete(`../rest/workflowTemplates/${model.id}`).pipe( + tap(() => { + this.visaWorkflowModels = this.visaWorkflowModels.filter((item: any) => item.id !== model.id); + this.notificationService.success(`Modèle ${model.title} supprimé`); + }), + catchError(err => { + this.notificationService.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + } + ] + }); + + await alert.present(); + } + +} -- GitLab