From dbf1029d9f14a4a83d9235eb076234926b42ff5d Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Thu, 30 Jan 2020 12:37:19 +0100
Subject: [PATCH] FEAT #11703 TIME 1:20 add load wrkfl with destination in
 idnexing + add param indexation + alow action send to visa

---
 src/app/group/controllers/GroupController.php |  2 +-
 .../send-signature-book-action.component.html |  2 +-
 .../send-signature-book-action.component.ts   | 43 ++++++++++++++++---
 .../app/visa/visa-workflow.component.ts       |  7 ++-
 src/frontend/lang/lang-en.ts                  |  2 +-
 src/frontend/lang/lang-fr.ts                  |  2 +-
 src/frontend/lang/lang-nl.ts                  |  2 +-
 7 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/src/app/group/controllers/GroupController.php b/src/app/group/controllers/GroupController.php
index 0d75fe298c7..b4a181e2407 100755
--- a/src/app/group/controllers/GroupController.php
+++ b/src/app/group/controllers/GroupController.php
@@ -217,7 +217,7 @@ class GroupController
         $group['indexationParameters'] = json_decode($group['indexation_parameters'], true);
         unset($group['can_index'], $group['indexation_parameters']);
 
-        $allActions = ActionModel::get(['select' => ['id', 'label_action'], 'where' => ['component in (?)'], 'data' => [['confirmAction', 'closeMailAction', 'noConfirmAction']]]);
+        $allActions = ActionModel::get(['select' => ['id', 'label_action'], 'where' => ['component in (?)'], 'data' => [['confirmAction', 'closeMailAction', 'noConfirmAction', 'sendSignatureBookAction']]]);
 
         $allEntities = EntityModel::get([
             'select'    => ['e1.id', 'e1.entity_id', 'e1.entity_label', 'e2.id as parent_id'],
diff --git a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html
index 75aa68fced5..a060f2dd37e 100644
--- a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html
+++ b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html
@@ -22,7 +22,7 @@
                     </li>
                 </ul>
             </div>
-            <app-visa-workflow *ngIf="data.resIds.length == 1 || (!noResourceToProcess && data.resIds.length > 1)" [adminMode]="true" #appVisaWorkflow>
+            <app-visa-workflow *ngIf="data.resIds.length <= 1 || (!noResourceToProcess && data.resIds.length > 1)" [adminMode]="true" #appVisaWorkflow>
             </app-visa-workflow>
             <div style="padding-top: 10px;">
                 <app-note-editor #noteEditor [resIds]="data.resIds"></app-note-editor>
diff --git a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.ts b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.ts
index d1db99685b3..40f4cfa1f06 100644
--- a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.ts
+++ b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-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,10 +13,10 @@ import { VisaWorkflowComponent } from '../../visa/visa-workflow.component';
     templateUrl: "send-signature-book-action.component.html",
     styleUrls: ['send-signature-book-action.component.scss'],
 })
