From efc8102e9ed638e050653d0f69cecfbf6ea29a07 Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Thu, 3 Sep 2020 11:53:34 +0200
Subject: [PATCH] FEAT #14003 TIME 2:10 fix deposit list

---
 migration/20.10/2010.sql                      |  4 +-
 sql/data_fr.sql                               |  4 +
 .../PreProcessActionController.php            | 52 ++++++++-----
 .../controllers/RegisteredMailController.php  |  9 ++-
 .../controllers/RegisteredMailTrait.php       | 78 ++++++++++---------
 .../acknowledgement-reception.component.html  |  1 -
 src/lang/lang-en.json                         |  2 +-
 src/lang/lang-fr.json                         |  2 +-
 8 files changed, 87 insertions(+), 65 deletions(-)

diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql
index 39ef9d2c959..02388bccd1b 100755
--- a/migration/20.10/2010.sql
+++ b/migration/20.10/2010.sql
@@ -255,11 +255,13 @@ DELETE FROM parameters WHERE id = 'registeredMailNotDistributedStatus';
 INSERT INTO parameters (id, param_value_string) VALUES ('registeredMailNotDistributedStatus', 'PND');
 DELETE FROM parameters WHERE id = 'registeredMailDistributedStatus';
 INSERT INTO parameters (id, param_value_string) VALUES ('registeredMailDistributedStatus', 'DSTRIBUTED');
+DELETE FROM status WHERE id = 'PND' OR id = 'DSTRIBUTED';
+INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, can_be_searched, can_be_modified) VALUES ('PND', 'AR Non distribué', 'Y', 'fm-letter-status-rejected', 'apps', 'Y', 'Y');
+INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, can_be_searched, can_be_modified) VALUES ('DSTRIBUTED', 'AR distribué', 'Y', 'fa-check', 'apps', 'Y', 'Y');
 
 DELETE FROM parameters WHERE id = 'traffic_record_summary_sheet';
 INSERT INTO parameters (id, description, param_value_string) VALUES ('traffic_record_summary_sheet', 'Module circulation pour la fiche de liaison', '');
 
--- TODO statuses ar reception
 
 /* RE CREATE VIEWS */
 CREATE OR REPLACE VIEW res_view_letterbox AS
diff --git a/sql/data_fr.sql b/sql/data_fr.sql
index 23877d0335c..f7272cb6e21 100755
--- a/sql/data_fr.sql
+++ b/sql/data_fr.sql
@@ -956,6 +956,8 @@ INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, ca
 INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, can_be_searched, can_be_modified) VALUES ('ENVDONE', 'Courrier envoyé', 'Y', 'fm-letter-status-aenv', 'apps', 'Y', 'Y');
 --INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, can_be_searched, can_be_modified) VALUES ('AR_OK', 'Accusé de réception créé', 'Y', 'fa-mail-bulk', 'apps', 'Y', 'Y');
 INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, can_be_searched, can_be_modified) VALUES ('REJ_SIGN', 'Signature refusée sur la tablette (MP)', 'Y', 'fm-letter-status-rejected', 'apps', 'Y', 'Y');
+INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, can_be_searched, can_be_modified) VALUES ('PND', 'AR Non distribué', 'Y', 'fm-letter-status-rejected', 'apps', 'Y', 'Y');
+INSERT INTO status (id, label_status, is_system, img_filename, maarch_module, can_be_searched, can_be_modified) VALUES ('DSTRIBUTED', 'AR distribué', 'Y', 'fa-check', 'apps', 'Y', 'Y');
 
 ------------
 --STATUS IMAGES-
