src/Domain/Reporting/Controller/DashboardController.php line 74

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the MADIS - RGPD Management application.
  4.  *
  5.  * @copyright Copyright (c) 2018-2019 Soluris - Solutions Numériques Territoriales Innovantes
  6.  * @author Donovan Bourlard <donovan@awkan.fr>
  7.  *
  8.  * This program is free software: you can redistribute it and/or modify
  9.  * it under the terms of the GNU Affero General Public License as published by
  10.  * the Free Software Foundation, either version 3 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU Affero General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Affero General Public License
  19.  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  20.  */
  21. declare(strict_types=1);
  22. namespace App\Domain\Reporting\Controller;
  23. use App\Application\Interfaces\CollectivityRelated;
  24. use App\Domain\Registry\Repository\Mesurement;
  25. use App\Domain\Reporting\Handler\ExportCsvHandler;
  26. use App\Domain\Reporting\Handler\MetricsHandler;
  27. use App\Infrastructure\ORM\Maturity\Repository\Referentiel;
  28. use App\Infrastructure\ORM\Maturity\Repository\Survey;
  29. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  30. use Symfony\Component\HttpFoundation\Request;
  31. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  32. class DashboardController extends AbstractController
  33. {
  34.     /**
  35.      * @var MetricsHandler
  36.      */
  37.     private $metricsHandler;
  38.     /**
  39.      * @var ExportCsvHandler
  40.      */
  41.     private $exportCsvHandler;
  42.     private Mesurement $repository;
  43.     private Referentiel $referentielRepository;
  44.     private Survey $surveyRepository;
  45.     public function __construct(
  46.         MetricsHandler $metricsHandler,
  47.         ExportCsvHandler $exportCsvHandler,
  48.         Mesurement $repository,
  49.         Referentiel $referentielRepository,
  50.         Survey $surveyRepository
  51.     ) {
  52.         $this->repository            $repository;
  53.         $this->metricsHandler        $metricsHandler;
  54.         $this->exportCsvHandler      $exportCsvHandler;
  55.         $this->referentielRepository $referentielRepository;
  56.         $this->surveyRepository      $surveyRepository;
  57.     }
  58.     /**
  59.      * Get dashboard index page.
  60.      * Compute every metrics to display.
  61.      *
  62.      * @return \Symfony\Component\HttpFoundation\Response
  63.      */
  64.     public function indexAction(Request $request)
  65.     {
  66.         $metrics      $this->metricsHandler->getHandler();
  67.         $actions      = [];
  68.         $referentiels $this->referentielRepository->findAll();
  69.         if (!$this->isGranted('ROLE_REFERENT')) {
  70.             $user         $this->getUser();
  71.             $collectivity $user instanceof CollectivityRelated $user->getCollectivity() : null;
  72.             $actions      $this->repository->getPlanifiedActionsDashBoard($this->getParameter('APP_USER_DASHBOARD_ACTION_PLAN_LIMIT'), $collectivity);
  73.             $referentiels array_reduce(
  74.                 array_map(
  75.                     function (\App\Domain\Maturity\Model\Survey $survey) {
  76.                         return $survey->getReferentiel();
  77.                     }, $this->surveyRepository->findAllByCollectivity($collectivity, ['createdAt' => 'DESC'])
  78.                 ),
  79.                 function (array $result\App\Domain\Maturity\Model\Referentiel $referentiel) {
  80.                     if (!isset($result[$referentiel->getId()->toString()])) {
  81.                         $result[$referentiel->getId()->toString()] = $referentiel;
  82.                     }
  83.                     return $result;
  84.                 },
  85.                 []);
  86.             $referentiels array_values($referentiels);
  87.         }
  88.         $selectedRef $referentiels[0] ?? null;
  89.         if ($request->get('referentiel')) {
  90.             $selRefs array_values(array_filter($referentiels, function (\App\Domain\Maturity\Model\Referentiel $referentiel) use ($request) {
  91.                 return $referentiel->getId()->toString() === $request->get('referentiel');
  92.             }));
  93.             if (count($selRefs) > 0) {
  94.                 $selectedRef $selRefs[0];
  95.             }
  96.         }
  97.         return $this->render($metrics->getTemplateViewName(), [
  98.             'data'         => $metrics->getData($selectedRef),
  99.             'actions'      => $actions,
  100.             'referentiels' => $referentiels,
  101.             'selected_ref' => $selectedRef,
  102.         ]);
  103.     }
  104.     /**
  105.      * Generate CSV file for collectivity or treatment.
  106.      *
  107.      * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  108.      */
  109.     public function exportCsvAction(string $exportType)
  110.     {
  111.         if (!$this->isGranted('ROLE_REFERENT')) {
  112.             throw new AccessDeniedHttpException('You can\'t access to csv export');
  113.         }
  114.         return $this->exportCsvHandler->generateCsv($exportType);
  115.     }
  116. }