-export class SendSignatureBookActionComponent implements OnInit {
+export class SendSignatureBookActionComponent implements AfterViewInit {
 
     lang: any = LANG;
-    loading: boolean = false;
+    loading: boolean = true;
 
     resourcesError: any[] = [];
 
@@ -32,11 +32,15 @@ export class SendSignatureBookActionComponent 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;
+    async ngAfterViewInit(): Promise<void> {
+        if (this.data.resIds.length === 0 && !this.functions.empty(this.data.resource.destination)) {
+            await this.appVisaWorkflow.loadListModel(this.data.resource.destination);
+            this.loading = false;
+        } else  if (this.data.resIds.length > 0) {
             await this.checkSignatureBook();
             this.loading = false;
+        } else {
+            this.loading = false;
         }
         if (this.data.resIds.length === 1) {
             await this.appVisaWorkflow.loadWorkflow(this.data.resIds[0]);
@@ -44,6 +48,7 @@ export class SendSignatureBookActionComponent implements OnInit {
                 this.appVisaWorkflow.loadDefaultWorkflow(this.data.resIds[0]);
             }
         }
+        
     }
 
     checkSignatureBook() {
@@ -71,7 +76,7 @@ export class SendSignatureBookActionComponent implements OnInit {
                 res = await this.appVisaWorkflow.saveVisaWorkflow(this.data.resIds);
             }
             if (res) {
-                this.executeAction(this.data.resIds);
+                this.executeIndexingAction(this.data.resIds[0]);
             }
         } else {
             const realResSelected: number[] = this.data.resIds.filter((resId: any) => this.resourcesError.map(resErr => resErr.res_id).indexOf(resId) === -1);
@@ -86,6 +91,11 @@ export class SendSignatureBookActionComponent implements OnInit {
     }
 
     indexDocument() {
+        this.data.resource.integrations = [
+             {
+                 inSignatureBook : true
+             }
+        ];
         return new Promise((resolve, reject) => {
             this.http.post('../../rest/resources', this.data.resource).pipe(
                 tap((data: any) => {
@@ -120,6 +130,25 @@ export class SendSignatureBookActionComponent implements OnInit {
         ).subscribe();
     }
 
+    executeIndexingAction(resId: number) {
+
+        this.http.put(this.data.indexActionRoute, { resource: resId, note: this.noteEditor.getNoteContent() }).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.appVisaWorkflow !== undefined && !this.appVisaWorkflow.emptyWorkflow() && !this.appVisaWorkflow.workflowEnd()) {
             return true;
diff --git a/src/frontend/app/visa/visa-workflow.component.ts b/src/frontend/app/visa/visa-workflow.component.ts
index ae28aa5f6cf..518dd736d66 100644
--- a/src/frontend/app/visa/visa-workflow.component.ts
+++ b/src/frontend/app/visa/visa-workflow.component.ts
@@ -83,7 +83,8 @@ export class VisaWorkflowComponent implements OnInit {
 
         let route = this.linkedToMaarchParapheur === true ? `../../rest/listTemplates/entities/${entityId}?type=visaCircuit&maarchParapheur=true` : `../../rest/listTemplates/entities/${entityId}?type=visaCircuit`;
 
-        this.http.get(route)
+        return new Promise((resolve, reject) => {
+            this.http.get(route)
             .subscribe((data: any) => {
                 if (data.listTemplates[0]) {
                     this.visaWorkflow.items = data.listTemplates[0].items.map((item: any) => {
@@ -100,7 +101,11 @@ export class VisaWorkflowComponent implements OnInit {
                         this.getMaarchParapheurUserAvatar(element.externalId.maarchParapheur, key);
                     }
                 });
+                resolve(true);
             });
+        });
+
+        
     }
 
     loadVisaSignUsersList() {
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index 1b0faba1fc1..99563adfeff 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -1036,7 +1036,7 @@ export const LANG_EN = {
     "indexation" : "Mail indexation",
     "keywordAdded" : "Keyword added",
     "keywordDeleted" : "Keyword deleted",
-    "actionsInfo" : "Only actions with \"simple confirmation\", \"close mail\" and \"no confirmation\" will be displayed",
+    "actionsInfo" : "Only actions with \"simple confirmation\", \"close mail\", \"no confirmation\" and \"send to visa\" will be displayed",
     "eventList" : "Open page",
     "folderAdded" : "Folder added",
     "folderDeleted" : "Folder deleted",
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 9f691843e41..8f7988aad9f 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -1070,7 +1070,7 @@ export const LANG_FR = {
     "indexation" : "Enregistrement de courrier",
     "keywordAdded" : "Mot-clé ajouté",
     "keywordDeleted" : "Mot-clé supprimé",
-    "actionsInfo" : "Seules les actions avec \"confirmation simple\", \"clôturer un courrier\" et \"sans confirmation\" seront affichées",
+    "actionsInfo" : "Seules les actions avec \"confirmation simple\", \"clôturer un courrier\", \"sans confirmation\" et \"envoyer pour visa\" seront affichées",
     "noEventList" : "Ne rien faire",
     "eventVisaMail" : "Parapheur électronique",
     "eventProcessDoc" : "Fiche de traitement",
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index 1d0fb87e8dc..c2096787e25 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -1062,7 +1062,7 @@ export const LANG_NL = {
     "indexation" : "Mail indexation", //_TO_TRANSLATE
     "keywordAdded" : "Keyword added", //_TO_TRANSLATE
     "keywordDeleted" : "Keyword deleted", //_TO_TRANSLATE
-    "actionsInfo" : "Only actions with \"simple confirmation\", \"close mail\" and \"no confirmation\" will be displayed", //_TO_TRANSLATE
+    "actionsInfo" : "Only actions with \"simple confirmation\", \"close mail\", \"no confirmation\" and \"send to visa\" will be displayed", //_TO_TRANSLATE
     "eventList" : "Open page", //_TO_TRANSLATE
     "folderAdded" : "Folder added", //_TO_TRANSLATE
     "folderDeleted" : "Folder deleted", //_TO_TRANSLATE
-- 
GitLab