From 4f4cd7aba4534e1c15d1d4d6bb1fce3f25ba953e Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Wed, 19 Feb 2020 12:36:01 +0100
Subject: [PATCH] FEAT #13120 TIME 1:30 Display mailing action informations

---
 .../PreProcessActionController.php            | 62 ++++++++++++++-----
 ...ernal-signatory-book-action.component.html | 10 ++-
 ...xternal-signatory-book-action.component.ts |  9 ++-
 ...ontinue-visa-circuit-action.component.html | 10 ++-
 .../continue-visa-circuit-action.component.ts | 14 +++--
 .../send-signature-book-action.component.html | 10 ++-
 .../send-signature-book-action.component.ts   | 15 +++--
 src/frontend/lang/lang-en.ts                  |  4 +-
 src/frontend/lang/lang-fr.ts                  |  4 +-
 src/frontend/lang/lang-nl.ts                  |  2 +
 10 files changed, 108 insertions(+), 32 deletions(-)

diff --git a/src/app/action/controllers/PreProcessActionController.php b/src/app/action/controllers/PreProcessActionController.php
index 39d17eea345..4380b0c2b81 100755
--- a/src/app/action/controllers/PreProcessActionController.php
+++ b/src/app/action/controllers/PreProcessActionController.php
@@ -14,6 +14,7 @@ namespace Action\controllers;
 
 use AcknowledgementReceipt\models\AcknowledgementReceiptModel;
 use Action\models\ActionModel;
+use Attachment\controllers\AttachmentController;
 use Attachment\models\AttachmentModel;
 use Basket\models\BasketModel;
 use Basket\models\GroupBasketRedirectModel;
@@ -485,7 +486,10 @@ class PreProcessActionController
                         if (!$hasSignableAttachment && empty($integratedResource)) {
                             $additionalsInfos['noAttachment'][] = ['alt_identifier' => $noAttachmentsResource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noSignableAttachmentInSignatoryBook'];
                         } else {
-                            $additionalsInfos['attachments'][] = ['res_id' => $resId];
+                            $statuses = array_column($attachments, 'status');
+                            $mailing = in_array('SEND_MASS', $statuses);
+
+                            $additionalsInfos['attachments'][] = ['res_id' => $resId, 'alt_identifier' => $noAttachmentsResource['alt_identifier'], 'mailing' => $mailing];
                         }
                     }
                 }
@@ -537,7 +541,10 @@ class PreProcessActionController
                                 break;
                             }
                         }
-                        $additionalsInfos['attachments'][] = ['res_id' => $resId];
+                        $statuses = array_column($attachments, 'status');
+                        $mailing = in_array('SEND_MASS', $statuses);
+
+                        $additionalsInfos['attachments'][] = ['res_id' => $resId, 'alt_identifier' => $noAttachmentsResource['alt_identifier'], 'mailing' => $mailing];
                     }
                 }
             }
@@ -942,21 +949,35 @@ class PreProcessActionController
                 $resource['alt_identifier'] = _UNDEFINED;
             }
 
