Skip to content

Commit

Permalink
feat: limitação de repositorio e unidade para envio de processos (#511)
Browse files Browse the repository at this point in the history
Co-authored-by: Mauro Costa <[email protected]>
  • Loading branch information
Mauro1706 and Mauro Costa authored Jun 6, 2024
1 parent 80e3af2 commit 3612868
Show file tree
Hide file tree
Showing 19 changed files with 1,362 additions and 65 deletions.
85 changes: 73 additions & 12 deletions src/PENIntegracao.php
Original file line number Diff line number Diff line change
Expand Up @@ -874,26 +874,87 @@ public function processarControlador($strAcao)
return true;
}

public function autoCompletarExpedirProcedimento($xml) {
$bolPermiteEnvio = false;
if ($_GET['acao'] != 'pen_procedimento_expedir') {
$bolPermiteEnvio = true;
}

$restricaoCadastrada = false;
if ($bolPermiteEnvio == false) {
$objUnidadeDTO = new PenUnidadeDTO();
$objUnidadeDTO->retNumIdUnidadeRH();
$objUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());

$objUnidadeRN = new UnidadeRN();
$objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO);

$arrObjEstruturaDTO = array();
try {
$objPenUnidadeRestricaoDTO = new PenUnidadeRestricaoDTO();
$objPenUnidadeRestricaoDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
$objPenUnidadeRestricaoDTO->setNumIdUnidadeRH($objUnidadeDTO->getNumIdUnidadeRH());
$objPenUnidadeRestricaoDTO->setNumIdUnidadeRestricao($_POST['id_repositorio']);
$objPenUnidadeRestricaoDTO->retNumIdUnidadeRHRestricao();
$objPenUnidadeRestricaoDTO->retStrNomeUnidadeRHRestricao();

$objPenUnidadeRestricaoRN = new PenUnidadeRestricaoRN();
$restricaoCadastrada = $objPenUnidadeRestricaoRN->contar($objPenUnidadeRestricaoDTO);
$restricaoCadastrada = $restricaoCadastrada > 0;

if ($restricaoCadastrada) {
$objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao('%' . $_POST['palavras_pesquisa'] . '%', InfraDTO::$OPER_LIKE);
$arrEstruturas = $objPenUnidadeRestricaoRN->listar($objPenUnidadeRestricaoDTO);

foreach ($arrEstruturas as $key => $unidade) {
if ($unidade->getNumIdUnidadeRHRestricao() != null) {
$arrObjEstruturaDTO[] = $unidade;
}
}
}
} catch (Exception $e) {
}

if (count($arrObjEstruturaDTO) > 0) {
$xml = InfraAjax::gerarXMLItensArrInfraDTO($arrObjEstruturaDTO, 'IdUnidadeRHRestricao', 'NomeUnidadeRHRestricao');
} else if ($restricaoCadastrada) {
return '<itens><item id="0" descricao="Unidade não Encontrada."></item></itens>';
}
}
if (!$restricaoCadastrada && (is_null($arrObjEstruturaDTO) || count($arrObjEstruturaDTO) == 0)) {
$arrObjEstruturaDTO = (array) ProcessoEletronicoINT::autoCompletarEstruturasAutoCompletar($_POST['id_repositorio'], $_POST['palavras_pesquisa'], $bolPermiteEnvio);

if (count($arrObjEstruturaDTO['itens']) > 0) {
$xml = self::gerarXMLItensArrInfraDTOAutoCompletar($arrObjEstruturaDTO, 'NumeroDeIdentificacaoDaEstrutura', 'Nome');
} else {
return '<itens><item grupo="vazio" id="0" descricao="Unidade não Encontrada."></item></itens>';
}
}

return $xml;
}

