src/Controller/Visao/GPS/Avaliado/Componentes/PerformanceAvaliadoController.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Visao\GPS\Avaliado\Componentes;
  3. use App\Controller\Componentes\ComponenteAbstract;
  4. use App\Helper\DateHelper;
  5. use App\Repository\Cliente\Dados\CalculoRepository;
  6. use App\Repository\Cliente\Dados\GpsRepository;
  7. use App\Repository\Cliente\Modelagem\AvaliadoRepository;
  8. use App\Repository\Cliente\Modelagem\GrupoRepository;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. /**
  13.  * Route("gps/avaliado/performance-avaliado").
  14.  */
  15. class PerformanceAvaliadoController extends ComponenteAbstract
  16. {
  17.     const TEMPLATEBASE 'visao/gps/avaliado/componentes/';
  18.     public $jsFiles = ['avaliado/performanceAvaliado.js'];
  19.     protected $paginator;
  20.     private $calculo;
  21.     private $avaliado;
  22.     private $grupo;
  23.     public function __construct(CalculoRepository $calculoAvaliadoRepository $avaliadoGrupoRepository $grupo)
  24.     {
  25.         $this->calculo $calculo;
  26.         $this->avaliado $avaliado;
  27.         $this->grupo $grupo;
  28.     }
  29.     /**
  30.      * @Route("/", name="gps_visao_avaliado_performance")
  31.      */
  32.     public function index(Request $request): Response
  33.     {
  34.         
  35.         $data = [];
  36.         $nomeAvaliado '';
  37.         $nomeGrupo '';
  38.         $programa = [];
  39.         if ($this->hasAvaliado()) {
  40.             $avaliado $this->avaliado->getAvaliadoView($request->query->getInt('id_avaliado'$this->getIdAvaliado()));
  41.             $grupo $this->grupo->find($avaliado['id_grupo']);
  42.             $nomeAvaliado $avaliado['nome'];
  43.             $nomeGrupo $grupo->getTitulo();
  44.             $tipoPeriodo $this->getPeriodo()['from']['tipo'];
  45.             $programa $this->getPrograma();
  46.             $dados $this->calculo->performanceAnual($programa$this->getPeriodo(), $avaliado);
  47.             $params = [
  48.                 'tipoPeriodo' => $tipoPeriodo'dados' => $dados'filtroClick' => $tipoPeriodo,
  49.             ];
  50.             $data $this->processo($params);
  51.         }
  52.         return $this->render('avaliado/performance.html.twig', [
  53.             'dados' => json_encode($data), 'nome_avaliado' => $nomeAvaliado'nome_grupo' => $nomeGrupo'med' => $programa ? (isset(json_decode($programa['programa']['config'])->performance_tipo_media) ? 'MEDIANA ' 'MÉDIA ') : '''tamanhoModal' => $request->query->get('tamanhoModal''col-12'),
  54.         ]);
  55.     }
  56.     public function processo(array $dados): array
  57.     {
  58.         $data = [
  59.             'avaliado' => [], 'mediaAvaliado' => [], 'grupo' => [], 'mediaGrupo' => [],
  60.         ];
  61.         $periodos = [];
  62.         $categorias = [];
  63.         foreach ($dados['dados'] as $row) {
  64.             $categorias[] = $this->getDataFormatada($row['periodo'], true);
  65.             $periodos[] = $row['periodo'];
  66.             $data['avaliado'][] = (float) $row['avaliado_porcentagem'];
  67.             $data['mediaAvaliado'][] = (float) $row['media_avaliado_porcentagem'];
  68.             $data['grupo'][] = (float) $row['grupo_porcentagem'];
  69.             $data['mediaGrupo'][] = (float) $row['media_grupo_porcentagem'];
  70.         }
  71.         $data['filtroClick'] = $dados['filtroClick'];
  72.         return [
  73.             'data' => $data'periodos' => $periodos'categorias' => $categorias,
  74.         ];
  75.     }
  76.     
  77.     /**
  78.      * @param Request $request
  79.      * @return Response
  80.      */
  81.     public function abrirGrafico(Request $requestGpsRepository $gpsRepository): Response
  82.     {
  83.         $anual $request->query->get('anual');
  84.         $periodoWhere = [
  85.             'from' => $this->getPeriodo()['from'],
  86.             'to' => $this->getPeriodo()['to'],
  87.             'where' => " AND periodo->>'ano' = '" $this->getPeriodo()['from']['ano'] . "'",
  88.             'select' => $this->getPeriodo()['select']
  89.         ];
  90.         $dados $gpsRepository->graficoEvolucaoAvaliadoGps(
  91.             ['where' => "AND id_programa = {$this->getPrograma()['programa']['id_programa']} AND id_modelagem = {$this->getAvaliado()['id_modelagem']}"],
  92.             $periodoWhere,
  93.             [' AND id_grupo = ' $this->getAvaliado()['id_grupo'], ' AND id_avaliado = ' $this->getAvaliado()['id_avaliado']],
  94.             '',
  95.             $anual ?? false
  96.         );
  97.         $periodosAvaliados explode(", "$dados[0]['periodo']);
  98.         $periodosAvaliados implode("', '"$periodosAvaliados);
  99.         $periodosAvaliados str_replace(['['']'], ["('""')"], $periodosAvaliados);
  100.         $dadosGrupo $gpsRepository->graficoEvolucaoAvaliadoGps(
  101.             ['where' => "AND id_programa = {$this->getPrograma()['programa']['id_programa']} AND id_modelagem = {$this->getAvaliado()['id_modelagem']}"],
  102.             ['is_grupo' => true,'from' => $this->getPeriodo()['from'],'where' => " AND CONCAT(periodo->>'ano', periodo->>'periodo') in " $periodosAvaliados'select' => $this->getPeriodo()['select']],
  103.             [' AND id_grupo = ' $this->getAvaliado()['id_grupo']],
  104.             '',
  105.             $anual ?? false
  106.         );
  107.         $dados $this->organizarGrafico($dados);
  108.         $dadosGrupo $this->organizarGrafico($dadosGrupo);
  109.         
  110.         $mediaAvaliado $gpsRepository->mediaPerformance(
  111.             ['where' => "AND id_programa = {$this->getPrograma()['programa']['id_programa']} AND id_modelagem = {$this->getAvaliado()['id_modelagem']}"],
  112.             ['where' => " AND periodo->>'ano' = '" $this->getPeriodo()['from']['ano'] . "'"'select' => $this->getPeriodo()['select']],
  113.             [' AND id_grupo = ' $this->getAvaliado()['id_grupo'], ' AND id_avaliado = ' $this->getAvaliado()['id_avaliado']],
  114.             ''
  115.         );
  116.         $mediaGrupo $gpsRepository->mediaPerformance(
  117.             ['where' => "AND id_programa = {$this->getPrograma()['programa']['id_programa']} AND id_modelagem = {$this->getAvaliado()['id_modelagem']}"],
  118.             ['where' => " AND CONCAT(periodo->>'ano', periodo->>'periodo') in " $periodosAvaliados'select' => $this->getPeriodo()['select']],
  119.             [' AND id_grupo = ' $this->getAvaliado()['id_grupo']],
  120.             ''
  121.         );
  122.         $media = [
  123.             'avaliado'  => array_fill(0sizeof(json_decode($dados['performance'], true)), (float) $mediaAvaliado['media']),
  124.             'grupo'     => array_fill(0sizeof(json_decode($dados['performance'], true)), (float) $mediaGrupo['media'])
  125.         ];
  126.         return $this->render('grafico-informativo.html.twig', [
  127.             'dados_performance' => $dados['performance'],
  128.             'categorias' => $dados['categorias'],
  129.             'dados_performance_grupo' => $dadosGrupo['performance'],
  130.             'medias' => json_encode($media)
  131.         ]);
  132.     }
  133.     /**
  134.      * monta as informações para de acordo com que o grafico precisa.
  135.      */
  136.     public function organizarGrafico(array $dados): array
  137.     {
  138.         $retorno = [
  139.             'series' => '''categorias' => '',
  140.         ];
  141.         $legenda = [
  142.             'valor' => 'Performance',
  143.         ];
  144.         if (empty($dados) || !$dados) {
  145.             return $retorno;
  146.         }
  147.         if (is_array($dados)) {
  148.             $categorias $dados[0]['periodo'];
  149.             $info $dados[0];
  150.             foreach ($legenda as $key => $row) {
  151.                 $series[$key] = json_decode($info[$key], true);
  152.             }
  153.             $retorno = [
  154.                 'categorias' => DateHelper::converteStringArrayPeriodos($categoriastrue),
  155.                 'performance' => json_encode($series['valor'], true),
  156.             ];
  157.         }
  158.         return $retorno;
  159.     }
  160.     /**
  161.      * Função que carrega o gráfico de evolução de performance por Domínio
  162.      * 
  163.      * @Route("/grafico-performance-dominio")
  164.      */
  165.     public function evolucaoDominio(Request $requestGpsRepository $gpsRepository): Response
  166.     {
  167.         $anual $request->query->get('anual'false);
  168.         $dados $gpsRepository->graficoEvolucaoPerformanceDominio(
  169.             ['where' => "AND id_programa = {$this->getPrograma()['programa']['id_programa']} AND id_modelagem = {$this->getAvaliado()['id_modelagem']}"],
  170.             $this->getPeriodo(),
  171.             [' AND id_grupo = ' $this->getAvaliado()['id_grupo'], ' AND id_avaliado = ' $this->getAvaliado()['id_avaliado']],
  172.             '',
  173.             $anual
  174.         );
  175.         $periodos = [];
  176.         $series = [];
  177.         foreach(json_decode($dados[0]['performances'], true) as $dado) {
  178.             $periodos[] = $dado['periodo'];
  179.         }
  180.         foreach($dados as $dominio) {
  181.             foreach(json_decode($dominio['performances'], true) as $dado) {
  182.                 $series[$dominio['nome_dominio']][$dado['periodo']] = $dado['performance'];
  183.             }
  184.         }
  185.         return $this->render('grafico-performance-dominio.html.twig',[
  186.             'series' => json_encode($seriesJSON_UNESCAPED_UNICODE),
  187.             'categorias' => DateHelper::converteStringArrayPeriodos(json_encode($periodosJSON_UNESCAPED_UNICODE), true),
  188.             'anual' => $anual
  189.         ]);
  190.     }
  191. }