Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
8.33% covered (danger)
8.33%
1 / 12
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Generate
8.33% covered (danger)
8.33%
1 / 12
50.00% covered (danger)
50.00%
1 / 2
5.08
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __invoke
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2declare(strict_types=1);
3
4namespace App\Controller\Contracts;
5
6use App\Controller\BaseController;
7use App\Entity\Contract;
8use App\Service\ContractTemplateHelper;
9use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
10use Knp\Snappy\Pdf;
11use Symfony\Component\Clock\ClockInterface;
12use Symfony\Component\Routing\Attribute\Route;
13use Symfony\Component\Security\Http\Attribute\IsGranted;
14
15#[IsGranted('ROLE_ADMIN')]
16#[Route(path: '/contracts/generate/{id}', name: 'contracts_generate', requirements: ['id' => '\d+',], methods: ['GET'])]
17class Generate extends BaseController
18{
19    public function __construct(
20        private readonly Pdf $pdf,
21        private readonly ContractTemplateHelper $templateHelper,
22        private readonly ClockInterface $clock,
23    ) {}
24
25    public function __invoke(Contract $contract): PdfResponse
26    {
27        return new PdfResponse(
28            $this->pdf->getOutputFromHtml(
29                $this->templateHelper->replaceContent($contract),
30                ['encoding' => 'utf-8']
31            ),
32            sprintf(
33                'contrato-local-%d-%s.pdf',
34                $contract->getStoreNumber(),
35                $this->clock->now()->format('Y-m-d')
36            )
37        );
38    }
39}