<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\Security;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Demand;
class DemandChartAction
{
private $security;
public function __construct(Security $security, ManagerRegistry $doctrine)
{
$this->security = $security;
$this->doctrine = $doctrine;
}
public function __invoke(): JsonResponse
{
$user = $this->security->getUser();
$repository = $this->doctrine->getRepository(Demand::class);
if ($this->security->isGranted('ROLE_INSURED')) {
$insured = $user->getInsureds()->first()->getInsured();
}
$query = $repository->createQueryBuilder("d")
->select("d.status, count(d.id) as total")
->groupBy('d.status')
;
if ($this->security->isGranted('ROLE_INSURED')) {
$query = $query
->andWhere("d.insured = :insured")
->setParameter("insured", $insured)
;
}
$statuses = $query
->getQuery()
->getResult()
;
if ($this->security->isGranted('ROLE_INSURED')) {
$count = $repository->createQueryBuilder("d")
->select("count(d.id)")
->andWhere("d.insured = :insured")
->setParameter("insured", $insured)
->getQuery()
->getSingleScalarResult()
;
} else {
$count = $repository->count([]);
}
$labels = [];
$data = [];
foreach ($statuses as $status) {
$labels[] = $status["status"];
$data[] = $status["total"];
}
return new JsonResponse([
"count" => $count,
"labels" => $labels,
"data" => $data
]);
}
}