@@ -1012,6 +1014,8 @@ INSERT INTO parameters (id, description, param_value_int) VALUES ('keepDestForRe
 INSERT INTO parameters (id, description, param_value_int) VALUES ('QrCodePrefix', 'Si activé (1), ajoute "Maarch_" dans le contenu des QrCode générés. (Utilisable avec MaarchCapture >= 1.4)', 0);
 INSERT INTO parameters (id, description, param_value_int) VALUES ('workingDays', 'Si activé (1), les délais de traitement sont calculés en jours ouvrés (Lundi à Vendredi). Sinon, en jours calendaire', 1);
 INSERT INTO parameters (id, param_value_int) VALUES ('last_deposit_id', 0);
+INSERT INTO parameters (id, param_value_string) VALUES ('registeredMailNotDistributedStatus', 'PND');
+INSERT INTO parameters (id, param_value_string) VALUES ('registeredMailDistributedStatus', 'DSTRIBUTED');
 
 ------------
 --DIFFLIST_TYPES
diff --git a/src/app/action/controllers/PreProcessActionController.php b/src/app/action/controllers/PreProcessActionController.php
index d51b24ae741..f2161bdcb33 100755
--- a/src/app/action/controllers/PreProcessActionController.php
+++ b/src/app/action/controllers/PreProcessActionController.php
@@ -1595,9 +1595,9 @@ class PreProcessActionController
 
         $processedResources = [];
         $data = [
-            '2D' => 0,
-            '2C' => 0,
-            'RW' => 0
+            '2D' => '',
+            '2C' => '',
+            'RW' => ''
         ];
         $cannotGenerate = [];
         $canGenerate = [];
@@ -1608,40 +1608,52 @@ class PreProcessActionController
             }
 
             $registeredMail = RegisteredMailModel::getWithResources([
-                'select' => ['issuing_site', 'type', 'number', 'warranty', 'recipient', 'generated', 'departure_date', 'deposit_id'],
+                'select' => ['issuing_site', 'type', 'number', 'warranty', 'recipient', 'generated', 'departure_date', 'deposit_id', 'alt_identifier'],
                 'where'  => ['res_letterbox.res_id = ?'],
                 'data'   => [$resource]
             ]);
             if (empty($registeredMail[0])) {
-                $cannotGenerate[] = $resource . ' - ' . _NOT_REGISTERED_MAIL;
+                $mail = ResModel::getById(['resId' => $resource, 'select' => ['alt_identifier']]);
+                if (empty($mail)) {
+                    $cannotGenerate[] = _ID . ' ' . $resource . ' ' . _NOT_EXISTS;
+                }
+                $cannotGenerate[] = $mail['alt_identifier'] . ' - ' . _NOT_REGISTERED_MAIL;
                 continue;
             }
             $registeredMail = $registeredMail[0];
 
             if (!$registeredMail['generated']) {
-                $cannotGenerate[] = $resource . ' - ' . _NOT_GENERATED;
+                $cannotGenerate[] = $registeredMail['alt_identifier'] . ' - ' . _NOT_GENERATED;
                 continue;
             }
 
-        if (empty($registeredMail['deposit_id'])) {
-            $registeredMails = RegisteredMailModel::getWithResources([
-                'select' => ['number', 'warranty', 'reference', 'recipient', 'res_letterbox.res_id'],
-                'where'  => ['type = ?', 'issuing_site = ?', 'departure_date = ?', 'generated = ?'],
-                'data'   => [$registeredMail['type'], $registeredMail['issuing_site'], $registeredMail['departure_date'], true]
-            ]);
-        } else {
-            $registeredMails = RegisteredMailModel::getWithResources([
-                'select' => ['number', 'warranty', 'reference', 'recipient', 'res_letterbox.res_id'],
-                'where'  => ['deposit_id = ?'],
-                'data'   => [$registeredMail['deposit_id']]
-            ]);
-        }
+            if (empty($registeredMail['deposit_id'])) {
+                $registeredMails = RegisteredMailModel::getWithResources([
+                    'select' => ['alt_identifier', 'res_letterbox.res_id'],
+                    'where'  => ['type = ?', 'issuing_site = ?', 'departure_date = ?', 'generated = ?', 'deposit_id is null'],
+                    'data'   => [$registeredMail['type'], $registeredMail['issuing_site'], $registeredMail['departure_date'], true]
+                ]);
+            } else {
+                $registeredMails = RegisteredMailModel::getWithResources([
+                    'select' => ['alt_identifier', 'res_letterbox.res_id'],
+                    'where'  => ['deposit_id = ?'],
+                    'data'   => [$registeredMail['deposit_id']]
+                ]);
+            }
 
             $resIds = array_column($registeredMails, 'res_id');
 
             $processedResources = array_merge($processedResources, $resIds);
 
