diff --git a/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php b/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php
index e6ec6f819e3a9a1106d19fda284aec7ad4c95508..ba6400f2e4f060a6e4c426fba97d3fc0fb01aef1 100644
--- a/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php
+++ b/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php
@@ -20,6 +20,7 @@ use SrcCore\controllers\PreparedClauseController;
 use User\models\UserModel;
 use Basket\models\BasketModel;
 use Resource\models\ResModel;
+use Resource\controllers\ResController;
 use Docserver\models\DocserverModel;
 use Docserver\models\DocserverTypeModel;
 use Resource\controllers\StoreController;
@@ -122,30 +123,57 @@ class AcknowledgementReceiptController
     
     public function checkAcknowledgementReceipt(Request $request, Response $response, array $aArgs)
     {
+        //check service
+        $currentUser = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]);
+
+        $errors = ResourceListController::listControl(['groupId' => $aArgs['groupId'], 'userId' => $aArgs['userId'], 'basketId' => $aArgs['basketId'], 'currentUserId' => $currentUser['id']]);
+        if (!empty($errors['errors'])) {
+            return $response->withStatus($errors['code'])->withJson(['errors' => $errors['errors']]);
+        }
+
         $data = $request->getParsedBody();
         //$data = $request->getParams();
+
+        if (!Validator::arrayType()->notEmpty()->validate($data['resources'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Data resources is empty or not an array']);
+        }
+        
         $sendEmail = 0;
         $sendPaper = 0;
         $noSendAR = [
             'number'    => 0,
             'list'      => [],
         ];
+        $alreadyGenerated = [
+            'number'    => 0,
+            'list'      => [],
+        ];
         $alreadySend = [
             'number'    => 0,
             'list'      => [],
         ];
 
-        if (!Validator::arrayType()->notEmpty()->validate($data['resources'])) {
-            return $response->withStatus(400)->withJson(['errors' => 'Data resources is empty or not an array']);
-        }
         $data['resources'] = array_slice($data['resources'], 0, 500);
-
-        
         foreach ($data['resources'] as $resId) {
+            $canSendEmail = true;
+            $canSendPaper = true;
             $ext = ResModel::getExtById(['select' => ['res_id', 'category_id', 'address_id', 'is_multicontacts', 'alt_identifier'], 'resId' => $resId]);
-                        
+
+            //Check
+            if (empty($ext)) {
+                $noSendAR['number'] += 1;
+                $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _DOCUMENT_NOT_FOUND ];
+                continue;
+            }
+        
+            if (!ResController::hasRightByResId(['resId' => $resId, 'userId' => $GLOBALS['userId']])) {
+                $noSendAR['number'] += 1;
+                $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _DOCUMENT_OUT_PERIMETER ];
+                continue;
+            }
+
             //Verify resource category
-            if (empty($ext) || $ext['category_id'] != 'incoming') {
+            if ($ext['category_id'] != 'incoming') {
                 $noSendAR['number'] += 1;
                 $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _NOT_INCOMING_CATEGORY ];
                 continue;
@@ -179,19 +207,68 @@ class AcknowledgementReceiptController
             $pathToDocument = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $template[0]['template_path']) . $template[0]['template_file_name'];
 
             //Verify sending
-            $acknowledgement = AcknowledgementReceiptModel::get([
-                'select'    => ['res_id', 'type', 'format', 'send_date'],
+            $acknowledgements = AcknowledgementReceiptModel::get([
+                'select'    => ['res_id', 'type', 'format', 'creation_date', 'send_date'],
                 'where'     => ['res_id = (?)', 'type = (?)'],
                 'data'      => [$resId, $templateAttachmentType],
             ]);
 
-            if (!empty($acknowledgement)) {
-                $alreadySend['number'] += 1;
-                $alreadySend['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _AR_ALREADY_SEND ];
-                continue;
+            if(!empty($acknowledgements)){
+                $sendedEmail = 0;
+                $sendedPaper = 0;
+                $generatedPaper = 0;
+                $generatedEmail = 0;
+                $sendError = 0;
+                $canSendEmail = false;
+                $canSendPaper = false;
+
+                foreach ($acknowledgements as $acknowledgement) {
+
+                    if ($acknowledgement['format'] == 'html') {
+                        if (!empty($acknowledgement['creation_date']) && !empty($acknowledgement['send_date'])) {
+                            $sendedEmail += 1;
+                        } else if (!empty($acknowledgement['creation_date']) && empty($acknowledgement['send_date'])) {
+                            $generatedEmail += 1;
+                        } else {
+                            $sendedError +=1;
+                        }
+                    } else if($acknowledgement['format'] == 'pdf') {
+                        if (!empty($acknowledgement['creation_date']) && !empty($acknowledgement['send_date'])) {
+                            $sendedPaper += 1;
+                        } else if (!empty($acknowledgement['creation_date']) && empty($acknowledgement['send_date'])) {
+                            $generatedPaper += 1;
+                        } else {
+                            $sendedError +=1;
+                        }
+                    }
+                }
+                
+                if($sendedError > 0) {
+                    $noSendAR['number'] += 1;
+                    $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _AR_SEND_ERROR ];
+                    continue;
+                }
+
+                if($sendedEmail + $sendedPaper == sizeof($acknowledgements)){
+                    $alreadySend['number'] += 1;
+                    $alreadySend['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _AR_ALREADY_SEND ];
+                    continue;
+                }
+
+                if($generatedEmail + $generatedPaper > 0 ){
+                    $alreadyGenerated['number'] += 1;
+                    $alreadyGenerated['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _AR_ALREADY_GENERATED ];
+
+                    if ($generatedEmail > 0) {
+                        $canSendEmail = true;
+                    }
+                    if($generatedPaper > 0) {
+                        $canSendPaper = true;
+                    }
+                }
             }
 
-            // //Verify associated contact            
+            //Verify associated contact            
             $contactsToProcess = [];
             if ($ext['is_multicontacts'] == 'Y') {
                 $multiContacts = DatabaseModel::select([
@@ -207,30 +284,32 @@ class AcknowledgementReceiptController
                 $contactsToProcess[] = $ext['address_id'];
             }
 
-            //Verify user informations
+            //Verify contact informations
+            $email = 0;
+            $paper = 0;
             foreach ($contactsToProcess as $contactToProcess) {
-                $email = 0;
-                $paper = 0;
 
                 if (empty($contactToProcess)) {
+                    $email = 0;
+                    $paper = 0;
                     $noSendAR['number'] += 1;
                     $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _NO_CONTACT ];
-                    continue;
+                    continue 2;
                 }
 
                 $contact = ContactModel::getByAddressId(['addressId' => $contactToProcess, 'select' => ['email', 'address_street', 'address_town', 'address_postal_code']]);
     
-                if (empty($contact['email']) || empty($contact['address_street']) || empty($contact['address_town']) || empty($contact['address_postal_code'])) {
+                if (empty($contact['email']) && (empty($contact['address_street']) || empty($contact['address_town']) || empty($contact['address_postal_code']))) {
                     $noSendAR['number'] += 1;
                     $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _USER_MISSING_INFORMATIONS ];
-                    continue;
+                    continue 2;
                 }
                 
                 if (!empty($contact['email'])) {
                     if (empty($template[0]['template_content'])) {
                         $noSendAR['number'] += 1;
                         $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _NO_EMAIL_TEMPLATE ];
-                        continue;
+                        continue 2;
                     } else {
                         $email += 1;
                     }
@@ -238,17 +317,22 @@ class AcknowledgementReceiptController
                     if (!file_exists($pathToDocument)) {
                         $noSendAR['number'] += 1;
                         $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _NO_PAPER_TEMPLATE ];
-                        continue;
+                        continue 2;
                     } else {
                         $paper += 1;
                     }
                 }
             }
             
-            $sendEmail += $email;
-            $sendPaper += $paper;
+            if($email > 0 && $canSendEmail){
+                $sendEmail += $email;
+            }
+
+            if($paper > 0 && $canSendPaper){
+                $sendPaper += $paper;
+            }
         }
 
-        return $response->withJson(['sendEmail' => $sendEmail, 'sendPaper' => $sendPaper, 'noSendAR' => $noSendAR, 'alreadySend' => $alreadySend]);
+        return $response->withJson(['sendEmail' => $sendEmail, 'sendPaper' => $sendPaper, 'noSendAR' => $noSendAR, 'alreadySend' => $alreadySend, 'alreadyGenerated' => $alreadyGenerated]);
     }
 }
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index 8641d4c6ad03d0baf952bc2a7931ab2fa6ccbeb5..be8bebcdc5fca89a68593ab494d0731d872d5851 100755
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -52,6 +52,7 @@ define('_DOCTYPE_SECONDLEVEL_ADDED', 'Doctype second level added');
 define('_DOCTYPE_SECONDLEVEL_DELETED', 'Doctype second level deleted');
 define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Doctype second level edited');
 define('_DOCUMENT_NOT_FOUND', 'Document not found');
+define('_DOCUMENT_OUT_PERIMETER', 'Document out of perimeter');
 define('_EMAIL_ADDED', 'Email added');
 define('_ENTITY_CREATION', 'Entity creation');
 define('_ENTITY_MODIFICATION', 'Entity modification');
@@ -388,11 +389,13 @@ define('_RESET_LETTER', 'Reset workflow');
 define('_SIMPLE_CONFIRM_WITH_UPDATE_DATE', 'Confirm and update departure date');
 define('_NOT_INCOMING_CATEGORY', 'Not incomping category' );
 define('_AR_ALREADY_SEND', 'Acknowledgement receipt already send');
+define('_AR_ALREADY_GENERATED', 'Acknowledgement receipt generated but not sent');
 define('_NO_CONTACT', 'No associated contact');
 define('_USER_MISSING_INFORMATIONS', 'Missing informations in contact card');
 define('_NO_TEMPLATE', 'No template');
 define('_NO_EMAIL_TEMPLATE', 'No electronic template');
 define('_NO_PAPER_TEMPLATE', 'No paper template');
+define('_AR_SEND_ERROR', 'Error in acknowledgements receipt already sent');
 
 // REPORTS
 define('_FOLDER_VIEW_STAT', 'Number of read folders');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index eb9f4e7f90100a396fe73077728a4eaccffaebb3..5bae03ef5ed3f634dc317d13d26f1194c15e518b 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -52,6 +52,7 @@ define('_DOCTYPE_SECONDLEVEL_ADDED', 'Sous-chemise ajoutée');
 define('_DOCTYPE_SECONDLEVEL_DELETED', 'Sous-chemise supprimée');
 define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Sous-chemise modifiée');
 define('_DOCUMENT_NOT_FOUND', 'Document introuvable');
+define('_DOCUMENT_OUT_PERIMETER', 'Document en dehors du périmètre');
 define('_EMAIL_ADDED', 'Courriel ajouté');
 define('_ENTITY_CREATION', 'Création entité');
 define('_ENTITY_MODIFICATION', 'Modification entité');
@@ -388,11 +389,13 @@ define('_RESET_LETTER', 'Remise à zéro du circuit de traitement');
 define('_SIMPLE_CONFIRM_WITH_UPDATE_DATE', 'Confirmation et mise à jour de la date de départ');
 define('_NOT_INCOMING_CATEGORY', 'Catégorie différente de \'Courrier arrivée\'' );
 define('_AR_ALREADY_SEND', 'Accusé de réception déjà envoyé');
+define('_AR_ALREADY_GENERATED', 'Accusé de réception généré mais non envoyé');
 define('_NO_CONTACT', 'Pas de contact associé');
 define('_USER_MISSING_INFORMATIONS', 'Informations incomplètes sur la fiche du contact');
 define('_NO_TEMPLATE', 'Pas de modèle');
 define('_NO_EMAIL_TEMPLATE', 'Pas de modèle électronique');
 define('_NO_PAPER_TEMPLATE', 'Pas de modèle papier');
+define('_AR_SEND_ERROR', 'Erreur dans les accusés de réception déjà envoyés');
 
 // REPORTS
 define('_FOLDER_VIEW_STAT', 'Nombre de dossiers consultés');
diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php
index acfc7f31ddb79cb24f57b665a3a0244e1a2f82e3..25742fbd6ac07cc04cc871c6a0e1d71f2e38c0e7 100644
--- a/src/core/lang/lang-nl.php
+++ b/src/core/lang/lang-nl.php
@@ -42,6 +42,7 @@ define('_DOCTYPE_SECONDLEVEL_ADDED', 'Submap toegevoegd');
 define('_DOCTYPE_SECONDLEVEL_DELETED', 'Submap verwijderd');
 define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Submap gewijzigd');
 define('_DOCUMENT_NOT_FOUND', 'Document onvindbaar');
+define('_DOCUMENT_OUT_PERIMETER', 'Document buiten de omtrek'); //_TO_TRANSLATE
 define('_EMAIL_ADDED', 'TO_TRANSLATE : Email added');
 define('_ENTITY_CREATION', 'Aanmaak eenheid');
 define('_ENTITY_MODIFICATION', 'Wijziging eenheid');
@@ -387,11 +388,13 @@ define('_RESET_LETTER', 'Reset van het verwerkingscircuit');
 define('_SIMPLE_CONFIRM_WITH_UPDATE_DATE', 'Bevestiging en bijwerking van de vertrekdatum');
 define('_NOT_INCOMING_CATEGORY', 'Categorie verschillend van \'Inkomende post\'' ); //_TO_TRANSLATE
 define('_AR_ALREADY_SEND', 'Ontvangstbevestiging reeds verzonden'); //_TO_TRANSLATE
+define('_AR_ALREADY_GENERATED', 'Ontvangstbevestiging gegenereerd maar niet verzonden'); //_TO_TRANSLATE
 define('_NO_CONTACT', 'Geen bijbehorend contact'); //_TO_TRANSLATE
 define('_USER_MISSING_INFORMATIONS', 'Ontbrekende informatie op de contactkaart'); //_TO_TRANSLATE
 define('_NO_TEMPLATE', 'Geen sjabloon'); //_TO_TRANSLATE
 define('_NO_EMAIL_TEMPLATE', 'Geen elektronisch sjabloon'); //_TO_TRANSLATE
 define('_NO_PAPER_TEMPLATE', 'Geen papieren sjabloon'); //_TO_TRANSLATE
+define('_AR_SEND_ERROR', 'Fout in reeds verzonden ontvangstbevestigingen'); //_TO_TRANSLATE
 
 // REPORTS
 define('_FOLDER_VIEW_STAT', 'Aantal geraadpleegde mappen');