src/Controller/Visao/Avaliado/AvaliadoController.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Visao\Avaliado;
  3. use App\Controller\Componentes\PeriodoController;
  4. use App\Controller\Customs\Custom2IMController;
  5. use App\Entity\Cliente\Privilegios\Avaliacao;
  6. use App\Helper\PeriodoHelper;
  7. use App\Repository\Cliente\Acesso\UsuarioRepository;
  8. use App\Repository\Cliente\Comunicacao\ConversaRepository;
  9. use App\Repository\Cliente\Comunicacao\MensagemAvaliacaoRepository;
  10. use App\Repository\Cliente\Dados\EvsRepository;
  11. use App\Repository\Cliente\Fornecidos\DadosEnviadosRepository;
  12. use App\Repository\Cliente\Fornecidos\SolicitacaoRepository;
  13. use App\Repository\Cliente\Privilegios\AvaliacaoRepository;
  14. use App\Repository\Painel\VisaoRepository;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Routing\RouterInterface;
  20. use App\Repository\Cliente\Privilegios\ModelagemRepository;
  21. use App\Helper\DateHelper;
  22. /**
  23.  * @Route("/visao-avaliado")
  24.  *
  25.  * Controller central para a visão de Avaliado dentro do sistema
  26.  */
  27. class AvaliadoController extends Custom2IMController
  28. {
  29.     const TEMPLATEBASE 'visao/avaliado/';
  30.     protected $componentes = [];
  31.     protected $visao 'avaliado';
  32.     protected $rotas = ['avaliado_fechamento_dashboard''avaliado_privilegio_dashboard''relacionamento_dashboard'];
  33.     /**
  34.      * @var EvsRepository
  35.      */
  36.     protected $evsRepository;
  37.     /**
  38.      * @var DadosEnviadosRepository
  39.      */
  40.     protected $dadosEnviadosRepo;
  41.     /**
  42.      * @var SolicitacaoRepository
  43.      */
  44.     protected $solicitacaoRepo;
  45.     /**
  46.      * @var PeriodoHelper
  47.      */
  48.     protected $periodoHelper;
  49.     /**
  50.      * @var MensagemAvaliacaoRepository
  51.      */
  52.     protected $mensagemAvaliacaoRepository;
  53.     /**
  54.      * @param RequestStack $requestStack
  55.      * @param EvsRepository $evsRepository
  56.      */
  57.     public function __construct(
  58.         RequestStack $requestStack,
  59.         EvsRepository $evsRepository,
  60.         DadosEnviadosRepository $dadosEnviadosRepository,
  61.         SolicitacaoRepository $solicitacaoRepository,
  62.         PeriodoHelper $periodoHelper
  63.         MensagemAvaliacaoRepository $mensagemAvaliacaoRepository
  64.     ){
  65.         $this->evsRepository $evsRepository;
  66.         $this->dadosEnviadosRepo $dadosEnviadosRepository;
  67.         $this->solicitacaoRepo $solicitacaoRepository;
  68.         $this->periodoHelper $periodoHelper;
  69.         $sess $requestStack->getCurrentRequest()->getSession();
  70.         $this->mensagemAvaliacaoRepository $mensagemAvaliacaoRepository;
  71.         // nesta condicao precisa refazer a sessao do avaliado para setar uma única modelagem
  72.         // Quando o avaliado loga o array é formado por chave numerada (fechtAllAssociative)
  73.         // Daqui em diante para dashboard/indicador/detalhes sera usado array puro
  74.         if ( $sess->has('modelagem') AND $sess->has('periodo') AND isset($sess->get('avaliado')[0]) ) {
  75.             $idModelagem $sess->get('modelagem')->getIdModelagem();
  76.             $sess->set('avaliado'current(array_filter($sess->get('avaliado'), function($row) use($idModelagem) {
  77.                 return $row['id_modelagem'] === $idModelagem; }
  78.             )));
  79.         }
  80.         unset($sess);
  81.     }
  82.     /**
  83.      * @Route("/dashboard", name="visao_avaliado_dashboard")
  84.      *
  85.      * @param VisaoRepository $visaoRepository
  86.      * @param RouterInterface $router
  87.      * @return Response
  88.      */
  89.     public function index(VisaoRepository $visaoRepositoryRouterInterface $routerConversaRepository $conversaRepositoryRequest $request) :Response
  90.     {
  91.         if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
  92.             return $this->redirectToRoute('gps_visao_avaliado_dashboard');
  93.         }
  94.         // a chave http_referer vem do GestorController::redirectAvaliadoDashboard
  95.         // usada no click da dimensao especialidade no nome do avaliado
  96.         // neste caso, eh o comportamento normal quando acesso for direto pelo avaliado
  97.         if ( $this->hasAvaliado() AND !array_key_exists('http_referer'$this->getAvaliado()) ) {
  98.             if ( $this->hasModelagem() AND $this->hasPeriodo() ) {
  99.                 $possuiProducao $this->evsRepository->possuiProducao($this->getAvaliado(), $this->getPeriodo());
  100.                 if ( !$possuiProducao ) {
  101.                     return $this->render('sem-producao.html.twig', []);
  102.                 }
  103.                 // quando avaliado
  104.                 // ultimo mes de producao
  105.                 if ( 'ROLE_AVALIADO' === $this->getUser()->getPerfil()->getRole() ) {
  106.                     $sessAvaliado $this->getAvaliado();
  107.                     $periodoProducao current(explode(','$possuiProducao));
  108.                     $sessAvaliado['periodo'] = $periodoProducao;
  109.                     $this->getSession()->set('avaliado'$sessAvaliado);
  110.                 }
  111.             }
  112.             $this->setarSessoesVisao(
  113.                 'Avaliado'
  114.                 ,false
  115.                 ,$this->isGranted('ROLE_GESTOR') ? true false
  116.                 ,$this->hasPeriodo() && $this->hasAvaliado() ? '' 'no-periodo'
  117.                 ,$this->getCurrentRoute()
  118.             );
  119.             $visaoObj $visaoRepository->findOneBy(['slug' => $this->visao]);
  120.             $valida $this->testaPermissoes(
  121.                  ($visaoObj $visaoObj->getIdVisao() : 0)
  122.                 ,$this->getUser()->getPerfil()->getRota_default()
  123.                 ,$router$visaoRepository
  124.             );
  125.             if ( $valida ) {
  126.                 return $valida;
  127.             }
  128.             $this->getSession()->set('tela-anterior'$this->generateUrl('visao_avaliado_dashboard'));
  129.             $this->getSession()->remove('telas');
  130.         }
  131.         $dadosGraficoEvolucao = [];
  132.         $evsAnual '-';
  133.         $solicitacoes = [];
  134.         $dadosEnviados = [];
  135.         if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
  136.             $trimestre $this->getTrimestreByPeriodo();
  137.             if($this->dadosEnviadosRepo->checkFornecidos()['exists']) {
  138.                 $solicitacoes $this->solicitacaoRepo->findDocumentosByEspecialidade($this->getAvaliado()['id_grupo']);
  139.                 $dadosEnviados $this->dadosEnviadosRepo->getDadosEnviadosByAvaliado($this->getAvaliado()['id_avaliado']);
  140.                 foreach ($solicitacoes AS $keySolicitacao => $solicitacao) {
  141.                     foreach ($dadosEnviados AS $dado) {
  142.                         if ( $dado['id_solicitacao'] === $solicitacao['id_solicitacao'] ) {
  143.                             unset($solicitacoes[$keySolicitacao]);
  144.                         }
  145.                     }
  146.                 }
  147.             }
  148.             $dadosGraficoEvolucao $this->evsRepository->evolucaoQualidadeCustoEVS($this->getAvaliado(), (int) $this->getPeriodo()['to']['ano']);
  149.             $evsAnual $this->evsRepository->avaliadoEVSAnual($this->getAvaliado())['valor'];
  150.             $periodos = [];
  151.             $periodoInicial $periodoFinal = (int) $this->getPeriodo()['to']['ano'].$this->getPeriodo()['to']['periodo'];
  152.             array_push($periodos, (int) $periodoFinal);
  153.             while (sizeof($periodos) < 3) {
  154.                 $periodoInicial $this->periodoHelper->subtrairMes($periodoInicial);
  155.                 array_push($periodos,$periodoInicial);
  156.             }
  157.             sort($periodos);
  158.             $valorConsultaBase 74;
  159.             
  160.             if($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_dracena_fesp') {
  161.                 $valorConsultaBase 115;
  162.             }
  163.             if($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_taquari_prod') {
  164.                 $avaliadoPBV $this->evsRepository->findValorPbvVariavel((int) $this->getPeriodo()['to']['ano'].$this->getPeriodo()['to']['periodo'], $this->getModelagem()->getIdModelagem(), $this->getAvaliado()['id_avaliado']);
  165.             } elseif($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_saltoitu_fesp') {
  166.                 $dataRetroage DateHelper::retroagir($this->getPeriodo()['from']['ano'].$this->getPeriodo()['from']['periodo'], 2);
  167.                 $rangeTrimestres2 = [
  168.                     '1º tri ' $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '01',$this->getPeriodo()['to']['ano'] . '03'],
  169.                     '2º tri ' $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '04',$this->getPeriodo()['to']['ano'] . '06'],
  170.                     '3º tri ' $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '07',$this->getPeriodo()['to']['ano'] . '09'],
  171.                     '4º tri ' $this->getPeriodo()['to']['ano'] => [$this->getPeriodo()['to']['ano'] . '10',$this->getPeriodo()['to']['ano'] . '12'],
  172.                 ];
  173.                 $periodo = [
  174.                     'de' => $rangeTrimestres2[$trimestre][0]
  175.                     , 'ate' => $rangeTrimestres2[$trimestre][1]
  176.                 ];
  177.                 $trimestres = [
  178.                     '1º tri ' $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '01',
  179.                     '2º tri ' $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '02',
  180.                     '3º tri ' $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '03',
  181.                     '4º tri ' $this->getPeriodo()['to']['ano'] => $this->getPeriodo()['to']['ano'] . '04'
  182.                 ];
  183.                 $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']);
  184.             } else {
  185.                 $avaliadoPBV $this->evsRepository->findEvsTrimestralAvaliadosByModelagem($periodos$this->getModelagem()->getIdModelagem(), $this->getAvaliado()['id_avaliado'], $valorConsultaBase);
  186.             }
  187.         }
  188.         $user_id $this->getUser()->getId_usuario();
  189.         $contador_nao_lidos $conversaRepository->contaMensagensNãoLidas($user_id);
  190.         if ($this->hasAvaliado() && $this->hasPeriodo()) {
  191.             $aceiteAvaliacao $this->mensagemAvaliacaoRepository->findAceite($this->getAvaliado());
  192.         }
  193.         $rangeTrimestres = [
  194.             '1º tri ' $this->getPeriodo()['to']['ano'] => 'Jan/'.$this->getPeriodo()['to']['ano'].', Fev/'.$this->getPeriodo()['to']['ano'].', Mar/' $this->getPeriodo()['to']['ano'],
  195.             '2º tri ' $this->getPeriodo()['to']['ano'] => 'Abr/'.$this->getPeriodo()['to']['ano'].', Mai/'.$this->getPeriodo()['to']['ano'].', Jun/' $this->getPeriodo()['to']['ano'],
  196.             '3º tri ' $this->getPeriodo()['to']['ano'] => 'Jul/'.$this->getPeriodo()['to']['ano'].', Ago/'.$this->getPeriodo()['to']['ano'].', Set/' $this->getPeriodo()['to']['ano'],
  197.             '4º tri ' $this->getPeriodo()['to']['ano'] => 'Out/'.$this->getPeriodo()['to']['ano'].', Nov/'.$this->getPeriodo()['to']['ano'].', Dez/' $this->getPeriodo()['to']['ano']
  198.         ];
  199.         return $this->render('base.html.twig', [
  200.             'grafico_evolucao_evs' => $dadosGraficoEvolucao,
  201.             'contador_nao_lidos' => $contador_nao_lidos,
  202.             'evs_anual' => $evsAnual,
  203.             'dadosEnviados' => $dadosEnviados,
  204.             'solicitacoes' => $solicitacoes,
  205.             'avaliadoPBV' => $avaliadoPBV ?? null,
  206.             'aceite_avaliacao' => $aceiteAvaliacao ?? null,
  207.             'rangeTrimestre' => $rangeTrimestres[$trimestre ?? '1º tri ' $this->getPeriodo()['to']['ano']]
  208.         ]);
  209.     }
  210.     private function getTrimestreByPeriodo()
  211.     {
  212.         $periodo $this->getPeriodo()['to'];
  213.         if(in_array($periodo['periodo'], ['01','02','03'])) {
  214.             return '1º tri ' $periodo['ano'];
  215.         } else if(in_array($periodo['periodo'], ['04','05','06'])) {
  216.             return '2º tri ' $periodo['ano'];
  217.         } else if(in_array($periodo['periodo'], ['07','08','09'])) {
  218.             return '3º tri ' $periodo['ano'];
  219.         } else {
  220.             return '4º tri ' $periodo['ano'];
  221.         }
  222.     }
  223.     private function getPeriodoByTrimestre()
  224.     {
  225.         $periodo $this->getPeriodo()['to'];
  226.         if(in_array($periodo['periodo'], ['01','02','03'])) {
  227.             return ['de' => $periodo['ano'] . '01''ate' => $periodo['ano'] . '03'];
  228.         } else if(in_array($periodo['periodo'], ['04','05','06'])) {
  229.             return ['de' => $periodo['ano'] . '04''ate' => $periodo['ano'] . '06'];
  230.         } else if(in_array($periodo['periodo'], ['07','08','09'])) {
  231.             return ['de' => $periodo['ano'] . '07''ate' => $periodo['ano'] . '09'];
  232.         } else {
  233.             return ['de' => $periodo['ano'] . '10''ate' => $periodo['ano'] . '12'];
  234.         }
  235.     }
  236.     /**
  237.      * @Route("/dashboard-anual/{ano}", name="visao_avaliado_dashboard_anual", defaults={"ano"=null}, requirements={"ano"="\d+"} )
  238.      *
  239.      * @param EvsRepository $evs
  240.      * @param integer|null $ano
  241.      * @return Response
  242.      */
  243.     public function anual(Request $requestEvsRepository $evsConversaRepository $conversaRepositoryPeriodoController $periodoController, ?int $ano) :Response
  244.     {
  245.         if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
  246.             return $this->redirectToRoute('gps_visao_avaliado_dashboard_anual');
  247.         }
  248.         
  249.         $user_id $this->getUser()->getId_usuario();
  250.         $contador_nao_lidos $conversaRepository->contaMensagensNãoLidas($user_id);
  251.         if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
  252.             // setters
  253.             $anosComAvaliado $evs->avaliadoAnosComAvaliacao($this->getAvaliado());
  254.             $anos array_keys($anosComAvaliado);
  255.             $ano = (int) ($ano ?? $this->getPeriodo()['from']['ano']);
  256.             $ano in_array($ano$anos) ? $ano current($anos);
  257.             // refaz o periodo da sessao do avaliado
  258.             // nova sessao de periodo
  259.             $periodoController->processa($request, [
  260.                 'from' => join('|',['Mensal',$ano$anosComAvaliado[$ano]['min_mes']])
  261.                 ,'to' => join('|',['Mensal',$ano$anosComAvaliado[$ano]['min_mes']])
  262.                 ,'referer' => 'avaliado'
  263.             ]);
  264.             unset($anosComAvaliado);
  265.             // grafico
  266.             $dadosGraficoEvolucao $this->evsRepository->evolucaoQualidadeCustoEVS($this->getAvaliado(), $ano);
  267.             return $this->render('base.anual.html.twig',[
  268.                  'var_anos' => $anos
  269.                 ,'contador_nao_lidos' => $contador_nao_lidos
  270.                 ,'var_ano_atual' => $ano
  271.                 ,'var_grafico_evolucao_evs' => $dadosGraficoEvolucao
  272.             ]);
  273.         }
  274.         
  275.         return $this->render('base.anual.html.twig',[
  276.             'contador_nao_lidos' => $contador_nao_lidos
  277.         ]);
  278.     }
  279.     /**
  280.      * @Route("/dashboard-anual-pbv/{ano}", name="visao_avaliado_dashboard_anual_pbv", defaults={"ano"=null}, requirements={"ano"="\d+"} )
  281.      *
  282.      * @param EvsRepository $evs
  283.      * @param integer|null $ano
  284.      * @return Response
  285.      */
  286.     public function anualPbv(Request $requestEvsRepository $evsConversaRepository $conversaRepositoryPeriodoController $periodoController, ?int $ano) :Response
  287.     {
  288.         if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
  289.             return $this->redirectToRoute('gps_visao_avaliado_dashboard_anual');
  290.         }
  291.         
  292.         $user_id $this->getUser()->getId_usuario();
  293.         $contador_nao_lidos $conversaRepository->contaMensagensNãoLidas($user_id);
  294.         if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
  295.             
  296.             // setters
  297.             $anosComAvaliado $evs->avaliadoAnosComAvaliacao($this->getAvaliado());
  298.             $anos array_keys($anosComAvaliado);
  299.             $ano = (int) ($ano ?? $this->getPeriodo()['from']['ano']);
  300.             $ano in_array($ano$anos) ? $ano current($anos);
  301.             // refaz o periodo da sessao do avaliado
  302.             // nova sessao de periodo
  303.             $periodoController->processa($request, [
  304.                 'from' => join('|',['Mensal',$ano$anosComAvaliado[$ano]['min_mes']])
  305.                 ,'to' => join('|',['Mensal',$ano$anosComAvaliado[$ano]['min_mes']])
  306.                 ,'referer' => 'avaliado'
  307.             ]);
  308.             unset($anosComAvaliado);
  309.             // grafico
  310.             $dadosGraficoEvolucao $this->evsRepository->evolucaoPBV($this->getAvaliado(), $ano);
  311.             
  312.             return $this->render('base.anual.pbv.html.twig',[
  313.                  'var_anos' => $anos
  314.                 ,'contador_nao_lidos' => $contador_nao_lidos
  315.                 ,'var_ano_atual' => $ano
  316.                 ,'var_grafico_evolucao_evs' => $dadosGraficoEvolucao
  317.             ]);
  318.         }
  319.         
  320.         return $this->render('base.anual.pbv.html.twig',[
  321.             'contador_nao_lidos' => $contador_nao_lidos
  322.         ]);
  323.     }
  324.     /**
  325.      * @Route("/dashboard-anual-pbv-salto-itu/{ano}", name="visao_avaliado_dashboard_anual_salto_itu_pbv", defaults={"ano"=null}, requirements={"ano"="\d+"} )
  326.      *
  327.      * @param EvsRepository $evs
  328.      * @param integer|null $ano
  329.      * @return Response
  330.      */
  331.     public function anualPbvSaltoItu(Request $requestEvsRepository $evsConversaRepository $conversaRepositoryPeriodoController $periodoController, ?int $ano) :Response
  332.     {
  333.         if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
  334.             return $this->redirectToRoute('gps_visao_avaliado_dashboard_anual');
  335.         }
  336.         
  337.         $user_id $this->getUser()->getId_usuario();
  338.         $contador_nao_lidos $conversaRepository->contaMensagensNãoLidas($user_id);
  339.         if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
  340.                         
  341.             if($this->getSession()->get('cliente')->getDbname() == 'analytics_unimed_saltoitu_fesp') {
  342.                 
  343.                 $trimestre $request->query->get('trimestre'$this->getTrimestreByPeriodo());
  344.                 $periodo $this->getPeriodoByTrimestre();
  345.                 
  346.                 $trimestres = [
  347.                     '1º tri 2025' => '202501',
  348.                     '2º tri 2025' => '202502',
  349.                     '3º tri 2025' => '202503',
  350.                     '4º tri 2025' => '202504'
  351.                 ];
  352.                 
  353.                 $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']);
  354.             }
  355.         
  356.             $anos = [
  357.                 '1º tri 2025' => [
  358.                     'de' => '202501'
  359.                     'ate' => '202503'
  360.                 ],
  361.                 '2º tri 2025' => [
  362.                     'de' => '202504'
  363.                     'ate' => '202506'
  364.                 ]/*,
  365.                 '3º tri 2025' => [
  366.                     'de' => '202507'
  367.                     , 'ate' => '202509'
  368.                 ],
  369.                 '4º tri 2025' => [
  370.                     'de' => '202510'
  371.                     , 'ate' => '202512'
  372.                 ]/** */
  373.             ];
  374.             $rangeTrimestres = [
  375.                 '1º tri 2025' => 'Jan/2025, Fev/2025, Mar/2025',
  376.                 '2º tri 2025' => 'Abr/2025, Mai/2025, Jun/2025',
  377.                 '3º tri 2025' => 'Jul/2025, Ago/2025, Set/2025',
  378.                 '4º tri 2025' => 'Out/2025, Nov/2025, Dez/2025'
  379.             ];
  380.             return $this->render('base.anual.pbv.saltoitu.html.twig',[
  381.                  'var_anos' => $anos
  382.                 'contador_nao_lidos' => $contador_nao_lidos
  383.                 'var_ano_atual' => $ano
  384.                 'avaliadoPBV' => $avaliadoPBV ?? null
  385.                 'trimestre' => $trimestre
  386.                 'rangeTrimestre' => $rangeTrimestres[$trimestre]
  387.             ]);
  388.         }
  389.         
  390.         return $this->render('base.anual.pbv.html.twig',[
  391.             'contador_nao_lidos' => $contador_nao_lidos
  392.         ]);
  393.     }
  394.     /**
  395.      * @Route("/sem-producao", name="sem_producao")
  396.      *
  397.      * @return Response
  398.      */
  399.     public function semProducao() :Response
  400.     {
  401.         return $this->render('sem-producao.html.twig', []);
  402.     }
  403.     /**
  404.      * @Route("/privilegios", name="visao_avaliado_dashboard_privilegios")
  405.      *
  406.      * @return Response
  407.      */
  408.     public function privilegios(Request $requestConversaRepository $conversaRepositoryModelagemRepository $modelagemRepositoryAvaliacaoRepository $avaliacaoRepositoryUsuarioRepository $usuarioRepository) :Response
  409.     {
  410.         if ($this->hasAvaliado() && $this->hasPeriodo() && $this->hasModelagem() && !$this->getModelagem()->getPrograma()->getEvs()) {
  411.             return $this->redirectToRoute('gps_visao_avaliado_dashboard');
  412.         }
  413.         $contador_nao_lidos $conversaRepository->contaMensagensNãoLidas($this->getUser()->getId_usuario());
  414.         if (!$this->hasAvaliado() || !$this->hasPeriodo()) {
  415.             return $this->render('base.privilegios.html.twig',[
  416.                 'contador_nao_lidos' => $contador_nao_lidos
  417.             ]);
  418.         }
  419.         $avaliacao $avaliacaoRepository->findOneBy(['id_avaliado' => $this->getAvaliado()['id_avaliado']]);
  420.         $modelagem $modelagemRepository->buscaModelagem($this->getAvaliado()['id_grupo']);
  421.         $indicadores = !is_null($avaliacao) ? $avaliacao->getIndicadores() : json_decode($modelagem['indicadores'], TRUE);
  422.         $indicadoresAdicionais = !is_null($avaliacao) ? $avaliacao->getIndicadoresAdicionais() ?? [] : [];
  423.         $rodape $avaliacaoRepository->rodape($this->getAvaliado()['id_avaliado']);
  424.         $rodapeAprovador $avaliacaoRepository->rodapeAprovador($this->getAvaliado()['id_avaliado']);
  425.         
  426.         if ($rodape) {
  427.             $rodape['nome_usuario_avaliador'] = $usuarioRepository->findOneBy(['id_usuario' => $rodape['id_usuario_avaliador']])->getNome();
  428.         }
  429.         if ($rodapeAprovador) {
  430.             $rodapeAprovador['nome_usuario_aprovador'] = $usuarioRepository->findOneBy(['id_usuario' => $rodapeAprovador['id_usuario_aprovador']])->getNome();
  431.         }
  432.         if ($request->isMethod('POST')) {
  433.             
  434.             $privilegios $request->request->get('privilegios', []);
  435.             $adicionais $request->request->get('adicionais', []);
  436.             $action $request->request->get('action');
  437.             if (is_countable($indicadores) && sizeof($indicadores) > 0) {
  438.                 foreach($indicadores[0]['indicadores'] as $key => $indicador) {
  439.                     $indicadores[0]['indicadores'][$key]['resposta'] = $privilegios[$indicador['id_indicador']] ?? 0;
  440.                     $indicadores[0]['indicadores'][$key]['evidencias'] = [];
  441.                 }
  442.             }
  443.             foreach($indicadoresAdicionais as $key => $indicador) {
  444.                 $indicadoresAdicionais[$key]['resposta'] = $adicionais[$key] ?? 0;
  445.             }
  446.             if (is_null($avaliacao)) {
  447.                 $avaliacao = new Avaliacao();
  448.                 $avaliacao->setIdModelagem($modelagem['id_modelagem'] ?? 0)
  449.                           ->setIdAvaliado($this->getAvaliado()['id_avaliado'])
  450.                 ;
  451.             }
  452.             
  453.             $avaliacao->setIndicadores($indicadores)
  454.                         ->setIndicadoresAdicionais(sizeof($indicadoresAdicionais) > $indicadoresAdicionais null)
  455.                         ->setIdUsuarioAvaliador($this->getUser()->getId_usuario())
  456.                         ->setDataAdd()
  457.             ;
  458.             try {
  459.                 $avaliacaoRepository->add($avaliacaotrue);
  460.             } catch (\Throwable $th) {
  461.                 $this->addFlash(
  462.                     'error',
  463.                     'Erro ao salvar os Privilégios do Avaliado! Tente novamente mais tarde.'
  464.                 );
  465.                 return $this->render('base.privilegios.html.twig',[
  466.                     'contador_nao_lidos' => $contador_nao_lidos
  467.                     'modelagem' => $modelagem
  468.                     'indicadores' => $indicadores[0]['indicadores']
  469.                     , 'indicadores_adicionais' => $indicadoresAdicionais
  470.                     'rodape' => $rodape
  471.                     'rodapeAprovador' => $rodapeAprovador
  472.                 ]);
  473.             }
  474.             if($action == 'aprovar') {
  475.                 $aval $avaliacaoRepository->rodape($this->getAvaliado()['id_avaliado']);
  476.                 $avaliacaoRepository->updateAprovador($aval['id_avaliacao_log'], $this->getUser()->getId_usuario());
  477.             }
  478.             $this->addFlash(
  479.                 'success',
  480.                 'Os Privilégios do Avaliado foram salvos com sucesso!'
  481.             );
  482.             return $this->redirectToRoute('visao_avaliado_dashboard_privilegios');                
  483.         }
  484.         return $this->render('base.privilegios.html.twig',[
  485.             'contador_nao_lidos' => $contador_nao_lidos
  486.             'modelagem' => $modelagem
  487.             'indicadores' => $indicadores[0]['indicadores'] ?? []
  488.             , 'indicadores_adicionais' => $indicadoresAdicionais
  489.             'rodape' => $rodape
  490.             'rodapeAprovador' => $rodapeAprovador
  491.         ]);
  492.     }
  493.     /**
  494.      * @Route("/privilegios/adicionais", name="visao_avaliado_dashboard_privilegios_adicionais")
  495.      */
  496.     public function privilegiosAdicionais(Request $requestModelagemRepository $modelagemRepositoryAvaliacaoRepository $avaliacaoRepository): Response
  497.     {
  498.         if ($request->isMethod('POST')) {
  499.             $avaliacao $avaliacaoRepository->findOneBy(['id_avaliado' => $this->getAvaliado()['id_avaliado']]);
  500.             $modelagem $modelagemRepository->buscaModelagem($this->getAvaliado()['id_grupo']);
  501.             $indicadores = !is_null($avaliacao) ? $avaliacao->getIndicadores() : json_decode($modelagem['indicadores'], TRUE);
  502.             $indicadoresAdicionais = !is_null($avaliacao) ? $avaliacao->getIndicadoresAdicionais() ?? [] : [];
  503.             $indicadorAdicional = [
  504.                 'nome' => $request->request->get('titulo'),
  505.                 'resposta' => $request->request->get('resposta'0),
  506.                 'evidencias' => [],
  507.                 'valor_padrao' => "0",
  508.                 'respostaPadrao' => [
  509.                     [
  510.                         "chave" => "0",
  511.                         "valor" => "Não",
  512.                         "permite_upload" => false
  513.                     ],
  514.                     [
  515.                         "chave" => "1",
  516.                         "valor" => "Sim",
  517.                         "permite_upload" => false
  518.                     ]
  519.                 ],
  520.                 'formato_resposta' => "2",
  521.                 'permite_upload_texto' => false
  522.             ];
  523.             array_push($indicadoresAdicionais$indicadorAdicional);
  524.             if (is_null($avaliacao)) {
  525.                 $avaliacao = new Avaliacao();
  526.                 $avaliacao->setIdAvaliado($this->getAvaliado()['id_avaliado'])
  527.                           ->setIdModelagem($modelagem['id_modelagem'] ?? 0)
  528.                 ;
  529.             }
  530.             if (is_countable($indicadores) && sizeof($indicadores) > 0) {
  531.                 foreach($indicadores[0]['indicadores'] as $key => $indicador) {
  532.                     $indicadores[0]['indicadores'][$key]['resposta'] = $indicador['valor_padrao'];
  533.                     $indicadores[0]['indicadores'][$key]['evidencias'] = [];
  534.                 }
  535.             }
  536.             $avaliacao->setIndicadores($indicadores ?? [])
  537.                       ->setIndicadoresAdicionais($indicadoresAdicionais)
  538.                       ->setIdUsuarioAvaliador($this->getUser()->getId_usuario())
  539.                       ->setDataAdd()
  540.             ;
  541.             try {
  542.                 $avaliacaoRepository->add($avaliacaotrue);
  543.             } catch (\Throwable $th) {
  544.                 $this->addFlash(
  545.                    'error',
  546.                    'Erro ao adicionar Privilégio Adicional! Tente novamente mais tarde.'
  547.                 );
  548.                 return $this->redirectToRoute('visao_avaliado_dashboard_privilegios');
  549.             }
  550.             $this->addFlash(
  551.                'success',
  552.                'Privilégio Adicional do Avaliado salvo com sucesso!'
  553.             );
  554.             return $this->redirectToRoute('visao_avaliado_dashboard_privilegios');
  555.         }
  556.         return $this->render('componentes/modal-privilegios-adicionais.html.twig');
  557.     }
  558. }