<?php
namespace App\Controller\Componentes;
use App\Controller\Customs\Custom2IMController;
use App\Helper\ProgramaHelper;
use App\Repository\Cliente\Modelagem\ModelagemRepository;
use App\Entity\Cliente\Modelagem\Modelagem;
use App\Repository\Cliente\Modelagem\ProgramaRepository;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/programa")
*/
class ProgramaController extends Custom2IMController
{
/**
* @var ModelagemRepository
*/
private $modelagem;
/**
* @var ProgramaHelper
*/
private $programaHelper;
/**
* @var ProgramaRepository
*/
private $programaRepository;
/**
* @param ModelagemRepository $modelagem
* @param ProgramaHelper $programaHelper
* @param ProgramaRepository $programaRepository
*/
public function __construct(
ModelagemRepository $modelagem,
ProgramaHelper $programaHelper,
ProgramaRepository $programaRepository
) {
$this->modelagem = $modelagem;
$this->programaHelper = $programaHelper;
$this->programaRepository = $programaRepository;
}
/**
* Processa o array de modelagem e programa para
* retornar o string que será utilizado nas querys.
*
* @param array $dados
* @return string
*/
private function __processaWhere(Modelagem $modelagem): string
{
$idModelagem = (int) $modelagem->getIdModelagem();
$idPrograma = (int) $modelagem->getPrograma()->getIdPrograma();
return " AND id_programa = {$idPrograma} AND id_modelagem = {$idModelagem}";
}
/**
* Busca todos os programa e suas modelagem. Utiliza o critério
* de programa ativo e programa não seja deletado falso e o mesmo
* para a modelagem.
*
* @Route("/", name="programa_componente")
*
* @author
*
* @return render
*/
public function index(Request $request)
{
// filtro padrao
$arrayModelagemCriteria = ['ativo' => true];
$gestor_permissoes = $this->getSession()->get('gestor_permissoes');
// mostra somente as modelagens do avaliado
if ( 'ROLE_AVALIADO' === $this->getUser()->getPerfil()->getRole() ) {
$arrayModelagemCriteria['idModelagem'] = $this->getIdModelagemAvaliado();
}
$modelagensInicial = $this->modelagem->buscaModelagensPermissao($arrayModelagemCriteria, $gestor_permissoes);
if (
'ROLE_AVALIADO' === $this->getUser()->getPerfil()->getRole()
&& $this->getSession()->get('cliente')->getDbname() == 'analytics_gvix'
) {
foreach($modelagensInicial AS $k => $mi) {
if($mi['id_modelagem'] == 2) {
unset($modelagensInicial[$k]);
}
}
}
if ( 1 === count($modelagensInicial)
//AND !$this->getSession()->has('modelagem')
) {
$modelagens = $this->modelagem->find($modelagensInicial[0]['id_modelagem']);
$modelagem = $modelagens;
$programaModelagem['modelagem'] = $modelagem->getIdModelagem();
$programaModelagem['modelagem_obj'] = $modelagem;
$programaModelagem['modelagem_nome'] = $modelagem->getTitulo();
$programaModelagem['modelagem_avaliacao_modelagem'] = $this->modelagem->getComAvaliacaoModelagem($programaModelagem['modelagem']);
$programaModelagem['programa'] = $this->programaRepository->buscaProgramaPorModelagem($programaModelagem['modelagem']);
$programaModelagem['where'] = $this->__processaWhere($modelagem);
if ( $modelagem ) {
$this->getSession()->set('modelagem', $modelagem);
$this->getSession()->set('programa', $programaModelagem);
}
}
return $this->render('componentes/programa/componente.html.twig', ['modelagens' => $modelagensInicial]);
}
/**
* @Route("/processa", name="programa_processa")
*
* @param Request $request
* @return JsonResponse
*/
public function processa(Request $request) :JsonResponse
{
$programaModelagem = [];
if (!$request->query->has('modelagem')) {
return new JsonResponse([
'sucesso' => false
,'mensagem' => 'Erro no sistema de Períodos!'
,'codigo' => 'PRO.002'
]);
}
$idModelagem = (int) $request->query->get('modelagem');
try {
$modelagem = $this->modelagem->find($idModelagem);
$programaModelagem['modelagem'] = $idModelagem;
$programaModelagem['modelagem_obj'] = $modelagem;
$programaModelagem['modelagem_avaliacao_modelagem'] = $this->modelagem->getComAvaliacaoModelagem($idModelagem);
$programaModelagem['modelagem_nome'] = $this->modelagem->getNomeModelagem($idModelagem)['titulo'];
$programaModelagem['programa'] = $this->programaRepository->buscaProgramaPorModelagem($idModelagem);
$programaModelagem['where'] = $this->__processaWhere($modelagem);
if ( $modelagem ) {
$this->getSession()->set('modelagem', $modelagem);
$this->getSession()->set('programa', $programaModelagem);
}
if ($request->query->get('referer') != 'gestor_rede') {
$this->limpaPeriodos();
$this->limpaFiltros();
}
$return = ['sucesso' => true, 'mensagem' => 'Programa Configurado!', 'periodo' => $this->getSession()->has('periodo')];
} catch (\Throwable $ex) {
$return = ['sucesso' => false, 'mensagem' => 'Erro no sistema de Programas!', 'codigo' => 'PRO.001'];
}
return new JsonResponse($return);
}
}