public function processarControladorAjax($strAcao) {
$xml = null;

switch ($_GET['acao_ajax']) {

case 'pen_unidade_auto_completar_expedir_procedimento':
$bolPermiteEnvio = false;
if ($_GET['acao'] != 'pen_procedimento_expedir') {
$bolPermiteEnvio = true;
}

$arrObjEstruturaDTO = (array) ProcessoEletronicoINT::autoCompletarEstruturasAutoCompletar($_POST['id_repositorio'], $_POST['palavras_pesquisa'], $bolPermiteEnvio);

if (count($arrObjEstruturaDTO['itens']) > 0) {
$xml = self::gerarXMLItensArrInfraDTOAutoCompletar($arrObjEstruturaDTO, 'NumeroDeIdentificacaoDaEstrutura', 'Nome');
} else {
return '<itens><item id="0" descricao="Unidade não Encontrada."></item></itens>';
case 'pen_listar_repositorios_estruturas_auto_completar':
try {
$arrObjEstruturaDTO = (array) ProcessoEletronicoINT::autoCompletarRepositorioEstruturas($_POST['palavras_pesquisa']);
if (count($arrObjEstruturaDTO) > 0) {
$xml = InfraAjax::gerarXMLItensArrInfraDTO($arrObjEstruturaDTO, 'Id', 'Nome');
} else {
return '<itens><item grupo="vazio" id="0" descricao="Repositório de Estruturas não Encontrado."></item></itens>';
}
}catch(Throwable $e){
$mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais";
throw new InfraException($mensagem, $e);
}
break;
case 'pen_unidade_auto_completar_expedir_procedimento':
$xml = $this->autoCompletarExpedirProcedimento($xml);
break;

case 'pen_unidade_auto_completar_mapeados':
// DTO de paginao
Expand Down
12 changes: 12 additions & 0 deletions src/bd/PenUnidadeRestricaoBD.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?

require_once DIR_SEI_WEB.'/SEI.php';

class PenUnidadeRestricaoBD extends InfraBD {

public function __construct(InfraIBanco $objInfraIBanco){
parent::__construct($objInfraIBanco);
}

}
?>
43 changes: 43 additions & 0 deletions src/dto/PenUnidadeRestricaoDTO.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

require_once DIR_SEI_WEB . '/SEI.php';

/**
* Cria uma tabela de relação 1 para 1 para unidade com o intuito de adicionar
* novos campos de configuração para cada unidade utilizado somente pelo módulo
* PEN
*
* Crio a classe com extendida de UnidadeDTO em função dos métodos de UnidadeRN,
* que força o hinting para UnidadeDTO, então não gera erro usar PenUnidadeDTO
* com o UnidadeBD e UnidadeRN
*
*
* @see http://php.net/manual/pt_BR/language.oop5.typehinting.php
*/
class PenUnidadeRestricaoDTO extends UnidadeDTO
{

public function getStrNomeTabela()
{
return 'md_pen_unidade_restricao';
}

public function getStrNomeSequenciaNativa()
{
return 'md_pen_seq_unidade_restricao';
}

public function montar()
{
$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Id', 'id');
$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidade', 'id_unidade');
$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidadeRH', 'id_unidade_rh');
$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidadeRestricao', 'id_unidade_restricao');
$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'NomeUnidadeRestricao', 'nome_unidade_restricao');
$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidadeRHRestricao', 'id_unidade_rh_restricao');
$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'NomeUnidadeRHRestricao', 'nome_unidade_rh_restricao');
$this->configurarPK('Id', InfraDTO::$TIPO_PK_NATIVA);

$this->configurarFK('IdUnidade', 'unidade', 'id_unidade');
}
}
19 changes: 19 additions & 0 deletions src/int/ProcessoEletronicoINT.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,25 @@ public static function autoCompletarEstruturasAutoCompletar($idRepositorioEstrut
return static::gerarHierarquiaEstruturasAutoCompletar($arrObjEstruturas);
}

/**
* Auto completar repositorio de estruturas
*
* @param string $strPalavrasPesquisa
* @return array
*/
public static function autoCompletarRepositorioEstruturas($strPalavrasPesquisa)
{
$objProcessoEletronicoRN = new ProcessoEletronicoRN();
$arrObjRepositorioDTO = (array) $objProcessoEletronicoRN->listarRepositoriosDeEstruturas();
$arrayRepositorioEstruturas = array();
foreach ($arrObjRepositorioDTO as $value) {
if (strpos(strtoupper($value->getStrNome()), strtoupper($strPalavrasPesquisa)) !== false) {
$arrayRepositorioEstruturas[] = $value;
}
}
return $arrayRepositorioEstruturas;
}

public static function autoCompletarProcessosApensados($dblIdProcedimentoAtual, $numIdUnidadeAtual, $strPalavrasPesquisa) {
$objExpedirProcedimentoRN = new ExpedirProcedimentoRN();
return $objExpedirProcedimentoRN->listarProcessosApensados($dblIdProcedimentoAtual, $numIdUnidadeAtual, $strPalavrasPesquisa);
Expand Down
110 changes: 74 additions & 36 deletions src/pen_map_unidade_cadastrar.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,17 @@
if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {

if(!array_key_exists('id_unidade', $_POST) || empty($_POST['id_unidade'])) {
throw new InfraException('Nenhuma "Unidade" foi selecionada');
$params = http_build_query($_POST);
$objPagina->adicionarMensagem('Nenhuma "Unidade" foi selecionada', InfraPagina::$TIPO_MSG_AVISO);
header('Location: '.$objSessao->assinarLink('controlador.php?acao='.PEN_RECURSO_BASE.'_cadastrar&acao_origem='.$_GET['acao'].'&id_mapeamento='.$numIdUnidade.PaginaSEI::getInstance()->montarAncora($numIdUnidade). '&'.$params));
exit(0);
}

if(!array_key_exists('id_unidade_rh', $_POST) || $_POST['id_unidade_rh'] === '' || $_POST['id_unidade_rh'] === null) {
throw new InfraException('Nenhuma "Unidade RH" foi selecionada');
$params = http_build_query($_POST);
$objPagina->adicionarMensagem('Nenhuma "Unidade RH" foi selecionada', InfraPagina::$TIPO_MSG_AVISO);
header('Location: '.$objSessao->assinarLink('controlador.php?acao='.PEN_RECURSO_BASE.'_cadastrar&acao_origem='.$_GET['acao'].'&id_mapeamento='.$numIdUnidade.PaginaSEI::getInstance()->montarAncora($numIdUnidade). '&'.$params));
exit(0);
}

$objGenericoBD = new GenericoBD($objBanco);
Expand Down Expand Up @@ -110,15 +116,34 @@

$numIdUnidade = '';
if(array_key_exists(PEN_PAGINA_GET_ID, $_GET) && !empty($_GET[PEN_PAGINA_GET_ID])) {
$objPenUnidadeDTO->setNumIdUnidade($_GET[PEN_PAGINA_GET_ID]);
$unidade = $objPenUnidadeRN->alterar($objPenUnidadeDTO);
$numIdUnidade = $_GET[PEN_PAGINA_GET_ID];
$objPenUnidadeDTO->setNumIdUnidade($_GET[PEN_PAGINA_GET_ID]);
$unidade = $objPenUnidadeRN->alterar($objPenUnidadeDTO);
$numIdUnidade = $_GET[PEN_PAGINA_GET_ID];
}
else {
$unidade = $objPenUnidadeRN->cadastrar($objPenUnidadeDTO);
$numIdUnidade = $unidade->getNumIdUnidade();
$unidade = $objPenUnidadeRN->cadastrar($objPenUnidadeDTO);
$numIdUnidade = $unidade->getNumIdUnidade();
}

$objPenUnidadeRestricaoRN = new PenUnidadeRestricaoRN();

$objPenUnidadeRestricaoDTO = new PenUnidadeRestricaoDTO();
$objPenUnidadeRestricaoDTO->setNumIdUnidade($_POST['id_unidade']);
$objPenUnidadeRestricaoDTO->setNumIdUnidadeRH($_POST['id_unidade_rh']);
$objPenUnidadeRestricaoRN->prepararExcluir($objPenUnidadeRestricaoDTO);

$arrObjPenUnidadeRestricaoDTO = $objPenUnidadeRestricaoRN->prepararRepoEstruturas(
$_POST['id_unidade'],
$_POST['id_unidade_rh'],
!empty($_POST['hdnRepoEstruturas']) ? $_POST['hdnRepoEstruturas'] : ""
);

if (count($arrObjPenUnidadeRestricaoDTO) > 0) {
$objPenUnidadeRestricaoRN->cadastrar($arrObjPenUnidadeRestricaoDTO);
}

$objPagina->adicionarMensagem('Mapeamento de Unidade gravado com sucesso.', 5);

header('Location: '.$objSessao->assinarLink('controlador.php?acao='.PEN_RECURSO_BASE.'_listar&acao_origem='.$_GET['acao'].'&id_mapeamento='.$numIdUnidade.PaginaSEI::getInstance()->montarAncora($numIdUnidade)));
exit(0);
}
Expand Down Expand Up @@ -173,7 +198,16 @@
}else{
$strNomeUnidadeSelecionada = 'Unidade não encontrada.';
}
} else if (!empty($_GET['id_unidade_rh']) && !empty($_GET['txtUnidadePen'])){
$strNomeUnidadeSelecionada = $_GET['txtUnidadePen'];
$objPenUnidadeDTO->setNumIdUnidadeRH($_GET['id_unidade_rh']);
}