-            $integrations = json_decode($resource['integrations'], true);
-            if (!empty($integrations['inSignatureBook'])) {
-                $resourcesInformations['success'][] = ['res_id' => $resId];
-            } else {
-                $attachments = AttachmentModel::get([
-                    'select'    => [1],
-                    'where'     => ['res_id_master = ?', 'attachment_type in (?)', 'in_signature_book = ?', 'status not in (?)'],
-                    'data'      => [$resId, $signableAttachmentsTypes, true, ['OBS', 'DEL', 'FRZ']]
-                ]);
+            $circuit = ListInstanceModel::get([
+                'select'    => ['requested_signature'],
+                'where'     => ['res_id = ?', 'difflist_type = ?', 'process_date is null'],
+                'data'      => [$resId, 'VISA_CIRCUIT'],
+                'orderBy'   => ['listinstance_id'],
+                'limit'     => 1
+            ]);
+            if (empty($circuit)) {
+                $resourcesInformations['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noCircuitAvailable'];
+                continue;
+            }
 
-                if (empty($attachments)) {
-                    $resourcesInformations['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noAttachmentInSignatoryBook'];
+            $attachments = AttachmentModel::get([
+                'select'    => ['status'],
+                'where'     => ['res_id_master = ?', 'attachment_type in (?)', 'in_signature_book = ?', 'status not in (?)'],
+                'data'      => [$resId, $signableAttachmentsTypes, true, ['OBS', 'DEL', 'FRZ']]
+            ]);
+
+            if (empty($attachments)) {
+                $integrations = json_decode($resource['integrations'], true);
+                if (!empty($integrations['inSignatureBook'])) {
+                    $resourcesInformations['success'][] = ['res_id' => $resId, 'alt_identifier' => $resource['alt_identifier'], 'mailing' => false];
                 } else {
-                    $resourcesInformations['success'][] = ['res_id' => $resId];
+                    $resourcesInformations['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noAttachmentInSignatoryBook'];
                 }
+            } else {
+                $statuses = array_column($attachments, 'status');
+                $mailing = in_array('SEND_MASS', $statuses);
+                $resourcesInformations['success'][] = ['res_id' => $resId, 'alt_identifier' => $resource['alt_identifier'], 'mailing' => $mailing];
             }
         }
 
@@ -1008,7 +1029,18 @@ class PreProcessActionController
             } elseif ($isSignatory[0]['requested_signature'] && !$isSignatory[0]['signatory']) {
                 $resourcesInformations['warning'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'userHasntSigned'];
             } else {
-                $resourcesInformations['success'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId];
+                $attachments = AttachmentModel::get([
+                    'select'    => ['status'],
+                    'where'     => ['res_id_master = ?', 'attachment_type in (?)', 'in_signature_book = ?', 'status not in (?)'],
+                    'data'      => [$resId, $signableAttachmentsTypes, true, ['OBS', 'DEL', 'FRZ']]
+                ]);
+
+                $mailing = false;
+                if (!empty($attachments)) {
+                    $statuses = array_column($attachments, 'status');
+                    $mailing = in_array('SEND_MASS', $statuses);
+                }
+                $resourcesInformations['success'][] = ['res_id' => $resId, 'alt_identifier' => $resource['alt_identifier'], 'mailing' => $mailing];
             }
         }
 
diff --git a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html
index f013d81e2e4..cf14b1d7616 100644
--- a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html
+++ b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html
@@ -18,6 +18,14 @@
                 <div *ngIf="data.resIds.length > 0" style="padding:10px;display: flex;flex-direction: column;">
                     <mat-checkbox color="primary" *ngFor="let inteKey of integrationsInfo | keyvalue" (click)="toggleIntegration(inteKey.key)" [checked]="data.resource.integrations[inteKey.key]">{{lang[inteKey.key+'_doc']}}</mat-checkbox>
                 </div>
+                <div *ngIf="resourcesMailing.length > 0" class="alert-message alert-message-info" role="alert">
+                    <p>{{lang.mailingActionInformations2}}</p>
+                    <ul>
+                        <li *ngFor="let ressource of resourcesMailing">
+                            <b>{{ressource.alt_identifier}}</b>
+                        </li>
+                    </ul>
+                </div>
                 <div>
                     <app-maarch-paraph #maarchParapheur *ngIf="signatoryBookEnabled=='maarchParapheur'"
                         [additionalsInfos]="additionalsInfos" [externalSignatoryBookDatas]="externalSignatoryBookDatas">
@@ -51,4 +59,4 @@
     <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
