diff --git a/src/frontend/app/actions/actions.service.ts b/src/frontend/app/actions/actions.service.ts index 8369bb91bf5e76c5af650b47792dbcad1e435935..6533b97c3f8e6eb08051cebd988c0e4a92e6ef7a 100644 --- a/src/frontend/app/actions/actions.service.ts +++ b/src/frontend/app/actions/actions.service.ts @@ -29,6 +29,7 @@ import { SendSignatureBookActionComponent } from './visa-send-signature-book-act import { ContinueVisaCircuitActionComponent } from './visa-continue-circuit-action/continue-visa-circuit-action.component'; import { SendAvisWorkflowComponent } from './avis-workflow-send-action/send-avis-workflow-action.component'; import { ContinueAvisCircuitActionComponent } from './avis-continue-circuit-action/continue-avis-circuit-action.component'; +import { SendAvisParallelComponent } from './avis-parallel-send-action/send-avis-parallel-action.component'; @Injectable() export class ActionsService { @@ -753,6 +754,28 @@ export class ActionsService { ).subscribe(); } + sendToParallelOpinion(options: any = null) { + const dialogRef = this.dialog.open(SendAvisParallelComponent, { + autoFocus: false, + disableClose: true, + data: this.setDatasActionToSend() + }); + dialogRef.afterClosed().pipe( + tap((data: any) => { + this.unlockResourceAfterActionModal(data); + }), + filter((data: string) => data === 'success'), + tap((result: any) => { + this.endAction(result); + }), + finalize(() => this.loading = false), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + continueOpinionCircuitAction(options: any = null) { const dialogRef = this.dialog.open(ContinueAvisCircuitActionComponent, { autoFocus: false, diff --git a/src/frontend/app/actions/avis-continue-circuit-action/continue-avis-circuit-action.component.ts b/src/frontend/app/actions/avis-continue-circuit-action/continue-avis-circuit-action.component.ts index 65b6524f5e0a68116d4bbbc8a7704648307211cd..2eae3dd7b1611f15e1b180878d495cb12affa816 100644 --- a/src/frontend/app/actions/avis-continue-circuit-action/continue-avis-circuit-action.component.ts +++ b/src/frontend/app/actions/avis-continue-circuit-action/continue-avis-circuit-action.component.ts @@ -43,9 +43,8 @@ export class ContinueAvisCircuitActionComponent implements OnInit { this.resourcesErrors = []; this.resourcesWarnings = []; - // TO DO : WAIT BACK return new Promise((resolve, reject) => { - this.http.post('../../rest/resourcesList/users/' + this.data.userId + '/groups/' + this.data.groupId + '/baskets/' + this.data.basketId + '/actions/' + this.data.action.id + '/checkContinueVisaCircuit', { resources: this.data.resIds }) + this.http.post('../../rest/resourcesList/users/' + this.data.userId + '/groups/' + this.data.groupId + '/baskets/' + this.data.basketId + '/actions/' + this.data.action.id + '/checkContinueOpinionCircuit', { resources: this.data.resIds }) .subscribe((data: any) => { if (!this.functions.empty(data.resourcesInformations.warning)) { this.resourcesWarnings = data.resourcesInformations.warning; diff --git a/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.html b/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.html new file mode 100644 index 0000000000000000000000000000000000000000..f5982e0a980024f56f1e6dd198f84da0d67c0cfc --- /dev/null +++ b/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.html @@ -0,0 +1,49 @@ +<h1 mat-dialog-title>{{data.action.label}}</h1> +<div mat-dialog-content> + <div *ngIf="loading" class="loading" style="display:flex;height:100%;"> + <mat-spinner style="margin:auto;"></mat-spinner> + </div> + <mat-sidenav-container autosize style="height:100%;"> + <mat-sidenav-content style="background: white;padding:10px;"> + <div> + {{lang.makeActionOn}} + <b *ngIf="data.resIds.length === 0" color="primary" class="highlight">{{lang.currentIndexingMail}}</b> + <b *ngIf="data.resIds.length == 1" color="primary" class="highlight">{{data.resource.chrono}}</b> + <b *ngIf="data.resIds.length > 1" color="primary" class="highlight">{{data.resIds.length}} + {{lang.elements}}</b> ? + </div> + <div *ngIf="resourcesError.length > 0" class="alert-message alert-message-danger mailList" role="alert"> + <p> + {{lang.canNotMakeAction}} : + </p> + <ul> + <li *ngFor="let ressource of resourcesError"> + <b>{{ressource.alt_identifier}}</b> : {{lang[ressource.reason]}} + </li> + </ul> + </div> + <mat-form-field (click)="picker.open()" appearance="outline" style="cursor:pointer;margin-top: 10px;"> + <mat-label>{{lang.opinionLimitDate}}</mat-label> + <input matInput [(ngModel)]="opinionLimitDate" [matDatepicker]="picker" [placeholder]="lang.chooseDate" + [min]="today" readonly style="cursor:pointer;" required> + <mat-datepicker-toggle matSuffix [for]="picker" *ngIf="!opinionLimitDate"> + </mat-datepicker-toggle> + <mat-datepicker #picker></mat-datepicker> + <button mat-button color="warn" matSuffix mat-icon-button *ngIf="opinionLimitDate" + (click)="$event.stopPropagation();opinionLimitDate = null;" [title]="lang.eraseValue"> + <mat-icon color="warn" class="fa fa-calendar-times"> + </mat-icon> + </button> + </mat-form-field> + <app-note-editor #noteEditor [title]="lang.addOpinionReason" [resIds]="data.resIds"></app-note-editor> + <app-avis-workflow *ngIf="data.resIds.length == 1 || (!noResourceToProcess && data.resIds.length > 1)" + [adminMode]="true" [mode]="'parallel'" #appAvisWorkflow> + </app-avis-workflow> + </mat-sidenav-content> + </mat-sidenav-container> +</div> +<div mat-dialog-actions class="actions"> + <button mat-raised-button mat-button color="primary" [disabled]="loading || !isValidAction()" + (click)="onSubmit()">{{lang.validate}}</button> + <button mat-raised-button mat-button [disabled]="loading" [mat-dialog-close]="">{{lang.cancel}}</button> +</div> \ No newline at end of file diff --git a/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.scss b/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..9424211bb4af9027d454165e7417bf86fb23c6eb --- /dev/null +++ b/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.scss @@ -0,0 +1,128 @@ +@import '../../../css/vars.scss'; + +.fullHeight { + height: 70vh; +} + +.fullWidth { + width: 70vw; +} + +.highlight { + font-size: 110%; +} + +.loading { + display: flex; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #ffffffb3; + z-index: 2; + overflow: hidden; +} + +.mailList { + ul { + font-size: 12px; + max-height: 100px; + overflow: auto; + padding-left: 25px; + padding-right: 5px; + padding-bottom: 10px; + margin-top: 10px; + } + + p { + //font-size: 18px; + margin: 0; + text-decoration: underline; + } + + b { + font-size: 120%; + } +} + +.formType { + align-items: center; + display: flex; + margin: 10px; + border-radius: 4px; + border: solid 1px #ccc; + position: relative; + padding: 10px; + + &-title { + white-space: pre; + overflow: hidden; + max-width: 85%; + text-overflow: ellipsis; + z-index: 1; + font-size: 10px; + font-weight: bold; + background: white; + position: absolute; + top: -7px; + left: 10px; + padding: 0px; + margin: 0px; + color: #135f7f; + } + + ::ng-deep.mat-form-field-suffix { + color: $secondary; + font-size: 15px; + top: 0; + } + + ::ng-deep.mat-form-field-wrapper { + padding: 0; + } +} + +.priceContent { + display: flex; + align-items: center; + justify-content: flex-end; + width: 100%; + + &-label { + text-align: right; + color: $primary; + flex: 1; + justify-content: flex-end; + display: flex; + padding-right: 10px; + } + + .mat-form-field { + width: 90px !important; + + input { + font-weight: bold; + user-select: none; + } + } +} + +.priceInfo { + padding-right: 20px; + font-size: 10px; + opacity: 0.5; + width: 100%; +} + +.pjList { + display: flex; + width: 100%; + overflow: auto; + flex-direction: column; + background: #666; + + img { + margin: 10px; + } +} \ No newline at end of file diff --git a/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.ts b/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..41ea0befa73303571cc356226a2750ef9cdef81e --- /dev/null +++ b/src/frontend/app/actions/avis-parallel-send-action/send-avis-parallel-action.component.ts @@ -0,0 +1,130 @@ +import { Component, OnInit, Inject, ViewChild } from '@angular/core'; +import { LANG } from '../../translate.component'; +import { NotificationService } from '../../notification.service'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { HttpClient } from '@angular/common/http'; +import { NoteEditorComponent } from '../../notes/note-editor.component'; +import { tap, finalize, catchError } from 'rxjs/operators'; +import { of } from 'rxjs'; +import { FunctionsService } from '../../../service/functions.service'; +import { AvisWorkflowComponent } from '../../avis/avis-workflow.component'; + +@Component({ + templateUrl: "send-avis-parallel-action.component.html", + styleUrls: ['send-avis-parallel-action.component.scss'], +}) +export class SendAvisParallelComponent implements OnInit { + + lang: any = LANG; + loading: boolean = false; + + resourcesError: any[] = []; + + noResourceToProcess: boolean = null; + + opinionLimitDate: Date = null; + + today: Date = new Date(); + + availableRoles: any[] = []; + + @ViewChild('noteEditor', { static: true }) noteEditor: NoteEditorComponent; + @ViewChild('appAvisWorkflow', { static: false }) appAvisWorkflow: AvisWorkflowComponent; + + constructor( + public http: HttpClient, + private notify: NotificationService, + public dialogRef: MatDialogRef<SendAvisParallelComponent>, + @Inject(MAT_DIALOG_DATA) public data: any, + public functions: FunctionsService) { } + + async ngOnInit(): Promise<void> { + if (this.data.resIds.length > 0) { + this.loading = true; + await this.checkAvisParallel(); + this.loading = false; + } + } + + checkAvisParallel() { + this.resourcesError = []; + + return new Promise((resolve, reject) => { + this.http.post('../../rest/resourcesList/users/' + this.data.userId + '/groups/' + this.data.groupId + '/baskets/' + this.data.basketId + '/actions/' + this.data.action.id + '/checkOpinionInfo', { resources: this.data.resIds }) + .subscribe((data: any) => { + if (!this.functions.empty(data.resourcesInformations.noAttachment)) { + this.resourcesError = data.resourcesInformations.noAttachment; + } + this.noResourceToProcess = this.data.resIds.length === this.resourcesError.length; + resolve(true); + }, (err: any) => { + this.notify.handleSoftErrors(err); + }); + }); + } + + async onSubmit() { + this.loading = true; + if (this.data.resIds.length === 0) { + let res = await this.indexDocument(); + if (res) { + res = await this.appAvisWorkflow.saveAvisWorkflow(this.data.resIds); + } + if (res) { + this.executeAction(this.data.resIds); + } + } else { + const realResSelected: number[] = this.data.resIds.filter((resId: any) => this.resourcesError.map(resErr => resErr.res_id).indexOf(resId) === -1); + + const res = await this.appAvisWorkflow.saveAvisWorkflow(realResSelected); + + if (res) { + this.executeAction(realResSelected); + } + } + this.loading = false; + } + + indexDocument() { + return new Promise((resolve, reject) => { + this.http.post('../../rest/resources', this.data.resource).pipe( + tap((data: any) => { + this.data.resIds = [data.resId]; + resolve(true); + }), + catchError((err: any) => { + this.notify.handleErrors(err); + resolve(false); + return of(false); + }) + ).subscribe(); + }); + } + + executeAction(realResSelected: number[]) { + const noteContent: string = `[POUR AVIS] ${this.noteEditor.getNoteContent()}`; + this.http.put(this.data.processActionRoute, { resources: realResSelected, note: noteContent, data: { opinionLimitDate: this.functions.formatDateObjectToFrenchDateString(this.opinionLimitDate, true), opinionCircuit : this.appAvisWorkflow.getWorkflow() } }).pipe( + tap((data: any) => { + if (!data) { + this.dialogRef.close('success'); + } + if (data && data.errors != null) { + this.notify.error(data.errors); + } + }), + finalize(() => this.loading = false), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + + isValidAction() { + if (!this.noResourceToProcess && this.appAvisWorkflow !== undefined && !this.appAvisWorkflow.emptyWorkflow() && !this.appAvisWorkflow.workflowEnd() && !this.functions.empty(this.noteEditor.getNoteContent()) && !this.functions.empty(this.functions.formatDateObjectToFrenchDateString(this.opinionLimitDate))) { + return true; + } else { + return false; + } + } +} diff --git a/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.html b/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.html index 8f3a8cf5e1bfd0cc7340065d253fac789f2f165a..7b65e8093b51c0fe96def2d91343bed8b495997f 100644 --- a/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.html +++ b/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.html @@ -23,7 +23,7 @@ </ul> </div> <mat-form-field (click)="picker.open()" appearance="outline" style="cursor:pointer;margin-top: 10px;"> - <mat-label>Date limite de l'avis</mat-label> + <mat-label>{{lang.opinionLimitDate}}</mat-label> <input matInput [(ngModel)]="opinionLimitDate" [matDatepicker]="picker" [placeholder]="lang.chooseDate" [min]="today" readonly style="cursor:pointer;" required> <mat-datepicker-toggle matSuffix [for]="picker" *ngIf="!opinionLimitDate"> diff --git a/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.ts b/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.ts index 56ef6800876d90ab18c671a939bc972c1579e04a..f85e842d2524ce972367fce3fb533ba1bccc3206 100644 --- a/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.ts +++ b/src/frontend/app/actions/avis-workflow-send-action/send-avis-workflow-action.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Inject, ViewChild } from '@angular/core'; +import { Component, OnInit, Inject, ViewChild, AfterViewInit } from '@angular/core'; import { LANG } from '../../translate.component'; import { NotificationService } from '../../notification.service'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @@ -13,7 +13,7 @@ import { AvisWorkflowComponent } from '../../avis/avis-workflow.component'; templateUrl: "send-avis-workflow-action.component.html", styleUrls: ['send-avis-workflow-action.component.scss'], }) -export class SendAvisWorkflowComponent implements OnInit { +export class SendAvisWorkflowComponent implements AfterViewInit { lang: any = LANG; loading: boolean = false; @@ -36,12 +36,7 @@ export class SendAvisWorkflowComponent implements OnInit { @Inject(MAT_DIALOG_DATA) public data: any, public functions: FunctionsService) { } - async ngOnInit(): Promise<void> { - if (this.data.resIds.length > 0) { - this.loading = true; - await this.checkAvisWorkflow(); - this.loading = false; - } + async ngAfterViewInit(): Promise<void> { if (this.data.resIds.length === 1) { await this.appAvisWorkflow.loadWorkflow(this.data.resIds[0]); if (this.appAvisWorkflow.emptyWorkflow()) { @@ -50,24 +45,6 @@ export class SendAvisWorkflowComponent implements OnInit { } } - checkAvisWorkflow() { - this.resourcesError = []; - - // TO DO : WAIT BACK - return new Promise((resolve, reject) => { - this.http.post('../../rest/resourcesList/users/' + this.data.userId + '/groups/' + this.data.groupId + '/baskets/' + this.data.basketId + '/actions/' + this.data.action.id + '/checkSignatureBook', { resources: this.data.resIds }) - .subscribe((data: any) => { - if (!this.functions.empty(data.resourcesInformations.noAttachment)) { - this.resourcesError = data.resourcesInformations.noAttachment; - } - this.noResourceToProcess = this.data.resIds.length === this.resourcesError.length; - resolve(true); - }, (err: any) => { - this.notify.handleSoftErrors(err); - }); - }); - } - async onSubmit() { this.loading = true; if (this.data.resIds.length === 0) { diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts index 1b57cea8ba85505867c0b3cfd6dcda662eb20710..6b40043d2e08b73be1712df2377a02271d274da2 100755 --- a/src/frontend/app/app.module.ts +++ b/src/frontend/app/app.module.ts @@ -61,6 +61,7 @@ import { SendSignatureBookActionComponent } from './actions/visa-s import { ContinueVisaCircuitActionComponent } from './actions/visa-continue-circuit-action/continue-visa-circuit-action.component'; import { ContinueAvisCircuitActionComponent } from './actions/avis-continue-circuit-action/continue-avis-circuit-action.component'; import { SendAvisWorkflowComponent } from './actions/avis-workflow-send-action/send-avis-workflow-action.component'; +import { SendAvisParallelComponent } from './actions/avis-parallel-send-action/send-avis-parallel-action.component'; import { FiltersListComponent } from './list/filters/filters-list.component'; import { FiltersToolComponent } from './list/filters/filters-tool.component'; @@ -157,6 +158,7 @@ import { AddAvisModelModalComponent } from './avis/addAvisModel/add-avis-model-m ContinueVisaCircuitActionComponent, ContinueAvisCircuitActionComponent, SendAvisWorkflowComponent, + SendAvisParallelComponent, ActionsListComponent, PrintSeparatorComponent, FolderPinnedComponent, @@ -204,6 +206,7 @@ import { AddAvisModelModalComponent } from './avis/addAvisModel/add-avis-model-m ResetVisaActionComponent, InterruptVisaActionComponent, SendAvisWorkflowComponent, + SendAvisParallelComponent, UpdateDepartureDateActionComponent, SendExternalSignatoryBookActionComponent, SendExternalNoteBookActionComponent, diff --git a/src/frontend/app/avis/avis-workflow.component.html b/src/frontend/app/avis/avis-workflow.component.html index f038dd701d563a583e9d646c08e6b130cf88f946..0f2e86ccf285c7eaac5460aab19c9b768d51e4d4 100644 --- a/src/frontend/app/avis/avis-workflow.component.html +++ b/src/frontend/app/avis/avis-workflow.component.html @@ -1,9 +1,9 @@ - <mat-list *ngIf="!loading"> <mat-form-field appearance="outline" *ngIf="adminMode && !linkedToMaarchParapheur"> <input type="text" matInput placeholder="Ajouter des personnes" id="searchAvisUserInput" [formControl]="searchAvisUser" [matAutocomplete]="autoGroup"> - <mat-autocomplete #autoGroup="matAutocomplete" (optionSelected)="addItemToWorkflow($event.option.value)" (opened)="initFilterAvisModelList()"> + <mat-autocomplete #autoGroup="matAutocomplete" (optionSelected)="addItemToWorkflow($event.option.value)" + (opened)="initFilterAvisModelList()"> <mat-option disabled *ngIf="avisModelListNotLoaded"> <div style="display: flex;justify-content: center;"> <mat-spinner diameter="35"></mat-spinner> @@ -50,7 +50,8 @@ [cdkDragDisabled]="!adminMode || !functions.empty(diffusion.process_date)" [class.notDraggable]="!adminMode || !functions.empty(diffusion.process_date)" [class.notEditable]="!adminMode" [class.processed]="diffusion.process_date != null"> - <mat-icon *ngIf="getCurrentAvisUserIndex() === i && !adminMode" class="fa fa-chevron-right fa-2x" mat-list-icon color="accent"> + <mat-icon *ngIf="getCurrentAvisUserIndex() === i && !adminMode" class="fa fa-chevron-right fa-2x" + mat-list-icon color="accent"> </mat-icon> <mat-icon [ngClass]="{'fa fa-user fa-2x': functions.empty(diffusion.picture),'avatar': !functions.empty(diffusion.picture)}" @@ -58,8 +59,8 @@ [style.background-image]="!functions.empty(diffusion.picture) ? 'url('+diffusion.picture+')' : ''"> </mat-icon> <ng-container *ngIf="!adminMode || diffusion.process_date != null"> - <mat-icon mat-list-icon class="fa-2x far" - [class.fa-hourglass]="diffusion.process_date == null" [class.fa-thumbs-up]="diffusion.process_date != null" [class.valid]="diffusion.process_date != null" + <mat-icon mat-list-icon class="fa-2x far" [class.fa-hourglass]="diffusion.process_date == null" + [class.fa-thumbs-up]="diffusion.process_date != null" [class.valid]="diffusion.process_date != null" style="opacity:0.5;"></mat-icon> </ng-container> <div mat-line class="workflowLine"> @@ -71,10 +72,16 @@ {{diffusion.item_entity}} </div> <div *ngIf="diffusion.process_date != null" class="workflowLineProcessDate" - title='{{diffusion.process_date | fullDate}}' - color="accent">{{lang.avisSent}} {{diffusion.process_date + title='{{diffusion.process_date | fullDate}}' color="accent">{{lang.avisSent}} {{diffusion.process_date | timeAgo : 'full'}}</div> </div> + <div *ngIf="mode === 'parallel'"> + <button class="currentRoleButton" color="primary" + [disabled]="!adminMode || !functions.empty(diffusion.process_date)" mat-raised-button [matMenuTriggerFor]="menu" [title]="getRoleLabel(diffusion.item_mode)">{{getRoleLabel(diffusion.item_mode)}}</button> + <mat-menu #menu="matMenu"> + <button mat-menu-item *ngFor="let role of availableRoles" (click)="changeRole(role, i)">{{role.label}}</button> + </mat-menu> + </div> </div> <button mat-icon-button *ngIf="adminMode && functions.empty(diffusion.process_date)" (click)="deleteItem(i)"> diff --git a/src/frontend/app/avis/avis-workflow.component.ts b/src/frontend/app/avis/avis-workflow.component.ts index e5dca9b2dffcb2663e8e554afa0770a8f7dea78b..a5a16f24177854049f95812225ab6eff4e256042 100644 --- a/src/frontend/app/avis/avis-workflow.component.ts +++ b/src/frontend/app/avis/avis-workflow.component.ts @@ -32,6 +32,8 @@ export class AvisWorkflowComponent implements OnInit { public: [] }; + availableRoles: any[] = []; + signAvisUsers: any = []; filteredSignAvisUsers: Observable<string[]>; filteredPublicModels: Observable<string[]>; @@ -45,6 +47,8 @@ export class AvisWorkflowComponent implements OnInit { @Input('adminMode') adminMode: boolean; @Input('resId') resId: number = null; + @Input('mode') mode: 'parallel' | 'circuit' = 'circuit'; + @ViewChild('searchAvisUserInput', { static: true }) searchAvisUserInput: ElementRef; searchAvisUser = new FormControl(); @@ -58,6 +62,10 @@ export class AvisWorkflowComponent implements OnInit { ) { } ngOnInit(): void { + if (this.mode === 'parallel') { + this.loadAvisRoles(); + } + if (this.resId !== null) { this.loadWorkflow(this.resId); } @@ -73,6 +81,30 @@ export class AvisWorkflowComponent implements OnInit { } } + loadAvisRoles() { + return new Promise((resolve, reject) => { + this.http.get(`../../rest/roles`).pipe( + tap((data:any) => { + this.availableRoles = data.roles.filter((role: any) => ['avis', 'avis_copy', 'avis_info'].indexOf(role.id) > -1).map((role: any) => { + return { + id: role.id, + label: role.label + } + }); + resolve(true); + }), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + }); + } + + getRoleLabel(id: string) { + return this.availableRoles.filter(role => role.id === id) [0].label; + } + loadListModel(entityId: number) { this.loading = true; @@ -240,7 +272,7 @@ export class AvisWorkflowComponent implements OnInit { this.avisWorkflow.items.push( { ...element, - difflist_type: 'AVIS_CIRCUIT' + difflist_type: this.mode === 'circuit' ? 'AVIS_CIRCUIT' : 'entity_id' }); }); this.avisWorkflowClone = JSON.parse(JSON.stringify(this.avisWorkflow.items)) @@ -263,7 +295,7 @@ export class AvisWorkflowComponent implements OnInit { this.avisWorkflow.items.push( { ...element, - difflist_type: 'AVIS_CIRCUIT' + difflist_type: this.mode === 'circuit' ? 'AVIS_CIRCUIT' : 'entity_id' }); }); this.avisWorkflowClone = JSON.parse(JSON.stringify(this.avisWorkflow.items)) @@ -284,8 +316,8 @@ export class AvisWorkflowComponent implements OnInit { return this.avisWorkflow.items.length; } - changeRole(i: number) { - this.avisWorkflow.items[i].requested_signature = !this.avisWorkflow.items[i].requested_signature; + changeRole(role: any, i : number) { + this.avisWorkflow.items[i].item_mode = role.id; } getWorkflow() { @@ -365,11 +397,10 @@ export class AvisWorkflowComponent implements OnInit { item_id: item.id, item_type: 'user', item_entity: item.entity, + item_mode: 'avis', labelToDisplay: item.label, externalId: !this.functions.empty(item.externalId) ? item.externalId : null, - difflist_type: 'AVIS_CIRCUIT', - signatory: false, - requested_signature: false + difflist_type: this.mode === 'circuit' ? 'AVIS_CIRCUIT' : 'entity_id' }); this.searchAvisUser.reset(); } else if (item.type === 'entity') { @@ -382,9 +413,8 @@ export class AvisWorkflowComponent implements OnInit { item_type: 'user', labelToDisplay: itemTemplate.idToDisplay, item_entity: itemTemplate.descriptionToDisplay, - difflist_type: 'AVIS_CIRCUIT', - signatory: false, - requested_signature: false + item_mode: 'avis', + difflist_type: this.mode === 'circuit' ? 'AVIS_CIRCUIT' : 'entity_id' } }) ); diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index 45a5093ad428fc00bbbaa8ef41f3aed26f733ce6..5b5bf54a1ceca191314ef65f2f47060bb030517a 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1420,4 +1420,5 @@ export const LANG_EN = { "noCircuitAvailable": "No workflow defined", "interrupted": "Interrupted", "addOpinionReason": "Please fill the opinion reason", + "opinionLimitDate": "Opinion limit date", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index a5ae9593b4f2e57e19f846ed2a538c34f5346503..ae22ea5882c9057248276d8ef49e378a4c990468 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1460,4 +1460,5 @@ export const LANG_FR = { "noCircuitAvailable": "Aucun circuit défini", "interrupted": "Interrompu", "addOpinionReason": "Veuillez renseigner le motif de l'avis", + "opinionLimitDate": "Date limite de l'avis", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index e0ceed6e24b0b16c9be9ab1df9f571d27793bac6..eda0d1f10e37adad37c139a5ccefc324c4687060 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1445,4 +1445,5 @@ export const LANG_NL = { "noCircuitAvailable": "No workflow defined", //_TO_TRANSLATE "interrupted": "Interrupted", //_TO_TRANSLATE "addOpinionReason": "Please fill the opinion reason", //_TO_TRANSLATE + "opinionLimitDate": "Opinion limit date", //_TO_TRANSLATE };