mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-21 23:23:51 +00:00
generate document with relatorio: config and driver
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace Chill\DocGeneratorBundle\GeneratorDriver;
|
||||
|
||||
use Nelmio\Alice\ParameterBag;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||
use Symfony\Component\HttpClient\Exception\TransportException;
|
||||
use Symfony\Component\Mime\Part\DataPart;
|
||||
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
|
||||
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
|
||||
use Symfony\Contracts\HttpClient\Exception\HttpExceptionInterface;
|
||||
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
|
||||
class RelatorioDriver implements DriverInterface
|
||||
{
|
||||
private LoggerInterface $logger;
|
||||
|
||||
private HttpClientInterface $relatorioClient;
|
||||
|
||||
private string $url;
|
||||
|
||||
public function __construct(
|
||||
HttpClientInterface $relatorioClient,
|
||||
ParameterBagInterface $parameterBag,
|
||||
LoggerInterface $logger
|
||||
) {
|
||||
$this->relatorioClient = $relatorioClient;
|
||||
$this->logger = $logger;
|
||||
$this->url = $parameterBag->get('chill_doc_generator')['driver']['relatorio']['url'];
|
||||
}
|
||||
|
||||
public function generateFromResource($template, string $resourceType, array $data, string $templateName = null)
|
||||
{
|
||||
$formFields = [
|
||||
'variables' => \json_encode($data),
|
||||
'template' => new DataPart($template, $templateName ?? uniqid('template_'), $resourceType),
|
||||
];
|
||||
$form = new FormDataPart($formFields);
|
||||
|
||||
try {
|
||||
$response = $this->relatorioClient->request('POST', $this->url, [
|
||||
'headers' => $form->getPreparedHeaders()->toArray(),
|
||||
'body' => $form->bodyToIterable(),
|
||||
]);
|
||||
|
||||
return $response->toStream();
|
||||
} catch (HttpExceptionInterface $e) {
|
||||
$this->logger->error("relatorio: error while generating document", [
|
||||
'msg' => $e->getMessage(),
|
||||
'response' => $e->getResponse()->getStatusCode(),
|
||||
'content' => $e->getResponse()->getContent(false),
|
||||
]);
|
||||
|
||||
throw $e;
|
||||
} catch (TransportExceptionInterface $e) {
|
||||
$this->logger->error("relatorio: transport exception", [
|
||||
'msg' => $e->getMessage(),
|
||||
'e' => $e->getTraceAsString(),
|
||||
]);
|
||||
|
||||
throw $e;
|
||||
} catch (DecodingExceptionInterface $e) {
|
||||
$this->logger->error("relatorio: could not decode response", [
|
||||
'msg' => $e->getMessage(),
|
||||
'e' => $e->getTraceAsString(),
|
||||
]);
|
||||
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user