Skip to content
Snippets Groups Projects
Commit 059640dd authored by Florian Azizian's avatar Florian Azizian
Browse files

FEAT #9514 download acknowledgement receipt

parent 3a3c7ffc
No related branches found
No related tags found
No related merge requests found
......@@ -270,6 +270,7 @@ $app->put('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/exp
$app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/summarySheets', \Resource\controllers\SummarySheetController::class . ':createList');
$app->put('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}', \Resource\controllers\ResourceListController::class . ':setAction');
$app->get('/resourcesList/exportTemplate', \Resource\controllers\ExportController::class . ':getExportTemplates');
$app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/acknowledgementReceipt', \AcknowledgementReceipt\controllers\AcknowledgementReceiptController::class . ':createPaperAcknowledgement');
//SignatureBook
$app->get('/signatureBook/users/{userId}/groups/{groupId}/baskets/{basketId}/resources', \SignatureBook\controllers\SignatureBookController::class . ':getResources');
......
......@@ -14,7 +14,85 @@
namespace AcknowledgementReceipt\controllers;
use setasign\Fpdi\Tcpdf\Fpdi;
use AcknowledgementReceipt\models\AcknowledgementReceiptModel;
use SrcCore\controllers\PreparedClauseController;
use User\models\UserModel;
use Basket\models\BasketModel;
use Resource\models\ResModel;
use Docserver\models\DocserverModel;
use Docserver\models\DocserverTypeModel;
use Resource\controllers\StoreController;
use Slim\Http\Request;
use Slim\Http\Response;
use Respect\Validation\Validator;
use Resource\controllers\ResourceListController;
class AcknowledgementReceiptController
{
public function createPaperAcknowledgement(Request $request, Response $response, array $aArgs)
{
$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']]);
}
$bodyData = $request->getParsedBody();
if (!Validator::arrayType()->notEmpty()->validate($bodyData['resources'])) {
return $response->withStatus(403)->withJson(['errors' => 'Resources is not set or empty']);
}
$bodyData['resources'] = array_slice($bodyData['resources'], 0, 500);
$basket = BasketModel::getById(['id' => $aArgs['basketId'], 'select' => ['basket_clause', 'basket_res_order', 'basket_name']]);
$user = UserModel::getById(['id' => $aArgs['userId'], 'select' => ['user_id']]);
$whereClause = PreparedClauseController::getPreparedClause(['clause' => $basket['basket_clause'], 'login' => $user['user_id']]);
$rawResourcesInBasket = ResModel::getOnView([
'select' => ['res_id'],
'where' => [$whereClause, 'res_view_letterbox.res_id in (?)'],
'data' => [$bodyData['resources']]
]);
$pdf = new Fpdi('P', 'pt');
$pdf->setPrintHeader(false);
$acknowledgement = AcknowledgementReceiptModel::getByResIds([
'select' => ['res_id', 'docserver_id', 'path', 'filename', 'fingerprint', 'send_date'],
'resIds' => $rawResourcesInBasket,
'orderBy' => ['res_id']
]);
foreach ($acknowledgement as $value) {
if (empty($value['send_date'])) {
$docserver = DocserverModel::getByDocserverId(['docserverId' => $value['docserver_id'], 'select' => ['path_template', 'docserver_type_id']]);
if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']);
}
$pathToDocument = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $value['path']) . $value['filename'];
if (!file_exists($pathToDocument)) {
return $response->withStatus(404)->withJson(['errors' => 'Document not found on docserver']);
}
$docserverType = DocserverTypeModel::getById(['id' => $docserver['docserver_type_id'], 'select' => ['fingerprint_mode']]);
$fingerprint = StoreController::getFingerPrint(['filePath' => $pathToDocument, 'mode' => $docserverType['fingerprint_mode']]);
if (!empty($value['fingerprint']) && $value['fingerprint'] != $fingerprint) {
return $response->withStatus(400)->withJson(['errors' => 'Fingerprints do not match']);
}
$pdf->setSourceFile($pathToDocument);
}
}
$fileContent = $pdf->Output('', 'S');
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->buffer($fileContent);
$response->write($fileContent);
$response = $response->withAddedHeader('Content-Disposition', "inline; filename=maarch.pdf");
}
\ No newline at end of file
return $response->withHeader('Content-Type', $mimeType);
}
}
......@@ -26,7 +26,7 @@ class AcknowledgementReceiptModel
$aTemplates = DatabaseModel::select([
'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
'table' => ['acknowledgment_receipts'],
'table' => ['acknowledgement_receipts'],
'where' => empty($aArgs['where']) ? [] : $aArgs['where'],
'data' => empty($aArgs['data']) ? [] : $aArgs['data'],
'order_by' => empty($aArgs['orderBy']) ? [] : $aArgs['orderBy'],
......@@ -36,13 +36,29 @@ class AcknowledgementReceiptModel
return $aTemplates;
}
public static function getByResIds(array $aArgs = [])
{
ValidatorModel::notEmpty($aArgs, ['resIds']);
ValidatorModel::arrayType($aArgs, ['select', 'orderBy', 'resIds']);
$aTemplates = DatabaseModel::select([
'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
'table' => ['acknowledgement_receipts'],
'where' => ['res_id in (?)'],
'data' => $aArgs['resIds'],
'order_by' => empty($aArgs['orderBy']) ? [] : $aArgs['orderBy']
]);
return $aTemplates;
}
public static function update(array $aArgs)
{
ValidatorModel::notEmpty($aArgs, ['set', 'where', 'data']);
ValidatorModel::arrayType($aArgs, ['set', 'where', 'data']);
DatabaseModel::update([
'table' => 'acknowledgment_receipts',
'table' => 'acknowledgement_receipts',
'set' => $aArgs['set'],
'where' => $aArgs['where'],
'data' => $aArgs['data']
......@@ -57,7 +73,7 @@ class AcknowledgementReceiptModel
ValidatorModel::arrayType($aArgs, ['where', 'data']);
DatabaseModel::delete([
'table' => 'acknowledgment_receipts',
'table' => 'acknowledgement_receipts',
'where' => $aArgs['where'],
'data' => $aArgs['data']
]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment