<?php
namespace App\Controller\Visao\Avaliado;
use App\Controller\Componentes\PeriodoController;
use App\Controller\Customs\Custom2IMController;
use App\Entity\Cliente\Privilegios\Avaliacao;
use App\Helper\PeriodoHelper;
use App\Repository\Cliente\Acesso\UsuarioRepository;
use App\Repository\Cliente\Comunicacao\ConversaRepository;
use App\Repository\Cliente\Comunicacao\MensagemAvaliacaoRepository;
use App\Repository\Cliente\Dados\EvsRepository;
use App\Repository\Cliente\Fornecidos\DadosEnviadosRepository;
use App\Repository\Cliente\Fornecidos\SolicitacaoRepository;
use App\Repository\Cliente\Privilegios\AvaliacaoRepository;
use App\Repository\Painel\VisaoRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\RouterInterface;
use App\Repository\Cliente\Privilegios\ModelagemRepository;
use App\Helper\DateHelper;
/**
* @Route("/visao-avaliado")
*
* Controller central para a visão de Avaliado dentro do sistema
*/
class AvaliadoController extends Custom2IMController
{
const TEMPLATEBASE = 'visao/avaliado/';
protected $componentes = [];
protected $visao = 'avaliado';
protected $rotas = ['avaliado_fechamento_dashboard', 'avaliado_privilegio_dashboard', 'relacionamento_dashboard'];
/**
* @var EvsRepository
*/
protected $evsRepository;
/**
* @var DadosEnviadosRepository
*/
protected $dadosEnviadosRepo;
/**
* @var SolicitacaoRepository
*/
protected $solicitacaoRepo;
/**
* @var PeriodoHelper
*/
protected $periodoHelper;
/**
* @var MensagemAvaliacaoRepository
*/
protected $mensagemAvaliacaoRepository;
/**
* @param RequestStack $requestStack
* @param EvsRepository $evsRepository
*/
public function __construct(
RequestStack $requestStack,
EvsRepository $evsRepository,
DadosEnviadosRepository $dadosEnviadosRepository,
SolicitacaoRepository $solicitacaoRepository,
PeriodoHelper $periodoHelper
, MensagemAvaliacaoRepository $mensagemAvaliacaoRepository
){
$this->evsRepository = $evsRepository;
$this->dadosEnviadosRepo = $dadosEnviadosRepository;
$this->solicitacaoRepo = $solicitacaoRepository;
$this->periodoHelper = $periodoHelper;
$sess = $requestStack->getCurrentRequest()->getSession();
$this->mensagemAvaliacaoRepository = $mensagemAvaliacaoRepository;
// nesta condicao precisa refazer a sessao do avaliado para setar uma única modelagem
// Quando o avaliado loga o array é formado por chave numerada (fechtAllAssociative)
// Daqui em diante para dashboard/indicador/detalhes sera usado array puro
if ( $sess->has('modelagem') AND $sess->has('periodo') AND isset($sess->get('avaliado')[0]) ) {
$idModelagem = $sess->get('modelagem')->getIdModelagem();
$sess->set('avaliado', current(array_filter($sess->get('avaliado'), function($row) use($idModelagem) {
return $row['id_modelagem'] === $idModelagem; }
)));
}
unset($sess);
}
/**
* @Route("/dashboard", name="visao_avaliado_dashboard")
*
* @param VisaoRepository $visaoRepository
* @param RouterInterface $router
* @return Response
*/
public function index(VisaoRepository $visaoRepository, RouterInterface $router, ConversaRepository $conversaRepository, Request $request) :Response
{
if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
return $this->redirectToRoute('gps_visao_avaliado_dashboard');
}
// a chave http_referer vem do GestorController::redirectAvaliadoDashboard
// usada no click da dimensao especialidade no nome do avaliado
// neste caso, eh o comportamento normal quando acesso for direto pelo avaliado
if ( $this->hasAvaliado() AND !array_key_exists('http_referer', $this->getAvaliado()) ) {
if ( $this->hasModelagem() AND $this->hasPeriodo() ) {
$possuiProducao = $this->evsRepository->possuiProducao($this->getAvaliado(), $this->getPeriodo());
if ( !$possuiProducao ) {
return $this->render('sem-producao.html.twig', []);
}
// quando avaliado
// ultimo mes de producao
if ( 'ROLE_AVALIADO' === $this->getUser()->getPerfil()->getRole() ) {
$sessAvaliado = $this->getAvaliado();
$periodoProducao = current(explode(',', $possuiProducao));
$sessAvaliado['periodo'] = $periodoProducao;
$this->getSession()->set('avaliado', $sessAvaliado);
}
}
$this->setarSessoesVisao(
'Avaliado'
,false
,$this->isGranted('ROLE_GESTOR') ? true : false
,$this->hasPeriodo() && $this->hasAvaliado() ? '' : 'no-periodo'
,$this->getCurrentRoute()
);
$visaoObj = $visaoRepository->findOneBy(['slug' => $this->visao]);
$valida = $this->testaPermissoes(
($visaoObj ? $visaoObj->getIdVisao() : 0)
,$this->getUser()->getPerfil()->getRota_default()
,$router, $visaoRepository
);
if ( $valida ) {
return $valida;
}
$this->getSession()->set('tela-anterior', $this->generateUrl('visao_avaliado_dashboard'));
$this->getSession()->remove('telas');
}
$dadosGraficoEvolucao = [];
$evsAnual = '-';
$solicitacoes = [];
$dadosEnviados = [];
if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
$trimestre = $this->getTrimestreByPeriodo();
if($this->dadosEnviadosRepo->checkFornecidos()['exists']) {
$solicitacoes = $this->solicitacaoRepo->findDocumentosByEspecialidade($this->getAvaliado()['id_grupo']);
$dadosEnviados = $this->dadosEnviadosRepo->getDadosEnviadosByAvaliado($this->getAvaliado()['id_avaliado']);
foreach ($solicitacoes AS $keySolicitacao => $solicitacao) {
foreach ($dadosEnviados AS $dado) {
if ( $dado['id_solicitacao'] === $solicitacao['id_solicitacao'] ) {
unset($solicitacoes[$keySolicitacao]);
}
}
}
}
$dadosGraficoEvolucao = $this->evsRepository->evolucaoQualidadeCustoEVS($this->getAvaliado(), (int) $this->getPeriodo()['to']['ano']);
$evsAnual = $this->evsRepository->avaliadoEVSAnual($this->getAvaliado())['valor'];
$periodos = [];
$periodoInicial = $periodoFinal = (int) $this->getPeriodo()['to']['ano'].$this->getPeriodo()['to']['periodo'];
array_push($periodos, (int) $periodoFinal);
while (sizeof($periodos) < 3) {
$periodoInicial = $this->periodoHelper->subtrairMes($periodoInicial);
array_push($periodos,$periodoInicial);
}
sort($periodos);
$valorConsultaBase = 74;
if($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_dracena_fesp') {
$valorConsultaBase = 115;
}
if($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_taquari_prod') {
$avaliadoPBV = $this->evsRepository->findValorPbvVariavel((int) $this->getPeriodo()['to']['ano'].$this->getPeriodo()['to']['periodo'], $this->getModelagem()->getIdModelagem(), $this->getAvaliado()['id_avaliado']);
} elseif($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_saltoitu_fesp') {
$dataRetroage = DateHelper::retroagir($this->getPeriodo()['from']['ano'].$this->getPeriodo()['from']['periodo'], 2);
$rangeTrimestres2 = [
'1º tri ' . $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '01',$this->getPeriodo()['to']['ano'] . '03'],
'2º tri ' . $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '04',$this->getPeriodo()['to']['ano'] . '06'],
'3º tri ' . $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '07',$this->getPeriodo()['to']['ano'] . '09'],
'4º tri ' . $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '10',$this->getPeriodo()['to']['ano'] . '12'],
];
$periodo = [
'de' => $rangeTrimestres2[$trimestre][0]
, 'ate' => $rangeTrimestres2[$trimestre][1]
];
$trimestres = [
'1º tri ' . $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '01',
'2º tri ' . $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '02',
'3º tri ' . $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '03',
'4º tri ' . $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '04'
];
$avaliadoPBV = $this->evsRepository->findPbvSaltoItu($periodo, $this->getModelagem()->getIdModelagem(), $this->getAvaliado()['id_avaliado'], $this->getAvaliado()['id_grupo'], $trimestre, $trimestres[$trimestre], $this->getPeriodo()['from']['ano'].$this->getPeriodo()['from']['periodo']);
} else {
$avaliadoPBV = $this->evsRepository->findEvsTrimestralAvaliadosByModelagem($periodos, $this->getModelagem()->getIdModelagem(), $this->getAvaliado()['id_avaliado'], $valorConsultaBase);
}
}
$user_id = $this->getUser()->getId_usuario();
$contador_nao_lidos = $conversaRepository->contaMensagensNãoLidas($user_id);
if ($this->hasAvaliado() && $this->hasPeriodo()) {
$aceiteAvaliacao = $this->mensagemAvaliacaoRepository->findAceite($this->getAvaliado());
}
$rangeTrimestres = [
'1º tri ' . $this->getPeriodo()['to']['ano'] => 'Jan/'.$this->getPeriodo()['to']['ano'].', Fev/'.$this->getPeriodo()['to']['ano'].', Mar/' . $this->getPeriodo()['to']['ano'],
'2º tri ' . $this->getPeriodo()['to']['ano'] => 'Abr/'.$this->getPeriodo()['to']['ano'].', Mai/'.$this->getPeriodo()['to']['ano'].', Jun/' . $this->getPeriodo()['to']['ano'],
'3º tri ' . $this->getPeriodo()['to']['ano'] => 'Jul/'.$this->getPeriodo()['to']['ano'].', Ago/'.$this->getPeriodo()['to']['ano'].', Set/' . $this->getPeriodo()['to']['ano'],
'4º tri ' . $this->getPeriodo()['to']['ano'] => 'Out/'.$this->getPeriodo()['to']['ano'].', Nov/'.$this->getPeriodo()['to']['ano'].', Dez/' . $this->getPeriodo()['to']['ano']
];
return $this->render('base.html.twig', [
'grafico_evolucao_evs' => $dadosGraficoEvolucao,
'contador_nao_lidos' => $contador_nao_lidos,
'evs_anual' => $evsAnual,
'dadosEnviados' => $dadosEnviados,
'solicitacoes' => $solicitacoes,
'avaliadoPBV' => $avaliadoPBV ?? null,
'aceite_avaliacao' => $aceiteAvaliacao ?? null,
'rangeTrimestre' => $rangeTrimestres[$trimestre ?? '1º tri ' . $this->getPeriodo()['to']['ano']]
]);
}
private function getTrimestreByPeriodo()
{
$periodo = $this->getPeriodo()['to'];
if(in_array($periodo['periodo'], ['01','02','03'])) {
return '1º tri ' . $periodo['ano'];
} else if(in_array($periodo['periodo'], ['04','05','06'])) {
return '2º tri ' . $periodo['ano'];
} else if(in_array($periodo['periodo'], ['07','08','09'])) {
return '3º tri ' . $periodo['ano'];
} else {
return '4º tri ' . $periodo['ano'];
}
}
private function getPeriodoByTrimestre()
{
$periodo = $this->getPeriodo()['to'];
if(in_array($periodo['periodo'], ['01','02','03'])) {
return ['de' => $periodo['ano'] . '01', 'ate' => $periodo['ano'] . '03'];
} else if(in_array($periodo['periodo'], ['04','05','06'])) {
return ['de' => $periodo['ano'] . '04', 'ate' => $periodo['ano'] . '06'];
} else if(in_array($periodo['periodo'], ['07','08','09'])) {
return ['de' => $periodo['ano'] . '07', 'ate' => $periodo['ano'] . '09'];
} else {
return ['de' => $periodo['ano'] . '10', 'ate' => $periodo['ano'] . '12'];
}
}
/**
* @Route("/dashboard-anual/{ano}", name="visao_avaliado_dashboard_anual", defaults={"ano"=null}, requirements={"ano"="\d+"} )
*
* @param EvsRepository $evs
* @param integer|null $ano
* @return Response
*/
public function anual(Request $request, EvsRepository $evs, ConversaRepository $conversaRepository, PeriodoController $periodoController, ?int $ano) :Response
{
if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
return $this->redirectToRoute('gps_visao_avaliado_dashboard_anual');
}
$user_id = $this->getUser()->getId_usuario();
$contador_nao_lidos = $conversaRepository->contaMensagensNãoLidas($user_id);
if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
// setters
$anosComAvaliado = $evs->avaliadoAnosComAvaliacao($this->getAvaliado());
$anos = array_keys($anosComAvaliado);
$ano = (int) ($ano ?? $this->getPeriodo()['from']['ano']);
$ano = in_array($ano, $anos) ? $ano : current($anos);
// refaz o periodo da sessao do avaliado
// nova sessao de periodo
$periodoController->processa($request, [
'from' => join('|',['Mensal',$ano, $anosComAvaliado[$ano]['min_mes']])
,'to' => join('|',['Mensal',$ano, $anosComAvaliado[$ano]['min_mes']])
,'referer' => 'avaliado'
]);
unset($anosComAvaliado);
// grafico
$dadosGraficoEvolucao = $this->evsRepository->evolucaoQualidadeCustoEVS($this->getAvaliado(), $ano);
return $this->render('base.anual.html.twig',[
'var_anos' => $anos
,'contador_nao_lidos' => $contador_nao_lidos
,'var_ano_atual' => $ano
,'var_grafico_evolucao_evs' => $dadosGraficoEvolucao
]);
}
return $this->render('base.anual.html.twig',[
'contador_nao_lidos' => $contador_nao_lidos
]);
}
/**
* @Route("/dashboard-anual-pbv/{ano}", name="visao_avaliado_dashboard_anual_pbv", defaults={"ano"=null}, requirements={"ano"="\d+"} )
*
* @param EvsRepository $evs
* @param integer|null $ano
* @return Response
*/
public function anualPbv(Request $request, EvsRepository $evs, ConversaRepository $conversaRepository, PeriodoController $periodoController, ?int $ano) :Response
{
if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
return $this->redirectToRoute('gps_visao_avaliado_dashboard_anual');
}
$user_id = $this->getUser()->getId_usuario();
$contador_nao_lidos = $conversaRepository->contaMensagensNãoLidas($user_id);
if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
// setters
$anosComAvaliado = $evs->avaliadoAnosComAvaliacao($this->getAvaliado());
$anos = array_keys($anosComAvaliado);
$ano = (int) ($ano ?? $this->getPeriodo()['from']['ano']);
$ano = in_array($ano, $anos) ? $ano : current($anos);
// refaz o periodo da sessao do avaliado
// nova sessao de periodo
$periodoController->processa($request, [
'from' => join('|',['Mensal',$ano, $anosComAvaliado[$ano]['min_mes']])
,'to' => join('|',['Mensal',$ano, $anosComAvaliado[$ano]['min_mes']])
,'referer' => 'avaliado'
]);
unset($anosComAvaliado);
// grafico
$dadosGraficoEvolucao = $this->evsRepository->evolucaoPBV($this->getAvaliado(), $ano);
return $this->render('base.anual.pbv.html.twig',[
'var_anos' => $anos
,'contador_nao_lidos' => $contador_nao_lidos
,'var_ano_atual' => $ano
,'var_grafico_evolucao_evs' => $dadosGraficoEvolucao
]);
}
return $this->render('base.anual.pbv.html.twig',[
'contador_nao_lidos' => $contador_nao_lidos
]);
}
/**
* @Route("/dashboard-anual-pbv-salto-itu/{ano}", name="visao_avaliado_dashboard_anual_salto_itu_pbv", defaults={"ano"=null}, requirements={"ano"="\d+"} )
*
* @param EvsRepository $evs
* @param integer|null $ano
* @return Response
*/
public function anualPbvSaltoItu(Request $request, EvsRepository $evs, ConversaRepository $conversaRepository, PeriodoController $periodoController, ?int $ano) :Response
{
if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
return $this->redirectToRoute('gps_visao_avaliado_dashboard_anual');
}
$user_id = $this->getUser()->getId_usuario();
$contador_nao_lidos = $conversaRepository->contaMensagensNãoLidas($user_id);
if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
if($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_saltoitu_fesp') {
$trimestre = $request->query->get('trimestre', $this->getTrimestreByPeriodo());
$periodo = $this->getPeriodoByTrimestre();
$trimestres = [
'1º tri 2025' => '202501',
'2º tri 2025' => '202502',
'3º tri 2025' => '202503',
'4º tri 2025' => '202504'
];
$avaliadoPBV = $this->evsRepository->findPbvSaltoItu($periodo, $this->getModelagem()->getIdModelagem(), $this->getAvaliado()['id_avaliado'], $this->getAvaliado()['id_grupo'], $trimestre, $trimestres[$trimestre], $this->getPeriodo()['from']['ano'].$this->getPeriodo()['from']['periodo']);
}
$anos = [
'1º tri 2025' => [
'de' => '202501'
, 'ate' => '202503'
],
'2º tri 2025' => [
'de' => '202504'
, 'ate' => '202506'
]/*,
'3º tri 2025' => [
'de' => '202507'
, 'ate' => '202509'
],
'4º tri 2025' => [
'de' => '202510'
, 'ate' => '202512'
]/** */
];
$rangeTrimestres = [
'1º tri 2025' => 'Jan/2025, Fev/2025, Mar/2025',
'2º tri 2025' => 'Abr/2025, Mai/2025, Jun/2025',
'3º tri 2025' => 'Jul/2025, Ago/2025, Set/2025',
'4º tri 2025' => 'Out/2025, Nov/2025, Dez/2025'
];
return $this->render('base.anual.pbv.saltoitu.html.twig',[
'var_anos' => $anos
, 'contador_nao_lidos' => $contador_nao_lidos
, 'var_ano_atual' => $ano
, 'avaliadoPBV' => $avaliadoPBV ?? null
, 'trimestre' => $trimestre
, 'rangeTrimestre' => $rangeTrimestres[$trimestre]
]);
}
return $this->render('base.anual.pbv.html.twig',[
'contador_nao_lidos' => $contador_nao_lidos
]);
}
/**
* @Route("/sem-producao", name="sem_producao")
*
* @return Response
*/
public function semProducao() :Response
{
return $this->render('sem-producao.html.twig', []);
}
/**
* @Route("/privilegios", name="visao_avaliado_dashboard_privilegios")
*
* @return Response
*/
public function privilegios(Request $request, ConversaRepository $conversaRepository, ModelagemRepository $modelagemRepository, AvaliacaoRepository $avaliacaoRepository, UsuarioRepository $usuarioRepository) :Response
{
if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
return $this->redirectToRoute('gps_visao_avaliado_dashboard');
}
$contador_nao_lidos = $conversaRepository->contaMensagensNãoLidas($this->getUser()->getId_usuario());
if (!$this->hasAvaliado() || !$this->hasPeriodo()) {
return $this->render('base.privilegios.html.twig',[
'contador_nao_lidos' => $contador_nao_lidos
]);
}
$avaliacao = $avaliacaoRepository->findOneBy(['id_avaliado' => $this->getAvaliado()['id_avaliado']]);
$modelagem = $modelagemRepository->buscaModelagem($this->getAvaliado()['id_grupo']);
$indicadores = !is_null($avaliacao) ? $avaliacao->getIndicadores() : json_decode($modelagem['indicadores'], TRUE);
$indicadoresAdicionais = !is_null($avaliacao) ? $avaliacao->getIndicadoresAdicionais() ?? [] : [];
$rodape = $avaliacaoRepository->rodape($this->getAvaliado()['id_avaliado']);
$rodapeAprovador = $avaliacaoRepository->rodapeAprovador($this->getAvaliado()['id_avaliado']);
if ($rodape) {
$rodape['nome_usuario_avaliador'] = $usuarioRepository->findOneBy(['id_usuario' => $rodape['id_usuario_avaliador']])->getNome();
}
if ($rodapeAprovador) {
$rodapeAprovador['nome_usuario_aprovador'] = $usuarioRepository->findOneBy(['id_usuario' => $rodapeAprovador['id_usuario_aprovador']])->getNome();
}
if ($request->isMethod('POST')) {
$privilegios = $request->request->get('privilegios', []);
$adicionais = $request->request->get('adicionais', []);
$action = $request->request->get('action');
if (is_countable($indicadores) && sizeof($indicadores) > 0) {
foreach($indicadores[0]['indicadores'] as $key => $indicador) {
$indicadores[0]['indicadores'][$key]['resposta'] = $privilegios[$indicador['id_indicador']] ?? 0;
$indicadores[0]['indicadores'][$key]['evidencias'] = [];
}
}
foreach($indicadoresAdicionais as $key => $indicador) {
$indicadoresAdicionais[$key]['resposta'] = $adicionais[$key] ?? 0;
}
if (is_null($avaliacao)) {
$avaliacao = new Avaliacao();
$avaliacao->setIdModelagem($modelagem['id_modelagem'] ?? 0)
->setIdAvaliado($this->getAvaliado()['id_avaliado'])
;
}
$avaliacao->setIndicadores($indicadores)
->setIndicadoresAdicionais(sizeof($indicadoresAdicionais) > 0 ? $indicadoresAdicionais : null)
->setIdUsuarioAvaliador($this->getUser()->getId_usuario())
->setDataAdd()
;
try {
$avaliacaoRepository->add($avaliacao, true);
} catch (\Throwable $th) {
$this->addFlash(
'error',
'Erro ao salvar os Privilégios do Avaliado! Tente novamente mais tarde.'
);
return $this->render('base.privilegios.html.twig',[
'contador_nao_lidos' => $contador_nao_lidos
, 'modelagem' => $modelagem
, 'indicadores' => $indicadores[0]['indicadores']
, 'indicadores_adicionais' => $indicadoresAdicionais
, 'rodape' => $rodape
, 'rodapeAprovador' => $rodapeAprovador
]);
}
if($action == 'aprovar') {
$aval = $avaliacaoRepository->rodape($this->getAvaliado()['id_avaliado']);
$avaliacaoRepository->updateAprovador($aval['id_avaliacao_log'], $this->getUser()->getId_usuario());
}
$this->addFlash(
'success',
'Os Privilégios do Avaliado foram salvos com sucesso!'
);
return $this->redirectToRoute('visao_avaliado_dashboard_privilegios');
}
return $this->render('base.privilegios.html.twig',[
'contador_nao_lidos' => $contador_nao_lidos
, 'modelagem' => $modelagem
, 'indicadores' => $indicadores[0]['indicadores'] ?? []
, 'indicadores_adicionais' => $indicadoresAdicionais
, 'rodape' => $rodape
, 'rodapeAprovador' => $rodapeAprovador
]);
}
/**
* @Route("/privilegios/adicionais", name="visao_avaliado_dashboard_privilegios_adicionais")
*/
public function privilegiosAdicionais(Request $request, ModelagemRepository $modelagemRepository, AvaliacaoRepository $avaliacaoRepository): Response
{
if ($request->isMethod('POST')) {
$avaliacao = $avaliacaoRepository->findOneBy(['id_avaliado' => $this->getAvaliado()['id_avaliado']]);
$modelagem = $modelagemRepository->buscaModelagem($this->getAvaliado()['id_grupo']);
$indicadores = !is_null($avaliacao) ? $avaliacao->getIndicadores() : json_decode($modelagem['indicadores'], TRUE);
$indicadoresAdicionais = !is_null($avaliacao) ? $avaliacao->getIndicadoresAdicionais() ?? [] : [];
$indicadorAdicional = [
'nome' => $request->request->get('titulo'),
'resposta' => $request->request->get('resposta', 0),
'evidencias' => [],
'valor_padrao' => "0",
'respostaPadrao' => [
[
"chave" => "0",
"valor" => "Não",
"permite_upload" => false
],
[
"chave" => "1",
"valor" => "Sim",
"permite_upload" => false
]
],
'formato_resposta' => "2",
'permite_upload_texto' => false
];
array_push($indicadoresAdicionais, $indicadorAdicional);
if (is_null($avaliacao)) {
$avaliacao = new Avaliacao();
$avaliacao->setIdAvaliado($this->getAvaliado()['id_avaliado'])
->setIdModelagem($modelagem['id_modelagem'] ?? 0)
;
}
if (is_countable($indicadores) && sizeof($indicadores) > 0) {
foreach($indicadores[0]['indicadores'] as $key => $indicador) {
$indicadores[0]['indicadores'][$key]['resposta'] = $indicador['valor_padrao'];
$indicadores[0]['indicadores'][$key]['evidencias'] = [];
}
}
$avaliacao->setIndicadores($indicadores ?? [])
->setIndicadoresAdicionais($indicadoresAdicionais)
->setIdUsuarioAvaliador($this->getUser()->getId_usuario())
->setDataAdd()
;
try {
$avaliacaoRepository->add($avaliacao, true);
} catch (\Throwable $th) {
$this->addFlash(
'error',
'Erro ao adicionar Privilégio Adicional! Tente novamente mais tarde.'
);
return $this->redirectToRoute('visao_avaliado_dashboard_privilegios');
}
$this->addFlash(
'success',
'Privilégio Adicional do Avaliado salvo com sucesso!'
);
return $this->redirectToRoute('visao_avaliado_dashboard_privilegios');
}
return $this->render('componentes/modal-privilegios-adicionais.html.twig');
}
}