+</div>
diff --git a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts
index 23ef8142622..aaab2e7716f 100644
--- a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts
+++ b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts
@@ -18,12 +18,14 @@ export class SendExternalSignatoryBookActionComponent implements OnInit {
 
     lang: any = LANG;
     loading: boolean = false;
+
     additionalsInfos: any = {
         destinationId: '',
         users: [],
         attachments: [],
         noAttachment: []
     };
+    resourcesMailing: any[] = [];
     signatoryBookEnabled: string = '';
 
     externalSignatoryBookDatas: any = {
@@ -93,7 +95,12 @@ export class SendExternalSignatoryBookActionComponent implements OnInit {
                     this.additionalsInfos = data.additionalsInfos;
                     if (this.additionalsInfos.attachments.length > 0) {
                         this.signatoryBookEnabled = data.signatureBookEnabled;
-                    }  
+                        data.additionalsInfos.attachments.forEach((value: any) => {
+                            if (value.mailing) {
+                                this.resourcesMailing.push(value);
+                            }
+                        });
+                    }
                     this.errors = data.errors;
                     resolve(true);
                 }),
diff --git a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html
index a43e16bc1e3..dabda258023 100644
--- a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html
+++ b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html
@@ -39,6 +39,14 @@
                     </li>
                 </ul>
             </div>
+            <div *ngIf="resourcesMailing.length > 0" class="alert-message alert-message-info" role="alert">
+                <p>{{lang.mailingActionInformations}}</p>
+                <ul>
+                    <li *ngFor="let ressource of resourcesMailing">
+                        <b>{{ressource.alt_identifier}}</b>
+                    </li>
+                </ul>
+            </div>
             <app-visa-workflow *ngIf="data.resIds.length == 1" [adminMode]="false" [resId]="data.resIds[0]"
                 #appVisaWorkflow>
             </app-visa-workflow>
@@ -52,4 +60,4 @@
     <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
+</div>
diff --git a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts
index d0860b8ccf8..c3a449f50cd 100644
--- a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts
+++ b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts
@@ -18,6 +18,7 @@ export class ContinueVisaCircuitActionComponent implements OnInit {
     lang: any = LANG;
     loading: boolean = false;
 
+    resourcesMailing: any[] = [];
     resourcesWarnings: any[] = [];
     resourcesErrors: any[] = [];
 
@@ -54,6 +55,13 @@ export class ContinueVisaCircuitActionComponent implements OnInit {
                     this.resourcesErrors = data.resourcesInformations.error;
                     this.noResourceToProcess = this.resourcesErrors.length === this.data.resIds.length;
                 }
+                if (data.resourcesInformations.success) {
+                    data.resourcesInformations.success.forEach((value: any) => {
+                        if (value.mailing) {
+                            this.resourcesMailing.push(value);
+                        }
+                    });
+                }
                 resolve(true);
             }, (err: any) => {
                 this.notify.handleSoftErrors(err);
@@ -86,10 +94,6 @@ export class ContinueVisaCircuitActionComponent implements OnInit {
     }
 
     isValidAction() {
-        if (!this.noResourceToProcess) {
-            return true;
-        } else {
-            return false; 
-        }
+        return !this.noResourceToProcess;
     }
 }
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 227e9c6f745..4e4db2f4db5 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
@@ -25,6 +25,14 @@
                     </li>
                 </ul>
             </div>
+            <div *ngIf="resourcesMailing.length > 0" class="alert-message alert-message-info" role="alert">
+                <p>{{lang.mailingActionInformations}}</p>
+                <ul>
+                    <li *ngFor="let ressource of resourcesMailing">
+                        <b>{{ressource.alt_identifier}}</b>
+                    </li>
+                </ul>
+            </div>
             <app-visa-workflow *ngIf="data.resIds.length <= 1 || (!noResourceToProcess && data.resIds.length > 1)" [adminMode]="true" #appVisaWorkflow>
             </app-visa-workflow>
             <div style="padding-top: 10px;">
@@ -41,4 +49,4 @@
     <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
