<?php
namespace App\Entity\Cliente;
class Dimensao
{
const PROGRAMA = 'programa';
const POR_AVALIADO = 'avaliado';
const POR_ESPECIALIDADE = 'especialidade';
const AVALIADO_DETALHES = 'detalhes';
const ORDEM_DIMENSOES = [
0 => self::PROGRAMA,
1 => self::POR_ESPECIALIDADE,
2 => self::POR_AVALIADO,
3 => self::AVALIADO_DETALHES,
];
const TEMPLATES = [
self::POR_AVALIADO => 'desempenho-por-avaliado.html.twig',
self::POR_ESPECIALIDADE => 'desempenho-por-especialidade.html.twig',
self::PROGRAMA => 'desempenho-por-programa.html.twig',
self::AVALIADO_DETALHES => 'avaliado-informacoes.html.twig',
];
/**
* Id utilizado para a busca de dados.
*
* @var int
*/
private $idBusca;
/**
* Id do avaliado para filtro
*
* @var int
*/
private $idFiltro;
/**
* @var array
*/
private $programa;
/**
* @var array
*/
private $periodo;
/**
* @var string
*/
private $dimensao;
private $titulo;
private $tituloGraficoDistruibuicaoEvs;
public function getPrograma(): ?array
{
return $this->programa;
}
public function setPrograma(?array $programa): self
{
$this->programa = $programa;
return $this;
}
public function getPeriodo(): ?array
{
return $this->periodo;
}
public function setPeriodo(?array $periodo): self
{
$this->periodo = $periodo;
return $this;
}
public function setDimensao(?string $dimensao): self
{
$this->dimensao = $dimensao;
return $this;
}
public function getDimensao(): ?string
{
return $this->dimensao;
}
public function getIdBusca(): ?int
{
return $this->idBusca;
}
public function setIdBusca(?int $idBusca): self
{
$this->idBusca = $idBusca;
return $this;
}
/**
* @param integer|null $idFiltro
* @return self
*/
public function setIdFiltro(?int $idFiltro): self
{
$this->idFiltro = $idFiltro;
return $this;
}
/**
* @return integer|null
*/
public function getIdFiltro(): ?int
{
return $this->idFiltro;
}
/**
* Get the value of titulo.
*/
public function getTitulo(): string
{
return $this->titulo;
}
/**
* Set the value of titulo.
*/
public function setTitulo(string $titulo): self
{
$this->titulo = $titulo;
return $this;
}
/**
* Define qual deverá ser a próxima dimensão
* acessada.
*/
public function proximaDimensao(): string
{
$ordem = self::ORDEM_DIMENSOES;
$key = array_search($this->getDimensao(), $ordem);
return array_key_exists(($key + 1), $ordem) ? $ordem[($key + 1)] : $ordem[0];
}
public function getTemplate(): string
{
$templates = self::TEMPLATES;
return $templates[$this->getDimensao()];
}
public static function anteriorDimensao(?string $dimensao): string
{
$ordem = self::ORDEM_DIMENSOES;
$key = array_search($dimensao, $ordem);
return array_key_exists(($key - 1), $ordem) ? $ordem[($key - 1)] : $ordem[0];
}
/**
* @param array|null $id_busca
* @param integer|null $id_avaliado
* @return array
*/
public static function defineFiltro(?array $id_busca, ?int $id_avaliado = NULL): array
{
$id_busca = implode(',', $id_busca);
$buscaAvaliado = ( $id_avaliado ) ? "AND id_avaliado = {$id_avaliado}" : NULL;
return $id_busca
? ["AND id_grupo IN ({$id_busca}) {$buscaAvaliado}", "AND id_grupo IN ({$id_busca}) {$buscaAvaliado}"]
: [];
}
/**
* @param string|null $dimensao
* @param array|null $id_filtro
* @param [type] $id_busca
* @return array
*/
public static function atualizaFiltro(?string $dimensao, ?array $id_filtro, $id_busca): array
{
$busca = [];
$id_filtro = $id_filtro ? implode(',', $id_filtro) : '';
if ( $dimensao ) {
switch ($dimensao) {
case self::PROGRAMA:
$busca[0] = $busca[1] = empty($id_filtro) ? '' : "AND id_grupo IN ({$id_filtro})";
break;
case self::POR_ESPECIALIDADE:
$busca[0] = "AND id_grupo = {$id_busca}";
$busca[0] .= empty($id_filtro) ? '' : " AND id_avaliado IN ({$id_filtro})";
$busca[1] = "AND id_grupo = {$id_busca}";
break;
}
}
return $busca;
}
/**
* Retorna a string do grafico de Distribuição do EVS com a dimensao.
*/
public static function processaTituloGraficoDistribuicaoEvs(string $dimensao, ?string $filtro): string
{
if ($dimensao) {
switch ($dimensao) {
case self::POR_ESPECIALIDADE:
$retorno = sprintf('DISTRIBUIÇÃO DOS AVALIADOS (%s) SEGUNDO O EVS', $filtro);
break;
default:
break;
}
}
return $retorno;
}
public static function getFiltroVariavel($dimensao): ?array
{
switch ($dimensao) {
case self::PROGRAMA:
$retorno['id'] = 'id_grupo';
$retorno['nome'] = 'nome_grupo';
break;
case self::POR_ESPECIALIDADE:
$retorno['id'] = 'id_avaliado';
$retorno['nome'] = 'nome_avaliado';
break;
default:
$retorno = null;
break;
}
return $retorno;
}
public function setTituloGraficoDistribuicaoEvs($tituloGraficoDistruibuicaoEvs): self
{
$this->tituloGraficoDistruibuicaoEvs = $tituloGraficoDistruibuicaoEvs;
return $this;
}
public function getTituloGraficoDistribuicaoEvs(): string
{
return $this->tituloGraficoDistruibuicaoEvs;
}
}