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');