From 45875d305a966cfee37ccf1bcfbe33a6adf7efcb Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 7 Feb 2019 15:46:02 +0100
Subject: [PATCH] FEAT #9205 Senders Recipients for summary sheets

---
 .../actions/sendToExternalSignatureBook.php   |  2 -
 .../controllers/AttachmentController.php      |  2 +-
 .../controllers/SummarySheetController.php    | 75 +++++++++++++++++++
 .../controllers/AutoCompleteController.php    | 14 +++-
 src/core/lang/lang-en.php                     |  8 +-
 src/core/lang/lang-fr.php                     |  8 +-
 src/core/lang/lang-nl.php                     | 32 +++++---
 7 files changed, 116 insertions(+), 25 deletions(-)

diff --git a/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php b/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
index 00956ba0449..d9c7ba1750b 100755
--- a/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
+++ b/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
@@ -287,8 +287,6 @@ function get_value_fields($values, $field)
 
 function hasAttachmentError()
 {
-    $isMailingAttach = \Attachment\controllers\AttachmentController::isMailingAttach(["resIdMaster" => $_SESSION['doc_id'], "userId" => $_SESSION['user']['UserId']]);
-
     if (!empty($_SESSION['stockCheckbox'])) {
         $resIds = $_SESSION['stockCheckbox'];
     } else {
diff --git a/src/app/attachment/controllers/AttachmentController.php b/src/app/attachment/controllers/AttachmentController.php
index 84078c648aa..3828ab96b9e 100755
--- a/src/app/attachment/controllers/AttachmentController.php
+++ b/src/app/attachment/controllers/AttachmentController.php
@@ -493,7 +493,7 @@ class AttachmentController
         return ['success' => 'success'];
     }
 
-    public function isMailingAttach(array $aArgs)
+    public static function isMailingAttach(array $aArgs)
     {
         if (!Validator::intVal()->validate($aArgs['resIdMaster']) || !ResController::hasRightByResId(['resId' => $aArgs['resIdMaster'], 'userId' => $aArgs['userId']])) {
             return ['errors' => 'Document out of perimeter'];
diff --git a/src/app/resource/controllers/SummarySheetController.php b/src/app/resource/controllers/SummarySheetController.php
index fb20f99c1d4..e40084a4292 100644
--- a/src/app/resource/controllers/SummarySheetController.php
+++ b/src/app/resource/controllers/SummarySheetController.php
@@ -17,19 +17,23 @@ namespace Resource\controllers;
 use Basket\models\BasketModel;
 use chillerlan\QRCode\QRCode;
 use chillerlan\QRCode\QROptions;
+use Contact\models\ContactModel;
 use Entity\models\EntityModel;
 use Entity\models\ListInstanceModel;
 use Note\models\NoteEntityModel;
 use Note\models\NoteModel;
 use Priority\models\PriorityModel;
 use Resource\models\ResModel;
+use Resource\models\ResourceContactModel;
 use Resource\models\ResourceListModel;
 use Respect\Validation\Validator;
 use setasign\Fpdi\Tcpdf\Fpdi;
 use Slim\Http\Request;
 use Slim\Http\Response;
+use SrcCore\controllers\AutoCompleteController;
 use SrcCore\controllers\PreparedClauseController;
 use SrcCore\models\CoreConfigModel;
+use SrcCore\models\DatabaseModel;
 use SrcCore\models\TextFormatModel;
 use SrcCore\models\ValidatorModel;
 use Status\models\StatusModel;
@@ -215,6 +219,77 @@ class SummarySheetController
                 $pdf->MultiCell($widthNoMargins / 2, 20, _STATUS . " : {$status}", 1, 'L', false, 1, '', '', true, 0, true);
                 $pdf->MultiCell($widthNoMargins / 2, 20, _PRIORITY . " : {$priority}", 1, 'L', false, 0, '', '', true, 0, true);
                 $pdf->MultiCell($widthNoMargins / 2, 20, _PROCESS_LIMIT_DATE . " : {$processLimitDate}", 1, 'L', false, 1, '', '', true, 0, true);
+            } elseif ($unit['unit'] == 'senderRecipientInformations') {
+                $ext = ResModel::getExtById(['select' => ['category_id', 'address_id', 'exp_user_id', 'dest_user_id', 'is_multicontacts'], 'resId' => $resource['res_id']]);
+
+                if (!empty($ext)) {
+                    $resourcesContacts = ResourceContactModel::getFormattedByResId(['resId' => $resource['res_id']]);
+                    $oldContacts = [];
+                    $rawContacts = [];
+                    if ($ext['is_multicontacts'] == 'Y') {
+                        $multiContacts = DatabaseModel::select([
+                            'select'    => ['contact_id', 'address_id'],
+                            'table'     => ['contacts_res'],
+                            'where'     => ['res_id = ?', 'mode = ?'],
+                            'data'      => [$resource['res_id'], 'multi']
+                        ]);
+                        foreach ($multiContacts as $multiContact) {
+                            $rawContacts[] = [
+                                'login'         => $multiContact['contact_id'],
+                                'address_id'    => $multiContact['address_id'],
+                            ];
+                        }
+                    } else {
+                        $rawContacts[] = [
+                            'login'         => $ext['dest_user_id'],
+                            'address_id'    => $ext['address_id'],
+                        ];
+                    }
+                    foreach ($rawContacts as $rawContact) {
+                        if (!empty($rawContact['address_id'])) {
+                            $contact = ContactModel::getOnView([
+                                'select' => [
+                                    'is_corporate_person', 'lastname', 'firstname', 'address_num', 'address_street', 'address_town', 'address_postal_code',
+                                    'ca_id', 'society', 'contact_firstname', 'contact_lastname', 'address_country'
+                                ],
+                                'where' => ['ca_id = ?'],
+                                'data' => [$rawContact['address_id']]
+                            ]);
+                            if (isset($contact[0])) {
+                                $contact = AutoCompleteController::getFormattedContact(['contact' => $contact[0]]);
+                                $oldContacts[] = ['format' => $contact['contact']['otherInfo']];
+                            }
+
+                        } else {
+                            $oldContacts[] = ['format' => UserModel::getLabelledUserById(['login' => $rawContact['login']])];
+                        }
+                    }
+                    if ($ext['category_id'] == 'outgoing') {
+                        $senders = $resourcesContacts;
+                        $recipients = $oldContacts;
+                    } else {
+                        $senders = $oldContacts;
+                        $recipients = $resourcesContacts;
+                    }
+
+                    $pdf->SetY($pdf->GetY() + 40);
+                    if (($pdf->GetY() + 57) > $bottomHeight) {
+                        $pdf->AddPage();
+                    }
+                    $pdf->SetFont('', 'B', 11);
+                    $pdf->Cell(0, 15, $unit['label'], 0, 2, 'L', false);
+                    $pdf->SetY($pdf->GetY() + 2);
+
+                    $pdf->SetFont('', '', 10);
+                    $pdf->Cell($widthNoMargins / 10 * 4.5, 15, _SENDERS, 1, 0, 'C', false);
+                    $pdf->Cell($widthNoMargins / 10, 15, '', 0, 0, 'C', false);
+                    $pdf->Cell($widthNoMargins / 10 * 4.5, 15, _RECIPIENTS, 1, 1, 'C', false);
+                    for ($i = 0; !empty($senders[$i]) || !empty($recipients[$i]); $i++) {
+                        $pdf->MultiCell($widthNoMargins / 10 * 4.5, 40, empty($senders[$i]['format']) ? '' : $senders[$i]['format'], empty($senders[$i]['format']) ? 0 : 1, 'L', false, 0, '', '', true, 0, true);
+                        $pdf->MultiCell($widthNoMargins / 10, 40, '', 0, 'L', false, 0, '', '', true, 0, true);
+                        $pdf->MultiCell($widthNoMargins / 10 * 4.5, 40, empty($recipients[$i]['format']) ? '' : $recipients[$i]['format'], empty($recipients[$i]['format']) ? 0 : 1, 'L', false, 1, '', '', true, 0, true);
+                    }
+                }
             } elseif ($unit['unit'] == 'diffusionList') {
                 $assignee = '';
                 $copies = [];
diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php
index f54ac998b4e..e5eb28ed9bb 100755
--- a/src/core/controllers/AutoCompleteController.php
+++ b/src/core/controllers/AutoCompleteController.php
@@ -529,11 +529,14 @@ class AutoCompleteController
             if (!empty($aArgs['contact']['address_street'])) {
                 $address.= $aArgs['contact']['address_street'] . ' ';
             }
+            if (!empty($aArgs['contact']['address_postal_code'])) {
+                $address.= $aArgs['contact']['address_postal_code'] . ' ';
+            }
             if (!empty($aArgs['contact']['address_town'])) {
                 $address.= $aArgs['contact']['address_town'] . ' ';
             }
-            if (!empty($aArgs['contact']['address_postal_code'])) {
-                $address.= $aArgs['contact']['address_postal_code'] . ' ';
+            if (!empty($aArgs['contact']['address_country'])) {
+                $address.= $aArgs['contact']['address_country'];
             }
             $otherInfo = empty($address) ? "{$aArgs['contact']['society']}" : "{$aArgs['contact']['society']} - {$address}";
             $contact = [
@@ -552,11 +555,14 @@ class AutoCompleteController
             if (!empty($aArgs['contact']['address_street'])) {
                 $address.= $aArgs['contact']['address_street'] . ' ';
             }
+            if (!empty($aArgs['contact']['address_postal_code'])) {
+                $address.= $aArgs['contact']['address_postal_code'] . ' ';
+            }
             if (!empty($aArgs['contact']['address_town'])) {
                 $address.= $aArgs['contact']['address_town'] . ' ';
             }
-            if (!empty($aArgs['contact']['address_postal_code'])) {
-                $address.= $aArgs['contact']['address_postal_code'] . ' ';
+            if (!empty($aArgs['contact']['address_country'])) {
+                $address.= $aArgs['contact']['address_country'];
             }
             $contactToDisplay = "{$aArgs['contact']['contact_firstname']} {$aArgs['contact']['contact_lastname']}";
             if (!empty($aArgs['contact']['society'])) {
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index 14ec9b2ba83..385f2bb553a 100755
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -42,6 +42,9 @@ define('_DOCSERVER_ADDED', 'Docserver added');
 define('_DOCSERVER_UPDATED', 'Docserver updated');
 define('_DOCSERVER_DELETED', 'Docserver deleted');
 define('_DOCSERVER_ACTIVATED_EXISTS', 'A docserver with this type and this collection is already activated');
+define('_DOCTYPE_UPDATED', 'Document type updated');
+define('_DOCTYPE_ADDED', 'Document type added');
+define('_DOCTYPE_DELETED', 'Document type deleted');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Doctype first level added');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Doctype first level deleted');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Doctype first level edited');
@@ -142,9 +145,6 @@ define('_DOCUMENTS_LIST_COPIES', 'List of copies');
 define('_CASES_LIST', 'Cases list');
 define('_DOCUMENTS_LIST_WITH_SIGNATORY', 'Documents list with signatory');
 define('_FOLDERS_LIST', 'folders list');
-define('_DOCTYPE_UPDATED', 'Document type updated');
-define('_DOCTYPE_ADDED', 'Document type added');
-define('_DOCTYPE_DELETED', 'Document type deleted');
 
 // ADMINISTRATION
 define('_USERS', 'Users');
@@ -426,6 +426,8 @@ define('_ASSIGNEE', 'Assignee');
 define('_SUMMARY_SHEET', 'Summary sheet');
 define('_UNDEFINED', 'Undefined');
 define('_CATEGORY', 'Category');
+define('_SENDERS', 'Sender(s)');
+define('_RECIPIENTS', 'Recipient(s)');
 define('_CHRONO_NUMBER', 'Chrono number');
 define('_INITIATOR_ENTITY', 'Initiator entity');
 define('_DESTINATION_ENTITY', 'Destination entity');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index 6627ea08b36..0616193db16 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -42,6 +42,9 @@ define('_DOCSERVER_ADDED', 'Zone de stockage ajoutée');
 define('_DOCSERVER_UPDATED', 'Zone de stockage modifiée');
 define('_DOCSERVER_DELETED', 'Zone de stockage supprimée');
 define('_DOCSERVER_ACTIVATED_EXISTS', 'Une zone de stockage avec le même type et la même collection est déjà activée');
+define('_DOCTYPE_UPDATED', 'Type de document modifié');
+define('_DOCTYPE_ADDED', 'Type de document ajouté');
+define('_DOCTYPE_DELETED', 'Type de document supprimé');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Chemise ajoutée');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Chemise supprimée');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Chemise modifiée');
@@ -142,9 +145,6 @@ define('_DOCUMENTS_LIST_COPIES', 'Liste des copies');
 define('_CASES_LIST', 'Liste des affaires');
 define('_DOCUMENTS_LIST_WITH_SIGNATORY', 'Liste des documents avec signataire');
 define('_FOLDERS_LIST', 'Liste de dossiers');
-define('_DOCTYPE_UPDATED', 'Type de document modifié');
-define('_DOCTYPE_ADDED', 'Type de document ajouté');
-define('_DOCTYPE_DELETED', 'Type de document supprimé');
 
 // ADMINISTRATION
 define('_USERS', 'Utilisateurs');
@@ -426,6 +426,8 @@ define('_ASSIGNEE', 'Attributaire');
 define('_SUMMARY_SHEET', 'Fiche de liaison');
 define('_UNDEFINED', 'Non définie');
 define('_CATEGORY', 'Catégorie');
+define('_SENDERS', 'Expéditeur(s)');
+define('_RECIPIENTS', 'Destinataire(s)');
 define('_CHRONO_NUMBER', 'Numéro chrono');
 define('_INITIATOR_ENTITY', 'Entité initiatrice');
 define('_DESTINATION_ENTITY', 'Entité traitante');
diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php
index 92ad8ab7c2f..2be9be43468 100644
--- a/src/core/lang/lang-nl.php
+++ b/src/core/lang/lang-nl.php
@@ -32,6 +32,9 @@ define('_BASKETS_SORT_MODIFICATION', 'Wijziging volgorde bakje');
 define('_BY_DEFAULT', 'standaard');
 define('_DELETE_NOTIFICATIONS', 'Melding verwijderd');
 define('_DEST_USER', 'Ontvanger');
+define('_DOCTYPE_UPDATED', 'Documenttype gewijzigd');
+define('_DOCTYPE_ADDED', 'Documenttype toegevoegd');
+define('_DOCTYPE_DELETED', 'Documenttype verwijderd');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Map toegevoegd');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Map verwijderd');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Map gewijzigd');
@@ -81,15 +84,6 @@ define('_USER_ENTITY_SUPPRESSION', 'Verwijderde eenheid voor gebruiker');
 define('_VISA_USER', 'Voor goedkeuring');
 define('_WRONG_FILE_TYPE', 'Dit bestandstype is niet toegelaten');
 define('_CAN_NOT_MOVE_IN_CHILD_ENTITY', 'De bovenliggende eenheid mag niet in een onderliggende eenheid zitten');
-define('_DOCUMENTS_LIST_WITH_ATTACHMENTS', 'Lijst met filters en antwoorden');
-define('_DOCUMENTS_LIST_WITH_AVIS', 'Lijst van de documenten met berichten');
-define('_DOCUMENTS_LIST_COPIES', 'Lijst van de kopieën');
-define('_CASES_LIST', 'Lijst van de zaken');
-define('_DOCUMENTS_LIST_WITH_SIGNATORY', 'Lijst van de documenten met ondertekenaar');
-define('_FOLDERS_LIST', 'Lijst van de mappen');
-define('_DOCTYPE_UPDATED', 'Documenttype gewijzigd');
-define('_DOCTYPE_ADDED', 'Documenttype toegevoegd');
-define('_DOCTYPE_DELETED', 'Documenttype verwijderd');
 define('_QUOTA_EXCEEDED', 'Quota overschreden');
 define('_CONTACTS_GROUP_ADDED', 'Toegevoegde contactengroep');
 define('_CONTACTS_GROUP_UPDATED', 'Gewijzigde contactengroep');
@@ -142,6 +136,15 @@ define('_BACK_FROM_VACATION', 'bij terugkeer na afwezigheid');
 define('_DOC_DISPLAYING', 'Weergave van het document');
 define('_DOC_ADDED', 'Document toegevoegd');
 define('_ATTACH_DISPLAYING', 'Weergave van de bijlage');
+define('_NOTE_ADDED', 'note added _TO_TRANSLATE');
+
+// LISTS
+define('_DOCUMENTS_LIST_WITH_ATTACHMENTS', 'Lijst met filters en antwoorden');
+define('_DOCUMENTS_LIST_WITH_AVIS', 'Lijst van de documenten met berichten');
+define('_DOCUMENTS_LIST_COPIES', 'Lijst van de kopieën');
+define('_CASES_LIST', 'Lijst van de zaken');
+define('_DOCUMENTS_LIST_WITH_SIGNATORY', 'Lijst van de documenten met ondertekenaar');
+define('_FOLDERS_LIST', 'Lijst van de mappen');
 
 // ADMINISTRATION
 define('_USERS', 'Gebruikers');
@@ -188,6 +191,8 @@ define('_ADMIN_NOTIFICATIONS_DESC', 'Meldingen voor de gebruikers aanmaken en be
 define('_TEMPLATES', 'Documentmodellen');
 define('_ADMIN_TEMPLATES_DESC', 'De modellen die voor de bijlagen gebruikt worden, de meldingen, de aanmaak van brieven, het verzenden van e-mails en de opmerkingen beheren');
 define('_SECURITIES', 'Veiligheden');
+define('_EMAILSERVER_PARAM', '_TO_TRANSLATE');
+define('_EMAILSERVER_PARAM_DESC', '_TO_TRANSLATE');
 
 //SERVICES
 define('_REDIRECT_TO_ACTION', 'Doorsturen naar een andere actie');
@@ -383,6 +388,8 @@ define('_CHECK_REPLY', 'Controle van het antwoord op de transfer');
 define('_PURGE_LETTER', 'De brief vrijmaken na de archivering');
 define('_RESET_LETTER', 'Reset van het verwerkingscircuit');
 define('_SIMPLE_CONFIRM_WITH_UPDATE_DATE', 'Bevestiging en bijwerking van de vertrekdatum');
+
+// REPORTS
 define('_FOLDER_VIEW_STAT', 'Aantal geraadpleegde mappen');
 define('_ENTITY_VOL_STAT', 'Briefvolume per eenheid');
 define('_ENTITY_VOL_STAT_DESC', 'Om het aantal brieven weer te geven dat per dienst bewaard wordt.');
@@ -399,6 +406,8 @@ define('_MAIL_TYPOLOGY_REPORT', 'Briefvolume per typologie');
 define('_MAIL_TYPOLOGY_REPORT_DESC', 'Om het aantal brieven weer te geven dat per documenttype bewaard wordt.');
 define('_MAIL_VOL_BY_CAT_REPORT', 'Briefvolume per categorie');
 define('_MAIL_VOL_BY_CAT_REPORT_DESC', 'Om het aantal brieven weer te geven dat per categorie (inkomend, uitgaand enz.) bewaard wordt.');
+
+//ATTACHMENT TYPES
 define('_RESPONSE_PROJECT', 'Antwoordontwerp');
 define('_SIGNED_RESPONSE', 'Ondertekend antwoord');
 define('_OUTGOING_MAIL_SIGNED', 'Brief vertrek ondertekend');
@@ -413,13 +422,12 @@ define('_SVA', 'Stilzwijgende aanvaarding');
 define('_SVR', 'Stilzwijgende weigering');
 define('_REDACTOR', 'Opsteller');
 define('_ASSIGNEE', 'Toegekende persoon');
-define('_EMAILSERVER_PARAM', '_TO_TRANSLATE');
-define('_EMAILSERVER_PARAM_DESC', '_TO_TRANSLATE');
-define('_NOTE_ADDED', 'note added _TO_TRANSLATE');
 
 define('_SUMMARY_SHEET', 'Summary sheet_TO_TRANSLATE');
 define('_UNDEFINED', 'Undefined_TO_TRANSLATE');
 define('_CATEGORY', 'Category_TO_TRANSLATE');
+define('_SENDERS', 'Sender(s)_TO_TRANSLATE');
+define('_RECIPIENTS', 'Recipient(s)_TO_TRANSLATE');
 define('_CHRONO_NUMBER', 'Chrono number_TO_TRANSLATE');
 define('_INITIATOR_ENTITY', 'Initiator entity_TO_TRANSLATE');
 define('_DESTINATION_ENTITY', 'Destination entity_TO_TRANSLATE');
-- 
GitLab