<?php
namespace App\Controller\Bo;
use App\Entity\Authorization;
use App\Manager\Visit\VisitManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
class DashboardController extends AbstractController
{
public function __construct(
private Security $security,
private VisitManager $visitManager
)
{
}
#[Route('/', name: 'bo_dashboard')]
public function index(): Response
{
return $this->render('bo/dashboard/index.html.twig', [
]);
}
#[Route('/dashboard-visit', name: 'bo_dashboard_visit')]
public function dashBoardVisits(): JsonResponse
{
if (!$this->security->isGranted(Authorization::ROLE_VISIT_MANAGER)) {
throw new AccessDeniedHttpException();
}
$data = [];
$data['all'] = $this->visitManager->countAllVisits();
$data['toFinish'] = $this->visitManager->countVisitsToFinish();
$data['toArchive'] = $this->visitManager->countVisitsToArchive();
$data['archived'] = $this->visitManager->countVisitsArchived();
$resultsStatesThisMonth = $this->visitManager->countStatesThisMonth();
$expectedStatuses = ['todo', 'start', 'draft', 'terminate', 'archived'];
$labels = [
'todo' => 'À faire',
'start' => 'En cours',
'draft' => 'Brouillon',
'terminate' => 'Terminé',
'archived' => 'Archivé',
];
$visitsByStatus = array_fill_keys($expectedStatuses, 0);
foreach ($resultsStatesThisMonth as $row) {
$visitsByStatus[$row['state']] = $row['count'];
}
$data['statesThisMonth']['labels'] = array_map(fn($s) => $labels[$s], $expectedStatuses);
$data['statesThisMonth']['data'] = array_values($visitsByStatus);
$data['countBeginPerMonth'] = $this->visitManager->countBeginPerMonth();
return new JsonResponse($data);
}
}