$strCssRestricao = "";
$strHtmlRestricao = "";
$strJsGlobalRestricao = "";
$strJsInicializarRestricao = "";
ProcessoEletronicoINT::montarRestricaoTramitaGovBr($objPenUnidadeDTO->getNumIdUnidade(), $strCssRestricao, $strHtmlRestricao, $strJsGlobalRestricao, $strJsInicializarRestricao);
}
catch (InfraException $e) {
$objPagina->processarExcecao($e);
Expand Down Expand Up @@ -237,79 +271,83 @@
#txtUnidadePen{position:absolute;left:0%;top:53%;width:60%;}
#btnUnidadeRh2{position:absolute;left:61%;top:53%;}

<?=$strCssRestricao?>

</style>

<?php
$objPagina->fecharHead();
$objPagina->abrirBody($strTitulo, 'onload="inicializar();"');
?>
<form id="<?php print PEN_RECURSO_BASE; ?>_form" onsubmit="return onSubmit();" method="post" action="<?php //print $objSessaoSEI->assinarLink($strProprioLink); ?>">
<?php $objPagina->montarBarraComandosSuperior($arrComandos); ?>
<?php $objPagina->abrirAreaDados('15em'); ?>

<label id="lblUnidadeSei" for="id_unidade" class="infraLabelObrigatorio">Unidades - SEI <?php print $objSessao->getStrSiglaOrgaoUnidadeAtual(); ?>:</label>
<select id="selUnidadeSei" name="id_unidade" class="infraSelect" >
<?php print InfraINT::montarSelectArray('', 'Selecione', $objPenUnidadeDTO->getNumIdUnidade(), $arrMapIdUnidade); ?>
</select>

<label id="lblUnidadePen" for="txtUnidadePen" class="infraLabelObrigatorio">Unidades do PEN (Estruturas Organizacionais):</label>
<input type="text" id="txtUnidadePen" name="txtUnidadePen" class="infraText infraReadOnly <?php echo $classMarcacao; ?>" value="<?= PaginaSEI::tratarHTML($strNomeUnidadeSelecionada); ?>" tabindex=""/>
<button id="btnUnidadeRh2" type="button" class="infraButton">Pesquisar</button>
<input type="hidden" id="hdnUnidadeRh" name="id_unidade_rh" value="<?php echo PaginaSEI::tratarHTML($objPenUnidadeDTO->getNumIdUnidadeRH()); ?>" />

<?php print $objPagina->fecharAreaDados(); ?>

<?php $objPagina->abrirAreaDados('15em'); ?>
<?=$strHtmlRestricao?>
<?php print $objPagina->fecharAreaDados(); ?>
</form>
<?php $objPagina->fecharBody(); ?>
<?php $objPagina->montarJavaScript(); ?>
<script type="text/javascript">

<?=$strJsGlobalRestricao?>

var objAutoCompletarEstrutura = null;
var numIdRepositorioOrigem = '<? echo $numIdRepositorioOrigem; ?>';
var strNomeUnidadeSelecionada = '<? echo $strNomeUnidadeSelecionada; ?>';

function inicializar(){
objAutoCompletarEstrutura = new infraAjaxAutoCompletar('hdnUnidadeRh','txtUnidadePen','<?=$strLinkAjaxUnidade?>', "Nenhuma unidade foi encontrada");
objAutoCompletarEstrutura.bolExecucaoAutomatica = false;
objAutoCompletarEstrutura.mostrarAviso = true;
objAutoCompletarEstrutura.limparCampo = false;
objAutoCompletarEstrutura.tempoAviso = 10000000;

objAutoCompletarEstrutura.prepararExecucao = function(){
var parametros = 'palavras_pesquisa=' + document.getElementById('txtUnidadePen').value;
parametros += '&id_repositorio=' + numIdRepositorioOrigem
return parametros;
};

objAutoCompletarEstrutura.processarResultado = function(id,descricao,complemento){
window.infraAvisoCancelar();
};

$('#btnUnidadeRh2').click(function() {
$('#hdnUnidadeRh').val('');
objAutoCompletarEstrutura.executar();
objAutoCompletarEstrutura.procurar();
});
}


function onSubmit() {

var form = jQuery('#<?php print PEN_RECURSO_BASE; ?>_form');
var field = jQuery('select[name=id_unidade]', form);

if(field.val() === 'null' || field.val() == ''){
alert('Nenhuma "Unidades - SEI <?php print $objSessao->getStrSiglaOrgaoUnidadeAtual(); ?>" foi selecionada');
field.focus();
return false;
}

field = jQuery('#hdnUnidadeRh', form);

if(field.val() === 'null' || field.val() == '' || field.val() == '0' || field.val() == 0){
alert('Nenhum "ID da Unidade - Tramita GOV.BR" foi selecionada');
alert('Nenhum "ID da Unidade - PEN" foi selecionada');
field.focus();
return false;
}
}

</script>
<?php
$objPagina->fecharHead();
$objPagina->abrirBody($strTitulo, 'onload="inicializar();"');
?>
<form id="<?php print PEN_RECURSO_BASE; ?>_form" onsubmit="return onSubmit();" method="post" action="<?php //print $objSessaoSEI->assinarLink($strProprioLink); ?>">
<?php $objPagina->montarBarraComandosSuperior($arrComandos); ?>
<?php $objPagina->abrirAreaDados('15em'); ?>

<label id="lblUnidadeSei" for="id_unidade" class="infraLabelObrigatorio">Unidades - SEI <?php print $objSessao->getStrSiglaOrgaoUnidadeAtual(); ?>:</label>
<select id="selUnidadeSei" name="id_unidade" class="infraSelect" >
<?php print InfraINT::montarSelectArray('', 'Selecione', $objPenUnidadeDTO->getNumIdUnidade(), $arrMapIdUnidade); ?>
</select>

<label id="lblUnidadePen" for="txtUnidadePen" class="infraLabelObrigatorio">Unidades do Tramita GOV.BR (Estruturas Organizacionais):</label>
<input type="text" id="txtUnidadePen" name="txtUnidadePen" class="infraText infraReadOnly <?php echo $classMarcacao; ?>" value="<?= PaginaSEI::tratarHTML($strNomeUnidadeSelecionada); ?>" tabindex=""/>
<button id="btnUnidadeRh2" type="button" class="infraButton">Pesquisar</button>
<input type="hidden" id="hdnUnidadeRh" name="id_unidade_rh" value="<?php echo PaginaSEI::tratarHTML($objPenUnidadeDTO->getNumIdUnidadeRH()); ?>" />
<?=$strJsInicializarRestricao?>

<?php print $objPagina->fecharAreaDados(); ?>
</form>
<?php $objPagina->fecharBody(); ?>
</script>
<?php $objPagina->fecharHtml(); ?>
Loading

0 comments on commit 3612868

Please sign in to comment.