src/Controller/Visao/GPS/Avaliado/AvaliadoController.php line 78

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Visao\GPS\Avaliado;
  3. use App\Controller\Componentes\PeriodoController;
  4. use App\Controller\Customs\Custom2IMController;
  5. use App\Repository\Cliente\Dados\EvsRepository;
  6. use App\Repository\Cliente\Dados\GpsRepository;
  7. use App\Repository\Cliente\Fornecidos\DadosEnviadosRepository;
  8. use App\Repository\Cliente\Fornecidos\SolicitacaoRepository;
  9. use App\Repository\Painel\VisaoRepository;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Routing\RouterInterface;
  15. /**
  16.  * @Route("/gps/visao-avaliado")
  17.  *
  18.  * Controller central para a visão de Avaliado dentro do sistema
  19.  */
  20. class AvaliadoController extends Custom2IMController
  21. {
  22.     const TEMPLATEBASE 'visao/gps/avaliado/';
  23.     protected $componentes = [];
  24.     protected $visao 'avaliado';
  25.     protected $rotas = ['avaliado_fechamento_dashboard''avaliado_privilegio_dashboard''relacionamento_dashboard'];
  26.     /**
  27.      * @var GpsRepository
  28.      */
  29.     protected $gpsRepository;
  30.     /**
  31.      * @var SolicitacaoRepository
  32.      */
  33.     protected $solicitacaoRepo;
  34.     /**
  35.      * @var DadosEnviadosRepository
  36.      */
  37.     protected $dadosEnviadosRepo;
  38.     /**
  39.      * @param RequestStack $requestStack
  40.      * @param GpsRepository $gpsRepository
  41.      */
  42.     public function __construct(
  43.         RequestStack $requestStack,
  44.         GpsRepository $gpsRepository,
  45.         SolicitacaoRepository $solicitacaoRepository,
  46.         DadosEnviadosRepository $dadosEnviadosRepository
  47.     ) {
  48.         $this->gpsRepository $gpsRepository;
  49.         $this->solicitacaoRepo $solicitacaoRepository;
  50.         $this->dadosEnviadosRepo $dadosEnviadosRepository;
  51.         $sess $requestStack->getCurrentRequest()->getSession();
  52.         // nesta condicao precisa refazer a sessao do avaliado para setar uma única modelagem
  53.         // Quando o avaliado loga o array é formado por chave numerada (fechtAllAssociative)
  54.         // Daqui em diante para dashboard/indicador/detalhes sera usado array puro
  55.         if ( $sess->has('modelagem') AND $sess->has('periodo') AND isset($sess->get('avaliado')[0]) ) {
  56.             $idModelagem $sess->get('modelagem')->getIdModelagem();
  57.             $sess->set('avaliado'current(array_filter($sess->get('avaliado'), function($row) use($idModelagem) {
  58.                 return $row['id_modelagem'] === $idModelagem; }
  59.             )));
  60.         }
  61.         unset($sess);
  62.     }
  63.     /**
  64.      * @Route("/dashboard", name="gps_visao_avaliado_dashboard")
  65.      *
  66.      * @param VisaoRepository $visaoRepository
  67.      * @param RouterInterface $router
  68.      * @return Response
  69.      */
  70.     public function index(VisaoRepository $visaoRepositoryRouterInterface $router) :Response
  71.     {
  72.         $solicitacoes = [];
  73.         $dadosEnviados = [];
  74.         // a chave http_referer vem do GestorController::redirectAvaliadoDashboard
  75.         // usada no click da dimensao especialidade no nome do avaliado
  76.         // neste caso, eh o comportamento normal quando acesso for direto pelo avaliado
  77.         if ( $this->hasAvaliado() AND !array_key_exists('http_referer'$this->getAvaliado()) ) {
  78.             if ( $this->hasModelagem() AND $this->hasPeriodo() ) {
  79.                 $solicitacoes $this->solicitacaoRepo->findDocumentosByEspecialidade($this->getAvaliado()['id_grupo']);
  80.                 $dadosEnviados $this->dadosEnviadosRepo->getDadosEnviadosByAvaliado($this->getAvaliado()['id_avaliado']);
  81.                 $possuiProducao $this->gpsRepository->possuiProducao($this->getAvaliado(), $this->getPeriodo());
  82.                 if ( !$possuiProducao ) {
  83.                     return $this->render('sem-producao.html.twig', []);
  84.                 }
  85.                 // quando avaliado
  86.                 // ultimo mes de producao
  87.                 if ( 'ROLE_AVALIADO' === $this->getUser()->getPerfil()->getRole() ) {
  88.                     $sessAvaliado $this->getAvaliado();
  89.                     $periodoProducao current(explode(','$possuiProducao));
  90.                     $sessAvaliado['periodo'] = $periodoProducao;
  91.                     $this->getSession()->set('avaliado'$sessAvaliado);
  92.                 }
  93.                 foreach ($solicitacoes AS $keySolicitacao => $solicitacao) {
  94.                     foreach ($dadosEnviados AS $dado) {
  95.                         if ( $dado['id_solicitacao'] === $solicitacao['id_solicitacao'] ) {
  96.                             unset($solicitacoes[$keySolicitacao]);
  97.                         }
  98.                     }
  99.                 }
  100.             }
  101.             $this->setarSessoesVisao(
  102.                 'Avaliado'
  103.                 ,false
  104.                 ,$this->isGranted('ROLE_GESTOR') ? true false
  105.                 ,$this->hasPeriodo() && $this->hasAvaliado() ? '' 'no-periodo'
  106.                 ,$this->getCurrentRoute()
  107.             );
  108.             $visaoObj $visaoRepository->findOneBy(['slug' => $this->visao]);
  109.             $valida $this->testaPermissoes(
  110.                  ($visaoObj $visaoObj->getIdVisao() : 0)
  111.                 ,$this->getUser()->getPerfil()->getRota_default()
  112.                 ,$router$visaoRepository
  113.             );
  114.             if ( $valida ) {
  115.                 return $valida;
  116.             }
  117.             $this->getSession()->set('tela-anterior'$this->generateUrl('gps_visao_avaliado_dashboard'));
  118.             $this->getSession()->remove('telas');
  119.         }
  120.         $performanceDominio $this->gpsRepository->graficoPerformanceDominio(
  121.             ['where' => "AND id_programa = {$this->getPrograma()['programa']['id_programa']} AND id_modelagem = {$this->getAvaliado()['id_modelagem']}"],
  122.             $this->getPeriodo(),
  123.             [' AND id_avaliado = ' $this->getAvaliado()['id_avaliado'], ' AND id_grupo = ' $this->getAvaliado()['id_grupo']],
  124.             ""
  125.         );
  126.         return $this->render('base.html.twig', [
  127.             'dominios' => $performanceDominio,
  128.             'periodo' => $this->getPeriodoReferencia(),
  129.             'dadosEnviados' => $dadosEnviados,
  130.             'solicitacoes' => $solicitacoes
  131.         ]);
  132.     }
  133.     /**
  134.      * @Route("/dashboard-anual/{ano}", name="gps_visao_avaliado_dashboard_anual", defaults={"ano"=null}, requirements={"ano"="\d+"} )
  135.      *
  136.      * @param GpsRepository $gpsRepository
  137.      * @param integer|null $ano
  138.      * @return Response
  139.      */
  140.     public function anual(Request $requestGpsRepository $gpsRepositoryPeriodoController $periodoController, ?int $ano) :Response
  141.     {
  142.         if ( $this->hasAvaliado() AND $this->hasPeriodo() ) {
  143.             // setters
  144.             $anosComAvaliado $gpsRepository->avaliadoAnosComAvaliacao($this->getAvaliado());
  145.             $anos array_keys($anosComAvaliado);
  146.             $ano = (int) ($ano ?? $this->getPeriodo()['from']['ano']);
  147.             $ano in_array($ano$anos) ? $ano current($anos);
  148.             // refaz o periodo da sessao do avaliado
  149.             // nova sessao de periodo
  150.             $periodoController->processa($request, [
  151.                 'from' => join('|',['Mensal',$ano$anosComAvaliado[$ano]['min_mes']])
  152.                 ,'to' => join('|',['Mensal',$ano$anosComAvaliado[$ano]['min_mes']])
  153.                 ,'referer' => 'avaliado'
  154.             ]);
  155.             unset($anosComAvaliado);
  156.             // grafico
  157.             // $dadosGraficoEvolucao = $this->gpsRepository->evolucaoQualidadeCustoEVS($this->getAvaliado(), $ano);
  158.     
  159.             $buscaConsenso = [];
  160.             $buscaConsenso $this->dadosEnviadosRepo->getConsenso($this->getAvaliado(), $this->getUser());
  161.             $avaliacao = [];
  162.             if(isset($buscaConsenso['avaliacao'])) {
  163.                 $avaliacao json_decode($buscaConsenso['avaliacao'], TRUE);
  164.             }
  165.             
  166.             return $this->render('base.anual.html.twig',[
  167.                  'var_anos' => $anos
  168.                 ,'var_ano_atual' => $ano
  169.                 'avaliacao' => $avaliacao
  170.                 'consenso' => $buscaConsenso
  171.                 // ,'var_grafico_evolucao_evs' => $dadosGraficoEvolucao
  172.             ]);
  173.         }
  174.         return $this->render('base.anual.html.twig',[]);
  175.     }
  176.     /**
  177.      * @Route("/sem-producao", name="gps_sem_producao")
  178.      *
  179.      * @return Response
  180.      */
  181.     public function semProducao() :Response
  182.     {
  183.         return $this->render('sem-producao.html.twig', []);
  184.     }
  185.     /**
  186.      * @Route("/consenso", name="consenso")
  187.      *
  188.      * @return Response
  189.      */
  190.     public function consenso(Request $request) :Response
  191.     {
  192.         if ($request->isMethod('POST')) {
  193.             $avaliacao $request->request->all();
  194.             if(isset($avaliacao['assinatura-profissional'])) {
  195.                 $this->dadosEnviadosRepo->updateSubjetiva($avaliacao$this->getAvaliado(), $this->getUser());
  196.                 $request->getSession()->getFlashBag()->add('sucess''Assinatura realizada!');
  197.             } else {
  198.                 //unset($avaliacao['assinatura-lideranca']);
  199.                 $this->dadosEnviadosRepo->insertSubjetiva($avaliacao$this->getAvaliado(), $this->getUser());
  200.                 $request->getSession()->getFlashBag()->add('sucess''Assinatura realizada!');
  201.             }
  202.         }
  203.         $buscaConsenso $this->dadosEnviadosRepo->getConsenso($this->getAvaliado(), $this->getUser());
  204.         $avaliacao = [];
  205.         if(isset($buscaConsenso['avaliacao'])) {
  206.             $avaliacao json_decode($buscaConsenso['avaliacao'], TRUE);
  207.         }
  208.         
  209.         return $this->render('consenso.html.twig', ['avaliacao' => $avaliacao'consenso' => $buscaConsenso]);
  210.     }
  211. }