From 20d1c1ddfe03aed76b934d8083b0589d0cf0381c Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Mon, 31 Aug 2020 19:08:44 +0200
Subject: [PATCH] FEAT #13998 TIME 1 improve controls for registered mail

---
 .../registeredMail/controllers/RegisteredMailController.php | 3 +++
 src/app/registeredMail/controllers/RegisteredMailTrait.php  | 6 +++++-
 .../print-registered-mail-action.component.ts               | 4 ++++
 .../save-and-print-registered-mail-action.component.ts      | 5 ++++-
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/app/registeredMail/controllers/RegisteredMailController.php b/src/app/registeredMail/controllers/RegisteredMailController.php
index 4f43f8cd838..3b261f6d604 100644
--- a/src/app/registeredMail/controllers/RegisteredMailController.php
+++ b/src/app/registeredMail/controllers/RegisteredMailController.php
@@ -51,6 +51,8 @@ class RegisteredMailController
             return $response->withStatus(400)->withJson(['errors' => 'Body warranty is not correct']);
         } elseif ($body['type'] == 'RW' && $body['warranty'] == 'R3') {
             return $response->withStatus(400)->withJson(['errors' => 'Body warranty R3 is not allowed for type RW']);
+        } elseif (!Validator::notEmpty()->validate($body['recipient'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Body recipient is empty']);
         }
 
         $resource = ResModel::getById(['select' => ['departure_date'], 'resId' => $args['resId']]);
@@ -68,6 +70,7 @@ class RegisteredMailController
             'warranty'  => $body['warranty'],
             'reference' => $body['reference'],
             'letter'    => empty($body['letter']) ? 'false' : 'true',
+            'recipient' => json_encode($body['recipient']),
         ];
 
         if ($registeredMail['type'] != $body['type']) {
diff --git a/src/app/registeredMail/controllers/RegisteredMailTrait.php b/src/app/registeredMail/controllers/RegisteredMailTrait.php
index 33d310e3b85..07c56e0fe8b 100644
--- a/src/app/registeredMail/controllers/RegisteredMailTrait.php
+++ b/src/app/registeredMail/controllers/RegisteredMailTrait.php
@@ -96,9 +96,11 @@ trait RegisteredMailTrait
         if (!in_array($args['data']['type'], ['2D', '2C', 'RW'])) {
             return ['errors' => ['Type is not correct']];
         } elseif (!in_array($args['data']['warranty'], ['R1', 'R2', 'R3'])) {
-            return ['errors' => ['Type is not correct']];
+            return ['errors' => ['warranty is not correct']];
         } elseif ($args['data']['type'] == 'RW' && $args['data']['warranty'] == 'R3') {
             return ['errors' => ['R3 warranty is not allowed for type RW']];
+        } elseif (empty($args['data']['recipient']) || empty($args['data']['issuingSiteId'])) {
+            return ['errors' => ['recipient or issuingSiteId is missing to print registered mail']];
         }
 
         $issuingSite = IssuingSiteModel::getById([
@@ -173,6 +175,8 @@ trait RegisteredMailTrait
         $registeredMail = RegisteredMailModel::getByResId(['select' => ['issuing_site', 'type', 'number', 'warranty', 'letter', 'recipient', 'reference'], 'resId' => $args['resId']]);
         if (empty($registeredMail)) {
             return ['errors' => ['No registered mail for this resource']];
+        } elseif (empty(json_decode($registeredMail['recipient'])) || empty($registeredMail['issuing_site']) || empty($registeredMail['type']) || empty($registeredMail['number']) || empty($registeredMail['warranty'])) {
+            return ['errors' => ['recipient, issuing_site, type, number or warranty is missing to print registered mail']];
         }
 
         RegisteredMailModel::update([
diff --git a/src/frontend/app/actions/print-registered-mail-action/print-registered-mail-action.component.ts b/src/frontend/app/actions/print-registered-mail-action/print-registered-mail-action.component.ts
index 3ae4f4ae9a8..c82d4663969 100644
--- a/src/frontend/app/actions/print-registered-mail-action/print-registered-mail-action.component.ts
+++ b/src/frontend/app/actions/print-registered-mail-action/print-registered-mail-action.component.ts
@@ -39,6 +39,10 @@ export class PrintRegisteredMailActionComponent implements OnInit {
         const downloadLink = document.createElement('a');
         this.http.put(this.data.processActionRoute, { resources: this.data.resIds, note: this.noteEditor.getNote() }).pipe(
             tap((data: any) => {
+                if (data && data.errors != null) {
+                    this.notify.error(data.errors);
+                    return of(false);
+                }
                 Object.values(data.data).forEach((encodedFile: string) => {
                     if (!this.functions.empty(encodedFile)) {
                         downloadLink.href = `data:application/pdf;base64,${encodedFile}`;
diff --git a/src/frontend/app/actions/save-and-print-registered-mail-action/save-and-print-registered-mail-action.component.ts b/src/frontend/app/actions/save-and-print-registered-mail-action/save-and-print-registered-mail-action.component.ts
index 10621cdce9b..a0e7302036a 100644
--- a/src/frontend/app/actions/save-and-print-registered-mail-action/save-and-print-registered-mail-action.component.ts
+++ b/src/frontend/app/actions/save-and-print-registered-mail-action/save-and-print-registered-mail-action.component.ts
@@ -13,7 +13,6 @@ import { of } from 'rxjs';
 })
 export class SaveAndPrintRegisteredMailActionComponent implements OnInit {
 
-    
     loading: boolean = false;
 
     @ViewChild('noteEditor', { static: true }) noteEditor: NoteEditorComponent;
@@ -54,6 +53,10 @@ export class SaveAndPrintRegisteredMailActionComponent implements OnInit {
                 })
             ),
             tap((data: any) => {
+                if (data && data.errors != null) {
+                    this.notify.error(data.errors);
+                    return of(false);
+                }
                 const downloadLink = document.createElement('a');
                 downloadLink.href = `data:application/pdf;base64,${data}`;
                 downloadLink.setAttribute('download', 'recommande.pdf');
-- 
GitLab