<?php
declare(strict_types=1);
namespace App\Api\Controller\Admin;
use App\Api\DTO\Statistic\AbstractExemptionStatistic;
use App\Api\Service\StatisticManager;
use App\Api\Service\UserPermissionService;
use Sonata\AdminBundle\Controller\CRUDController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\User\UserInterface;
abstract class AbstractExemptionStatisticController extends CRUDController
{
public const EXEMPTION_TABLE_ROW_TITLES = ['', 'Nombre', 'Pourcentage'];
public const EXEMPTION_TABLE_COLUMN_TITLES = [
'En cours',
'Dispenses finalisées',
'Dispenses validées',
'Dispenses invalidées',
'Utilisation dispenses',
];
protected $statisticManager;
protected $userPermissionService;
public function __construct(StatisticManager $statisticManager, UserPermissionService $userPermissionService)
{
$this->statisticManager = $statisticManager;
$this->userPermissionService = $userPermissionService;
}
abstract protected function getLabelForCheckPermission(): string;
abstract protected function getExemptionStatistic(UserInterface $user): AbstractExemptionStatistic;
abstract protected function getTableColumnTitles(): array;
public function listAction(): Response
{
if (!$this->userPermissionService->checkPermissionForBackOffice($this->getLabelForCheckPermission())) {
throw new AccessDeniedException();
}
$exemptionStatistic = $this->getExemptionStatistic($this->getUser());
return $this->renderWithExtraParams('admin/statistic/statistic.html.twig', [
'data' => $this->statisticManager->transformExemptionStatisticForDisplay(
$exemptionStatistic,
$this->getTableColumnTitles()
),
'tableRowTitles' => self::EXEMPTION_TABLE_ROW_TITLES ,
]);
}
}