+</div>
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 21685de42d3..5219a83fe1b 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
@@ -18,6 +18,7 @@ export class SendSignatureBookActionComponent implements AfterViewInit {
     lang: any = LANG;
     loading: boolean = true;
 
+    resourcesMailing: any[] = [];
     resourcesError: any[] = [];
 
     noResourceToProcess: boolean = null;
@@ -89,6 +90,13 @@ export class SendSignatureBookActionComponent implements AfterViewInit {
                         this.resourcesError = data.resourcesInformations.error;
                     }
                     this.noResourceToProcess = this.data.resIds.length === this.resourcesError.length;
+                    if (data.resourcesInformations.success) {
+                        data.resourcesInformations.success.forEach((value: any) => {
+                            if (value.mailing) {
+                                this.resourcesMailing.push(value);
+                            }
+                        });
+                    }
                     resolve(true);
                 }, (err: any) => {
                     this.notify.handleSoftErrors(err);
@@ -130,7 +138,6 @@ export class SendSignatureBookActionComponent implements AfterViewInit {
     }
 
     executeAction(realResSelected: number[]) {
-
         this.http.put(this.data.processActionRoute, { resources: realResSelected, note: this.noteEditor.getNoteContent() }).pipe(
             tap((data: any) => {
                 if (!data) {
@@ -168,10 +175,6 @@ export class SendSignatureBookActionComponent implements AfterViewInit {
     }
 
     isValidAction() {
-        if (!this.noResourceToProcess && this.appVisaWorkflow !== undefined && !this.appVisaWorkflow.emptyWorkflow() && !this.appVisaWorkflow.workflowEnd()) {
-            return true;
-        } else {
-            return false;
-        }
+        return !this.noResourceToProcess && this.appVisaWorkflow !== undefined && !this.appVisaWorkflow.emptyWorkflow() && !this.appVisaWorkflow.workflowEnd();
     }
 }
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index fc6f5646c47..7a02fd1af0f 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -1530,5 +1530,7 @@ export const LANG_EN = {
     "badEmailsFormat" : "Some email address are not correct",
     "warnEmptySubject" : "You will send an email without subject, continue ?",  
     "emailDeleted" : "Email deleted",
-    "properties" : "Properties",  
+    "mailingActionInformations" : "Following mails contain mailing attachments, if next person in visa circuit is signatory then mailing will be activate :",
+    "mailingActionInformations2" : "Following mails contain mailing attachments, mailing will be activate :",
+    "properties" : "Properties",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 6575d254fb1..01a15992218 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -1568,6 +1568,8 @@ export const LANG_FR = {
     "contactDeleted" : "Contact supprimé",
     "badEmailsFormat" : "Certaines adresses de courriel ne sont pas correctes",    
     "warnEmptySubject" : "Vous allez envoyer un courriel sans objet, continuer ?",    
-    "emailDeleted" : "Courriel supprimé",    
+    "emailDeleted" : "Courriel supprimé",
+    "mailingActionInformations" : "Les courriers suivants contiennent des pièces-jointes pour publipostage, si la prochaine personne du circuit de visa est signataire alors le publipostage s'effectuera dès la validation de cette action :",
+    "mailingActionInformations2" : "Les courriers suivants contiennent des pièces-jointes pour publipostage, celui-ci s'effectuera dès la validation de cette action :",
     "properties" : "Propriétés",
 };
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index d1231f40784..9570a665b2e 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -1555,5 +1555,7 @@ export const LANG_NL = {
     "badEmailsFormat" : "Some email address are not correct", //_TO_TRANSLATE
     "warnEmptySubject" : "You will send an email without subject, continue ?", //_TO_TRANSLATE
     "emailDeleted" : "Email deleted", //_TO_TRANSLATE
+    "mailingActionInformations" : "Following mails contain mailing attachments, if next person in visa circuit is signatory then mailing will be activate :", //_TO_TRANSLATE
+    "mailingActionInformations2" : "Following mails contain mailing attachments, mailing will be activate :", //TRANSLATE
     "properties" : "Properties", //_TO_TRANSLATE
 };
-- 
GitLab