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