src/Service/DimensaoDeBuscaGestorService.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Cliente\Dimensao;
  4. use App\Helper\ColorHelper;
  5. use App\Repository\Cliente\Dados\EvsRepository;
  6. use App\Repository\Cliente\Dados\GpsRepository;
  7. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. class DimensaoDeBuscaGestorService
  9. {
  10.     private $evsRepository;
  11.     private $gpsRepository;
  12.     private $session;
  13.     private $tipo;
  14.     public function __construct(
  15.         EvsRepository $evsRepository,
  16.         GpsRepository $gpsRepository,
  17.         SessionInterface $session
  18.     ) {
  19.         $this->evsRepository $evsRepository;
  20.         $this->gpsRepository $gpsRepository;
  21.         $this->session $session;
  22.     }
  23.     public function execute(Dimensao $dimensao$tipo 'EVS'): array
  24.     {
  25.         $this->tipo $tipo;
  26.         $dadosDaDimensao = [];
  27.         $permissao_gestor $this->session->get('gestor_permissoes');
  28.         switch ($dimensao->getDimensao()) {
  29.             case Dimensao::POR_ESPECIALIDADE:
  30.                 if ('GPS' === $tipo) {
  31.                     $dadosDaDimensao $this->gpsRepository->buscarPerformanceDeAvaliadosPorEspecialidade(
  32.                         $dimensao->getPrograma(),
  33.                         $dimensao->getPeriodo(),
  34.                         $dimensao->getIdBusca(),
  35.                         $permissao_gestor['where'] ?? '',
  36.                         $dimensao->getIdFiltro() ?? 0
  37.                     );
  38.                 } else {
  39.                     $dadosDaDimensao $this->evsRepository->buscarPerformanceDeAvaliadosPorEspecialidade(
  40.                         $dimensao->getPrograma(),
  41.                         $dimensao->getPeriodo(),
  42.                         $dimensao->getIdBusca(),
  43.                         $permissao_gestor['where'] ?? '',
  44.                         $dimensao->getIdFiltro() ?? 0
  45.                     );
  46.                 }
  47.                 $dadosDaDimensao $this->defineColorPoint($dadosDaDimensao);
  48.                 if ('GPS' === $tipo) {
  49.                     $especialidade $this->gpsRepository->buscarPerformanceDaEspecialidade(
  50.                         $dimensao->getPrograma(),
  51.                         $dimensao->getPeriodo(),
  52.                         $dimensao->getIdBusca(),
  53.                         $permissao_gestor['where'] ?? ''
  54.                     );
  55.                 } else {
  56.                     $especialidade $this->evsRepository->buscarPerformanceDaEspecialidade(
  57.                         $dimensao->getPrograma(),
  58.                         $dimensao->getPeriodo(),
  59.                         $dimensao->getIdBusca(),
  60.                         $permissao_gestor['where'] ?? ''
  61.                     );
  62.                 }
  63.                 $this->session->set('especialidade_selecionada'$especialidade);
  64.                 $this->session->remove('avaliado_selecionado');
  65.                 break;
  66.             case Dimensao::POR_AVALIADO:
  67.                 $dadosDaDimensao $this->evsRepository->buscarPerformancePorAvaliado(
  68.                     $dimensao->getPrograma(),
  69.                     $dimensao->getPeriodo(),
  70.                     $dimensao->getIdBusca()
  71.                 );
  72.                 $dadosDaDimensao $this->defineColorPoint($dadosDaDimensao);
  73.                 $this->session->set('avaliado_selecionado'$dadosDaDimensao[0]);
  74.                 break;
  75.             case Dimensao::PROGRAMA:
  76.                 if($tipo == 'GPS'){
  77.                     $dadosDaDimensao $this->gpsRepository->buscarPerformanceDeTodasEspecialidades(
  78.                         $dimensao->getPrograma(),
  79.                         $dimensao->getPeriodo(),
  80.                         $permissao_gestor['where'] ?? ''
  81.                     );
  82.                 } else {
  83.                     $dadosDaDimensao $this->evsRepository->buscarPerformanceDeTodasEspecialidades(
  84.                         $dimensao->getPrograma(),
  85.                         $dimensao->getPeriodo(),
  86.                         $permissao_gestor['where'] ?? ''
  87.                     );
  88.                 }
  89.                 $dadosDaDimensao $this->defineColorPoint($dadosDaDimensao$tipo);
  90.                 $this->session->remove('avaliado_selecionado');
  91.                 $this->session->remove('especialidade_selecionada');
  92.                 break;
  93.             case Dimensao::AVALIADO_DETALHES:
  94.                 $dadosDaDimensao $this->evsRepository->dispersaoQualidadeCustoProgramaPorAvaliado(
  95.                     $dimensao->getPrograma(),
  96.                     $dimensao->getPeriodo(),
  97.                     $dimensao->getIdBusca()
  98.                 );
  99.                 $dadosDaDimensao $this->defineColorPoint($dadosDaDimensao);
  100.                 break;
  101.             default:
  102.                 throw new InvalidDimensaoException('Dimensão invalida');
  103.                 break;
  104.         }
  105.         return $dadosDaDimensao;
  106.     }
  107.     public function defineColorPoint($dados): array
  108.     {
  109.         $dados array_map(function ($dado) {
  110.             $dado['color'] = ColorHelper::colorPoint(($this->tipo == 'EVS' $dado['evs'] : $dado['performance']));
  111.             $dado['color_grafico'] = ColorHelper::colorPointGrafico(($this->tipo == 'EVS' $dado['evs'] : $dado['performance']));
  112.             return $dado;
  113.         }, $dados);
  114.         return $dados;
  115.     }
  116. }
  117. class InvalidDimensaoException extends \Exception
  118. {
  119. }