diff --git a/lang/fr.json b/lang/fr.json index 33074abffea368fac4df7e2c88db637fc657a00c..c15b60b5e50d5002f0bf4244b70d5d0919fce891 100755 --- a/lang/fr.json +++ b/lang/fr.json @@ -401,6 +401,7 @@ "loadingMoreData": "Charger plus de données ...", "validateDocumentWarning": "Vous êtes sur le point de valider ce document !", "certifiedDocument": "Document certifié", - "certifiedDocumentMsg": "Le document a été signé par certificat numérique, vous ne pouvez pas apposer de griffe." + "certifiedDocumentMsg": "Le document a été signé par certificat numérique, vous ne pouvez pas apposer de griffe.", + "errorUserSignType": "Les signataires sans certificat doivent être présent avant les signataires avec certificat." } } 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 c58697910744152ab23eeb61001b3e2bd2f1fb9f..75eba060542120ca22544c8ffe8a60a553418a27 100644 --- a/src/frontend/app/document/visa-workflow/visa-workflow.component.ts +++ b/src/frontend/app/document/visa-workflow/visa-workflow.component.ts @@ -7,7 +7,6 @@ import { of } from 'rxjs'; import { NotificationService } from '../../service/notification.service'; import { IonReorderGroup, PopoverController } from '@ionic/angular'; import { VisaWorkflowModelsComponent } from './models/visa-workflow-models.component'; -import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; import { ItemReorderEventDetail } from '@ionic/core'; @Component({ @@ -46,11 +45,42 @@ export class VisaWorkflowComponent implements OnInit { } doReorder(ev: CustomEvent<ItemReorderEventDetail>) { - this.visaWorkflow = ev.detail.complete(this.visaWorkflow); + if (this.canMoveUser(ev)) { + this.visaWorkflow = ev.detail.complete(this.visaWorkflow); + } else { + this.notificationService.error('lang.errorUserSignType'); + ev.detail.complete(false); + } + } + + canMoveUser(ev: CustomEvent<ItemReorderEventDetail>) { + const newWorkflow = this.array_move(this.visaWorkflow.slice(), ev.detail.from, ev.detail.to); + const res = this.isValidWorkflow(newWorkflow); + return res; + } + + isValidWorkflow(workflow: any = this.visaWorkflow) { + let res: boolean = true; + workflow.forEach((item: any, indexUserRgs: number) => { + if (['visa', 'stamp'].indexOf(item.role) === -1) { + if (workflow.filter((itemUserStamp: any, indexUserStamp: number) => indexUserStamp > indexUserRgs && itemUserStamp.role === 'stamp').length > 0) { + console.log('false!'); + res = false; + } + } + }); + return res; } - drop(event: CdkDragDrop<string[]>) { - moveItemInArray(this.visaWorkflow, event.previousIndex, event.currentIndex); + array_move(arr: any, old_index: number, new_index: number) { + if (new_index >= arr.length) { + let k = new_index - arr.length + 1; + while (k--) { + arr.push(undefined); + } + } + arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); + return arr; // for testing } getVisaUsers(ev: any) { @@ -84,6 +114,9 @@ export class VisaWorkflowComponent implements OnInit { 'modes': user.signatureModes }; this.visaWorkflow.push(userObj); + if (!this.isValidWorkflow()) { + this.visaWorkflow[this.visaWorkflow.length - 1].role = 'visa'; + } this.getAvatarUser(this.visaWorkflow.length - 1); this.visaUsersSearchVal = ''; searchInput.setFocus();