From 0d2ff516ef1a196dbd5fc6c9fa2907c62673b566 Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Del Cantoni Date: Wed, 25 Apr 2018 17:11:04 -0300 Subject: [PATCH] Correções de compatibilidade com SQLServer e compatibilidade de versão do módulo --- .editorconfig | 14 ++++++++++++++ PENIntegracao.php | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- pen_procedimento_expedir.php | 203 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------- rn/PENAgendamentoRN.php | 10 ++++++---- rn/PendenciasTramiteRN.php | 458 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ rn/ProcessarPendenciasRN.php | 342 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ rn/ProcessoEletronicoRN.php | 467 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- rn/ProcessoExpedidoRN.php | 90 ++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- rn/ReceberProcedimentoRN.php | 634 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- rn/ReceberReciboTramiteRN.php | 72 +++++++++++++++++++++++++++++++++++------------------------------------- 10 files changed, 1213 insertions(+), 1195 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..dba8ef8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*.php] +indent_style = space +indent_size = 4 +end_of_line = crlf +insert_final_newline = true +charset = latin1 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/PENIntegracao.php b/PENIntegracao.php index 159a0fa..32f7a5a 100644 --- a/PENIntegracao.php +++ b/PENIntegracao.php @@ -2,6 +2,8 @@ class PENIntegracao extends SeiIntegracao { + const COMPATIBILIDADE_MODULO_SEI = array('3.0.5', '3.0.6', '3.0.7', '3.0.8', '3.0.9', '3.0.11'); + private static $strDiretorio; public function getNome() { @@ -9,9 +11,10 @@ class PENIntegracao extends SeiIntegracao { } public function getVersao() { - return '1.1.1'; + return '1.1.2'; } + public function getInstituicao() { return 'Ministério do Planejamento - MPDG (Projeto Colaborativo no Portal do SPB)'; } @@ -21,7 +24,7 @@ class PENIntegracao extends SeiIntegracao { $objProcedimentoDTO = new ProcedimentoDTO(); $objProcedimentoDTO->setDblIdProcedimento($objSeiIntegracaoDTO->getIdProcedimento()); $objProcedimentoDTO->retTodos(); - + $objProcedimentoRN = new ProcedimentoRN(); $objProcedimentoDTO = $objProcedimentoRN->consultarRN0201($objProcedimentoDTO); @@ -32,8 +35,8 @@ class PENIntegracao extends SeiIntegracao { $dblIdProcedimento = $objProcedimentoDTO->getDblIdProcedimento(); $numIdUsuario = SessaoSEI::getInstance()->getNumIdUsuario(); $numIdUnidadeAtual = SessaoSEI::getInstance()->getNumIdUnidadeAtual(); - $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); - + $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); + //Verifica se o processo encontra-se aberto na unidade atual $objAtividadeRN = new AtividadeRN(); $objPesquisaPendenciaDTO = new PesquisaPendenciaDTO(); @@ -65,7 +68,7 @@ class PENIntegracao extends SeiIntegracao { if($objPenUnidadeRN->contar($objPenUnidadeDTO) != 0) { $numTabBotao = $objPaginaSEI->getProxTabBarraComandosSuperior(); $strAcoesProcedimento .= 'Envio Externo de Processo'; - } + } } //Apresenta o botão da página de recibos @@ -80,20 +83,20 @@ class PENIntegracao extends SeiIntegracao { $strAcoesProcedimento .= ''; } } - + //Apresenta o botão de cancelar trâmite $objAtividadeDTO = $objExpedirProcedimentoRN->verificarProcessoEmExpedicao($objSeiIntegracaoDTO->getIdProcedimento()); if ($objAtividadeDTO && $objAtividadeDTO->getNumIdTarefa() == ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO)) { $strAcoesProcedimento .= ''; $strAcoesProcedimento .= 'Cancelar Tramitação Externa'; $strAcoesProcedimento .= ''; - } - + } + return array($strAcoesProcedimento); } public function montarIconeControleProcessos($arrObjProcedimentoAPI = array()) { - + $arrStrIcone = array(); $arrDblIdProcedimento = array(); @@ -131,7 +134,7 @@ class PENIntegracao extends SeiIntegracao { return $arrStrIcone; } - + public function montarIconeProcesso(ProcedimentoAPI $objProcedimentoAP) { $dblIdProcedimento = $objProcedimentoAP->getIdProcedimento(); @@ -146,15 +149,15 @@ class PENIntegracao extends SeiIntegracao { $objArvoreAcaoItemAPI->setHref('javascript:alert(\'Um trâmite para esse processo foi recusado\');'); $objArvoreAcaoItemAPI->setSinHabilitado('S'); - + $objProcedimentoDTO = new ProcedimentoDTO(); $objProcedimentoDTO->setDblIdProcedimento($dblIdProcedimento); $objProcedimentoDTO->retDblIdProcedimento(); $objProcedimentoDTO->retStrStaEstadoProtocolo(); - + $objProcedimentoBD = new ProcedimentoBD(BancoSEI::getInstance()); $arrObjProcedimentoDTO = $objProcedimentoBD->consultar($objProcedimentoDTO); - + if (!empty($arrObjProcedimentoDTO)) { $dblIdProcedimento = $objProcedimentoDTO->getDblIdProcedimento(); $objPenProtocoloDTO = new PenProtocoloDTO(); @@ -176,7 +179,7 @@ class PENIntegracao extends SeiIntegracao { } public function montarIconeAcompanhamentoEspecial($arrObjProcedimentoDTO) { - + } public function getDiretorioImagens() { @@ -203,110 +206,121 @@ class PENIntegracao extends SeiIntegracao { } public static function getDiretorio() { - - $arrConfig = ConfiguracaoSEI::getInstance()->getValor('SEI', 'Modulos'); $strModulo = $arrConfig['PENIntegracao']; - return "modulos/".$strModulo; } - public function processarControlador($strAcao) { + public function processarControlador($strAcao) + { + //Configuração de páginas do contexto da árvore do processo para apresentação de erro de forma correta + $bolArvore = in_array($strAcao, array('pen_procedimento_expedir', 'pen_procedimento_estado')); + PaginaSEI::getInstance()->setBolArvore($bolArvore); + + if (strpos($strAcao, 'pen_') === false) { + return false; + } + + PENIntegracao::validarCompatibilidadeModulo(); + switch ($strAcao) { case 'pen_procedimento_expedir': require_once dirname(__FILE__) . '/pen_procedimento_expedir.php'; - return true; - //TODO: Alterar nome do recurso para pen_procedimento_expedir_unidade_sel + break; + case 'pen_unidade_sel_expedir_procedimento': require_once dirname(__FILE__) . '/pen_unidade_sel_expedir_procedimento.php'; - return true; + break; case 'pen_procedimento_processo_anexado': require_once dirname(__FILE__) . '/pen_procedimento_processo_anexado.php'; - return true; + break; case 'pen_procedimento_cancelar_expedir': require_once dirname(__FILE__) . '/pen_procedimento_cancelar_expedir.php'; - return true; + break; case 'pen_procedimento_expedido_listar': require_once dirname(__FILE__) . '/pen_procedimento_expedido_listar.php'; - return true; + break; case 'pen_map_tipo_documento_envio_listar': case 'pen_map_tipo_documento_envio_excluir': case 'pen_map_tipo_documento_envio_desativar': case 'pen_map_tipo_documento_envio_ativar': require_once dirname(__FILE__) . '/pen_map_tipo_documento_envio_listar.php'; - return true; + break; case 'pen_map_tipo_documento_envio_cadastrar': case 'pen_map_tipo_documento_envio_visualizar': require_once dirname(__FILE__) . '/pen_map_tipo_documento_envio_cadastrar.php'; - return true; + break; case 'pen_map_tipo_documento_recebimento_listar': case 'pen_map_tipo_documento_recebimento_excluir': require_once dirname(__FILE__) . '/pen_map_tipo_documento_recebimento_listar.php'; - return true; + break; case 'pen_map_tipo_documento_recebimento_cadastrar': case 'pen_map_tipo_documento_recebimento_visualizar': require_once dirname(__FILE__) . '/pen_map_tipo_documento_recebimento_cadastrar.php'; - return true; + break; case 'pen_apensados_selecionar_expedir_procedimento': require_once dirname(__FILE__) . '/apensados_selecionar_expedir_procedimento.php'; - return true; + break; case 'pen_procedimento_estado': require_once dirname(__FILE__) . '/pen_procedimento_estado.php'; - return true; - + break; + // Mapeamento de Hipóteses Legais de Envio case 'pen_map_hipotese_legal_envio_cadastrar': case 'pen_map_hipotese_legal_envio_visualizar': require_once dirname(__FILE__) . '/pen_map_hipotese_legal_envio_cadastrar.php'; - return true; - + break; + case 'pen_map_hipotese_legal_envio_listar': case 'pen_map_hipotese_legal_envio_excluir': require_once dirname(__FILE__) . '/pen_map_hipotese_legal_envio_listar.php'; - return true; - + break; + // Mapeamento de Hipóteses Legais de Recebimento case 'pen_map_hipotese_legal_recebimento_cadastrar': case 'pen_map_hipotese_legal_recebimento_visualizar': require_once dirname(__FILE__) . '/pen_map_hipotese_legal_recebimento_cadastrar.php'; - return true; - + break; + case 'pen_map_hipotese_legal_recebimento_listar': case 'pen_map_hipotese_legal_recebimento_excluir': require_once dirname(__FILE__) . '/pen_map_hipotese_legal_recebimento_listar.php'; - return true; - + break; + case 'pen_map_hipotese_legal_padrao_cadastrar': case 'pen_map_hipotese_legal_padrao_visualizar': require_once dirname(__FILE__) . '/pen_map_hipotese_legal_padrao_cadastrar.php'; - return true; - + break; + case 'pen_map_unidade_cadastrar': case 'pen_map_unidade_visualizar': require_once dirname(__FILE__) . '/pen_map_unidade_cadastrar.php'; - return true; - + break; + case 'pen_map_unidade_listar': case 'pen_map_unidade_excluir': require_once dirname(__FILE__) . '/pen_map_unidade_listar.php'; - return true; - + break; + case 'pen_parametros_configuracao': case 'pen_parametros_configuracao_salvar': require_once dirname(__FILE__) . '/pen_parametros_configuracao.php'; - return true; + break; + default: + return false; + break; } - return false; + return true; } public function processarControladorAjax($strAcao) { @@ -325,7 +339,7 @@ class PENIntegracao extends SeiIntegracao { break; case 'pen_apensados_auto_completar_expedir_procedimento': - //TODO: Validar parâmetros passados via ajax + //TODO: Validar parâmetros passados via ajax $dblIdProcedimentoAtual = $_POST['id_procedimento_atual']; $numIdUnidadeAtual = SessaoSEI::getInstance()->getNumIdUnidadeAtual(); $arrObjProcedimentoDTO = ProcessoEletronicoINT::autoCompletarProcessosApensados($dblIdProcedimentoAtual, $numIdUnidadeAtual, $_POST['palavras_pesquisa']); @@ -340,4 +354,10 @@ class PENIntegracao extends SeiIntegracao { return $xml; } -} \ No newline at end of file + public static function validarCompatibilidadeModulo($bolGerarExcecao = true, $strVersaoSEI = SEI_VERSAO) { + $objPENIntegracao = new PENIntegracao(); + if(!in_array($strVersaoSEI, self::COMPATIBILIDADE_MODULO_SEI)) { + throw new InfraException(sprintf("Módulo %s (versão %s) não é compatível com a versão %s do SEI.", $objPENIntegracao->getNome(), $objPENIntegracao->getVersao(), $strVersaoSEI)); + } + } +} diff --git a/pen_procedimento_expedir.php b/pen_procedimento_expedir.php index 1710b89..5cf0d55 100644 --- a/pen_procedimento_expedir.php +++ b/pen_procedimento_expedir.php @@ -12,11 +12,11 @@ try { $objSessaoSEI = SessaoSEI::getInstance(); $objPaginaSEI = PaginaSEI::getInstance(); - + $objSessaoSEI->validarLink(); $objSessaoSEI->validarPermissao($_GET['acao']); - + $strParametros = ''; $bolErrosValidacao = false; $executarExpedicao = false; @@ -41,21 +41,18 @@ try { if (isset($_GET['executar'])) { $executarExpedicao = filter_var($_GET['executar'], FILTER_VALIDATE_BOOLEAN); } - - - - + //$objPaginaSEI->setBolExibirMensagens(false); //$resultProcessosAnexados = $objExpedirProcedimentosRN->consultarProcessosApensados($idProcedimento); - + //$strLinkAssuntosSelecao = $objSessaoSEI->assinarLink('controlador.php?acao=pen_procedimento_processo_anexado&tipo_selecao=2&id_object=objLupaAssuntos'); - + switch ($_GET['acao']) { case 'pen_procedimento_expedir': - + $strTitulo = 'Envio Externo de Processo'; $arrComandos[] = ''; $arrComandos[] = ''; @@ -64,57 +61,57 @@ try { //Obter dados do repositório em que o SEI está registrado (Repositório de Origem) $objPenParametroRN = new PenParametroRN(); $numIdRepositorioOrigem = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); - + //Preparação dos dados para montagem da tela de expedição de processos - $repositorios = $objExpedirProcedimentosRN->listarRepositoriosDeEstruturas(); + $repositorios = $objExpedirProcedimentosRN->listarRepositoriosDeEstruturas(); $motivosDeUrgencia = $objExpedirProcedimentosRN->consultarMotivosUrgencia(); $idRepositorioSelecionado = (isset($numIdRepositorio)) ? $numIdRepositorio : ''; $strItensSelRepositorioEstruturas = InfraINT::montarSelectArray('', 'Selecione', $idRepositorioSelecionado, $repositorios); - + $idMotivosUrgenciaSelecionado = (isset($idMotivosUrgenciaSelecionado)) ? $idMotivosUrgenciaSelecionado : ''; - $strItensSelMotivosUrgencia = InfraINT::montarSelectArray('', 'Selecione', $idMotivosUrgenciaSelecionado, $motivosDeUrgencia); + $strItensSelMotivosUrgencia = InfraINT::montarSelectArray('', 'Selecione', $idMotivosUrgenciaSelecionado, $motivosDeUrgencia); - $strLinkAjaxUnidade = $objSessaoSEI->assinarLink('controlador_ajax.php?acao_ajax=pen_unidade_auto_completar_expedir_procedimento'); + $strLinkAjaxUnidade = $objSessaoSEI->assinarLink('controlador_ajax.php?acao_ajax=pen_unidade_auto_completar_expedir_procedimento'); $strLinkAjaxProcedimentoApensado = $objSessaoSEI->assinarLink('controlador_ajax.php?acao_ajax=pen_apensados_auto_completar_expedir_procedimento'); - + //$strLinkUnidadeSelecao = $objSessaoSEI->assinarLink('controlador.php?acao=pen_unidade_sel_expedir_procedimento&tipo_selecao=2&id_object=objLupaUnidades'); //$strLinkRepositorioSelecao = $objSessaoSEI->assinarLink('controlador.php?acao=pen_repositorio_selecionar_expedir_procedimento&tipo_selecao=2&id_object=objLupaProcedimentosApensados'); $strLinkProcedimentosApensadosSelecao = $objSessaoSEI->assinarLink('controlador.php?acao=pen_apensados_selecionar_expedir_procedimento&tipo_selecao=2&id_object=objLupaProcedimentosApensados&id_procedimento='.$idProcedimento.''); //TODO: Obter dados do repositório e unidade de orígem através de serviço do PEN //Obtenção dos parâmetros selecionados pelo usuário - + //TODO: Obter repositório de origem a partir dos parâmetros do sistema //$numIdRepositorioOrigem = 1; //$numIdUnidadeOrigem = 161313; - - //TODO: Atualmente, o campo ID Unidade RH irá conter o código da unidade registrado no barramento. + + //TODO: Atualmente, o campo ID Unidade RH irá conter o código da unidade registrado no barramento. //A ideia é que no futura, o campo contenha o código do SIORG e busque no barramento qual o código da estrutura //$objSessaoSEI->getNumIdUnidadeAtual() - $objUnidadeDTO = new PenUnidadeDTO(); + $objUnidadeDTO = new PenUnidadeDTO(); $objUnidadeDTO->retNumIdUnidadeRH(); $objUnidadeDTO->setNumIdUnidade($objSessaoSEI->getNumIdUnidadeAtual()); - + $objUnidadeRN = new UnidadeRN(); $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); - + if (!$objUnidadeDTO) { throw new InfraException("A unidade atual não foi mapeada."); } - - $numIdUnidadeOrigem = $objUnidadeDTO->getNumIdUnidadeRH(); + + $numIdUnidadeOrigem = $objUnidadeDTO->getNumIdUnidadeRH(); $numIdProcedimento = $_POST['hdnIdProcedimento']; $strProtocoloProcedimentoFormatado = $_POST['txtProtocoloExibir']; $numIdRepositorio = $_POST['selRepositorioEstruturas']; $strRepositorio = (array_key_exists($numIdRepositorio, $repositorios) ? $repositorios[$numIdRepositorio] : ''); $numIdUnidadeDestino = $_POST['hdnIdUnidade']; - $strNomeUnidadeDestino = $_POST['txtUnidade']; + $strNomeUnidadeDestino = $_POST['txtUnidade']; $numIdMotivoUrgente = $_POST['selMotivosUrgencia']; - $boolSinUrgente = $objPaginaSEI->getCheckbox($_POST['chkSinUrgente'], true, false); + $boolSinUrgente = $objPaginaSEI->getCheckbox($_POST['chkSinUrgente'], true, false); $arrIdProcedimentosApensados = $objPaginaSEI->getArrValuesSelect($_POST['hdnProcedimentosApensados']); - + //Carregar dados do procedimento na primeiro acesso à página if (!isset($_POST['hdnIdProcedimento'])) { @@ -125,13 +122,13 @@ try { // // try { // //Validação das pré-condições para que o processo possa ser expedido -// $objInfraException = new InfraException(); +// $objInfraException = new InfraException(); // $objExpedirProcedimentosRN->validarPreCondicoesExpedirProcedimento($objInfraException, $objProcedimentoDTO); // $objInfraException->lancarValidacoes(); // } catch(Exception $e){ // $bolErrosValidacao = true; // $objPaginaSEI->processarExcecao($e); -// } +// } $numIdProcedimento = $objProcedimentoDTO->getDblIdProcedimento(); $strProtocoloProcedimentoFormatado = $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado(); @@ -141,14 +138,14 @@ try { // Executado dentro da window //------------------------------------------------------------------ //Tratamento da ação de expedir o procedimento - if(isset($_POST['sbmExpedir'])) { + if(isset($_POST['sbmExpedir'])) { $strTituloPagina = "Envio externo do processo $strProtocoloProcedimentoFormatado"; - $objPaginaSEI->prepararBarraProgresso($strTitulo, $strTituloPagina); - - $objExpedirProcedimentoDTO = new ExpedirProcedimentoDTO(); - - //TODO: Remover atribuição de tais parâmetros de + $objPaginaSEI->prepararBarraProgresso($strTitulo, $strTituloPagina); + + $objExpedirProcedimentoDTO = new ExpedirProcedimentoDTO(); + + //TODO: Remover atribuição de tais parâmetros de $objExpedirProcedimentoDTO->setNumIdRepositorioOrigem($numIdRepositorioOrigem); $objExpedirProcedimentoDTO->setNumIdUnidadeOrigem($numIdUnidadeOrigem); @@ -165,10 +162,10 @@ try { try { $respostaExpedir = $objExpedirProcedimentosRN->expedirProcedimento($objExpedirProcedimentoDTO); - + echo ''; //Botão para fechar a janela - } catch(\Exception $e) { + } catch(\Exception $e) { $objPaginaSEI->processarExcecao($e); } @@ -181,11 +178,11 @@ try { throw new InfraException("Ação '" . $_GET['acao'] . "' não reconhecida."); } -} catch (Exception $e) { +} catch (Exception $e) { //$objPaginaSEI->finalizarBarraProgresso($objSessaoSEI->assinarLink('controlador.php?acao='.$objPaginaSEI->getAcaoRetorno().'&acao_origem='.$_GET['acao'].'#ID-'.$IdProcedimento)); //$objPaginaSEI->processarExcecao($e); throw new InfraException("Error Processing Request 11", $e); - + } $objPaginaSEI->montarDocType(); @@ -231,28 +228,28 @@ var objJanelaExpedir = null; var evnJanelaExpedir = null; function inicializar() { - + objLupaProcedimentosApensados = new infraLupaSelect('selProcedimentosApensados','hdnProcedimentosApensados',''); - + objAutoCompletarEstrutura = new infraAjaxAutoCompletar('hdnIdUnidade','txtUnidade','', "Nenhuma unidade foi encontrada"); objAutoCompletarEstrutura.bolExecucaoAutomatica = false; objAutoCompletarEstrutura.mostrarAviso = true; //objAutoCompletarEstrutura.tamanhoMinimo = 3; - objAutoCompletarEstrutura.limparCampo = false; + objAutoCompletarEstrutura.limparCampo = false; //objAutoCompletarEstrutura.mostrarImagemVerificado = true; objAutoCompletarEstrutura.tempoAviso = 10000000; objAutoCompletarEstrutura.prepararExecucao = function(){ var selRepositorioEstruturas = document.getElementById('selRepositorioEstruturas'); var parametros = 'palavras_pesquisa=' + document.getElementById('txtUnidade').value; - parametros += '&id_repositorio=' + selRepositorioEstruturas.options[selRepositorioEstruturas.selectedIndex].value + parametros += '&id_repositorio=' + selRepositorioEstruturas.options[selRepositorioEstruturas.selectedIndex].value return parametros; }; objAutoCompletarEstrutura.processarResultado = function(id,descricao,complemento){ - window.infraAvisoCancelar(); + window.infraAvisoCancelar(); }; - + $('#hdnIdUnidade2').click(function() { objAutoCompletarEstrutura.executar(); objAutoCompletarEstrutura.procurar(); @@ -367,28 +364,28 @@ function avaliarPreCondicoes() { infraDesabilitarCamposDiv(document.getElementById('divProcedimentosApensados')); infraDesabilitarCamposDiv(document.getElementById('divSinUrgente')); infraDesabilitarCamposDiv(document.getElementById('divMotivosUrgencia')); - + var smbExpedir = document.getElementById('sbmExpedir'); smbExpedir.disabled = true; - smbExpedir.className += ' infraReadOnly'; - } + smbExpedir.className += ' infraReadOnly'; + } } /** * Simula o evento onclose do pop-up - * + * * @return {null} */ function monitorarJanela(){ - + if(objJanelaExpedir.closed) { - + window.clearInterval(evnJanelaExpedir); - + jQuery('#divInfraModalFundo', window.parent.document).css('visibility', 'hidden'); var strDestino = 'assinarLink('controlador.php?acao=procedimento_trabalhar&acao_origem=procedimento_controlar&acao_retorno=procedimento_controlar&id_procedimento='.$idProcedimento); ?>'; - + if(strDestino) { window.top.location = strDestino; } @@ -397,22 +394,22 @@ function monitorarJanela(){ /** * Gera a pop-up de expedir procedimento e cria os gatilho para o próprio fechamento - * + * * @return {null} */ function abrirJanela(nome,largura,altura){ - + var opcoes = 'location=0,status=0,resizable=0,scrollbars=1,width=' + largura + ',height=' + altura; var largura = largura || 100; var altura = altura || 100; - + var janela = window.open('', nome, opcoes); - + try{ if (INFRA_CHROME>17) { setTimeout(function() { janela.moveTo(((screen.availWidth/2) - (largura/2)),((screen.availHeight/2) - (altura/2))); - },100); + },100); } else { janela.moveTo(((screen.availWidth/2) - (largura/2)),((screen.availHeight/2) - (altura/2))); @@ -420,8 +417,8 @@ function abrirJanela(nome,largura,altura){ janela.focus(); } catch(e){} - - + + infraJanelaModal = janela; var div = parent.document.getElementById('divInfraModalFundo'); @@ -430,11 +427,11 @@ function abrirJanela(nome,largura,altura){ div = parent.document.createElement('div'); div.id = 'divInfraModalFundo'; div.className = 'infraFundoTransparente'; - + if (INFRA_IE > 0 && INFRA_IE < 7){ ifr = parent.document.createElement('iframe'); ifr.className = 'infraFundoIE'; - div.appendChild(ifr); + div.appendChild(ifr); }else{ div.onclick = function(){ try{ @@ -442,19 +439,19 @@ function abrirJanela(nome,largura,altura){ }catch(exc){ } } } - parent.document.body.appendChild(div); + parent.document.body.appendChild(div); } - + if (INFRA_IE==0 || INFRA_IE>=7){ div.style.position = 'fixed'; } - + div.style.width = parent.infraClientWidth() + 'px'; div.style.height = parent.infraClientHeight() + 'px'; div.style.visibility = 'visible'; - + evnJanelaExpedir = window.setInterval('monitorarJanela()', 100); - + return janela; } @@ -473,58 +470,58 @@ function abrirBarraProgresso(form, action, largura, altura){ function enviarForm(el){ - + var button = jQuery(el); var label = button.html(); - + button.attr('disabled', 'disabled').html('Validando...'); var strUrl = 'formatarXHTML($objSessaoSEI->assinarLink('controlador_ajax.php?acao_ajax=pen_procedimento_expedir_validar'.$strParametros)); ?>'; - var objData = {}; + var objData = {}; jQuery.each(['txtProtocoloExibir', 'selRepositorioEstruturas', 'hdnIdUnidade'], function(index, name){ - + var objInput = jQuery('#' + name); - + objData[name] = objInput.val(); }); - + jQuery('option', 'select#selProcedimentosApensados').each(function(index, element){ - + objData['selProcedimentosApensados['+ index +']'] = jQuery(element).attr('value'); }); - + jQuery.ajax({ - + url:strUrl, method:'POST', dataType:'json', data:objData, success:function(resp, textStatus, jqXHR) { - + if(!resp.sucesso) { - + var strRespMensagem = "Verifique alguns erros no processo antes de tramitar:\n\n"; - + jQuery.each(resp.erros, function(strProtocoloFormatado, arrStrMensagem){ - + strRespMensagem += "Nr. Processo: " + strProtocoloFormatado + ".\n"; - + jQuery.each(arrStrMensagem, function(index, strMensagem){ - + strRespMensagem += " - " + strMensagem + "\n"; }); - + strRespMensagem += "\n"; }); alert(strRespMensagem); return false; } - var strAction = 'formatarXHTML($objSessaoSEI->assinarLink('controlador.php?acao='.$_GET['acao'] . '&acao_origem=' . $_GET['acao'] . '&acao_destino=' . $_GET['acao'] .'&'.$strParametros.'&executar=1')); ?>'; + var strAction = 'formatarXHTML($objSessaoSEI->assinarLink('controlador.php?acao='.$_GET['acao'] . '&acao_origem=' . $_GET['acao'] . '&acao_destino=' . $_GET['acao'] .'&'.$strParametros.'&executar=1')); ?>'; abrirBarraProgresso(document.forms['frmExpedirProcedimento'], strAction, 600, 200); } }).done(function(){ - + button.removeAttr('disabled').html(label); }); } @@ -542,55 +539,55 @@ $objPaginaSEI->abrirBody($strTitulo, 'onload="inicializar();"'); //$objPaginaSEI->montarBarraLocalizacao($strTitulo); $objPaginaSEI->montarBarraComandosSuperior($arrComandos); //$objPaginaSEI->montarAreaValidacao(); -?> +?>
- +
- +
- +
- +
- - + + Selecionar Unidades - +
- setCheckbox($boolSinUrgente, true, false) ?> tabindex="getProxTabDados() ?>" /> + setCheckbox($boolSinUrgente, true, false) ?> tabindex="getProxTabDados() ?>" />
- - - + + + montarBarraComandosInferior($arrComandos); ?> @@ -599,4 +596,4 @@ $objPaginaSEI->montarBarraComandosSuperior($arrComandos); $objPaginaSEI->montarAreaDebug(); $objPaginaSEI->fecharBody(); $objPaginaSEI->fecharHtml(); -?> \ No newline at end of file +?> diff --git a/rn/PENAgendamentoRN.php b/rn/PENAgendamentoRN.php index 15fc790..61fd54e 100644 --- a/rn/PENAgendamentoRN.php +++ b/rn/PENAgendamentoRN.php @@ -174,7 +174,7 @@ class PENAgendamentoRN extends InfraRN { if ($objProcessoEletronico) { - //Busca o processo + //Busca o processo $objProtocolo = new PenProtocoloDTO(); $objProtocolo->setDblIdProtocolo($objProcessoEletronico->getDblIdProcedimento()); @@ -242,12 +242,12 @@ class PENAgendamentoRN extends InfraRN { $cont++; $servico[] = 'ProcessarPendenciasRN.php'; } - + $strServicos = array_map(function($item){ return "- $item"; }, $servico); $strServicos = implode("\n", $strServicos); if ($cont > 0) { - $msg = "Identificada inconsistência nos serviços de integração com o Processo Eletrônico Nacional - PEN.\n" . + $msg = "Identificada inconsistência nos serviços de integração com o Processo Eletrônico Nacional - PEN.\n" . "Os seguintes serviços necessários para o correto funcionamento da integração não estão ativos: \n $strServicos \n\n" . "Favor, entrar em contato com a equipe de suporte técnico."; throw new InfraException($msg, $e); @@ -265,12 +265,14 @@ class PENAgendamentoRN extends InfraRN { */ public function atualizarHipotesesLegais() { try { + + PENIntegracao::validarCompatibilidadeModulo(); $objBD = new PenHipoteseLegalBD($this->inicializarObjInfraIBanco()); $processoEletronicoRN = new ProcessoEletronicoRN(); $hipotesesPen = $processoEletronicoRN->consultarHipotesesLegais(); if(empty($hipotesesPen)){ - throw new InfraException('Não foi possível obter as hipóteses legais dos serviços de integração'); + throw new InfraException('Não foi possível obter as hipóteses legais dos serviços de integração'); } //Para cada hipótese vinda do PEN será verificado a existencia. diff --git a/rn/PendenciasTramiteRN.php b/rn/PendenciasTramiteRN.php index 4f36118..b791fba 100644 --- a/rn/PendenciasTramiteRN.php +++ b/rn/PendenciasTramiteRN.php @@ -1,228 +1,230 @@ -strLocalizacaoCertificadoDigital = $objPenParametroRN->getParametro('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL'); - $this->strEnderecoServicoPendencias = $objPenParametroRN->getParametro('PEN_ENDERECO_WEBSERVICE_PENDENCIAS'); - //TODO: Urgente - Remover senha do certificado de autenticao dos servios do PEN da tabela de parâmetros - $this->strSenhaCertificadoDigital = $objPenParametroRN->getParametro('PEN_SENHA_CERTIFICADO_DIGITAL'); - - if (InfraString::isBolVazia($this->strEnderecoServicoPendencias)) { - throw new InfraException('Endereço do serviço de pendências de trâmite do Processo Eletrônico Nacional (PEN) não informado.'); - } - - if (!@file_get_contents($this->strLocalizacaoCertificadoDigital)) { - throw new InfraException("Certificado digital de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não encontrado."); - } - - if (InfraString::isBolVazia($this->strSenhaCertificadoDigital)) { - throw new InfraException('Dados de autenticação do serviço de integração do Processo Eletrónico Nacional(PEN) não informados.'); - } - } - - public function monitorarPendencias() { - try{ - ini_set('max_execution_time','0'); - ini_set('memory_limit','-1'); - - InfraDebug::getInstance()->setBolLigado(true); - InfraDebug::getInstance()->setBolDebugInfra(false); - InfraDebug::getInstance()->setBolEcho(false); - InfraDebug::getInstance()->limpar(); - - $objPenParametroRN = new PenParametroRN(); - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); - - $numSeg = InfraUtil::verificarTempoProcessamento(); - InfraDebug::getInstance()->gravar('MONITORANDO OS TRÂMITES PENDENTES ENVIADOS PARA O RGO (PEN)'); - echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de monitoramento de pendências de trâmites de processos...\n"; - - try{ - $numIdTramiteRecebido = 0; - $strStatusTramiteRecebido = ''; - $numQuantidadeErroTramite = 0; - $arrQuantidadeErrosTramite = array(); - - //TODO: Tratar quantidade de erros o sistema consecutivos para um tramite de processo - //Alcanado est quantidade, uma pendncia posterior dever ser obtida do barramento - while (true) { - $objPendenciaDTO = $this->obterPendenciasTramite($numIdTramiteRecebido); - if(isset($objPendenciaDTO)) { - if($numIdTramiteRecebido != $objPendenciaDTO->getNumIdentificacaoTramite() || - $strStatusTramiteRecebido != $objPendenciaDTO->getStrStatus()) { - $numIdTramiteRecebido = $objPendenciaDTO->getNumIdentificacaoTramite(); - $strStatusTramiteRecebido = $objPendenciaDTO->getStrStatus(); - $this->enviarPendenciaFilaProcessamento($objPendenciaDTO); - } - } - sleep(5); - } - } - //TODO: Urgente: Tratar erro especfico de timeout e refazer a requisio - catch(Exception $e) { - $strAssunto = 'Erro monitorando pendências.'; - $strErro = InfraException::inspecionar($e); - LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro); - } - - $numSeg = InfraUtil::verificarTempoProcessamento($numSeg); - InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s'); - InfraDebug::getInstance()->gravar('FIM'); - LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug()); - - } - catch(Exception $e) { - InfraDebug::getInstance()->setBolLigado(false); - InfraDebug::getInstance()->setBolDebugInfra(false); - InfraDebug::getInstance()->setBolEcho(false); - throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.',$e); - } - } - - private function configurarRequisicao() - { - $curl = curl_init($this->strEnderecoServicoPendencias); - curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias); - curl_setopt($curl, CURLOPT_HEADER, 0); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalizacaoCertificadoDigital); - curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strSenhaCertificadoDigital); - curl_setopt($curl, CURLOPT_TIMEOUT, 60); //timeout in seconds - return $curl; - } - - private function obterPendenciasTramite($parNumIdTramiteRecebido) - { - $resultado = null; - $curl = $this->configurarRequisicao(); - - try{ - if(isset($parNumIdTramiteRecebido)) { - curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias . "?idTramiteDaPendenciaRecebida=" . $parNumIdTramiteRecebido); - } - - //A seguinte requisio ir aguardar a notificao do PEN sobre uma nova pendncia - //ou at o lanamento da exceo de timeout definido pela infraestrutura da soluo - //Ambos os comportamentos so esperados para a requisio abaixo. - $strResultadoJSON = curl_exec($curl); - - if(curl_errno($curl)) { - if (curl_errno($curl) != 28) - throw new InfraException("Erro na requisição do serviço de monitoramento de pendências. Curl: " . curl_errno($curl)); - } - - if(!InfraString::isBolVazia($strResultadoJSON)) { - $strResultadoJSON = json_decode($strResultadoJSON); - - if(isset($strResultadoJSON) && $strResultadoJSON->encontrou) { - $objPendenciaDTO = new PendenciaDTO(); - $objPendenciaDTO->setNumIdentificacaoTramite($strResultadoJSON->IDT); - $objPendenciaDTO->setStrStatus($strResultadoJSON->status); - $resultado = $objPendenciaDTO; - } - } - } - catch(Exception $e){ - curl_close($curl); - throw $e; - } - - curl_close($curl); - return $resultado; - } - - private function enviarPendenciaFilaProcessamento($objPendencia) - { - if(isset($objPendencia)) { - - $client = new GearmanClient(); - $client->addServer('localhost', 4730); - //$client->setCreatedCallback("create_change"); - //$client->setDataCallback("data_change"); - //$client->setStatusCallback("status_change"); - //$client->setCompleteCallback("complete_change"); - //$client->setFailCallback("fail_change"); - - $strWorkload = strval($objPendencia->getNumIdentificacaoTramite()); - - switch ($objPendencia->getStrStatus()) { - - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO: - $client->addTaskBackground('enviarComponenteDigital', $strWorkload, null); - break; - - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE: - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO: - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO: - $objPenParametroRN = new PenParametroRN(); - $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false); - $numCont = 0; - // Executa sempre + 1 alm do configurado no parâmetro para executar a recusa - while($numCont <= $numTentativas) { - $client->addTaskBackground('receberProcedimento', $strWorkload, null); - $numCont++; - } - break; - - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO: - $objPenParametroRN = new PenParametroRN(); - $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false); - $numCont = 0; - - while($numCont < $numTentativas) { - $client->addTaskBackground('receberReciboTramite', $strWorkload, null); - $numCont++; - } - break; - - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE: - break; - - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO: - break; - - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO: - $client->addTaskBackground("receberTramitesRecusados", $strWorkload, null);; - break; - - default: - //TODO: Alterar lgica para no deixar de processar demais pendncias retornadas pelo PEN - throw new Exception('Situação do trâmite não pode ser identificada.'); - break; - } - - $client->runTasks(); - } - } -} - -SessaoSEI::getInstance(false); -PendenciasTramiteRN::getInstance()->monitorarPendencias(); +strLocalizacaoCertificadoDigital = $objPenParametroRN->getParametro('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL'); + $this->strEnderecoServicoPendencias = $objPenParametroRN->getParametro('PEN_ENDERECO_WEBSERVICE_PENDENCIAS'); + //TODO: Urgente - Remover senha do certificado de autenticao dos servios do PEN da tabela de parâmetros + $this->strSenhaCertificadoDigital = $objPenParametroRN->getParametro('PEN_SENHA_CERTIFICADO_DIGITAL'); + + if (InfraString::isBolVazia($this->strEnderecoServicoPendencias)) { + throw new InfraException('Endereço do serviço de pendências de trâmite do Processo Eletrônico Nacional (PEN) não informado.'); + } + + if (!@file_get_contents($this->strLocalizacaoCertificadoDigital)) { + throw new InfraException("Certificado digital de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não encontrado."); + } + + if (InfraString::isBolVazia($this->strSenhaCertificadoDigital)) { + throw new InfraException('Dados de autenticação do serviço de integração do Processo Eletrónico Nacional(PEN) não informados.'); + } + } + + public function monitorarPendencias() { + try{ + ini_set('max_execution_time','0'); + ini_set('memory_limit','-1'); + + InfraDebug::getInstance()->setBolLigado(false); + InfraDebug::getInstance()->setBolDebugInfra(false); + InfraDebug::getInstance()->setBolEcho(false); + InfraDebug::getInstance()->limpar(); + + PENIntegracao::validarCompatibilidadeModulo(); + + $objPenParametroRN = new PenParametroRN(); + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); + + $numSeg = InfraUtil::verificarTempoProcessamento(); + InfraDebug::getInstance()->gravar('MONITORANDO OS TRÂMITES PENDENTES ENVIADOS PARA O RGO (PEN)'); + echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de monitoramento de pendências de trâmites de processos...\n"; + + try{ + $numIdTramiteRecebido = 0; + $strStatusTramiteRecebido = ''; + $numQuantidadeErroTramite = 0; + $arrQuantidadeErrosTramite = array(); + + //TODO: Tratar quantidade de erros o sistema consecutivos para um tramite de processo + //Alcanado est quantidade, uma pendncia posterior dever ser obtida do barramento + while (true) { + $objPendenciaDTO = $this->obterPendenciasTramite($numIdTramiteRecebido); + if(isset($objPendenciaDTO)) { + if($numIdTramiteRecebido != $objPendenciaDTO->getNumIdentificacaoTramite() || + $strStatusTramiteRecebido != $objPendenciaDTO->getStrStatus()) { + $numIdTramiteRecebido = $objPendenciaDTO->getNumIdentificacaoTramite(); + $strStatusTramiteRecebido = $objPendenciaDTO->getStrStatus(); + $this->enviarPendenciaFilaProcessamento($objPendenciaDTO); + } + } + sleep(5); + } + } + //TODO: Urgente: Tratar erro especfico de timeout e refazer a requisio + catch(Exception $e) { + $strAssunto = 'Erro monitorando pendências.'; + $strErro = InfraException::inspecionar($e); + LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro); + } + + $numSeg = InfraUtil::verificarTempoProcessamento($numSeg); + InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s'); + InfraDebug::getInstance()->gravar('FIM'); + LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug()); + + } + catch(Exception $e) { + InfraDebug::getInstance()->setBolLigado(false); + InfraDebug::getInstance()->setBolDebugInfra(false); + InfraDebug::getInstance()->setBolEcho(false); + throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.',$e); + } + } + + private function configurarRequisicao() + { + $curl = curl_init($this->strEnderecoServicoPendencias); + curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias); + curl_setopt($curl, CURLOPT_HEADER, 0); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalizacaoCertificadoDigital); + curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strSenhaCertificadoDigital); + curl_setopt($curl, CURLOPT_TIMEOUT, 60); //timeout in seconds + return $curl; + } + + private function obterPendenciasTramite($parNumIdTramiteRecebido) + { + $resultado = null; + $curl = $this->configurarRequisicao(); + + try{ + if(isset($parNumIdTramiteRecebido)) { + curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias . "?idTramiteDaPendenciaRecebida=" . $parNumIdTramiteRecebido); + } + + //A seguinte requisio ir aguardar a notificao do PEN sobre uma nova pendncia + //ou at o lanamento da exceo de timeout definido pela infraestrutura da soluo + //Ambos os comportamentos so esperados para a requisio abaixo. + $strResultadoJSON = curl_exec($curl); + + if(curl_errno($curl)) { + if (curl_errno($curl) != 28) + throw new InfraException("Erro na requisição do serviço de monitoramento de pendências. Curl: " . curl_errno($curl)); + } + + if(!InfraString::isBolVazia($strResultadoJSON)) { + $strResultadoJSON = json_decode($strResultadoJSON); + + if(isset($strResultadoJSON) && $strResultadoJSON->encontrou) { + $objPendenciaDTO = new PendenciaDTO(); + $objPendenciaDTO->setNumIdentificacaoTramite($strResultadoJSON->IDT); + $objPendenciaDTO->setStrStatus($strResultadoJSON->status); + $resultado = $objPendenciaDTO; + } + } + } + catch(Exception $e){ + curl_close($curl); + throw $e; + } + + curl_close($curl); + return $resultado; + } + + private function enviarPendenciaFilaProcessamento($objPendencia) + { + if(isset($objPendencia)) { + + $client = new GearmanClient(); + $client->addServer('localhost', 4730); + //$client->setCreatedCallback("create_change"); + //$client->setDataCallback("data_change"); + //$client->setStatusCallback("status_change"); + //$client->setCompleteCallback("complete_change"); + //$client->setFailCallback("fail_change"); + + $strWorkload = strval($objPendencia->getNumIdentificacaoTramite()); + + switch ($objPendencia->getStrStatus()) { + + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO: + $client->addTaskBackground('enviarComponenteDigital', $strWorkload, null); + break; + + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE: + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO: + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO: + $objPenParametroRN = new PenParametroRN(); + $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false); + $numCont = 0; + // Executa sempre + 1 alm do configurado no parâmetro para executar a recusa + while($numCont <= $numTentativas) { + $client->addTaskBackground('receberProcedimento', $strWorkload, null); + $numCont++; + } + break; + + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO: + $objPenParametroRN = new PenParametroRN(); + $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false); + $numCont = 0; + + while($numCont < $numTentativas) { + $client->addTaskBackground('receberReciboTramite', $strWorkload, null); + $numCont++; + } + break; + + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE: + break; + + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO: + break; + + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO: + $client->addTaskBackground("receberTramitesRecusados", $strWorkload, null);; + break; + + default: + //TODO: Alterar lgica para no deixar de processar demais pendncias retornadas pelo PEN + throw new Exception('Situação do trâmite não pode ser identificada.'); + break; + } + + $client->runTasks(); + } + } +} + +SessaoSEI::getInstance(false); +PendenciasTramiteRN::getInstance()->monitorarPendencias(); diff --git a/rn/ProcessarPendenciasRN.php b/rn/ProcessarPendenciasRN.php index 9f622be..462f141 100644 --- a/rn/ProcessarPendenciasRN.php +++ b/rn/ProcessarPendenciasRN.php @@ -2,194 +2,176 @@ require_once dirname(__FILE__) . '/../../../SEI.php'; -class ProcessarPendenciasRN extends InfraAgendamentoTarefa { - - private static $instance = null; - private $objGearmanWorker = null; - - protected function inicializarObjInfraIBanco(){ - return BancoSEI::getInstance(); - } - - public static function getInstance() { - if (self::$instance == null) { - self::$instance = new ProcessarPendenciasRN(ConfiguracaoSEI::getInstance(), SessaoSEI::getInstance(), BancoSEI::getInstance(), LogSEI::getInstance()); +class ProcessarPendenciasRN extends InfraAgendamentoTarefa +{ + private static $instance = null; + private $objGearmanWorker = null; + + protected function inicializarObjInfraIBanco() + { + return BancoSEI::getInstance(); } - return self::$instance; - } - - public function __construct() { - //Configuração do worker do Gearman para realizar o processamento de tarefas - $this->objGearmanWorker = new GearmanWorker(); - $this->objGearmanWorker->addServer('localhost', 4730); - $this->configurarCallbacks(); - } - - public function processarPendencias() - { - try{ - ini_set('max_execution_time','0'); - ini_set('memory_limit','-1'); - - InfraDebug::getInstance()->setBolLigado(true); - InfraDebug::getInstance()->setBolDebugInfra(true); - InfraDebug::getInstance()->setBolEcho(false); - InfraDebug::getInstance()->limpar(); - - $objPenParametroRN = new PenParametroRN(); - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); - - $numSeg = InfraUtil::verificarTempoProcessamento(); - - InfraDebug::getInstance()->gravar('ANALISANDO OS TRÂMITES PENDENTES ENVIADOS PARA O ÓRGÃO (PEN)'); - echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de processamento de pendências de trâmites de processos...\n"; - - while($this->objGearmanWorker->work()) - { - if ($this->objGearmanWorker->returnCode() != GEARMAN_SUCCESS) - { - $strAssunto = 'Erro executando agendamentos'; - $strErro = InfraException::inspecionar($e); - echo $strAssunto."\n\n".$strErro; - LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro); - break; - } + + public static function getInstance() + { + if (self::$instance == null) { + self::$instance = new ProcessarPendenciasRN(ConfiguracaoSEI::getInstance(), SessaoSEI::getInstance(), BancoSEI::getInstance(), LogSEI::getInstance()); } + return self::$instance; + } - $numSeg = InfraUtil::verificarTempoProcessamento($numSeg); - InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s'); - InfraDebug::getInstance()->gravar('FIM'); - LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug()); - } - catch(Exception $e){ - $strAssunto = 'Agendamento FALHOU'; - $strErro = ''; - $strErro .= 'Servidor: '.gethostname()."\n\n"; - $strErro .= 'Data/Hora: '.InfraData::getStrDataHoraAtual()."\n\n"; - $strErro .= 'Erro: '.InfraException::inspecionar($e); - LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro); + public function __construct() + { + //Configuração do worker do Gearman para realizar o processamento de tarefas + $this->objGearmanWorker = new GearmanWorker(); + $this->objGearmanWorker->addServer('localhost', 4730); + $this->configurarCallbacks(); } - } - - private function configurarCallbacks() - { - //PROCESSAMENTO DE TAREFAS RELACIONADAS AO ENVIO DE UM PROCESSO ELETRÔNICO - ////////////////////////////////////////////////////////////////////////// - - //Etapa 01 - Processamento de pendências envio dos metadados do processo - $this->objGearmanWorker->addFunction("enviarProcesso", function ($job) { - - InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [enviarProcesso] " . $job->workload()); - //TODO: Implementar tarefa relacionada - //... - - //Agendamento de nova tarefa para envio dos componentes digitais do processo - //$this->objGearmanClient->addTask("enviarComponenteDigital", $numIdentificacaoTramite, null); - - }); - - //Etapa 02 - Processamento de pendências envio dos componentes digitais do processo - $this->objGearmanWorker->addFunction("enviarComponenteDigital", function ($job) { - - InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [enviarComponenteDigital] " . $job->workload()); - //TODO: Implementar tarefa relacionada - //... - - //Agendamento de nova tarefa para recebimento do recibo de envio do processo - //$this->objGearmanClient->addTask("receberReciboTramite", $numIdentificacaoTramite, null); - - }); - - //Etapa 03 - Processamento de pendências de recebimento do recibo de envio do processo - $this->objGearmanWorker->addFunction("receberReciboTramite", function ($job) { - - $numIdentificacaoTramite = intval($job->workload()); - - InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberReciboTramite] " . $job->workload()); - //TODO: Implementar tarefa relacionada - - $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_RECIBO); - - if(!$objPenTramiteProcessadoRN->isProcedimentoRecebido($numIdentificacaoTramite)){ - - $objReceberReciboTramiteRN = new ReceberReciboTramiteRN(); - $objReceberReciboTramiteRN->receberReciboDeTramite($numIdentificacaoTramite); + + public function processarPendencias() + { + try{ + ini_set('max_execution_time','0'); + ini_set('memory_limit','-1'); + + InfraDebug::getInstance()->setBolLigado(false); + InfraDebug::getInstance()->setBolDebugInfra(false); + InfraDebug::getInstance()->setBolEcho(false); + InfraDebug::getInstance()->limpar(); + + PENIntegracao::validarCompatibilidadeModulo(); + + $objPenParametroRN = new PenParametroRN(); + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); + + $numSeg = InfraUtil::verificarTempoProcessamento(); + + InfraDebug::getInstance()->gravar('ANALISANDO OS TRÂMITES PENDENTES ENVIADOS PARA O ÓRGÃO (PEN)'); + echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de processamento de pendências de trâmites de processos...\n"; + + while($this->objGearmanWorker->work()) + { + if ($this->objGearmanWorker->returnCode() != GEARMAN_SUCCESS) { + $strErro = 'Erro no processamento de pendências do PEN. ErrorCode: ' . $this->objGearmanWorker->returnCode(); + LogSEI::getInstance()->gravar($strErro); + break; + } + } + + $numSeg = InfraUtil::verificarTempoProcessamento($numSeg); + InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s'); + InfraDebug::getInstance()->gravar('FIM'); + LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug()); } - }); - - - //PROCESSAMENTO DE TAREFAS RELACIONADAS AO RECEBIMENTO DE UM PROCESSO ELETRÔNICO - ////////////////////////////////////////////////////////////////////////// - - //Processamento de pendências de recebimento dos metadados do processo - $this->objGearmanWorker->addFunction("receberProcedimento", function ($job) { - - $numIdentificacaoTramite = intval($job->workload()); - - InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberProcedimento] " . $job->workload()); - - $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_PROCESSO); - - if(!$objPenTramiteProcessadoRN->isProcedimentoRecebido($numIdentificacaoTramite)){ - - $objReceberProcedimentoRN = new ReceberProcedimentoRN(); - $objReceberProcedimentoRN->receberProcedimento($numIdentificacaoTramite); - - //TODO: A próxima etapa deveria ser o recebimento dos componentes digitais, rotina tradada na função receberProcedimento(...) - //Agendamento de nova tarefa para envio do recibo de conclusão do trãmite - //ProcessarPendenciasRN::processarTarefa("enviarReciboTramiteProcesso", $job->workload()); - - /* $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); - $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($numIdentificacaoTramite, $arrayHash);*/ + catch(Exception $e) { + $strAssunto = 'Falha no processamento de pendências do PEN'; + $strErro = ''; + $strErro .= 'Servidor: '.gethostname()."\n\n"; + $strErro .= 'Data/Hora: '.InfraData::getStrDataHoraAtual()."\n\n"; + $strErro .= 'Erro: '.InfraException::inspecionar($e); + LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro); } - }); - - // Verifica no barramento os procedimentos que foram enviados por esta unidade - // e foram recusados pelas mesmas - $this->objGearmanWorker->addFunction("receberTramitesRecusados", function ($job) { - - InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberRecusaTramite] " . $job->workload()); - $numIdentificacaoTramite = intval($job->workload()); - - $objReceberProcedimentoRN = new ReceberProcedimentoRN(); - $objReceberProcedimentoRN->receberTramitesRecusados($numIdentificacaoTramite); - }); - - //Processamento de pendências de recebimento dos componentes digitais do processo - $this->objGearmanWorker->addFunction("receberComponenteDigital", function ($job) { - - InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberComponenteDigital] " . $job->workload()); - //TODO: A próxima etapa deveria ser o recebimento dos componentes digitais, rotina tradada na função receberProcedimento(...) - //... - - //Agendamento de nova tarefa para envio do recibo de conclusão do trâmite - ProcessarPendenciasRN::processarTarefa("enviarReciboTramiteProcesso", $job->workload()); - //$this->objGearmanClient->addTaskBackground("enviarReciboTramiteProcesso", $numIdentificacaoTramite, null); - }); - - //Processamento de pendências de envio do recibo de conclusão do trãmite do processo - $this->objGearmanWorker->addFunction("enviarReciboTramiteProcesso", function ($job) { - - InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [enviarReciboTramiteProcesso] " . $job->workload()); - - $numIdentificacaoTramite = intval($job->workload()); - $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); - $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($numIdentificacaoTramite); - }); - } - - static function processarTarefa($strNomeTarefa, $strWorkload) - { - $objClient = new GearmanClient(); - $objClient->addServer('localhost', 4730); - //$objClient->addTaskBackground($strNomeTarefa, $strWorkload); - //$objClient->runTasks(); - $objClient->doBackground($strNomeTarefa, $strWorkload); - } + } + + private function configurarCallbacks() + { + + //PROCESSAMENTO DE TAREFAS RELACIONADAS AO ENVIO DE UM PROCESSO ELETRÔNICO + ////////////////////////////////////////////////////////////////////////// + + //Etapa 01 - Processamento de pendências envio dos metadados do processo + $this->objGearmanWorker->addFunction("enviarProcesso", function ($job) { + + InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [enviarProcesso] " . $job->workload()); + //TODO: Implementar tarefa relacionada + //... + + //Agendamento de nova tarefa para envio dos componentes digitais do processo + //$this->objGearmanClient->addTask("enviarComponenteDigital", $numIdentificacaoTramite, null); + }); + + //Etapa 02 - Processamento de pendências envio dos componentes digitais do processo + $this->objGearmanWorker->addFunction("enviarComponenteDigital", function ($job) { + + InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [enviarComponenteDigital] " . $job->workload()); + //TODO: Implementar tarefa relacionada + //... + + //Agendamento de nova tarefa para recebimento do recibo de envio do processo + //$this->objGearmanClient->addTask("receberReciboTramite", $numIdentificacaoTramite, null); + }); + + //Etapa 03 - Processamento de pendências de recebimento do recibo de envio do processo + $this->objGearmanWorker->addFunction("receberReciboTramite", function ($job) { + $numIdentificacaoTramite = intval($job->workload()); + InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberReciboTramite] " . $job->workload()); + $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_RECIBO); + if(!$objPenTramiteProcessadoRN->isProcedimentoRecebido($numIdentificacaoTramite)){ + $objReceberReciboTramiteRN = new ReceberReciboTramiteRN(); + $objReceberReciboTramiteRN->receberReciboDeTramite($numIdentificacaoTramite); + } + }); + + //PROCESSAMENTO DE TAREFAS RELACIONADAS AO RECEBIMENTO DE UM PROCESSO ELETRÔNICO + ////////////////////////////////////////////////////////////////////////// + + //Processamento de pendências de recebimento dos metadados do processo + $this->objGearmanWorker->addFunction("receberProcedimento", function ($job) { + try{ + $numIdentificacaoTramite = intval($job->workload()); + InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberProcedimento] " . $job->workload()); + $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_PROCESSO); + + if(!$objPenTramiteProcessadoRN->isProcedimentoRecebido($numIdentificacaoTramite)){ + $objReceberProcedimentoRN = new ReceberProcedimentoRN(); + $objReceberProcedimentoRN->receberProcedimento($numIdentificacaoTramite); + } + } + catch(Exception $e){ + LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $strMensagem = ($e instanceof InfraException) ? $e->__toString() : $e->getMessage(); + $objProcessoEletronicoRN->recusarTramite($numIdentificacaoTramite, $strMensagem, ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); + } + }); + + // Verifica no barramento os procedimentos que foram enviados por esta unidade e foram recusados pelas mesmas + $this->objGearmanWorker->addFunction("receberTramitesRecusados", function ($job) { + InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberRecusaTramite] " . $job->workload()); + $numIdentificacaoTramite = intval($job->workload()); + $objReceberProcedimentoRN = new ReceberProcedimentoRN(); + $objReceberProcedimentoRN->receberTramitesRecusados($numIdentificacaoTramite); + }); + + //Processamento de pendências de recebimento dos componentes digitais do processo + $this->objGearmanWorker->addFunction("receberComponenteDigital", function ($job) { + + InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [receberComponenteDigital] " . $job->workload()); + //TODO: A próxima etapa deveria ser o recebimento dos componentes digitais, rotina tradada na função receberProcedimento(...) + + //Agendamento de nova tarefa para envio do recibo de conclusão do trâmite + ProcessarPendenciasRN::processarTarefa("enviarReciboTramiteProcesso", $job->workload()); + //$this->objGearmanClient->addTaskBackground("enviarReciboTramiteProcesso", $numIdentificacaoTramite, null); + }); + + //Processamento de pendências de envio do recibo de conclusão do trãmite do processo + $this->objGearmanWorker->addFunction("enviarReciboTramiteProcesso", function ($job) { + InfraDebug::getInstance()->gravar("[".date("d/m/Y H:i:s")."] Processando tarefa [enviarReciboTramiteProcesso] " . $job->workload()); + $numIdentificacaoTramite = intval($job->workload()); + $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); + $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($numIdentificacaoTramite); + }); + } + + static function processarTarefa($strNomeTarefa, $strWorkload) + { + $objClient = new GearmanClient(); + $objClient->addServer('localhost', 4730); + $objClient->doBackground($strNomeTarefa, $strWorkload); + } } -//TODO: Tratar envio de e-mail em caso de falhas de execução SessaoSEI::getInstance(false); ProcessarPendenciasRN::getInstance()->processarPendencias(); -?> \ No newline at end of file +?> diff --git a/rn/ProcessoEletronicoRN.php b/rn/ProcessoEletronicoRN.php index 3012405..553773d 100644 --- a/rn/ProcessoEletronicoRN.php +++ b/rn/ProcessoEletronicoRN.php @@ -1,9 +1,9 @@ "Formato de componente digital não suportado", "02" => "Componente digital corrompido", @@ -72,7 +72,7 @@ class ProcessoEletronicoRN extends InfraRN { "04" => "Espécie documental não mapeada no destinatário", "99" => "Outro" ); - + private $strWSDL = null; private $objPenWs = null; @@ -80,7 +80,7 @@ class ProcessoEletronicoRN extends InfraRN { public function __construct() { $objPenParametroRN = new PenParametroRN(); - + $strEnderecoWebService = $objPenParametroRN->getParametro('PEN_ENDERECO_WEBSERVICE'); $strLocalizacaoCertificadoDigital = $objPenParametroRN->getParametro('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL'); $strSenhaCertificadoDigital = $objPenParametroRN->getParametro('PEN_SENHA_CERTIFICADO_DIGITAL'); @@ -121,17 +121,17 @@ class ProcessoEletronicoRN extends InfraRN { { return BancoSEI::getInstance(); } - + /** * Verifica se o uma url esta ativa - * + * * @param string $strUrl url a ser testada * @param string $strLocalCert local físico do certificado .pem * @throws InfraException * @return null */ private function testaUrl($strUrl = '', $strLocalCert = ''){ - + $arrParseUrl = parse_url($this->strWSDL); // é melhor a página inicial que todo o arquivo wsdl $strUrl = $arrParseUrl['scheme'].'://'.$arrParseUrl['host']; @@ -147,37 +147,37 @@ class ProcessoEletronicoRN extends InfraRN { throw new InfraException('Falha de comunicação com o Barramento de Serviços. Por favor, tente novamente mais tarde.', $e); } } - + public function testarDisponibilidade(){ - + try{ $this->testaUrl($this->strWSDL, $this->options['local_cert']); return true; } catch (Exception $ex) { return false; } - + } - + private function getObjPenWs() { - - if($this->objPenWs == null) { + + if($this->objPenWs == null) { $this->testaUrl($this->strWSDL, $this->options['local_cert']); try { - + $objConfig = ConfiguracaoSEI::getInstance(); - + if($objConfig->isSetValor('SEI', 'LogPenWs')){ - + $this->objPenWs = new LogPenWs($objConfig->getValor('SEI', 'LogPenWs'), $this->strWSDL, $this->options); } else { - + $this->objPenWs = new BeSimple\SoapClient\SoapClient($this->strWSDL, $this->options); } } catch (Exception $e) { throw new InfraException('Erro acessando serviço.', $e); - } + } } return $this->objPenWs; @@ -198,7 +198,7 @@ class ProcessoEletronicoRN extends InfraRN { if(isset($result->repositoriosEncontrados->repositorio)){ if(!is_array($result->repositoriosEncontrados->repositorio)) { - $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); + $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); } foreach ($result->repositoriosEncontrados->repositorio as $repositorio) { @@ -211,7 +211,7 @@ class ProcessoEletronicoRN extends InfraRN { } } } catch(Exception $e){ - throw new InfraException("Erro durante obtenção dos repositórios", $e); + throw new InfraException("Erro durante obtenção dos repositórios", $e); } return $objRepositorioDTO; @@ -231,7 +231,7 @@ class ProcessoEletronicoRN extends InfraRN { if(isset($result->repositoriosEncontrados->repositorio)){ if(!is_array($result->repositoriosEncontrados->repositorio)) { - $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); + $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); } foreach ($result->repositoriosEncontrados->repositorio as $repositorio) { @@ -243,7 +243,7 @@ class ProcessoEletronicoRN extends InfraRN { } } } catch(Exception $e){ - throw new InfraException("Erro durante obtenção dos repositórios", $e); + throw new InfraException("Erro durante obtenção dos repositórios", $e); } return $arrObjRepositorioDTO; @@ -257,30 +257,30 @@ class ProcessoEletronicoRN extends InfraRN { $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = $numeroDeIdentificacaoDaEstrutura; $parametros->filtroDeEstruturas->apenasAtivas = false; - + $result = $this->getObjPenWs()->consultarEstruturas($parametros); if ($result->estruturasEncontradas->totalDeRegistros == 1) { $arrObjEstrutura = is_array($result->estruturasEncontradas->estrutura) ? $result->estruturasEncontradas->estrutura : array($result->estruturasEncontradas->estrutura); $objEstrutura = current($arrObjEstrutura); - + $objEstrutura->nome = utf8_decode($objEstrutura->nome); $objEstrutura->sigla = utf8_decode($objEstrutura->sigla); - + if ($bolRetornoRaw !== false) { if (isset($objEstrutura->hierarquia) && isset($objEstrutura->hierarquia->nivel)) { if (!is_array($objEstrutura->hierarquia->nivel)) { $objEstrutura->hierarquia->nivel = array($objEstrutura->hierarquia->nivel); } - + $objEstrutura->hierarquia->nivel = (array) $objEstrutura->hierarquia->nivel; foreach ($objEstrutura->hierarquia->nivel as &$objNivel) { $objNivel->nome = utf8_decode($objNivel->nome); - } + } } return $objEstrutura; - } + } else { $objEstruturaDTO = new EstruturaDTO(); @@ -293,27 +293,28 @@ class ProcessoEletronicoRN extends InfraRN { return $objEstruturaDTO; } } - } + } catch (Exception $e) { throw new InfraException("Erro durante obtenção das unidades", $e); } } - public function listarEstruturas($idRepositorioEstrutura, $nome='') + public function listarEstruturas($idRepositorioEstrutura, $nome='') { $arrObjEstruturaDTO = array(); try{ $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); if(!$idRepositorioEstrutura) { - throw new InfraException("Repositório de Estruturas inválido"); + throw new InfraException("Repositório de Estruturas inválido"); } $parametros = new stdClass(); $parametros->filtroDeEstruturas = new stdClass(); $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; $parametros->filtroDeEstruturas->apenasAtivas = false; - + + $nome = trim($nome); if(is_numeric($nome)) { $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = intval($nome); } else { @@ -325,7 +326,7 @@ class ProcessoEletronicoRN extends InfraRN { if($result->estruturasEncontradas->totalDeRegistros > 0) { if(!is_array($result->estruturasEncontradas->estrutura)) { - $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); + $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); } foreach ($result->estruturasEncontradas->estrutura as $estrutura) { @@ -336,25 +337,25 @@ class ProcessoEletronicoRN extends InfraRN { $item->setBolAtivo($estrutura->ativo); $item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites); $item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade); - + if(!empty($estrutura->hierarquia->nivel)) { - + $array = array(); - + foreach($estrutura->hierarquia->nivel as $nivel) { - + $array[] = utf8_decode($nivel->sigla); } - + $item->setArrHierarquia($array); } - + $arrObjEstruturaDTO[] = $item; } - } + } } catch (Exception $e) { - throw new InfraException("Erro durante obtenção das unidades", $e); + throw new InfraException("Erro durante obtenção das unidades", $e); } return $arrObjEstruturaDTO; @@ -380,7 +381,7 @@ class ProcessoEletronicoRN extends InfraRN { $xpath = new DOMXPath($dom); $rootNamespace = $dom->lookupNamespaceUri($dom->namespaceURI); - $xpath->registerNamespace('x', $rootNamespace); + $xpath->registerNamespace('x', $rootNamespace); $entries = $xpath->query('/x:schema/x:simpleType[@name="motivoDaUrgencia"]/x:restriction/x:enumeration'); $resultado = array(); @@ -394,16 +395,16 @@ class ProcessoEletronicoRN extends InfraRN { } return $resultado; - } + } - public function enviarProcesso($parametros) + public function enviarProcesso($parametros) { try { //error_log("PARAMETROS:" . print_r($parametros, true)); - return $this->getObjPenWs()->enviarProcesso($parametros); + return $this->getObjPenWs()->enviarProcesso($parametros); } catch (\SoapFault $fault) { - - + + if (!empty($fault->detail->interoperabilidadeException->codigoErro) && $fault->detail->interoperabilidadeException->codigoErro == '0005') { $mensagem = 'O código mapeado para a unidade ' . utf8_decode($parametros->novoTramiteDeProcesso->processo->documento[0]->produtor->unidade->nome) . ' está incorreto.'; } else { @@ -416,7 +417,7 @@ class ProcessoEletronicoRN extends InfraRN { } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } + } } public function listarPendencias($bolTodasPendencias) @@ -427,7 +428,7 @@ class ProcessoEletronicoRN extends InfraRN { try { $parametros = new stdClass(); $parametros->filtroDePendencias = new stdClass(); - $parametros->filtroDePendencias->todasAsPendencias = $bolTodasPendencias; + $parametros->filtroDePendencias->todasAsPendencias = $bolTodasPendencias; $result = $this->getObjPenWs()->listarPendencias($parametros); if(isset($result->listaDePendencias->IDT)){ @@ -441,7 +442,7 @@ class ProcessoEletronicoRN extends InfraRN { $item->setNumIdentificacaoTramite($idt->_); $item->setStrStatus($idt->status); $arrObjPendenciaDTO[] = $item; - } + } } } catch (\SoapFault $fault) { $mensagem = $this->tratarFalhaWebService($fault); @@ -451,13 +452,13 @@ class ProcessoEletronicoRN extends InfraRN { } return $arrObjPendenciaDTO; - } + } //TODO: Tratar cada um dos possíveis erros gerados pelos serviços de integração do PEN private function tratarFalhaWebService(SoapFault $fault) { error_log('$e->faultcode:' . $fault->faultcode); - error_log('$e->detail:' . print_r($fault->detail, true)); + error_log('$e->detail:' . print_r($fault->detail, true)); $mensagem = $fault->getMessage(); if(isset($fault->detail->interoperabilidadeException)){ @@ -477,13 +478,13 @@ class ProcessoEletronicoRN extends InfraRN { return $mensagem; } - public function construirCabecalho($strNumeroRegistro = null, $idRepositorioOrigem = 0, $idUnidadeOrigem = 0, $idRepositorioDestino = 0, + public function construirCabecalho($strNumeroRegistro = null, $idRepositorioOrigem = 0, $idUnidadeOrigem = 0, $idRepositorioDestino = 0, $idUnidadeDestino = 0, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false) { $cabecalho = new stdClass(); if(isset($strNumeroRegistro)) { - $cabecalho->NRE = $strNumeroRegistro; + $cabecalho->NRE = $strNumeroRegistro; } $cabecalho->remetente = new stdClass(); @@ -506,7 +507,7 @@ class ProcessoEletronicoRN extends InfraRN { try { //error_log('$this->getObjPenWs()->enviarComponenteDigital($parametros)'); //error_log("||||||||||||||||||" . print_r($parametros, true)); - return $this->getObjPenWs()->enviarComponenteDigital($parametros); + return $this->getObjPenWs()->enviarComponenteDigital($parametros); } catch (\SoapFault $fault) { //error_log("REQUEST:" . $this->getObjPenWs()->__getLastRequest()); @@ -521,7 +522,7 @@ class ProcessoEletronicoRN extends InfraRN { } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } + } } @@ -529,9 +530,9 @@ class ProcessoEletronicoRN extends InfraRN { public function solicitarMetadados($parNumIdentificacaoTramite) { try - { + { $parametros = new stdClass(); - $parametros->IDT = $parNumIdentificacaoTramite; + $parametros->IDT = $parNumIdentificacaoTramite; return $this->getObjPenWs()->solicitarMetadados($parametros); } catch (\SoapFault $fault) { $mensagem = $this->tratarFalhaWebService($fault); @@ -542,10 +543,10 @@ class ProcessoEletronicoRN extends InfraRN { } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } - } + } + } - public static function converterDataWebService($dataHoraSEI) + public static function converterDataWebService($dataHoraSEI) { $resultado = ''; if(isset($dataHoraSEI)){ @@ -556,7 +557,7 @@ class ProcessoEletronicoRN extends InfraRN { return $resultado; } - public static function converterDataSEI($dataHoraWebService) + public static function converterDataSEI($dataHoraWebService) { $resultado = null; if(isset($dataHoraWebService)){ @@ -566,7 +567,7 @@ class ProcessoEletronicoRN extends InfraRN { return $resultado; } - + public static function obterIdTarefaModulo($strIdTarefaModulo) { $objTarefaDTO = new TarefaDTO(); @@ -581,25 +582,25 @@ class ProcessoEletronicoRN extends InfraRN { }else{ return false; } - + } public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parDthRegistroTramite, $parObjProcesso, $parNumTicketComponentesDigitais = null, $parObjComponentesDigitaisSolicitados = null) { if(!isset($parDblIdProcedimento) || $parDblIdProcedimento == 0) { - throw new InfraException('Parâmetro $parDblIdProcedimento não informado.'); + throw new InfraException('Parâmetro $parDblIdProcedimento não informado.'); } if(!isset($parStrNumeroRegistro)) { - throw new InfraException('Parâmetro $parStrNumeroRegistro não informado.'); + throw new InfraException('Parâmetro $parStrNumeroRegistro não informado.'); } if(!isset($parNumIdentificacaoTramite) || $parNumIdentificacaoTramite == 0) { - throw new InfraException('Parâmetro $parStrNumeroRegistro não informado.'); + throw new InfraException('Parâmetro $parStrNumeroRegistro não informado.'); } if(!isset($parObjProcesso)) { - throw new InfraException('Parâmetro $objProcesso não informado.'); + throw new InfraException('Parâmetro $objProcesso não informado.'); } //Monta dados do processo eletrônico @@ -607,12 +608,12 @@ class ProcessoEletronicoRN extends InfraRN { $objProcessoEletronicoDTO->setStrNumeroRegistro($parStrNumeroRegistro); $objProcessoEletronicoDTO->setDblIdProcedimento($parDblIdProcedimento); - //Montar dados dos procedimentos apensados + //Montar dados dos procedimentos apensados if(isset($parObjProcesso->processoApensado)){ if(!is_array($parObjProcesso->processoApensado)){ $parObjProcesso->processoApensado = array($parObjProcesso->processoApensado); } - + $arrObjRelProcessoEletronicoApensadoDTO = array(); $objRelProcessoEletronicoApensadoDTO = null; foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { @@ -631,14 +632,14 @@ class ProcessoEletronicoRN extends InfraRN { $objTramiteDTO->setStrNumeroRegistro($parStrNumeroRegistro); $objTramiteDTO->setNumIdTramite($parNumIdentificacaoTramite); $objTramiteDTO->setNumTicketEnvioComponentes($parNumTicketComponentesDigitais); - $objTramiteDTO->setDthRegistro($this->converterDataSEI($parDthRegistroTramite)); + $objTramiteDTO->setDthRegistro($this->converterDataSEI($parDthRegistroTramite)); $objTramiteDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objTramiteDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); $objProcessoEletronicoDTO->setArrObjTramiteDTO(array($objTramiteDTO)); //Monta dados dos componentes digitais $arrObjComponenteDigitalDTO = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados); - + $objTramiteDTO->setArrObjComponenteDigitalDTO($arrObjComponenteDigitalDTO); $objProcessoEletronicoDTO = $this->cadastrarTramiteDeProcessoInterno($objProcessoEletronicoDTO); @@ -650,11 +651,11 @@ class ProcessoEletronicoRN extends InfraRN { protected function cadastrarTramiteDeProcessoInternoControlado(ProcessoEletronicoDTO $parObjProcessoEletronicoDTO) { if(!isset($parObjProcessoEletronicoDTO)) { - throw new InfraException('Parâmetro $parObjProcessoEletronicoDTO não informado.'); + throw new InfraException('Parâmetro $parObjProcessoEletronicoDTO não informado.'); } $idProcedimento = $parObjProcessoEletronicoDTO->getDblIdProcedimento(); - + //Registra os dados do processo eletrônico //TODO: Revisar a forma como o barramento tratar o NRE para os processos apensados $objProcessoEletronicoDTOFiltro = new ProcessoEletronicoDTO(); @@ -667,7 +668,7 @@ class ProcessoEletronicoRN extends InfraRN { $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTOFiltro); if(empty($objProcessoEletronicoDTO)) { - + $objProcessoEletronicoDTO = $objProcessoEletronicoBD->cadastrar($objProcessoEletronicoDTOFiltro); } @@ -675,20 +676,20 @@ class ProcessoEletronicoRN extends InfraRN { if($parObjProcessoEletronicoDTO->isSetArrObjRelProcessoEletronicoApensado()) { $objRelProcessoEletronicoApensadoBD = new RelProcessoEletronicoApensadoBD($this->getObjInfraIBanco()); - + foreach ($parObjProcessoEletronicoDTO->getArrObjRelProcessoEletronicoApensado() as $objRelProcessoEletronicoApensadoDTOFiltro) { - + if($objRelProcessoEletronicoApensadoBD->contar($objRelProcessoEletronicoApensadoDTOFiltro) < 1){ - - $objRelProcessoEletronicoApensadoBD->cadastrar($objRelProcessoEletronicoApensadoDTOFiltro); + + $objRelProcessoEletronicoApensadoBD->cadastrar($objRelProcessoEletronicoApensadoDTOFiltro); } } } //Registrar informações sobre o trâmite do processo $arrObjTramiteDTO = $parObjProcessoEletronicoDTO->getArrObjTramiteDTO(); - $parObjTramiteDTO = $arrObjTramiteDTO[0]; - + $parObjTramiteDTO = $arrObjTramiteDTO[0]; + $objTramiteDTO = new TramiteDTO(); $objTramiteDTO->retNumIdTramite(); $objTramiteDTO->setStrNumeroRegistro($parObjTramiteDTO->getStrNumeroRegistro()); @@ -699,57 +700,57 @@ class ProcessoEletronicoRN extends InfraRN { if($objTramiteDTO == null) { $objTramiteDTO = $objTramiteBD->cadastrar($parObjTramiteDTO); - } + } $objProcessoEletronicoDTO->setArrObjTramiteDTO(array($objTramiteDTO)); //Registra informações sobre o componente digital do documento $arrObjComponenteDigitalDTO = array(); $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); - + $numOrdem = 1; - + foreach ($parObjTramiteDTO->getArrObjComponenteDigitalDTO() as $objComponenteDigitalDTO) { - + $objComponenteDigitalDTOFiltro = new ComponenteDigitalDTO(); - + $objComponenteDigitalDTOFiltro->setStrNumeroRegistro($objComponenteDigitalDTO->getStrNumeroRegistro()); - $objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento()); - $objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento()); - + $objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento()); + $objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento()); + if($objComponenteDigitalBD->contar($objComponenteDigitalDTOFiltro) > 0){ $numOrdem++; } - + } - + foreach ($parObjTramiteDTO->getArrObjComponenteDigitalDTO() as $objComponenteDigitalDTO) { - + //Verifica se o documento foi inserido pelo trâmite atual if($objComponenteDigitalDTO->getDblIdDocumento() != null){ - + $objComponenteDigitalDTO->setDblIdProcedimento($idProcedimento); - + $objComponenteDigitalDTOFiltro = new ComponenteDigitalDTO(); - + $objComponenteDigitalDTOFiltro->setStrNumeroRegistro($objComponenteDigitalDTO->getStrNumeroRegistro()); - $objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento()); - $objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento()); - + $objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento()); + $objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento()); + if($objComponenteDigitalBD->contar($objComponenteDigitalDTOFiltro) < 1){ - + $objComponenteDigitalDTO->setNumOrdem($numOrdem); $objComponenteDigitalDTO->unSetStrDadosComplementares(); $objComponenteDigitalDTO = $objComponenteDigitalBD->cadastrar($objComponenteDigitalDTO); $numOrdem++; } else { - + //Verifica se foi setado o envio if(!$objComponenteDigitalDTO->isSetStrSinEnviar()){ $objComponenteDigitalDTO->setStrSinEnviar('N'); } - + // Muda a ID do tramite e o arquivo pode ser enviado $objComponenteDigitalBD->alterar($objComponenteDigitalDTO); } @@ -765,17 +766,17 @@ class ProcessoEletronicoRN extends InfraRN { return $objProcessoEletronicoDTO; } - + /** * Retorna o hash do objecto do solicitarMetadadosResponse - * + * * @param object $objMeta tem que ser o componenteDigital->hash * @return string */ public static function getHashFromMetaDados($objMeta){ $strHashConteudo = ''; - + if (isset($objMeta)) { $matches = array(); $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta->_; @@ -787,16 +788,16 @@ class ProcessoEletronicoRN extends InfraRN { return $strHashConteudo; } - - private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados) + + private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados) { //Monta dados dos componentes digitais $arrObjComponenteDigitalDTO = array(); if(!is_array($parObjProcesso->documento)) { $parObjProcesso->documento = array($parObjProcesso->documento); } - - foreach ($parObjProcesso->documento as $objDocumento) { + + foreach ($parObjProcesso->documento as $objDocumento) { $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados @@ -807,12 +808,12 @@ class ProcessoEletronicoRN extends InfraRN { //Por enquanto, considera que o documento possui apenas um componente digital if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { - throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); + throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); } $objComponenteDigital = $objDocumento->componenteDigital; $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome); - + $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo); @@ -820,8 +821,8 @@ class ProcessoEletronicoRN extends InfraRN { $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo); $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType); $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); - - //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui + + //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui if(isset($parObjComponentesDigitaisSolicitados)){ $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); @@ -830,16 +831,16 @@ class ProcessoEletronicoRN extends InfraRN { $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); if($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { - $objComponenteDigitalDTO->setStrSinEnviar("S"); + $objComponenteDigitalDTO->setStrSinEnviar("S"); } } - } + } } //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); - + $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; } @@ -847,7 +848,7 @@ class ProcessoEletronicoRN extends InfraRN { if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) { foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados); - $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj); + $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj); } } @@ -855,16 +856,16 @@ class ProcessoEletronicoRN extends InfraRN { } - public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo) + public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo) { try - { + { $parametros = new stdClass(); $parametros->parametrosParaRecebimentoDeComponenteDigital = new stdClass(); $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital = new stdClass(); $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->IDT = $parNumIdentificacaoTramite; $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->protocolo = $parStrProtocolo; - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->hashDoComponenteDigital = $parStrHashComponenteDigital; + $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->hashDoComponenteDigital = $parStrHashComponenteDigital; return $this->getObjPenWs()->receberComponenteDigital($parametros); @@ -880,40 +881,40 @@ class ProcessoEletronicoRN extends InfraRN { } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } - } + } + } - - public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) + + public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) { try - { + { $arrObjTramite = array(); $parametro = new stdClass(); $parametro->filtroDeConsultaDeTramites = new stdClass(); $parametro->filtroDeConsultaDeTramites->IDT = $parNumIdTramite; - + if(!is_null($parNumeroRegistro)){ $parametro->filtroDeConsultaDeTramites->NRE = $parNumeroRegistro; } - + if(!is_null($parNumeroUnidadeRemetente) && !is_null($parNumeroRepositorioEstruturas)){ $parametro->filtroDeConsultaDeTramites->remetente = new stdClass(); $parametro->filtroDeConsultaDeTramites->remetente->identificacaoDoRepositorioDeEstruturas = $parNumeroRepositorioEstruturas; $parametro->filtroDeConsultaDeTramites->remetente->numeroDeIdentificacaoDaEstrutura = $parNumeroUnidadeRemetente; } - + if(!is_null($parNumeroUnidadeDestino) && !is_null($parNumeroRepositorioEstruturas)){ $parametro->filtroDeConsultaDeTramites->destinatario = new stdClass(); $parametro->filtroDeConsultaDeTramites->destinatario->identificacaoDoRepositorioDeEstruturas = $parNumeroRepositorioEstruturas; $parametro->filtroDeConsultaDeTramites->destinatario->numeroDeIdentificacaoDaEstrutura = $parNumeroUnidadeDestino; } - + if(!is_null($parProtocolo)){ $parametro->filtroDeConsultaDeTramites->protocolo = $parProtocolo; } - + $objTramitesEncontrados = $this->getObjPenWs()->consultarTramites($parametro); if(isset($objTramitesEncontrados->tramitesEncontrados)) { @@ -932,13 +933,13 @@ class ProcessoEletronicoRN extends InfraRN { } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } - } - - public function consultarTramitesProtocolo($parProtocoloFormatado) + } + } + + public function consultarTramitesProtocolo($parProtocoloFormatado) { try - { + { $arrObjTramite = array(); $parametro = new stdClass(); $parametro->filtroDeConsultaDeTramites = new stdClass(); @@ -962,13 +963,13 @@ class ProcessoEletronicoRN extends InfraRN { } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } + } } - - public function cienciaRecusa($parNumIdTramite) + + public function cienciaRecusa($parNumIdTramite) { try - { + { $parametro = new stdClass(); $parametro->IDT = $parNumIdTramite; @@ -980,12 +981,12 @@ class ProcessoEletronicoRN extends InfraRN { } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } + } } - + /** * Retorna o estado atual do procedimento no api-pen - * + * * @param integer $dblIdProcedimento * @param integer $numIdRepositorio * @param integer $numIdEstrutura @@ -994,14 +995,14 @@ class ProcessoEletronicoRN extends InfraRN { public function consultarEstadoProcedimento($strProtocoloFormatado = '', $numIdRepositorio = null, $numIdEstrutura = null) { $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); - + $objProtocoloDTO = new ProtocoloDTO(); $objProtocoloDTO->setStrProtocoloFormatado($strProtocoloFormatado); $objProtocoloDTO->setNumMaxRegistrosRetorno(1); $objProtocoloDTO->retDblIdProtocolo(); $objProtocoloDTO->retStrProtocoloFormatado(); $objProtocoloDTO->retStrStaEstado(); - + $objProtocoloDTO = $objBD->consultar($objProtocoloDTO); if (empty($objProtocoloDTO)) { @@ -1017,24 +1018,24 @@ class ProcessoEletronicoRN extends InfraRN { $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); $objTramiteDTO->setNumMaxRegistrosRetorno(1); $objTramiteDTO->retNumIdTramite(); - + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); - + if(!$arrObjTramiteDTO){ throw new InfraException('Trâmite não encontrado'); } - + $objTramiteDTO = $arrObjTramiteDTO[0]; - + $objFiltro = new stdClass(); $objFiltro->filtroDeConsultaDeTramites = new stdClass(); $objFiltro->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); $objResultado = $this->getObjPenWs()->consultarTramites($objFiltro); - $objTramitesEncontrados = $objResultado->tramitesEncontrados; - + $objTramitesEncontrados = $objResultado->tramitesEncontrados; + if (empty($objTramitesEncontrados) || !isset($objTramitesEncontrados->tramite)) { throw new InfraException(utf8_encode(sprintf('Nenhum tramite foi encontrado para o procedimento %s', $strProtocoloFormatado))); } @@ -1042,19 +1043,19 @@ class ProcessoEletronicoRN extends InfraRN { if(!is_array($objTramitesEncontrados->tramite)){ $objTramitesEncontrados->tramite = array($objTramitesEncontrados->tramite); } - + $arrObjTramite = (array) $objTramitesEncontrados->tramite; - + $objTramite = array_pop($arrObjTramite); - + if (empty($numIdRepositorio)) { $objPenParametroRN = new PenParametroRN(); $numIdRepositorio = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); - + } if (empty($numIdEstrutura)) { - + $objPenUnidadeDTO = new PenUnidadeDTO(); $objPenUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objPenUnidadeDTO->retNumIdUnidadeRH(); @@ -1064,22 +1065,22 @@ class ProcessoEletronicoRN extends InfraRN { if (empty($objPenUnidadeDTO)) { throw new InfraException(utf8_encode('Número da Unidade RH não foi encontrado')); } - + $numIdEstrutura = $objPenUnidadeDTO->getNumIdUnidadeRH(); } if ($objTramite->remetente->numeroDeIdentificacaoDaEstrutura != $numIdEstrutura || $objTramite->remetente->identificacaoDoRepositorioDeEstruturas != $numIdRepositorio) { - + throw new InfraException(utf8_encode('O último trâmite desse processo não pertence a esse órgão')); } - + switch ($objTramite->situacaoAtual) { case static::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO: // @todo: caso command-line informar o procedimento que será executado $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_RECIBO); - + if(!$objPenTramiteProcessadoRN->isProcedimentoRecebido($objTramite->IDT)){ $objReceberReciboTramiteRN = new ReceberReciboTramiteRN(); @@ -1104,28 +1105,28 @@ class ProcessoEletronicoRN extends InfraRN { $objProtocoloDTO->setStrStaEstado(ProtocoloRN::$TE_NORMAL); $objBD->alterar($objProtocoloDTO); - + if($objTramite->situacaoAtual == static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO && $objTramite->situacaoAtual == static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO){ $this->cancelarTramite($objTramite->IDT); } - - return PenConsoleRN::format(sprintf('Processo %s foi atualizado com sucesso', $objProtocoloDTO->getStrProtocoloFormatado()), 'blue'); + + return PenConsoleRN::format(sprintf('Processo %s foi atualizado com sucesso', $objProtocoloDTO->getStrProtocoloFormatado()), 'blue'); } } - public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $parStrReciboTramite) + public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $parStrReciboTramite) { try - { + { $strHashAssinatura = null; $objPrivatekey = openssl_pkey_get_private("file://".$this->strLocalCert, $this->strLocalCertPassword); if ($objPrivatekey === FALSE) { - throw new InfraException("Erro ao obter chave privada do certificado digital."); + throw new InfraException("Erro ao obter chave privada do certificado digital."); } - - openssl_sign($parStrReciboTramite, $strHashAssinatura, $objPrivatekey, 'sha256'); + + openssl_sign($parStrReciboTramite, $strHashAssinatura, $objPrivatekey, 'sha256'); $strHashDaAssinaturaBase64 = base64_encode($strHashAssinatura); $parametro = new stdClass(); @@ -1133,21 +1134,21 @@ class ProcessoEletronicoRN extends InfraRN { $parametro->dadosDoReciboDeTramite->IDT = $parNumIdTramite; $parametro->dadosDoReciboDeTramite->dataDeRecebimento = $parDthRecebimento; $parametro->dadosDoReciboDeTramite->hashDaAssinatura = $strHashDaAssinaturaBase64; - - + + $this->getObjPenWs()->enviarReciboDeTramite($parametro); - + return $strHashDaAssinaturaBase64; } catch (\SoapFault $fault) { - + $strMensagem = '[ SOAP Request ]'.PHP_EOL; $strMensagem .= 'Method: enviarReciboDeTramite (FAIL)'.PHP_EOL; $strMensagem .= 'Request: '.$this->getObjPenWs()->__getLastRequest().PHP_EOL; $strMensagem .= 'Response: '.$this->getObjPenWs()->__getLastResponse().PHP_EOL; - + file_put_contents('/tmp/pen.log', $strMensagem.PHP_EOL, FILE_APPEND); - + if(isset($objPrivatekey)){ openssl_free_key($objPrivatekey); } @@ -1167,51 +1168,51 @@ class ProcessoEletronicoRN extends InfraRN { } throw new InfraException("Error Processing Request", $e); - } - } + } + } - public function receberReciboDeTramite($parNumIdTramite) + public function receberReciboDeTramite($parNumIdTramite) { try - { + { $parametro = new stdClass(); $parametro->IDT = $parNumIdTramite; $resultado = $this->getObjPenWs()->receberReciboDeTramite($parametro); return $resultado; - } + } catch (\SoapFault $fault) { $mensagem = $this->tratarFalhaWebService($fault); throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault); } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } - } - + } + } + /** * Retorna um objeto DTO do recibo de envio do processo ao barramento - * + * * @param int $parNumIdTramite * @return ReciboTramiteEnviadoDTO */ public function receberReciboDeEnvio($parNumIdTramite) { - + try { $parametro = new stdClass(); $parametro->IDT = $parNumIdTramite; - + $resultado = $this->getObjPenWs()->receberReciboDeEnvio($parametro); return $resultado->conteudoDoReciboDeEnvio; - } + } catch (\SoapFault $fault) { $mensagem = $this->tratarFalhaWebService($fault); throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault); - } + } catch (\Exception $e) { throw new InfraException("Error Processing Request", $e); - } + } throw new InfraException("Error Processing Request", $e); } @@ -1219,7 +1220,7 @@ class ProcessoEletronicoRN extends InfraRN { public function converterOperacaoDTO($objOperacaoPEN) { if(!isset($objOperacaoPEN)) { - throw new InfraException('Parâmetro $objOperacaoPEN não informado.'); + throw new InfraException('Parâmetro $objOperacaoPEN não informado.'); } $objOperacaoDTO = new OperacaoDTO(); @@ -1251,19 +1252,19 @@ class ProcessoEletronicoRN extends InfraRN { case "15": $objOperacaoDTO->setStrNome("Desmembramento"); break; case "16": $objOperacaoDTO->setStrNome("Desentranhamento"); break; case "17": $objOperacaoDTO->setStrNome("Encerramento/abertura de volume no processo"); break; - case "18": $objOperacaoDTO->setStrNome("Registro de extravio"); break; + case "18": $objOperacaoDTO->setStrNome("Registro de extravio"); break; default: $objOperacaoDTO->setStrNome("Registro"); break; } return $objOperacaoDTO; - } + } //TODO: Implementar mapeamento entre operações do PEN e tarefas do SEI public function obterCodigoOperacaoPENMapeado($numIdTarefa) { $strCodigoOperacao = self::$OP_OPERACAO_REGISTRO; - if(isset($numIdTarefa) && $numIdTarefa != 0) { + if(isset($numIdTarefa) && $numIdTarefa != 0) { $objRelTarefaOperacaoDTO = new RelTarefaOperacaoDTO(); $objRelTarefaOperacaoDTO->retStrCodigoOperacao(); $objRelTarefaOperacaoDTO->setNumIdTarefa($numIdTarefa); @@ -1273,24 +1274,24 @@ class ProcessoEletronicoRN extends InfraRN { $objRelTarefaOperacaoDTO = $objRelTarefaOperacaoBD->consultar($objRelTarefaOperacaoDTO); if($objRelTarefaOperacaoDTO != null) { - $strCodigoOperacao = $objRelTarefaOperacaoDTO->getStrCodigoOperacao(); + $strCodigoOperacao = $objRelTarefaOperacaoDTO->getStrCodigoOperacao(); } } return $strCodigoOperacao; - } + } //TODO: Implementar mapeamento entre operações do PEN e tarefas do SEI public function obterIdTarefaSEIMapeado($strCodigoOperacao) { return self::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO; - } - - + } + + /** * Cancela um tramite externo de um procedimento para outra unidade, gera * falha caso a unidade de destino já tenha começado a receber o procedimento. - * + * * @param type $idTramite * @param type $idProtocolo * @throws Exception|InfraException @@ -1308,18 +1309,18 @@ class ProcessoEletronicoRN extends InfraRN { //Requisita o cancelamento $parametros = new stdClass(); $parametros->IDT = $idTramite; - + try{ $this->getObjPenWs()->cancelarEnvioDeTramite($parametros); - } + } catch(\SoapFault $e) { throw new InfraException($e->getMessage(), null, $e); - } + } } - + /** * Método que faz a recusa de um trâmite - * + * * @param integer $idTramite * @param string $justificativa * @param integer $motivo @@ -1328,7 +1329,7 @@ class ProcessoEletronicoRN extends InfraRN { */ public function recusarTramite($idTramite, $justificativa, $motivo) { try { - + //@TODOJOIN: Adicionar a seguinte linha abaixo dessa : $parametros->recusaDeTramite = new stdClass() $parametros = new stdClass(); $parametros->recusaDeTramite = new stdClass(); @@ -1337,12 +1338,12 @@ class ProcessoEletronicoRN extends InfraRN { $parametros->recusaDeTramite->motivo = $motivo; $resultado = $this->getObjPenWs()->recusarTramite($parametros); - + } catch (SoapFault $fault) { $mensagem = $this->tratarFalhaWebService($fault); throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault); - + } catch (Exception $e) { return $e->getMessage(); } @@ -1357,7 +1358,7 @@ class ProcessoEletronicoRN extends InfraRN { $tramitePendenteBD = new TramitePendenteBD($this->getObjInfraIBanco()); $tramitePendenteBD->cadastrar($tramitePendenteDTO); - + } catch (\InfraException $ex) { throw new InfraException($ex->getStrDescricao()); } catch (\Exception $ex) { @@ -1370,38 +1371,38 @@ class ProcessoEletronicoRN extends InfraRN { //Obtem o id_rh que representa a unidade no barramento $objPenParametroRN = new PenParametroRN(); $numIdRespositorio = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); - + //Obtem os dados da unidade $objPenUnidadeDTO = new PenUnidadeDTO(); $objPenUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objPenUnidadeDTO->retNumIdUnidadeRH(); - + $objGenericoBD = new GenericoBD($this->inicializarObjInfraIBanco()); $objPenUnidadeDTO = $objGenericoBD->consultar($objPenUnidadeDTO); - + //Obtem os dados do último trâmite desse processo no barramento $objProtocoloDTO = new ProtocoloDTO(); $objProtocoloDTO->setStrProtocoloFormatado($strProtocolo); $objProtocoloDTO->retDblIdProtocolo(); - + $objProtocoloRN = new ProtocoloRN(); $objProtocoloDTO = $objProtocoloRN->consultarRN0186($objProtocoloDTO); - + $objTramiteDTO = new TramiteDTO(); $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->retDblIdProtocolo()); $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); $objTramiteDTO->setNumMaxRegistrosRetorno(1); $objTramiteDTO->retNumIdTramite(); - + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); - + if(!$arrObjTramiteDTO){ return false; } - + $objTramiteDTO = $arrObjTramiteDTO[0]; - + try { $parametro = (object)array( @@ -1413,15 +1414,15 @@ class ProcessoEletronicoRN extends InfraRN { ), ) ); - - + + $objMeta = $this->getObjPenWs()->consultarTramites($parametro); - - + + if($objMeta->tramitesEncontrados) { - + $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; - + $objMetaTramite = $arrObjMetaTramite[0]; switch($objMetaTramite->situacaoAtual){ @@ -1435,7 +1436,7 @@ class ProcessoEletronicoRN extends InfraRN { } } - + return false; } catch(SoapFault $e) { @@ -1445,7 +1446,7 @@ class ProcessoEletronicoRN extends InfraRN { return false; } } - + public function consultarHipotesesLegais() { try{ $hipoteses = $this->getObjPenWs()->consultarHipotesesLegais(); @@ -1455,7 +1456,7 @@ class ProcessoEletronicoRN extends InfraRN { return $hipoteses; } catch(Exception $e){ - throw new InfraException("Erro durante obtenção da resposta das hipóteses legais", $e); + throw new InfraException("Erro durante obtenção da resposta das hipóteses legais", $e); } } @@ -1466,7 +1467,7 @@ class ProcessoEletronicoRN extends InfraRN { }catch(Exception $e){ throw new InfraException('Erro contando Processos Externos.',$e); } - } + } } diff --git a/rn/ProcessoExpedidoRN.php b/rn/ProcessoExpedidoRN.php index 5dc1021..53e9c2c 100644 --- a/rn/ProcessoExpedidoRN.php +++ b/rn/ProcessoExpedidoRN.php @@ -13,70 +13,76 @@ class ProcessoExpedidoRN extends InfraRN { } public function listarProcessoExpedido(ProtocoloDTO &$objProtocoloDTO) { - - - $sql = "SELECT - p.id_protocolo, - p.protocolo_formatado, - a.id_unidade id_unidade, - atd.valor unidade_destino, + + $bolSqlServer = $this->getObjInfraIBanco() instanceof InfraSqlServer; + $numLimit = $objProtocoloDTO->getNumMaxRegistrosRetorno(); + $numOffset = $objProtocoloDTO->getNumPaginaAtual() * $objProtocoloDTO->getNumMaxRegistrosRetorno(); + + $sql = "SELECT " . + (($bolSqlServer) ? "TOP $numLimit " : "") . + " + p.id_protocolo, + p.protocolo_formatado, + a.id_unidade id_unidade, + atd.valor unidade_destino, us.id_usuario id_usuario, us.nome nome_usuario, a.dth_abertura - FROM protocolo p - INNER JOIN atividade a ON a.id_protocolo = p.id_protocolo + FROM protocolo p + INNER JOIN atividade a ON a.id_protocolo = p.id_protocolo INNER JOIN atributo_andamento atd ON a.id_atividade = atd.id_atividade AND atd.nome = 'UNIDADE_DESTINO' INNER JOIN md_pen_processo_eletronico pe ON pe.id_procedimento = p.id_protocolo INNER JOIN md_pen_tramite ptra ON ptra.numero_registro = pe.numero_registro INNER JOIN usuario us ON ptra.id_usuario = us.id_usuario - WHERE + WHERE p.sta_estado = " . $objProtocoloDTO->getStrStaEstado() . " - AND - a.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO) ." - AND + AND + a.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO) ." + AND ptra.dth_registro = (SELECT MAX(pt.dth_registro) dth_registro FROM md_pen_tramite pt WHERE pt.numero_registro = pe.numero_registro) - AND - NOT EXISTS ( - SELECT at2.* FROM atividade as at2 - WHERE at2.id_protocolo = p.id_protocolo - AND at2.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO) ." - AND at2.dth_abertura > a.dth_abertura ) + AND + NOT EXISTS ( + SELECT at2.* FROM atividade as at2 + WHERE at2.id_protocolo = p.id_protocolo + AND at2.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO) ." + AND at2.dth_abertura > a.dth_abertura ) GROUP BY - p.id_protocolo, p.protocolo_formatado, a.id_unidade , atd.valor , us.id_usuario, us.nome, a.dth_abertura ORDER BY a.dth_abertura DESC LIMIT ".$objProtocoloDTO->getNumPaginaAtual() * $objProtocoloDTO->getNumMaxRegistrosRetorno().",".$objProtocoloDTO->getNumMaxRegistrosRetorno()." "; - - - $sqlCount = "SELECT + p.id_protocolo, p.protocolo_formatado, a.id_unidade , atd.valor , us.id_usuario, us.nome, a.dth_abertura ORDER BY a.dth_abertura DESC ". + (($bolSqlServer) ? "OFFSET $numOffset ROWS" : "LIMIT ".$numOffset.",".$numLimit." "); + + + $sqlCount = "SELECT count(*) total - FROM protocolo p - INNER JOIN atividade a ON a.id_protocolo = p.id_protocolo + FROM protocolo p + INNER JOIN atividade a ON a.id_protocolo = p.id_protocolo INNER JOIN atributo_andamento atd ON a.id_atividade = atd.id_atividade AND atd.nome = 'UNIDADE_DESTINO' INNER JOIN md_pen_processo_eletronico pe ON pe.id_procedimento = p.id_protocolo INNER JOIN md_pen_tramite ptra ON ptra.numero_registro = pe.numero_registro INNER JOIN usuario us ON ptra.id_usuario = us.id_usuario - WHERE + WHERE p.sta_estado = " . $objProtocoloDTO->getStrStaEstado() . " - AND - a.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO) ." - AND + AND + a.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO) ." + AND ptra.dth_registro = (SELECT MAX(pt.dth_registro) dth_registro FROM md_pen_tramite pt WHERE pt.numero_registro = pe.numero_registro) - AND - NOT EXISTS ( - SELECT at2.* FROM atividade as at2 - WHERE at2.id_protocolo = p.id_protocolo - AND at2.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO) ." + AND + NOT EXISTS ( + SELECT at2.* FROM atividade as at2 + WHERE at2.id_protocolo = p.id_protocolo + AND at2.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO) ." AND at2.dth_abertura > a.dth_abertura ) "; - - + + $pag = $this->getObjInfraIBanco()->consultarSql($sql); $count = $this->getObjInfraIBanco()->consultarSql($sqlCount); $total = $count ? $count[0]['total'] : 0; - + $arrProcessosExpedidos = array(); $objProtocoloDTO->setNumTotalRegistros($total); $objProtocoloDTO->setNumRegistrosPaginaAtual(count($pag)); - + foreach ($pag as $res) { $data = new \DateTime($res['dth_abertura']); $objProcessoExpedidoDTO = new ProcessoExpedidoDTO(); @@ -85,14 +91,10 @@ class ProcessoExpedidoRN extends InfraRN { $objProcessoExpedidoDTO->setStrNomeUsuario($res['nome_usuario']); $objProcessoExpedidoDTO->setDthExpedido($data->format('d/m/Y H:i:s')); $objProcessoExpedidoDTO->setStrDestino($res['unidade_destino']); - - - - + $arrProcessosExpedidos[] = $objProcessoExpedidoDTO; } - + return $arrProcessosExpedidos; } - } diff --git a/rn/ReceberProcedimentoRN.php b/rn/ReceberProcedimentoRN.php index ca277e2..09d19aa 100644 --- a/rn/ReceberProcedimentoRN.php +++ b/rn/ReceberProcedimentoRN.php @@ -3,6 +3,7 @@ require_once dirname(__FILE__) . '/../../../SEI.php'; //TODO: Implementar validação sobre tamanho do documento a ser recebido (Parâmetros SEI) + class ReceberProcedimentoRN extends InfraRN { const STR_APENSACAO_PROCEDIMENTOS = 'Relacionamento representando a apensação de processos recebidos externamente'; @@ -11,7 +12,7 @@ class ReceberProcedimentoRN extends InfraRN private $objInfraParametro; private $objProcedimentoAndamentoRN; private $documentosRetirados = array(); - + public $destinatarioReal = null; public function __construct() @@ -35,11 +36,11 @@ class ReceberProcedimentoRN extends InfraRN } public function fecharProcedimentoEmOutraUnidades(ProcedimentoDTO $objProcedimentoDTO, $parObjMetadadosProcedimento){ - + $objPenUnidadeDTO = new PenUnidadeDTO(); $objPenUnidadeDTO->setNumIdUnidadeRH($parObjMetadadosProcedimento->metadados->destinatario->numeroDeIdentificacaoDaEstrutura); $objPenUnidadeDTO->retNumIdUnidade(); - + $objGenericoBD = new GenericoBD($this->inicializarObjInfraIBanco()); $objPenUnidadeDTO = $objGenericoBD->consultar($objPenUnidadeDTO); @@ -63,40 +64,39 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeRN = new AtividadeRN(); $arrObjAtividadeDTO = (array)$objAtividadeRN->listarRN0036($objAtividadeDTO); - + $objInfraSessao = SessaoSEI::getInstance(); $numIdUnidade = $objInfraSessao->getNumIdUnidadeAtual(); - + foreach($arrObjAtividadeDTO as $objAtividadeDTO) { $objInfraSessao->setNumIdUnidadeAtual($objAtividadeDTO->getNumIdUnidade()); $objInfraSessao->trocarUnidadeAtual(); - + $objProcedimentoRN = new ProcedimentoRN(); $objProcedimentoRN->concluir(array($objProcedimentoDTO)); } $objInfraSessao->setNumIdUnidadeAtual($numIdUnidade); $objInfraSessao->trocarUnidadeAtual(); } - + // TODO: Adicionar comandos de debug. Vide SeiWs.php gerarProcedimento protected function receberProcedimentoControlado($parNumIdentificacaoTramite) - { - $objPenParametroRN = new PenParametroRN(); - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); - + { + $objPenParametroRN = new PenParametroRN(); + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); + $objSeiRN = new SeiRN(); - + error_log(__METHOD__.'('.$parNumIdentificacaoTramite.')'); - + if (!isset($parNumIdentificacaoTramite)) { throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); } - - + //TODO: Urgente: Verificar o status do trâmite e verificar se ele já foi salvo na base de dados $objMetadadosProcedimento = $this->objProcessoEletronicoRN->solicitarMetadados($parNumIdentificacaoTramite); - + //!Substituir a unidade destinatária para a receptora (!1!) if (isset($objMetadadosProcedimento->metadados->unidadeReceptora)) { $this->destinatarioReal = $objMetadadosProcedimento->metadados->destinatario; @@ -113,108 +113,108 @@ class ReceberProcedimentoRN extends InfraRN if($this->tramiteRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) { return ; } - + // Validação dos dados do processo recebido $objInfraException = new InfraException(); $this->validarDadosDestinatario($objInfraException, $objMetadadosProcedimento); $objInfraException->lancarValidacoes(); - + #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); $objTramite = $arrObjTramite[0]; - + //Obtém lista de componentes digitais que precisam ser obtidos if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento); } - //Faz a validação do tamanho e espécie dos componentes digitais + //Faz a validação do tamanho e espécie dos componentes digitais $this->validarComponentesDigitais($objProcesso, $parNumIdentificacaoTramite); - + //Faz a validação da extensão dos componentes digitais a serem recebidos $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProcesso); - - //Faz a validação das permissões de leitura e escrita + + //Faz a validação das permissões de leitura e escrita $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite); - + $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso); - + //Instancia a RN que faz o recebimento dos componentes digitais $receberComponenteDigitalRN = new ReceberComponenteDigitalRN(); //Cria o array que receberá os anexos após os arquivos físicos serem salvos $arrAnexosComponentes = array(); - + //Cria o array com a lista de hash $arrayHash = array(); - - + + //Percorre os componentes que precisam ser recebidos foreach($objTramite->componenteDigitalPendenteDeRecebimento as $key => $componentePendente){ - + if(!is_null($componentePendente)){ - + //Adiciona o hash do componente digital ao array $arrayHash[] = $componentePendente; - + //Obter os dados do componente digital $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo); //Copia o componente para a pasta temporária $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); $arrAnexosComponentes[$key]['recebido'] = false; - + //Valida a integridade do hash $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite); } } - + if(count($arrAnexosComponentes) > 0){ - + $receberComponenteDigitalRN->setArrAnexos($arrAnexosComponentes); } #############################TERMINA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ - + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); $objTramite = $arrObjTramite[0]; - + //Verifica se o trâmite está recusado if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) { return; } - + $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProcesso, $objMetadadosProcedimento); - - - + + + // @join_tec US008.08 (#23092) $this->objProcedimentoAndamentoRN->setOpts($objProcedimentoDTO->getDblIdProcedimento(), $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); - $this->objProcedimentoAndamentoRN->cadastrar('Obtendo metadados do processo', 'S'); + $this->objProcedimentoAndamentoRN->cadastrar('Obtendo metadados do processo', 'S'); //Verificar se procedimento já existia na base de dados do sistema //$dblIdProcedimento = $this->consultarProcedimentoExistente($strNumeroRegistro, $strProtocolo); //if(isset($dblIdProcedimento)){ //TODO: Tratar situação em que o processo (NUP) já existia na base do sistema mas não havia nenhum NRE registrado para ele - // $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $objMetadadosProcedimento, $objProcesso); + // $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $objMetadadosProcedimento, $objProcesso); //} - //else { + //else { //TODO: Gerar Procedimento com status BLOQUEADO, aguardando o recebimento dos componentes digitais // $objProcedimentoDTO = $this->gerarProcedimento($objMetadadosProcedimento, $objProcesso); //} //TODO: Fazer o envio de cada um dos procedimentos apensados (Processo principal e seus apensados, caso exista) - //... + //... //TODO: Parei aqui!!! Recebimento de processos apensados - - $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso($objProcedimentoDTO->getDblIdProcedimento(), + + $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso($objProcedimentoDTO->getDblIdProcedimento(), $strNumeroRegistro, $parNumIdentificacaoTramite, null, $objProcesso); - - + + //TODO: Passar implementação para outra classe de negócio - //Verifica se o tramite se encontra na situação correta + //Verifica se o tramite se encontra na situação correta $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); if(!isset($arrObjTramite) || count($arrObjTramite) != 1) { throw new InfraException("Trâmite não pode ser localizado pelo identificado $parNumIdentificacaoTramite."); @@ -222,18 +222,18 @@ class ReceberProcedimentoRN extends InfraRN $objTramite = $arrObjTramite[0]; - + if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { return; } - - + + // throw new InfraException("COMPONENTES DIGITAIS A SEREM ANEXADOS: ".var_export($arrayHash, true)); if(count($arrayHash) > 0){ - - //Obter dados dos componetes digitais + + //Obter dados dos componetes digitais $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->setStrNumeroRegistro($strNumeroRegistro); $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); @@ -249,54 +249,54 @@ class ReceberProcedimentoRN extends InfraRN $objComponenteDigitalDTO->retNumIdTramite(); $objComponenteDigitalDTO->retStrNome(); $objComponenteDigitalDTO->retStrStaEstadoProtocolo(); - + $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); - + // throw new InfraException('Componentes encontrados: '.var_export($arrObjComponentesDigitaisDTO, true)); - + if ($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0) { - + $objReceberComponenteDigitalRN = $receberComponenteDigitalRN; - + foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) { if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ - $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo(); + $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo(); $strNomeDocumento = (array_key_exists($strHash, $arrStrNomeDocumento)) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]'; - + $objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado); // @join_tec US008.09 (#23092) $this->objProcedimentoAndamentoRN->cadastrar(sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()), 'S'); } - + } // @join_tec US008.10 (#23092) $this->objProcedimentoAndamentoRN->cadastrar('Todos os componentes digitais foram recebidos', 'S'); }else{ $this->objProcedimentoAndamentoRN->cadastrar('Nenhum componente digital para receber', 'S'); - } + } } } - + //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento); - + $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($parNumIdentificacaoTramite, $arrayHash); - + $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_PROCESSO); $objPenTramiteProcessadoRN->setRecebido($parNumIdentificacaoTramite); - + } - + /** * Retorna um array com alguns metadados, onde o indice de é o hash do arquivo - * + * * @return array[String] */ private function listarMetaDadosComponentesDigitais($objProcesso){ - + $objMapBD = new GenericoBD($this->getObjInfraIBanco()); $arrMetadadoDocumento = array(); $arrObjDocumento = is_array($objProcesso->documento) ? $objProcesso->documento : array($objProcesso->documento); @@ -304,7 +304,7 @@ class ReceberProcedimentoRN extends InfraRN foreach($arrObjDocumento as $objDocumento){ $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componenteDigital->hash); - + $objMapDTO = new PenRelTipoDocMapRecebidoDTO(true); $objMapDTO->setNumMaxRegistrosRetorno(1); $objMapDTO->setNumCodigoEspecie($objDocumento->especie->codigo); @@ -318,15 +318,15 @@ class ReceberProcedimentoRN extends InfraRN else { $strNomeDocumento = $objMapDTO->getStrNomeSerie(); } - + $arrMetadadoDocumento[$strHash] = array( 'especieNome' => $strNomeDocumento - ); + ); } - + return $arrMetadadoDocumento; } - + /** * Valida cada componente digital, se não algum não for aceito recusa o tramite * do procedimento para esta unidade @@ -334,7 +334,7 @@ class ReceberProcedimentoRN extends InfraRN private function validarComponentesDigitais($objProcesso, $parNumIdentificacaoTramite){ $arrObjDocumentos = is_array($objProcesso->documento) ? $objProcesso->documento : array($objProcesso->documento); - + foreach($arrObjDocumentos as $objDocument){ $objPenRelTipoDocMapEnviadoDTO = new PenRelTipoDocMapRecebidoDTO(); @@ -349,7 +349,7 @@ class ReceberProcedimentoRN extends InfraRN if($numContador <= 0) { $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('Documento do tipo %s não está mapeado', utf8_decode($objDocument->especie->nomeNoProdutor)), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument->especie->nomeNoProdutor, ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); - } + } } @@ -362,10 +362,10 @@ class ReceberProcedimentoRN extends InfraRN foreach($arrObjDocumentos as $objDocument) { - if (is_null($objDocument->componenteDigital->tamanhoEmBytes) || $objDocument->componenteDigital->tamanhoEmBytes == 0){ - + if (is_null($objDocument->componenteDigital->tamanhoEmBytes) || $objDocument->componenteDigital->tamanhoEmBytes == 0){ + throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); - + } if($objDocument->componenteDigital->tamanhoEmBytes > ($numTamDocExterno * 1024 * 1024)){ @@ -376,20 +376,20 @@ class ReceberProcedimentoRN extends InfraRN } } - + } private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjMetadadosProcedimento) { - - + + // Validação dos dados do processo recebido $objInfraException = new InfraException(); $this->validarDadosProcesso($objInfraException, $parObjProcesso); $this->validarDadosDocumentos($objInfraException, $parObjProcesso); - //TODO: Regra de Negócio - Processos recebidos pelo Barramento não poderão disponibilizar a opção de reordenação e cancelamento de documentos + //TODO: Regra de Negócio - Processos recebidos pelo Barramento não poderão disponibilizar a opção de reordenação e cancelamento de documentos //para o usuário final, mesmo possuindo permissão para isso $objInfraException->lancarValidacoes(); @@ -398,18 +398,18 @@ class ReceberProcedimentoRN extends InfraRN $dblIdProcedimento = $this->consultarProcedimentoExistente($parStrNumeroRegistro, $parObjProcesso->protocolo); if(isset($dblIdProcedimento)){ - + //TODO: Tratar situação em que o processo (NUP) já existia na base do sistema mas não havia nenhum NRE registrado para ele - $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $parObjMetadadosProcedimento, $parObjProcesso); + $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $parObjMetadadosProcedimento, $parObjProcesso); } - else { - + else { + //TODO: Gerar Procedimento com status BLOQUEADO, aguardando o recebimento dos componentes digitais $objProcedimentoDTO = $this->gerarProcedimento($parObjMetadadosProcedimento, $parObjProcesso); } //TODO: Fazer o envio de cada um dos procedimentos apensados (Processo principal e seus apensados, caso exista) - //... + //... //Chamada recursiva para registro dos processos apensados if(isset($objProcesso->processoApensado)) { @@ -419,7 +419,7 @@ class ReceberProcedimentoRN extends InfraRN foreach ($objProcesso->processoApensado as $objProcessoApensado) { $this->registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjMetadadosProcedimento); - } + } } return $objProcedimentoDTO; @@ -437,7 +437,7 @@ class ReceberProcedimentoRN extends InfraRN private function consultarProcedimentoExistente($parStrNumeroRegistro, $parStrProtocolo = null) { - $dblIdProcedimento = null; + $dblIdProcedimento = null; $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); $objProcessoEletronicoDTO->retDblIdProcedimento(); @@ -455,31 +455,31 @@ class ReceberProcedimentoRN extends InfraRN } private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProcedimento, $objProcesso){ - - + + if(!isset($parDblIdProcedimento)){ throw new InfraException('Parâmetro $parDblIdProcedimento não informado.'); - } + } if(!isset($objMetadadosProcedimento)){ throw new InfraException('Parâmetro $objMetadadosProcedimento não informado.'); } - - + + if ($this->destinatarioReal) { $objDestinatario = $this->destinatarioReal; } else { $objDestinatario = $objMetadadosProcedimento->metadados->destinatario; } - + //TODO: Refatorar código para criar método de pesquisa do procedimento e reutilizá-la //$objProcedimentoDTO = new ProcedimentoDTO(); //$objProcedimentoDTO->setDblIdProcedimento($parDblIdProcedimento); //$objProcedimentoDTO->retTodos(); - //$objProcedimentoDTO->retStrProtocoloProcedimentoFormatado(); + //$objProcedimentoDTO->retStrProtocoloProcedimentoFormatado(); //$objProcedimentoDTO->setStrSinDocTodos('S'); - + //$objProcedimentoRN = new ProcedimentoRN(); //$arrObjProcedimentoDTO = $objProcedimentoRN->listarCompleto($objProcedimentoDTO); @@ -488,25 +488,25 @@ class ReceberProcedimentoRN extends InfraRN //} //$objProcedimentoDTO = $arrObjProcedimentoDTO[0]; - + $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setStrIdTarefaModuloTarefa(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO); $objAtividadeDTO->setDblIdProcedimentoProtocolo($parDblIdProcedimento); $objAtividadeDTO->setOrd('Conclusao', InfraDTO::$TIPO_ORDENACAO_DESC); $objAtividadeDTO->setNumMaxRegistrosRetorno(1); $objAtividadeDTO->retNumIdUnidade(); - + $objAtividadeRN = new AtividadeRN(); $arrObjAtividadeDTO = $objAtividadeRN->listarRN0036($objAtividadeDTO); $numIdUnidade = SessaoSEI::getInstance()->getNumIdUnidadeAtual(); - + if($arrObjAtividadeDTO){ $objAtividadeDTO = $arrObjAtividadeDTO[0]; $numIdUnidade = $objAtividadeDTO->getNumIdUnidade(); } - + $objSeiRN = new SeiRN(); - + $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->retDthConclusao(); $objAtividadeDTO->setDblIdProtocolo($parDblIdProcedimento); @@ -514,13 +514,13 @@ class ReceberProcedimentoRN extends InfraRN $arrObjAtividadeDTO = $objAtividadeRN->listarRN0036($objAtividadeDTO); $flgReabrir = true; - + foreach ($arrObjAtividadeDTO as $objAtividadeDTO) { if ($objAtividadeDTO->getDthConclusao() == null) { $flgReabrir = false; } } - + $objProcedimentoDTO = new ProcedimentoDTO(); $objProcedimentoDTO->setDblIdProcedimento($parDblIdProcedimento); $objProcedimentoDTO->retTodos(); @@ -528,40 +528,40 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoRN = new ProcedimentoRN(); $objProcedimentoDTO = $objProcedimentoRN->consultarRN0201($objProcedimentoDTO); - + $this->registrarAndamentoRecebimentoProcesso($objProcedimentoDTO, $objMetadadosProcedimento); - - + + if($flgReabrir){ $objEntradaReabrirProcessoAPI = new EntradaReabrirProcessoAPI(); $objEntradaReabrirProcessoAPI->setIdProcedimento($parDblIdProcedimento); $objSeiRN->reabrirProcesso($objEntradaReabrirProcessoAPI); } - + //Cadastro das atividades para quando o destinatário é desviado pelo receptor (!3!) if ($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura) { $this->gerarAndamentoUnidadeReceptora($parDblIdProcedimento); } - + $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI(); - $objEntradaDesbloquearProcessoAPI->setIdProcedimento($parDblIdProcedimento); + $objEntradaDesbloquearProcessoAPI->setIdProcedimento($parDblIdProcedimento); $objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI); - + //TODO: Obter código da unidade através de mapeamento entre SEI e Barramento $objUnidadeDTO = $this->atribuirDadosUnidade($objProcedimentoDTO, $objDestinatario); - $this->atribuirDocumentos($objProcedimentoDTO, $objProcesso, $objUnidadeDTO, $objMetadadosProcedimento); + $this->atribuirDocumentos($objProcedimentoDTO, $objProcesso, $objUnidadeDTO, $objMetadadosProcedimento); $this->registrarProcedimentoNaoVisualizado($objProcedimentoDTO); //TODO: Avaliar necessidade de restringir referência circular entre processos //TODO: Registrar que o processo foi recebido com outros apensados. Necessário para posterior reenvio $this->atribuirProcessosApensados($objProcedimentoDTO, $objProcesso->processoApensado); - + //Realiza a alteração dos metadados do processo //TODO: Implementar alteração de todos os metadados $this->alterarMetadadosProcedimento($objProcedimentoDTO->getDblIdProcedimento(), $objProcesso); - + //TODO: Finalizar o envio do documento para a respectiva unidade $this->enviarProcedimentoUnidade($objProcedimentoDTO, true); @@ -578,14 +578,14 @@ class ReceberProcedimentoRN extends InfraRN } - + private function gerarAndamentoUnidadeReceptora($parNumIdProcedimento) { - + $objUnidadeDTO = new PenUnidadeDTO(); $objUnidadeDTO->setNumIdUnidadeRH($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); $objUnidadeDTO->setStrSinAtivo('S'); $objUnidadeDTO->retStrDescricao(); //descricao - + $objUnidadeRN = new UnidadeRN(); $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); @@ -617,7 +617,7 @@ class ReceberProcedimentoRN extends InfraRN } //TODO: Usar dados do destinatário em outro método específico para envio - // Dados do procedimento enviados pelos órgão externo integrado ao PEN + // Dados do procedimento enviados pelos órgão externo integrado ao PEN //$objProcesso = $objMetadadosProcedimento->metadados->processo; $objRemetente = $objMetadadosProcedimento->metadados->remetente; $objDestinatario = $objMetadadosProcedimento->metadados->destinatario; @@ -632,16 +632,16 @@ class ReceberProcedimentoRN extends InfraRN $objProtocoloDTO->setDblIdProtocolo(null); $objProtocoloDTO->setStrDescricao(utf8_decode($objProcesso->descricao)); $objProtocoloDTO->setStrStaNivelAcessoLocal($this->obterNivelSigiloSEI($objProcesso->nivelDeSigilo)); - + if($this->obterNivelSigiloSEI($objProcesso->nivelDeSigilo) == ProtocoloRN::$NA_RESTRITO){ $objHipoteseLegalRecebido = new PenRelHipoteseLegalRecebidoRN(); $objPenParametroRN = new PenParametroRN(); $numIdHipoteseLegalPadrao = $objPenParametroRN->getParametro('HIPOTESE_LEGAL_PADRAO'); - + if (!isset($objProcesso->hipoteseLegal) || (isset($objProcesso->hipoteseLegal) && empty($objProcesso->hipoteseLegal->identificacao))) { $objProtocoloDTO->setNumIdHipoteseLegal($numIdHipoteseLegalPadrao); } else { - + $numIdHipoteseLegal = $objHipoteseLegalRecebido->getIdHipoteseLegalSEI($objProcesso->hipoteseLegal->identificacao); if (empty($numIdHipoteseLegal)) { $objProtocoloDTO->setNumIdHipoteseLegal($numIdHipoteseLegalPadrao); @@ -650,7 +650,7 @@ class ReceberProcedimentoRN extends InfraRN } } } - + $objProtocoloDTO->setStrProtocoloFormatado(utf8_decode($objProcesso->protocolo)); $objProtocoloDTO->setDtaGeracao($this->objProcessoEletronicoRN->converterDataSEI($objProcesso->dataHoraDeProducao)); $objProtocoloDTO->setArrObjAnexoDTO(array()); @@ -659,18 +659,18 @@ class ReceberProcedimentoRN extends InfraRN //$objProtocoloDTO->setStrStaEstado(ProtocoloRN::$TE_BLOQUEADO); $this->atribuirRemetente($objProtocoloDTO, $objRemetente); $this->atribuirParticipantes($objProtocoloDTO, $objProcesso->interessado); - - - + + + $strDescricao = sprintf('Tipo de processo no órgão de origem: %s', utf8_decode($objProcesso->processoDeNegocio)).PHP_EOL; $strDescricao .= $objProcesso->observacao; - + $objObservacaoDTO = new ObservacaoDTO(); - + //!Criação da observação de aviso para qual é a real unidade emitida (!2!) if ($this->destinatarioReal) { $objUnidadeDTO = new PenUnidadeDTO(); - $objUnidadeDTO->setNumIdUnidadeRH($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); + $objUnidadeDTO->setNumIdUnidadeRH($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); $objUnidadeDTO->setStrSinAtivo('S'); $objUnidadeDTO->retStrDescricao(); @@ -680,48 +680,48 @@ class ReceberProcedimentoRN extends InfraRN } else { $objObservacaoDTO->setStrDescricao($strDescricao); } - + //throw new InfraException(var_export($objObservacaoDTO, true)); - + $objProtocoloDTO->setArrObjObservacaoDTO(array($objObservacaoDTO)); - + //Atribuição de dados do procedimento //TODO: Validar cada uma das informações de entrada do webservice - $objProcedimentoDTO = new ProcedimentoDTO(); + $objProcedimentoDTO = new ProcedimentoDTO(); $objProcedimentoDTO->setDblIdProcedimento(null); - $objProcedimentoDTO->setObjProtocoloDTO($objProtocoloDTO); + $objProcedimentoDTO->setObjProtocoloDTO($objProtocoloDTO); $objProcedimentoDTO->setStrNomeTipoProcedimento(utf8_decode($objProcesso->processoDeNegocio)); $objProcedimentoDTO->setDtaGeracaoProtocolo($this->objProcessoEletronicoRN->converterDataSEI($objProcesso->dataHoraDeProducao)); $objProcedimentoDTO->setStrProtocoloProcedimentoFormatado(utf8_decode($objProcesso->protocolo)); $objProcedimentoDTO->setStrSinGerarPendencia('S'); // $objProcedimentoDTO->setNumVersaoLock(0); //TODO: Avaliar o comportamento desse campo no cadastro do processo $objProcedimentoDTO->setArrObjDocumentoDTO(array()); - + //TODO: Identificar o tipo de procedimento correto para atribuição ao novo processo $objPenParametroRN = new PenParametroRN(); $numIdTipoProcedimento = $objPenParametroRN->getParametro('PEN_TIPO_PROCESSO_EXTERNO'); - $this->atribuirTipoProcedimento($objProcedimentoDTO, $numIdTipoProcedimento, $objProcesso->processoDeNegocio); + $this->atribuirTipoProcedimento($objProcedimentoDTO, $numIdTipoProcedimento, $objProcesso->processoDeNegocio); //TODO: Obter código da unidade através de mapeamento entre SEI e Barramento $objUnidadeDTO = $this->atribuirDadosUnidade($objProcedimentoDTO, $objDestinatario); //TODO: Tratar processamento de atributos procedimento_cadastro:177 //... - + //TODO: Atribuir Dados do produtor do processo - //$this->atribuirProdutorProcesso($objProcesso, - // $objProcedimentoDTO->getNumIdUsuarioGeradorProtocolo(), - // $objProcedimentoDTO->getNumIdUnidadeGeradoraProtocolo()); + //$this->atribuirProdutorProcesso($objProcesso, + // $objProcedimentoDTO->getNumIdUsuarioGeradorProtocolo(), + // $objProcedimentoDTO->getNumIdUnidadeGeradoraProtocolo()); + - //TODO:Adicionar demais informações do processo // // - + //$objProcesso->idProcedimentoSEI = $dblIdProcedimento; - + //TODO: Avaliar necessidade de tal recurso //FeedSEIProtocolos::getInstance()->setBolAcumularFeeds(true); @@ -735,9 +735,9 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoDTO->setDblIdProcedimento($objProcedimentoDTOGerado->getDblIdProcedimento()); $this->registrarAndamentoRecebimentoProcesso($objProcedimentoDTO, $objMetadadosProcedimento); - $this->atribuirDocumentos($objProcedimentoDTO, $objProcesso, $objUnidadeDTO, $objMetadadosProcedimento); + $this->atribuirDocumentos($objProcedimentoDTO, $objProcesso, $objUnidadeDTO, $objMetadadosProcedimento); $this->registrarProcedimentoNaoVisualizado($objProcedimentoDTOGerado); - + //TODO: Avaliar necessidade de restringir referência circular entre processos //TODO: Registrar que o processo foi recebido com outros apensados. Necessário para posterior reenvio $this->atribuirProcessosApensados($objProcedimentoDTO, $objProcesso->processoApensado); @@ -758,37 +758,37 @@ class ReceberProcedimentoRN extends InfraRN } private function alterarMetadadosProcedimento($parNumIdProcedimento, $parObjMetadadoProcedimento){ - + //Realiza a alteração dos metadados do processo(Por hora, apenas do nível de sigilo e hipótese legal) $objProtocoloDTO = new ProtocoloDTO(); $objProtocoloDTO->setDblIdProtocolo($parNumIdProcedimento); $objProtocoloDTO->setStrStaNivelAcessoLocal($this->obterNivelSigiloSEI($parObjMetadadoProcedimento->nivelDeSigilo)); - + if($parObjMetadadoProcedimento->hipoteseLegal && $parObjMetadadoProcedimento->hipoteseLegal->identificacao){ $objProtocoloDTO->setNumIdHipoteseLegal($this->obterHipoteseLegalSEI($parObjMetadadoProcedimento->hipoteseLegal->identificacao)); } - + $objProtocoloRN = new ProtocoloRN(); $objProtocoloRN->alterarRN0203($objProtocoloDTO); } - + private function alterarMetadadosDocumento($parNumIdDocumento, $parObjMetadadoDocumento){ //Realiza a alteração dos metadados do documento(Por hora, apenas do nível de sigilo e hipótese legal) $objProtocoloDTO = new ProtocoloDTO(); $objProtocoloDTO->setDblIdProtocolo($parNumIdDocumento); $objProtocoloDTO->setStrStaNivelAcessoLocal($this->obterNivelSigiloSEI($parObjMetadadoDocumento->nivelDeSigilo)); - + if($parObjMetadadoDocumento->hipoteseLegal && $parObjMetadadoDocumento->hipoteseLegal->identificacao){ $objProtocoloDTO->setNumIdHipoteseLegal($this->obterHipoteseLegalSEI($parObjMetadadoDocumento->hipoteseLegal->identificacao)); } - + $objProtocoloRN = new ProtocoloRN(); $objProtocoloRN->alterarRN0203($objProtocoloDTO); - + } - - - private function removerAndamentosProcedimento($parObjProtocoloDTO) + + + private function removerAndamentosProcedimento($parObjProtocoloDTO) { //TODO: Remover apenas as atividades geradas pelo recebimento do processo, não as atividades geradas anteriormente $objAtividadeDTO = new AtividadeDTO(); @@ -797,16 +797,16 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeDTO->setNumIdTarefa(TarefaRN::$TI_GERACAO_PROCEDIMENTO); $objAtividadeRN = new AtividadeRN(); - $objAtividadeRN->excluirRN0034($objAtividadeRN->listarRN0036($objAtividadeDTO)); + $objAtividadeRN->excluirRN0034($objAtividadeRN->listarRN0036($objAtividadeDTO)); } private function registrarAndamentoRecebimentoProcesso(ProcedimentoDTO $objProcedimentoDTO, $parObjMetadadosProcedimento) { - //Processo recebido da entidade @ENTIDADE_ORIGEM@ - @REPOSITORIO_ORIGEM@ + //Processo recebido da entidade @ENTIDADE_ORIGEM@ - @REPOSITORIO_ORIGEM@ //TODO: Atribuir atributos necessários para formação da mensagem do andamento - //TODO: Especificar quais andamentos serão registrados + //TODO: Especificar quais andamentos serão registrados $objRemetente = $parObjMetadadosProcedimento->metadados->remetente; - $objProcesso = $objMetadadosProcedimento->metadados->processo; + $objProcesso = $objMetadadosProcedimento->metadados->processo; $arrObjAtributoAndamentoDTO = array(); @@ -816,7 +816,7 @@ class ReceberProcedimentoRN extends InfraRN //TODO: Otimizar código. Apenas buscar no barramento os dados da estrutura 1 única vez (AtribuirRemetente também utiliza) $objEstrutura = $this->objProcessoEletronicoRN->consultarEstrutura( - $objRemetente->identificacaoDoRepositorioDeEstruturas, + $objRemetente->identificacaoDoRepositorioDeEstruturas, $objRemetente->numeroDeIdentificacaoDaEstrutura, true ); @@ -832,19 +832,19 @@ class ReceberProcedimentoRN extends InfraRN $objAtributoAndamentoDTO->setStrValor($objEstrutura->nome); $objAtributoAndamentoDTO->setStrIdOrigem($objEstrutura->numeroDeIdentificacaoDaEstrutura); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - + if(isset($objEstrutura->hierarquia)) { - + $arrObjNivel = $objEstrutura->hierarquia->nivel; - + $nome = ""; $siglasUnidades = array(); $siglasUnidades[] = $objEstrutura->sigla; - + foreach($arrObjNivel as $key => $objNivel){ $siglasUnidades[] = $objNivel->sigla ; } - + for($i = 1; $i <= 3; $i++){ if(isset($siglasUnidades[count($siglasUnidades) - 1])){ unset($siglasUnidades[count($siglasUnidades) - 1]); @@ -858,7 +858,7 @@ class ReceberProcedimentoRN extends InfraRN $nome .= $nomeUnidade." / "; } } - + $objNivel = current($arrObjNivel); $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); @@ -867,8 +867,8 @@ class ReceberProcedimentoRN extends InfraRN $objAtributoAndamentoDTO->setStrIdOrigem($objNivel->numeroDeIdentificacaoDaEstrutura); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; } - - + + $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento()); $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); @@ -878,26 +878,26 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeDTO->setDthConclusao(null); $objAtividadeDTO->setNumIdUsuarioConclusao(null); $objAtividadeDTO->setStrSinInicial('N'); - + $objAtividadeRN = new AtividadeRN(); $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); - - - + + + } //TODO: Avaliar a necessidade de registrar os dados do remetente como participante do processo private function atribuirRemetente(ProtocoloDTO $objProtocoloDTO, $objRemetente) - { - $arrObjParticipantesDTO = array(); + { + $arrObjParticipantesDTO = array(); if($objProtocoloDTO->isSetArrObjParticipanteDTO()) { - $arrObjParticipantesDTO = $objProtocoloDTO->getArrObjParticipanteDTO(); + $arrObjParticipantesDTO = $objProtocoloDTO->getArrObjParticipanteDTO(); } - + //Obtenção de detalhes do remetente na infraestrutura do PEN $objEstruturaDTO = $this->objProcessoEletronicoRN->consultarEstrutura( - $objRemetente->identificacaoDoRepositorioDeEstruturas, + $objRemetente->identificacaoDoRepositorioDeEstruturas, $objRemetente->numeroDeIdentificacaoDaEstrutura); if(!empty($objEstruturaDTO)) { @@ -915,10 +915,10 @@ class ReceberProcedimentoRN extends InfraRN private function atribuirParticipantes(ProtocoloDTO $objProtocoloDTO, $arrObjInteressados) - { - $arrObjParticipantesDTO = array(); + { + $arrObjParticipantesDTO = array(); if($objProtocoloDTO->isSetArrObjParticipanteDTO()) { - $arrObjParticipantesDTO = $objProtocoloDTO->getArrObjParticipanteDTO(); + $arrObjParticipantesDTO = $objProtocoloDTO->getArrObjParticipanteDTO(); } if (!is_array($arrObjInteressados)) { @@ -961,11 +961,11 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoDTO->setNumIdTipoProcedimento($objTipoProcedimentoDTO->getNumIdTipoProcedimento()); $objProcedimentoDTO->setStrNomeTipoProcedimento($objTipoProcedimentoDTO->getStrNome()); - //Busca e adiciona os assuntos sugeridos para o tipo informado + //Busca e adiciona os assuntos sugeridos para o tipo informado $objRelTipoProcedimentoAssuntoDTO = new RelTipoProcedimentoAssuntoDTO(); $objRelTipoProcedimentoAssuntoDTO->retNumIdAssunto(); $objRelTipoProcedimentoAssuntoDTO->retNumSequencia(); - $objRelTipoProcedimentoAssuntoDTO->setNumIdTipoProcedimento($objProcedimentoDTO->getNumIdTipoProcedimento()); + $objRelTipoProcedimentoAssuntoDTO->setNumIdTipoProcedimento($objProcedimentoDTO->getNumIdTipoProcedimento()); $objRelTipoProcedimentoAssuntoRN = new RelTipoProcedimentoAssuntoRN(); $arrObjRelTipoProcedimentoAssuntoDTO = $objRelTipoProcedimentoAssuntoRN->listarRN0192($objRelTipoProcedimentoAssuntoDTO); @@ -982,7 +982,7 @@ class ReceberProcedimentoRN extends InfraRN } protected function atribuirDadosUnidade(ProcedimentoDTO $objProcedimentoDTO, $objDestinatario){ - + if(!isset($objDestinatario)){ throw new InfraException('Parâmetro $objDestinatario não informado.'); } @@ -992,8 +992,8 @@ class ReceberProcedimentoRN extends InfraRN if(!isset($objUnidadeDTOEnvio)) throw new InfraException('Unidade de destino não pode ser encontrada. Repositório: '.$objDestinatario->identificacaoDoRepositorioDeEstruturas.', Número: ' . $objDestinatario->numeroDeIdentificacaoDaEstrutura); - $arrObjUnidadeDTO = array(); - $arrObjUnidadeDTO[] = $objUnidadeDTOEnvio; + $arrObjUnidadeDTO = array(); + $arrObjUnidadeDTO[] = $objUnidadeDTOEnvio; $objProcedimentoDTO->setArrObjUnidadeDTO($arrObjUnidadeDTO); return $objUnidadeDTOEnvio; @@ -1003,8 +1003,8 @@ class ReceberProcedimentoRN extends InfraRN //TODO: Grande parte da regra de negócio se baseou em SEIRN:199 - incluirDocumento. //Avaliar a refatoração para impedir a duplicação de código private function atribuirDocumentos($objProcedimentoDTO, $objProcesso, $objUnidadeDTO, $parObjMetadadosProcedimento) - { - + { + if(!isset($objProcesso)) { throw new InfraException('Parâmetro $objProcesso não informado.'); } @@ -1019,14 +1019,14 @@ class ReceberProcedimentoRN extends InfraRN $arrObjDocumentos = $objProcesso->documento; if(!is_array($arrObjDocumentos)) { - $arrObjDocumentos = array($arrObjDocumentos); + $arrObjDocumentos = array($arrObjDocumentos); } $strNumeroRegistro = $parObjMetadadosProcedimento->metadados->NRE; //$numTramite = $parObjMetadadosProcedimento->metadados->IDT; //Ordenação dos documentos conforme informado pelo remetente. Campo documento->ordem - usort($arrObjDocumentos, array("ReceberProcedimentoRN", "comparacaoOrdemDocumentos")); + usort($arrObjDocumentos, array("ReceberProcedimentoRN", "comparacaoOrdemDocumentos")); //Obter dados dos documentos já registrados no sistema $objComponenteDigitalDTO = new ComponenteDigitalDTO(); @@ -1043,32 +1043,32 @@ class ReceberProcedimentoRN extends InfraRN $objProtocoloBD = new ProtocoloBD($this->getObjInfraIBanco()); $objSeiRN = new SeiRN(); - + $arrObjDocumentoDTO = array(); - + foreach($arrObjDocumentos as $objDocumento){ - + // @join_tec US027 (#3498) if(isset($objDocumento->retirado) && $objDocumento->retirado === true) { //$strHashConteudo = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componenteDigital->hash); - - + + // Caso já esteja cadastrado, de um reenvio anterior, então move para bloqueado if(array_key_exists($objDocumento->ordem, $arrObjComponenteDigitalDTOIndexado)) { - + //Busca o ID do protocolo //$dblIdProtocolo = $arrStrHashConteudo[$strHashConteudo]; $objComponenteIndexado = $arrObjComponenteDigitalDTOIndexado[$objDocumento->ordem]; $dblIdProtocolo = $objComponenteIndexado->getDblIdDocumento(); - + //Instancia o DTO do protocolo $objProtocoloDTO = new ProtocoloDTO(); $objProtocoloDTO->setDblIdProtocolo($dblIdProtocolo); $objProtocoloDTO->retStrStaEstado(); - + $objProtocoloDTO = $objProtocoloBD->consultar($objProtocoloDTO); - + if($objProtocoloDTO->getStrStaEstado() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ //Instancia o DTO do protocolo $objEntradaCancelarDocumentoAPI = new EntradaCancelarDocumentoAPI(); @@ -1076,12 +1076,12 @@ class ReceberProcedimentoRN extends InfraRN $objEntradaCancelarDocumentoAPI->setMotivo('Cancelado pelo remetente'); $objSeiRN->cancelarDocumento($objEntradaCancelarDocumentoAPI); - + } - - + + continue; - + } //continue; } @@ -1096,8 +1096,8 @@ class ReceberProcedimentoRN extends InfraRN if(!isset($objDocumento->especie)){ throw new InfraException('Espécie do documento ['.$objDocumento->descricao.'] não informada.'); } - -//--------------------------------------------------------------------------------------------------- + +//--------------------------------------------------------------------------------------------------- $objDocumentoDTO = new DocumentoDTO(); $objDocumentoDTO->setDblIdDocumento(null); @@ -1149,7 +1149,7 @@ class ReceberProcedimentoRN extends InfraRN $objDocumentoDTO->setObjProtocoloDTO($objProtocoloDTO); $objProtocoloDTO->setDblIdProtocolo(null); $objProtocoloDTO->setStrStaProtocolo(ProtocoloRN::$TP_DOCUMENTO_RECEBIDO); - + if($objDocumento->descricao != '***'){ $objProtocoloDTO->setStrDescricao(utf8_decode($objDocumento->descricao)); $objDocumentoDTO->setStrNumero(utf8_decode($objDocumento->descricao)); @@ -1158,14 +1158,14 @@ class ReceberProcedimentoRN extends InfraRN $objDocumentoDTO->setStrNumero(""); } //TODO: Avaliar regra de formação do número do documento - + $objProtocoloDTO->setStrStaNivelAcessoLocal($this->obterNivelSigiloSEI($objDocumento->nivelDeSigilo)); $objProtocoloDTO->setDtaGeracao($this->objProcessoEletronicoRN->converterDataSEI($objDocumento->dataHoraDeProducao)); $objProtocoloDTO->setArrObjAnexoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloAssuntoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloProtocoloDTO(array()); $objProtocoloDTO->setArrObjParticipanteDTO(array()); - + //TODO: Analisar se o modelo de dados do PEN possui destinatários específicos para os documentos //caso não possua, analisar o repasse de tais informações via parãmetros adicionais @@ -1200,9 +1200,9 @@ class ReceberProcedimentoRN extends InfraRN $objReabrirProcessoDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); $objProcedimentoRN->reabrirRN0966($objReabrirProcessoDTO); $bolReabriuAutomaticamente = true; - } + } } - + //$objOperacaoServicoDTO = new OperacaoServicoDTO(); //$this->adicionarCriteriosUnidadeProcessoDocumento ($objOperacaoServicoDTO,$objUnidadeDTO,$objProcedimentoDTO,$objDocumentoDTO); //$objOperacaoServicoDTO->setNumStaOperacaoServico(OperacaoServicoRN::$TS_INCLUIR_DOCUMENTO); @@ -1227,7 +1227,7 @@ class ReceberProcedimentoRN extends InfraRN $objDocumentoDTO->getObjProtocoloDTO()->setStrStaGrauSigilo($objTipoProcedimentoDTO->getStrStaGrauSigiloSugestao()); $objDocumentoDTO->getObjProtocoloDTO()->setNumIdHipoteseLegal($objTipoProcedimentoDTO->getNumIdHipoteseLegalSugestao()); } - + if ($this->obterNivelSigiloSEI($objDocumento->nivelDeSigilo) == ProtocoloRN::$NA_RESTRITO) { $objHipoteseLegalRecebido = new PenRelHipoteseLegalRecebidoRN(); $objPenParametroRN = new PenParametroRN(); @@ -1236,7 +1236,7 @@ class ReceberProcedimentoRN extends InfraRN if (!isset($objDocumento->hipoteseLegal) || (isset($objDocumento->hipoteseLegal) && empty($objDocumento->hipoteseLegal->identificacao))) { $objDocumentoDTO->getObjProtocoloDTO()->setNumIdHipoteseLegal($numIdHipoteseLegalPadrao); } else { - + $numIdHipoteseLegal = $objHipoteseLegalRecebido->getIdHipoteseLegalSEI($objDocumento->hipoteseLegal->identificacao); if (empty($numIdHipoteseLegal)) { $objDocumentoDTO->getObjProtocoloDTO()->setNumIdHipoteseLegal($numIdHipoteseLegalPadrao); @@ -1245,7 +1245,7 @@ class ReceberProcedimentoRN extends InfraRN } } } - + $objDocumentoDTO->getObjProtocoloDTO()->setArrObjParticipanteDTO($this->prepararParticipantes($objDocumentoDTO->getObjProtocoloDTO()->getArrObjParticipanteDTO())); $objDocumentoRN = new DocumentoRN(); @@ -1253,13 +1253,13 @@ class ReceberProcedimentoRN extends InfraRN $strConteudoCodificado = $objDocumentoDTO->getStrConteudo(); $objDocumentoDTO->setStrConteudo(null); //$objDocumentoDTO->setStrSinFormulario('N'); - + $objDocumentoDTO->getObjProtocoloDTO()->setNumIdUnidadeGeradora(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objDocumentoDTO->setStrSinBloqueado('S'); - + //TODO: Fazer a atribuição dos componentes digitais do processo a partir desse ponto - $this->atribuirComponentesDigitais($objDocumentoDTO, $objDocumento->componenteDigital); - $objDocumentoDTOGerado = $objDocumentoRN->cadastrarRN0003($objDocumentoDTO); + $this->atribuirComponentesDigitais($objDocumentoDTO, $objDocumento->componenteDigital); + $objDocumentoDTOGerado = $objDocumentoRN->cadastrarRN0003($objDocumentoDTO); $objAtividadeDTOVisualizacao = new AtividadeDTO(); $objAtividadeDTOVisualizacao->setDblIdProtocolo($objDocumentoDTO->getDblIdProcedimento()); @@ -1276,11 +1276,11 @@ class ReceberProcedimentoRN extends InfraRN $objDocumento->idDocumentoSEI = $objDocumentoDTO->getDblIdDocumento(); $arrObjDocumentoDTO[] = $objDocumentoDTO; - + if(isset($objDocumento->retirado) && $objDocumento->retirado === true) { $this->documentosRetirados[] = $objDocumento->idDocumentoSEI; } - + } foreach($this->documentosRetirados as $documentoCancelado){ @@ -1293,23 +1293,23 @@ class ReceberProcedimentoRN extends InfraRN } $objProcedimentoDTO->setArrObjDocumentoDTO($arrObjDocumentoDTO); - + /* if($numIdUnidadeAtual != $numIdUnidadeGeradora){ - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $numIdUnidadeAtual); + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $numIdUnidadeAtual); } */ } //TODO: Método deverá poderá ser transferido para a classe responsável por fazer o recebimento dos componentes digitais - private function atribuirComponentesDigitais(DocumentoDTO $parObjDocumentoDTO, $parArrObjComponentesDigitais) + private function atribuirComponentesDigitais(DocumentoDTO $parObjDocumentoDTO, $parArrObjComponentesDigitais) { if(!isset($parArrObjComponentesDigitais)) { - throw new InfraException('Componentes digitais do documento não informado.'); + throw new InfraException('Componentes digitais do documento não informado.'); } //TODO: Aplicar mesmas validações realizadas no momento do upload de um documento InfraPagina::processarUpload //TODO: Avaliar a refatoração do código abaixo para impedir a duplicação de regras de negócios - - + + $arrObjAnexoDTO = array(); if($parObjDocumentoDTO->getObjProtocoloDTO()->isSetArrObjAnexoDTO()) { $arrObjAnexoDTO = $parObjDocumentoDTO->getObjProtocoloDTO()->getArrObjAnexoDTO(); @@ -1353,7 +1353,7 @@ class ReceberProcedimentoRN extends InfraRN private function atribuirDataHoraDeRegistro(){ - } + } private function cadastrarTramiteDeProcesso($objTramite, $objProcesso){ @@ -1366,7 +1366,7 @@ class ReceberProcedimentoRN extends InfraRN } $objDestinatario = $objMetadadosProcedimento->metadados->destinatario; - + $objPenParametroRN = new PenParametroRN(); $numIdRepositorioOrigem = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); $numIdRepositorioDestinoProcesso = $objDestinatario->identificacaoDoRepositorioDeEstruturas; @@ -1379,7 +1379,7 @@ class ReceberProcedimentoRN extends InfraRN //Validação do unidade de destino do processo $objUnidadeDTO = new PenUnidadeDTO(); - $objUnidadeDTO->setNumIdUnidadeRH($numeroDeIdentificacaoDaEstrutura); + $objUnidadeDTO->setNumIdUnidadeRH($numeroDeIdentificacaoDaEstrutura); $objUnidadeDTO->setStrSinAtivo('S'); $objUnidadeDTO->retNumIdUnidade(); @@ -1387,8 +1387,8 @@ class ReceberProcedimentoRN extends InfraRN $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); if(!isset($objUnidadeDTO)){ - $objInfraException->adicionarValidacao("Unidade de destino [Estrutura: {$numeroDeIdentificacaoDaEstrutura}] não localizada."); - } + $objInfraException->adicionarValidacao("Unidade de destino [Estrutura: {$numeroDeIdentificacaoDaEstrutura}] não configurada para receber trâmites externos."); + } } private function validarDadosRemetente(InfraException $objInfraException, $objMetadadosProcedimento){ @@ -1397,7 +1397,7 @@ class ReceberProcedimentoRN extends InfraRN private function validarDadosProcesso(InfraException $objInfraException, $objMetadadosProcedimento){ - } + } private function validarDadosDocumentos(InfraException $objInfraException, $objMetadadosProcedimento){ @@ -1416,7 +1416,7 @@ class ReceberProcedimentoRN extends InfraRN break; } } - + private function obterHipoteseLegalSEI($parNumIdHipoteseLegalPEN) { //Atribuí a hipótese legal $objHipoteseLegalRecebido = new PenRelHipoteseLegalRecebidoRN(); @@ -1424,7 +1424,7 @@ class ReceberProcedimentoRN extends InfraRN $numIdHipoteseLegalPadrao = $objPenParametroRN->getParametro('HIPOTESE_LEGAL_PADRAO'); $numIdHipoteseLegal = $objHipoteseLegalRecebido->getIdHipoteseLegalSEI($parNumIdHipoteseLegalPEN); - + if (empty($numIdHipoteseLegal)) { return $numIdHipoteseLegalPadrao; } else { @@ -1436,7 +1436,7 @@ class ReceberProcedimentoRN extends InfraRN private function obterUnidadeMapeada($numIdentificacaoDaEstrutura) { $objUnidadeDTO = new PenUnidadeDTO(); - $objUnidadeDTO->setNumIdUnidadeRH($numIdentificacaoDaEstrutura); + $objUnidadeDTO->setNumIdUnidadeRH($numIdentificacaoDaEstrutura); $objUnidadeDTO->setStrSinAtivo('S'); $objUnidadeDTO->retNumIdUnidade(); $objUnidadeDTO->retNumIdOrgao(); @@ -1447,9 +1447,9 @@ class ReceberProcedimentoRN extends InfraRN return $objUnidadeRN->consultarRN0125($objUnidadeDTO); } - + /** - * + * * @return SerieDTO */ private function obterSerieMapeada($numCodigoEspecie) @@ -1462,7 +1462,7 @@ class ReceberProcedimentoRN extends InfraRN $objGenericoBD = new GenericoBD($this->getObjInfraIBanco()); $objMapDTO = $objGenericoBD->consultar($objMapDTO); - + if(empty($objMapDTO)) { $objMapDTO = new PenRelTipoDocMapRecebidoDTO(); $objMapDTO->retNumIdSerie(); @@ -1484,7 +1484,7 @@ class ReceberProcedimentoRN extends InfraRN return $objSerieDTO; } - private function relacionarProcedimentos($objProcedimentoDTO1, $objProcedimentoDTO2) + private function relacionarProcedimentos($objProcedimentoDTO1, $objProcedimentoDTO2) { if(!isset($objProcedimentoDTO1) || !isset($objProcedimentoDTO1)) { throw new InfraException('Parâmetro $objProcedimentoDTO não informado.'); @@ -1524,10 +1524,10 @@ class ReceberProcedimentoRN extends InfraRN } else { if ($objParticipanteDTO->getStrStaParticipacao()==ParticipanteRN::$TP_INTERESSADO) { throw new InfraException('Interessado vazio ou nulo.'); - } + } else if ($objParticipanteDTO->getStrStaParticipacao()==ParticipanteRN::$TP_REMETENTE) { throw new InfraException('Remetente vazio ou nulo.'); - } + } else if ($objParticipanteDTO->getStrStaParticipacao()==ParticipanteRN::$TP_DESTINATARIO) { throw new InfraException('Destinatário vazio ou nulo.'); } @@ -1566,7 +1566,7 @@ class ReceberProcedimentoRN extends InfraRN return $arrObjParticipanteDTO; } - private function registrarProcedimentoNaoVisualizado(ProcedimentoDTO $parObjProcedimentoDTO) + private function registrarProcedimentoNaoVisualizado(ProcedimentoDTO $parObjProcedimentoDTO) { $objAtividadeDTOVisualizacao = new AtividadeDTO(); $objAtividadeDTOVisualizacao->setDblIdProtocolo($parObjProcedimentoDTO->getDblIdProcedimento()); @@ -1576,13 +1576,13 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeRN->atualizarVisualizacao($objAtividadeDTOVisualizacao); } - private function enviarProcedimentoUnidade(ProcedimentoDTO $parObjProcedimentoDTO, $retransmissao = false) + private function enviarProcedimentoUnidade(ProcedimentoDTO $parObjProcedimentoDTO, $retransmissao = false) { $objAtividadeRN = new PenAtividadeRN(); $objInfraException = new InfraException(); if(!$parObjProcedimentoDTO->isSetArrObjUnidadeDTO() || count($parObjProcedimentoDTO->getArrObjUnidadeDTO()) == 0) { - $objInfraException->lancarValidacao('Unidade de destino do processo não informada.'); + $objInfraException->lancarValidacao('Unidade de destino do processo não informada.'); } $arrObjUnidadeDTO = $parObjProcedimentoDTO->getArrObjUnidadeDTO(); @@ -1626,18 +1626,18 @@ class ReceberProcedimentoRN extends InfraRN $objPesquisaPendenciaDTO->setDblIdProtocolo(array($objProcedimentoDTO->getDblIdProcedimento())); $objPesquisaPendenciaDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); $objPesquisaPendenciaDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); - + if($retransmissao){ $objAtividadeRN->setStatusPesquisa(false); - + } - + $objAtividadeDTO2 = new AtividadeDTO(); $objAtividadeDTO2->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento()); $objAtividadeDTO2->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objAtividadeDTO2->setDthConclusao(null); - - + + if ($objAtividadeRN->contarRN0035($objAtividadeDTO2) == 0) { //reabertura automática @@ -1646,15 +1646,15 @@ class ReceberProcedimentoRN extends InfraRN $objReabrirProcessoDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objReabrirProcessoDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); $objProcedimentoRN->reabrirRN0966($objReabrirProcessoDTO); - - } - + + } + //$objPenAtividadeRN = new PenAtividadeRN(); $arrObjProcedimentoDTO = $objAtividadeRN->listarPendenciasRN0754($objPesquisaPendenciaDTO); - + $objInfraException->lancarValidacoes(); - - + + $objEnviarProcessoDTO = new EnviarProcessoDTO(); $objEnviarProcessoDTO->setArrAtividadesOrigem($arrObjProcedimentoDTO[0]->getArrObjAtividadeDTO()); @@ -1664,10 +1664,10 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeDTO->setNumIdUsuarioOrigem(SessaoSEI::getInstance()->getNumIdUsuario()); $objAtividadeDTO->setNumIdUnidade($objUnidadeDTO->getNumIdUnidade()); $objAtividadeDTO->setNumIdUnidadeOrigem(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); - $objEnviarProcessoDTO->setArrAtividades(array($objAtividadeDTO)); - + $objEnviarProcessoDTO->setArrAtividades(array($objAtividadeDTO)); + $objPenParametroRN = new PenParametroRN(); - + $objEnviarProcessoDTO->setStrSinManterAberto('N'); $strEnviaEmailNotificacao = $objPenParametroRN->getParametro('PEN_ENVIA_EMAIL_NOTIFICACAO_RECEBIMENTO'); $objEnviarProcessoDTO->setStrSinEnviarEmailNotificacao($strEnviaEmailNotificacao); @@ -1675,44 +1675,44 @@ class ReceberProcedimentoRN extends InfraRN $objEnviarProcessoDTO->setDtaPrazo(null); $objEnviarProcessoDTO->setNumDias(null); $objEnviarProcessoDTO->setStrSinDiasUteis('N'); - + $objAtividadeRN->enviarRN0023($objEnviarProcessoDTO); - + } /* Essa é a função estática de comparação */ static function comparacaoOrdemDocumentos($parDocumento1, $parDocumento2) { $numOrdemDocumento1 = strtolower($parDocumento1->ordem); - $numOrdemDocumento2 = strtolower($parDocumento2->ordem); - return $numOrdemDocumento1 - $numOrdemDocumento2; - } - - + $numOrdemDocumento2 = strtolower($parDocumento2->ordem); + return $numOrdemDocumento1 - $numOrdemDocumento2; + } + + public function receberTramitesRecusados($parNumIdentificacaoTramite) { if (empty($parNumIdentificacaoTramite)) { throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); } - + //Busca os dados do trâmite no barramento $tramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); - + if(!isset($tramite[0])){ throw new InfraException("Não foi encontrado o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa"); } - + $tramite = $tramite[0]; - + $objTramiteDTO = new TramiteDTO(); $objTramiteDTO->setNumIdTramite($parNumIdentificacaoTramite); $objTramiteDTO->retNumIdUnidade(); - + $objTramiteBD = new TramiteBD(BancoSEI::getInstance()); $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); - + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade()); - + //Busca os dados do procedimento $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); $objProcessoEletronicoDTO->setStrNumeroRegistro($tramite->NRE); @@ -1720,7 +1720,7 @@ class ReceberProcedimentoRN extends InfraRN $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco()); $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO); - + //Busca a última atividade de trâmite externo $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setDblIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento()); @@ -1731,7 +1731,7 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeBD = new AtividadeBD($this->getObjInfraIBanco()); $objAtividadeDTO = $objAtividadeBD->consultar($objAtividadeDTO); - + //Busca a unidade de destino $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); $objAtributoAndamentoDTO->setNumIdAtividade($objAtividadeDTO->getNumIdAtividade()); @@ -1740,7 +1740,7 @@ class ReceberProcedimentoRN extends InfraRN $objAtributoAndamentoBD = new AtributoAndamentoBD($this->getObjInfraIBanco()); $objAtributoAndamentoDTO = $objAtributoAndamentoBD->consultar($objAtributoAndamentoDTO); - + //Monta o DTO de receber tramite recusado $objReceberTramiteRecusadoDTO = new ReceberTramiteRecusadoDTO(); $objReceberTramiteRecusadoDTO->setNumIdTramite($parNumIdentificacaoTramite); @@ -1749,23 +1749,23 @@ class ReceberProcedimentoRN extends InfraRN $objReceberTramiteRecusadoDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_RECUSADO)); $objReceberTramiteRecusadoDTO->setStrMotivoRecusa(utf8_decode($tramite->justificativaDaRecusa)); $objReceberTramiteRecusadoDTO->setStrNomeUnidadeDestino($objAtributoAndamentoDTO->getStrValor()); - + //Faz o tratamento do processo e do trâmite recusado $this->receberTramiteRecusadoInterno($objReceberTramiteRecusadoDTO); - - + + } protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusadoDTO $objReceberTramiteRecusadoDTO){ - - + + //Realiza o desbloqueio do processo $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI(); $objEntradaDesbloquearProcessoAPI->setIdProcedimento($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); - + $objSeiRN = new SeiRN(); $objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI); - + //Adiciona um andamento para o trâmite recusado $arrObjAtributoAndamentoDTO = array(); @@ -1774,104 +1774,104 @@ class ReceberProcedimentoRN extends InfraRN $objAtributoAndamentoDTO->setStrValor($objReceberTramiteRecusadoDTO->getStrMotivoRecusa()); $objAtributoAndamentoDTO->setStrIdOrigem($objReceberTramiteRecusadoDTO->getNumIdUnidadeOrigem()); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - - + + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO'); $objAtributoAndamentoDTO->setStrValor($objReceberTramiteRecusadoDTO->getStrNomeUnidadeDestino()); $objAtributoAndamentoDTO->setStrIdOrigem($objReceberTramiteRecusadoDTO->getNumIdUnidadeOrigem()); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - + $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objAtividadeDTO->setNumIdTarefa($objReceberTramiteRecusadoDTO->getNumIdTarefa()); $objAtividadeDTO->setArrObjAtributoAndamentoDTO($arrObjAtributoAndamentoDTO); - + $objAtividadeRN = new AtividadeRN(); $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); - + //Sinaliza na PenProtocolo que o processo obteve recusa $objProtocolo = new PenProtocoloDTO(); $objProtocolo->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); $objProtocolo->setStrSinObteveRecusa('S'); - + $objProtocoloBD = new ProtocoloBD($this->getObjInfraIBanco()); $objProtocoloBD->alterar($objProtocolo); - - + + $this->objProcessoEletronicoRN->cienciaRecusa($objReceberTramiteRecusadoDTO->getNumIdTramite()); - + } - - - + + + /** - * Método que realiza a validação da extensão dos componentes digitais a serem recebidos - * + * Método que realiza a validação da extensão dos componentes digitais a serem recebidos + * * @param integer $parIdTramite * @param object $parObjProcesso * @throws InfraException */ public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProcesso){ - + //Armazena o array de documentos $arrDocumentos = is_array($parObjProcesso->documento) ? $parObjProcesso->documento : array($parObjProcesso->documento) ; - - //Instancia o bd do arquivoExtensão + + //Instancia o bd do arquivoExtensão $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); - + //Percorre os documentos foreach($arrDocumentos as $documento){ - - //Busca o nome do documento + + //Busca o nome do documento $nomeDocumento = $documento->componenteDigital->nome; - + //Busca pela extensão do documento $arrNomeDocumento = explode('.', $nomeDocumento); $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1]; - - //Verifica se a extensão do arquivo está cadastrada e ativa + + //Verifica se a extensão do arquivo está cadastrada e ativa $arquivoExtensaoDTO = new ArquivoExtensaoDTO(); $arquivoExtensaoDTO->setStrSinAtivo('S'); $arquivoExtensaoDTO->setStrExtensao($extDocumento); $arquivoExtensaoDTO->retStrExtensao(); - + if($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0){ $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. "); } - - + + } } - + /** * Método que verifica as permissões de escrita nos diretórios utilizados no recebimento de processos e documentos - * + * * @param integer $parIdTramite * @throws InfraException */ public function verificarPermissoesDiretorios($parIdTramite){ - + //Verifica se o usuário possui permissões de escrita no repositório de arquivos externos if(!is_writable(ConfiguracaoSEI::getInstance()->getValor('SEI', 'RepositorioArquivos'))){ - + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'O sistema não possui permissão de escrita no diretório de armazenamento de documentos externos', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); throw new InfraException('O sistema não possui permissão de escrita no diretório de armazenamento de documentos externos'); - + } - + //Verifica se o usuário possui permissões de escrita no diretório temporário de arquivos if(!is_writable(DIR_SEI_TEMP)){ - + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'O sistema não possui permissão de escrita no diretório de armazenamento de arquivos temporários do sistema.', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); throw new InfraException('O sistema não possui permissão de escrita no diretório de armazenamento de arquivos temporários do sistema.'); - + } - - + + } } diff --git a/rn/ReceberReciboTramiteRN.php b/rn/ReceberReciboTramiteRN.php index 0b7e301..b9dfd5e 100644 --- a/rn/ReceberReciboTramiteRN.php +++ b/rn/ReceberReciboTramiteRN.php @@ -19,16 +19,16 @@ class ReceberReciboTramiteRN extends InfraRN { return BancoSEI::getInstance(); } - + protected function registrarRecebimentoRecibo($numIdProcedimento, $strProtocoloFormatado, $numIdTramite) { - + //REALIZA A CONCLUSÃO DO PROCESSO $objEntradaConcluirProcessoAPI = new EntradaConcluirProcessoAPI(); $objEntradaConcluirProcessoAPI->setIdProcedimento($numIdProcedimento); - + $objSeiRN = new SeiRN(); $objSeiRN->concluirProcesso($objEntradaConcluirProcessoAPI); - + $arrObjAtributoAndamentoDTO = array(); $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); @@ -38,33 +38,33 @@ class ReceberReciboTramiteRN extends InfraRN $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($numIdTramite); - + $objTramite = array_pop($arrObjTramite); - + $objEstrutura = $this->objProcessoEletronicoRN->consultarEstrutura( - $objTramite->destinatario->identificacaoDoRepositorioDeEstruturas, - $objTramite->destinatario->numeroDeIdentificacaoDaEstrutura, + $objTramite->destinatario->identificacaoDoRepositorioDeEstruturas, + $objTramite->destinatario->numeroDeIdentificacaoDaEstrutura, true ); - + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO'); $objAtributoAndamentoDTO->setStrValor($objEstrutura->nome); $objAtributoAndamentoDTO->setStrIdOrigem($objEstrutura->numeroDeIdentificacaoDaEstrutura); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - + if(isset($objEstrutura->hierarquia)) { - + $arrObjNivel = $objEstrutura->hierarquia->nivel; - + $nome = ""; $siglasUnidades = array(); $siglasUnidades[] = $objEstrutura->sigla; - + foreach($arrObjNivel as $key => $objNivel){ $siglasUnidades[] = $objNivel->sigla ; } - + for($i = 1; $i <= 3; $i++){ if(isset($siglasUnidades[count($siglasUnidades) - 1])){ unset($siglasUnidades[count($siglasUnidades) - 1]); @@ -78,7 +78,7 @@ class ReceberReciboTramiteRN extends InfraRN $nome .= $nomeUnidade." / "; } } - + $objNivel = current($arrObjNivel); $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); @@ -86,19 +86,19 @@ class ReceberReciboTramiteRN extends InfraRN $objAtributoAndamentoDTO->setStrValor($nome); $objAtributoAndamentoDTO->setStrIdOrigem($objNivel->numeroDeIdentificacaoDaEstrutura); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - + } - + $objRepositorioDTO = $this->objProcessoEletronicoRN->consultarRepositoriosDeEstruturas($objTramite->destinatario->identificacaoDoRepositorioDeEstruturas); if(!empty($objRepositorioDTO)) { - + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); $objAtributoAndamentoDTO->setStrNome('REPOSITORIO_DESTINO'); $objAtributoAndamentoDTO->setStrValor($objRepositorioDTO->getStrNome()); $objAtributoAndamentoDTO->setStrIdOrigem($objRepositorioDTO->getNumId()); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; } - + $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setDblIdProtocolo($numIdProcedimento); $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); @@ -111,20 +111,20 @@ class ReceberReciboTramiteRN extends InfraRN } protected function receberReciboDeTramiteConectado($parNumIdTramite) { - - + + if (!isset($parNumIdTramite)) { throw new InfraException('Parâmetro $parNumIdTramite não informado.'); } $objReciboTramite = $this->objProcessoEletronicoRN->receberReciboDeTramite($parNumIdTramite); - + if (!$objReciboTramite) { throw new InfraException("Não foi possível obter recibo de conclusão do trâmite '$parNumIdTramite'"); } - + $objReciboTramite = $objReciboTramite->conteudoDoReciboDeTramite; - $objDateTime = new DateTime($objReciboTramite->recibo->dataDeRecebimento); + $objDateTime = new DateTime($objReciboTramite->recibo->dataDeRecebimento); $objReciboTramiteDTO = new ReciboTramiteDTO(); $objReciboTramiteDTO->setStrNumeroRegistro($objReciboTramite->recibo->NRE); @@ -137,11 +137,11 @@ class ReceberReciboTramiteRN extends InfraRN $objTramiteDTO = new TramiteDTO(); $objTramiteDTO->setNumIdTramite($parNumIdTramite); $objTramiteDTO->retNumIdUnidade(); - + $objTramiteBD = new TramiteBD(BancoSEI::getInstance()); if ($objTramiteBD->contar($objTramiteDTO) > 0) { - + $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade()); @@ -151,10 +151,10 @@ class ReceberReciboTramiteRN extends InfraRN $objReciboTramiteBD = new ReciboTramiteBD(BancoSEI::getInstance()); if ($objReciboTramiteBD->contar($objReciboTramiteDTOExistente) == 0) { - - //Armazenar dados do recibo de conclusão do trãmite + + //Armazenar dados do recibo de conclusão do trãmite $objReciboTramiteBD->cadastrar($objReciboTramiteDTO); - + if ($objReciboTramite->recibo->hashDoComponenteDigital && is_array($objReciboTramite->recibo->hashDoComponenteDigital)) { foreach ($objReciboTramite->recibo->hashDoComponenteDigital as $strHashComponenteDigital) { @@ -198,23 +198,21 @@ class ReceberReciboTramiteRN extends InfraRN $this->objProcedimentoAndamentoRN->setOpts($objProcessoEletronicoDTO->getDblIdProcedimento(), $parNumIdTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO)); $this->objProcedimentoAndamentoRN->cadastrar(sprintf('Trâmite do processo %s foi concluído', $objProtocoloDTO->getStrProtocoloFormatado()), 'S'); - + //Registra o recbimento do recibo no histórico e realiza a conclusão do processo $this->registrarRecebimentoRecibo($objProtocoloDTO->getDblIdProtocolo(), $objProtocoloDTO->getStrProtocoloFormatado(), $parNumIdTramite); - + $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_RECIBO); $objPenTramiteProcessadoRN->setRecebido($parNumIdTramite); - - } catch (Exception $e) { - - $strMessage = 'Falha o modificar o estado do procedimento para bloqueado.'; + } catch (Exception $e) { + $strMessage = 'Falha ao modificar o estado do procedimento para bloqueado.'; LogSEI::getInstance()->gravar($strMessage . PHP_EOL . $e->getMessage() . PHP_EOL . $e->getTraceAsString()); throw new InfraException($strMessage, $e); } } } - + } -} \ No newline at end of file +} -- libgit2 0.21.2