-            $data[$registeredMail['type']] = count($registeredMails);
+            $registeredMailsNumbers = array_column($registeredMails, 'alt_identifier');
+
+            $numbers = $data[$registeredMail['type']];
+            if (!empty($numbers)) {
+                $numbers = explode(', ', $numbers);
+                $registeredMailsNumbers = array_merge($numbers, $registeredMailsNumbers);
+            }
+
+            $data[$registeredMail['type']] = implode(', ', $registeredMailsNumbers);
             $canGenerate[] = $resource;
         }
 
diff --git a/src/app/registeredMail/controllers/RegisteredMailController.php b/src/app/registeredMail/controllers/RegisteredMailController.php
index 49f8aa330e8..342ae79f5c0 100644
--- a/src/app/registeredMail/controllers/RegisteredMailController.php
+++ b/src/app/registeredMail/controllers/RegisteredMailController.php
@@ -668,7 +668,10 @@ class RegisteredMailController
         $pdf->setFont('times', 'B', 11);
         $pdf->Cell(20, 10, "Date", 1);
         $pdf->setFont('times', '', 11);
-        $pdf->Cell(40, 10, date("d/m/y"), 1);
+
+        $date = new \DateTime($args['departureDate']);
+
+        $pdf->Cell(40, 10, $date->format('d/m/Y'), 1);
         $pdf->SetXY(10, 100);
         $pdf->Cell(10, 10, "", 1);
         $pdf->setFont('times', 'B', 11);
@@ -708,7 +711,7 @@ class RegisteredMailController
             $pdf->Cell(30, 10, $registeredMailNumber, 1);
             $pdf->Cell(10, 10, $registeredMail['warranty'], 1);
             $pdf->Cell(15, 10, "", 1);
-            $pdf->Cell(30, 10, mb_strimwidth($registeredMail['reference'], 0, 25, ""), 1);
+            $pdf->Cell(30, 10, mb_strimwidth($registeredMail['reference'], 0, 22, "..."), 1);
 
             $pdf->setFont('times', '', 6);
             if (strlen($recipient[1] . " " . $recipient[4] . " " . $recipient[6]) > 60) {
@@ -768,7 +771,7 @@ class RegisteredMailController
 
         $pdf->SetXY(10, 276);
         $pdf->setFont('times', 'I', 8);
-        $pdf->Cell(0, 0, "*Niveau de garantie (R1 pour tous ou R2, R3");
+        $pdf->Cell(0, 0, "*Niveau de garantie (R1 pour tous ou R2, R3)");
         $pdf->SetXY(-30, 276);
         $pdf->setFont('times', 'I', 8);
         $pdf->Cell(0, 0, $page . '/' . $nb);
diff --git a/src/app/registeredMail/controllers/RegisteredMailTrait.php b/src/app/registeredMail/controllers/RegisteredMailTrait.php
index 3949b964462..086e0671450 100644
--- a/src/app/registeredMail/controllers/RegisteredMailTrait.php
+++ b/src/app/registeredMail/controllers/RegisteredMailTrait.php
@@ -299,13 +299,13 @@ trait RegisteredMailTrait
         static $filesByType;
         static $currentDepositId;
         static $registeredMailsIdsByType;
-        static $processedTypes;
+        static $processedTypesSites;
 
         if ($filesByType === null) {
             $filesByType = [
-                '2D' => null,
-                '2C' => null,
-                'RW' => null
+                '2D' => [],
+                '2C' => [],
+                'RW' => []
             ];
         }
         if ($registeredMailsIdsByType === null) {
@@ -318,8 +318,8 @@ trait RegisteredMailTrait
         if ($processedResources === null) {
             $processedResources = [];
         }
-        if ($processedTypes === null) {
-            $processedTypes = [];
+        if ($processedTypesSites === null) {
+            $processedTypesSites = [];
         }
 
         if (in_array($args['resId'], $processedResources)) {
@@ -359,7 +359,7 @@ trait RegisteredMailTrait
                 'orderBy' => ['number']
             ]);
 
-            if (empty($currentDepositId) || !in_array($registeredMail['type'], $processedTypes)) {
+            if (empty($currentDepositId) || !in_array($registeredMail['type'].'_'.$registeredMail['issuing_site'], $processedTypesSites)) {
                 $lastDepositId = ParameterModel::getById(['id' => 'last_deposit_id', 'select' => ['param_value_int']]);
                 $currentDepositId = $lastDepositId['param_value_int'] + 1;
                 ParameterModel::update(['id' => 'last_deposit_id', 'param_value_int' => $currentDepositId]);
@@ -396,11 +396,11 @@ trait RegisteredMailTrait
         $processedResources = array_merge($processedResources, $resIds);
         $registeredMailsIdsByType[$registeredMail['type']] = $resIds;
 
-        $filesByType[$registeredMail['type']] = base64_encode($resultPDF['fileContent']);
+        $filesByType[$registeredMail['type']][] = base64_encode($resultPDF['fileContent']);
 
         if (!empty($currentDepositId)) {
             foreach ($registeredMailsIdsByType as $type => $ids) {
-                if (!empty($ids) && !in_array($type, $processedTypes)) {
+                if (!empty($ids) && !in_array($type.'_'.$registeredMail['issuing_site'], $processedTypesSites)) {
                     RegisteredMailModel::update([
                         'set'   => ['deposit_id' => $currentDepositId],
                         'where' => ['res_id in (?)'],
@@ -409,46 +409,48 @@ trait RegisteredMailTrait
                 }
             }
         }
-        $processedTypes[] = $registeredMail['type'];
+        $processedTypesSites[] = $registeredMail['type'].'_'.$registeredMail['issuing_site'];
 
         $finalFile = null;
-        foreach ($filesByType as $type => $file) {
-            if (empty($file)) {
-                continue;
-            }
-            if (empty($finalFile)) {
-                $finalFile = $file;
+        foreach ($filesByType as $type => $files) {
+            if (empty($files)) {
                 continue;
             }
+            foreach ($files as $file) {
+                if (empty($finalFile)) {
+                    $finalFile = $file;
+                    continue;
+                }
 
-            $concatPdf = new Fpdi('P', 'pt');
-            $concatPdf->setPrintHeader(false);
-            $concatPdf->setPrintFooter(false);
-            $tmpPath = CoreConfigModel::getTmpPath();
+                $concatPdf = new Fpdi('P', 'pt');
+                $concatPdf->setPrintHeader(false);
+                $concatPdf->setPrintFooter(false);
+                $tmpPath = CoreConfigModel::getTmpPath();
+
+                $firstFile = $tmpPath . 'depositList_first_file' . rand() . '.pdf';
+                file_put_contents($firstFile, base64_decode($finalFile));
+                $pageCount = $concatPdf->setSourceFile($firstFile);
+                for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
+                    $pageId = $concatPdf->ImportPage($pageNo);
+                    $s = $concatPdf->getTemplatesize($pageId);
+                    $concatPdf->AddPage($s['orientation'], $s);
+                    $concatPdf->useImportedPage($pageId);
+                }
 
-            $firstFile = $tmpPath . 'depositList_first_file' . rand() . '.pdf';
-            file_put_contents($firstFile, base64_decode($finalFile));
-            $pageCount = $concatPdf->setSourceFile($firstFile);
-            for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
-                $pageId = $concatPdf->ImportPage($pageNo);
+                $secondFile = $tmpPath . 'depositList_second_file' . rand() . '.pdf';
+                file_put_contents($secondFile, base64_decode($file));
+                $concatPdf->setSourceFile($secondFile);
+                $pageId = $concatPdf->ImportPage(1);
                 $s = $concatPdf->getTemplatesize($pageId);
                 $concatPdf->AddPage($s['orientation'], $s);
                 $concatPdf->useImportedPage($pageId);
-            }
-
-            $secondFile = $tmpPath . 'depositList_second_file' . rand() . '.pdf';
-            file_put_contents($secondFile, base64_decode($file));
-            $concatPdf->setSourceFile($secondFile);
-            $pageId = $concatPdf->ImportPage(1);
-            $s = $concatPdf->getTemplatesize($pageId);
-            $concatPdf->AddPage($s['orientation'], $s);
-            $concatPdf->useImportedPage($pageId);
 
-            $fileContent = $concatPdf->Output('', 'S');
+                $fileContent = $concatPdf->Output('', 'S');
 
-            $finalFile = base64_encode($fileContent);
-            unlink($firstFile);
-            unlink($secondFile);
+                $finalFile = base64_encode($fileContent);
+                unlink($firstFile);
+                unlink($secondFile);
+            }
         }
 
         return ['data' => ['encodedFile' => $finalFile]];
diff --git a/src/frontend/app/registeredMails/acknowledgement-reception/acknowledgement-reception.component.html b/src/frontend/app/registeredMails/acknowledgement-reception/acknowledgement-reception.component.html
index 5b47fa3ecfa..358914106fd 100644
--- a/src/frontend/app/registeredMails/acknowledgement-reception/acknowledgement-reception.component.html
+++ b/src/frontend/app/registeredMails/acknowledgement-reception/acknowledgement-reception.component.html
@@ -42,7 +42,6 @@
                             </mat-form-field>
 
                             <mat-form-field *ngIf="type === 'notDistributed'" >
-                                <!-- sort -->
                                 <mat-select [(ngModel)]="reason" formControlName="returnReason" placeholder="{{'lang.returnReason' | translate}}" required>
                                     <mat-option *ngFor="let reason of returnReasons" [value]="reason">{{reason}}</mat-option>
                                     <mat-option value="{{'lang.others' | translate}}">{{'lang.others' | translate}}</mat-option>
diff --git a/src/lang/lang-en.json b/src/lang/lang-en.json
index 8a5cfb9d323..17e40b0eb27 100644
--- a/src/lang/lang-en.json
+++ b/src/lang/lang-en.json
@@ -1915,7 +1915,7 @@
     "authorizedRoutesInformations": "One route per row. Routes documentation",
     "canNotDisabledField": "This field can not be disabled because it is empty and mandatory",
     "registeredMailsIncludedExplication": "All registered mails with the same desired shipping date, same type and same issuing site will be included in the deposit list.",
-    "registeredMailsIncluded": "Number of registered mails included",
+    "registeredMailsIncluded": "Registered mails numbers included :",
     "cannotGenerateDepositListForMails": "Imposible to generate for the following registered mails :",
     "accountNumberAlreadyUsed": "Account number is already used by another issuing site",
     "rangeStartLargerThanRangeEnd": "Range start cannot be larger than range end",
diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json
index 26f4d47718e..2884256d529 100644
--- a/src/lang/lang-fr.json
+++ b/src/lang/lang-fr.json
@@ -1947,7 +1947,7 @@
     "authorizedRoutesInformations": "Une route par ligne. Documentation des routes",
     "canNotDisabledField": "Le champ ne peut pas être désactivé car il est vide et obligatoire",
     "registeredMailsIncludedExplication": "Tous les recommandés avec la même date d'expédition souhaitée, le même type et le même site émetteur seront inclus dans le bordereau.",
-    "registeredMailsIncluded": "Nombre de recommandés inclus :",
+    "registeredMailsIncluded": "Numéros de recommandés inclus :",
     "cannotGenerateDepositListForMails": "Génération impossible pour les recommandés suivants :",
     "accountNumberAlreadyUsed": "Le N° COCLICO est déjà utilisé par un autre site émetteur",
     "rangeStartLargerThanRangeEnd": "Le début de la plage ne peut pas être plus grand que la fin de la plage",
-- 
GitLab