From a6016a7f5744ec5f6ff217e13585f58d83d656cf Mon Sep 17 00:00:00 2001 From: eduardo.praxedes Date: Tue, 6 Dec 2016 16:26:29 -0200 Subject: [PATCH] Correções na validação de assinatura digital, cancelar trâmite e validação de tamanho de arquivo na expedição --- rn/ExpedirProcedimentoRN.php | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------- rn/PenAtualizadorRN.php | 3 ++- rn/PenAtualizarSeiRN.php | 7 +++++++ rn/ProcedimentoAndamentoRN.php | 37 +++++++++---------------------------- 4 files changed, 84 insertions(+), 98 deletions(-) diff --git a/rn/ExpedirProcedimentoRN.php b/rn/ExpedirProcedimentoRN.php index 8073731..e9c72bd 100644 --- a/rn/ExpedirProcedimentoRN.php +++ b/rn/ExpedirProcedimentoRN.php @@ -173,12 +173,9 @@ class ExpedirProcedimentoRN extends InfraRN { $objTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $this->objProcedimentoAndamentoRN->setOpts($dblIdProcedimento, $objTramite->IDT, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO)); - try { - $this->objProcedimentoAndamentoRN->cadastrar('Envio do metadados do processo', 'S'); $idAtividadeExpedicao = $this->bloquearProcedimentoExpedicao($objExpedirProcedimentoDTO, $objProcesso->idProcedimentoSEI); @@ -239,7 +236,7 @@ class ExpedirProcedimentoRN extends InfraRN { } catch (\Exception $e) { $this->desbloquearProcessoExpedicao($objProcesso->idProcedimentoSEI); - $this->registrarAndamentoExpedicaoAbortada($objProtocolo->idProcedimentoSEI); + $this->registrarAndamentoExpedicaoAbortada($objProcesso->idProcedimentoSEI); // @join_tec US008.06 (#23092) $this->objProcedimentoAndamentoRN->cadastrar('Concluído envio dos componentes do processo', 'N'); @@ -1046,6 +1043,11 @@ class ExpedirProcedimentoRN extends InfraRN { if(!isset($objAnexoDTO)){ throw new InfraException("Componente digital do documento {$strProtocoloDocumentoFormatado} não pode ser localizado."); } + + //VALIDAÇÃO DE TAMANHO DE DOCUMENTOS EXTERNOS PARA A EXPEDIÇÃO + if($objAnexoDTO->getNumTamanho() > ($objInfraParametro->getValor('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO') * 1024 * 1024) ){ + throw new InfraException("O tamanho do documento {$objAnexoDTO->getStrProtocoloFormatadoProtocolo()} é maior que os {$objInfraParametro->getValor('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO')} MB permitidos para a expedição de documentos externos."); + } //Obtenção do conteudo do documento externo //TODO: Particionar o documento em tamanho menor caso ultrapasse XX megabytes @@ -1251,6 +1253,7 @@ class ExpedirProcedimentoRN extends InfraRN { $objAnexoDTO->retDblIdProtocolo(); $objAnexoDTO->retDthInclusao(); $objAnexoDTO->retNumTamanho(); + $objAnexoDTO->retStrProtocoloFormatadoProtocolo(); $objAnexoDTO->setDblIdProtocolo($dblIdDocumento); return $this->objAnexoRN->consultarRN0736($objAnexoDTO); @@ -2024,99 +2027,98 @@ class ExpedirProcedimentoRN extends InfraRN { */ public function cancelarTramite($dblIdProcedimento) { - $objDTOFiltro = new ProcessoEletronicoDTO(); - $objDTOFiltro->setDblIdProcedimento($dblIdProcedimento); - $objDTOFiltro->retStrNumeroRegistro(); - $objDTOFiltro->setNumMaxRegistrosRetorno(1); - - $objBD = new ProcessoEletronicoBD($this->getObjInfraIBanco()); - $objProcessoEletronicoDTO = $objBD->consultar($objDTOFiltro); - - if(empty($objProcessoEletronicoDTO)) { - throw new InfraException('Não foi Encontrado o Processo pelo ID '. $dblIdProcedimento); - } - + //Busca os dados do protocolo $objDtoProtocolo = new ProtocoloDTO(); $objDtoProtocolo->retStrProtocoloFormatado(); + $objDtoProtocolo->retDblIdProtocolo(); $objDtoProtocolo->setDblIdProtocolo($dblIdProcedimento); $objProtocoloBD = new ProtocoloBD($this->getObjInfraIBanco()); $objDtoProtocolo = $objProtocoloBD->consultar($objDtoProtocolo); - -// $objDTOFiltro = new TramiteDTO(); -// $objDTOFiltro->setStrNumeroRegistro($objProcessoEletronicoDTO->getStrNumeroRegistro()); -// $objDTOFiltro->setNumMaxRegistrosRetorno(1); -// $objDTOFiltro->setOrdNumIdTramite(InfraDTO::$TIPO_ORDENACAO_DESC); -// $objDTOFiltro->retTodos(); -// -// $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); -// $objTramiteDTO = $objTramiteBD->consultar($objDTOFiltro); -// -// if(empty($objTramiteDTO)) { -// throw new InfraException('Não foi Encontrado Trâmite para Esse Processo!'); -// } + $this->cancelarTramiteInternoControlado($objDtoProtocolo); - - $arrObjMetaTramite = $this->objProcessoEletronicoRN->consultarTramitesProtocolo($objDtoProtocolo->getStrProtocoloFormatado()); + } + + protected function cancelarTramiteInternoControlado(ProtocoloDTO $objDtoProtocolo) { - if(empty($arrObjMetaTramite)) { - throw new InfraException('Não foi Encontrado Trâmite para Esse Processo!'); + //Armazena o id do protocolo + $dblIdProcedimento = $objDtoProtocolo->getDblIdProtocolo(); + + $tramites = $this->objProcessoEletronicoRN->consultarTramitesProtocolo($objDtoProtocolo->getStrProtocoloFormatado()); + $tramite = $tramites ? array_pop($tramites) : null; + + if (!$tramite) { + throw new InfraException('Trâmite não encontrado para esse processo. '); } - - $numSituacaoAtual = 0; - - // Se o barramento possui alguma situação do tramite verificamos se o precedimento - // já esta em recebimento - if(!empty($arrObjMetaTramite)) { - - $objMetaTramite = array_pop($arrObjMetaTramite); - - switch($objMetaTramite->situacaoAtual) { - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO: - throw new InfraException("O sistema destinatário já iniciou o recebimento desse processo, portanto não é possivel realizar o cancelamento"); - break; - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE: - throw new InfraException("O sistema destinatário já recebeu esse processo, portanto não é possivel realizar o cancelamento"); - break; - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO: - throw new InfraException("O processo já se encontra cancelado"); - break; - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO: - throw new InfraException("O processo se encontra recusado"); - break; - } - $numSituacaoAtual = $objMetaTramite->situacaoAtual; + + //Verifica se o trâmite está com o status de iniciado + if ($tramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO) { + $this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT); + + return true; } - $this->objProcessoEletronicoRN->cancelarTramite($objMetaTramite->IDT); + //Busca o processo eletrônico + $objDTOFiltro = new ProcessoEletronicoDTO(); + $objDTOFiltro->setDblIdProcedimento($dblIdProcedimento); + $objDTOFiltro->retStrNumeroRegistro(); + $objDTOFiltro->setNumMaxRegistrosRetorno(1); + + $objBD = new ProcessoEletronicoBD($this->getObjInfraIBanco()); + $objProcessoEletronicoDTO = $objBD->consultar($objDTOFiltro); + + if (empty($objProcessoEletronicoDTO)) { + throw new InfraException('Não foi Encontrado o Processo pelo ID ' . $dblIdProcedimento); + } + + //Armazena a situação atual + $numSituacaoAtual = $tramite->situacaoAtual; + + //Valida os status + switch ($numSituacaoAtual) { + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO: + throw new InfraException("O sistema destinatário já iniciou o recebimento desse processo, portanto não é possivel realizar o cancelamento"); + break; + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE: + throw new InfraException("O sistema destinatário já recebeu esse processo, portanto não é possivel realizar o cancelamento"); + break; + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO: + throw new InfraException("O processo já se encontra cancelado"); + break; + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO: + throw new InfraException("O processo se encontra recusado"); + break; + } + + $this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT); //Desbloqueia o processo $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI(); - $objEntradaDesbloquearProcessoAPI->setIdProcedimento($dblIdProcedimento); + $objEntradaDesbloquearProcessoAPI->setIdProcedimento($dblIdProcedimento); + $objSeiRN = new SeiRN(); $objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI); - + $objDTOFiltro = new TramiteDTO(); - $objDTOFiltro->setNumIdTramite($objMetaTramite->IDT); + $objDTOFiltro->setNumIdTramite($tramite->IDT); $objDTOFiltro->setNumMaxRegistrosRetorno(1); $objDTOFiltro->setOrdNumIdTramite(InfraDTO::$TIPO_ORDENACAO_DESC); $objDTOFiltro->retNumIdTramite(); $objDTOFiltro->retStrNumeroRegistro(); - + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); $objTramiteDTO = $objTramiteBD->consultar($objDTOFiltro); $objTramiteDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO); $objTramiteDTO = $objTramiteBD->alterar($objTramiteDTO); - + //Cria o Objeto que registrará a Atividade de cancelamento $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setDblIdProtocolo($dblIdProcedimento); $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_CANCELADO)); - //Seta os atributos do tamplate de descrição dessa atividade $objAtributoAndamentoDTOHora = new AtributoAndamentoDTO(); $objAtributoAndamentoDTOHora->setStrNome('DATA_HORA'); @@ -2132,13 +2134,8 @@ class ExpedirProcedimentoRN extends InfraRN { $objAtividadeRN = new AtividadeRN(); $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); - - } - - - // // private function validarStrSinGerarPendenciaRN0901(ProcedimentoDTO $objProcedimentoDTO, InfraException $objInfraException){ // // if (InfraString::isBolVazia($objProcedimentoDTO->getStrSinGerarPendencia())){ // // $objInfraException->adicionarValidacao('Sinalizador de geração de andamento automático não informado.'); diff --git a/rn/PenAtualizadorRN.php b/rn/PenAtualizadorRN.php index 595c4c3..f8121a0 100644 --- a/rn/PenAtualizadorRN.php +++ b/rn/PenAtualizadorRN.php @@ -12,7 +12,8 @@ abstract class PenAtualizadorRN extends InfraRN { const VER_003 = '0.0.3'; const VER_004 = '0.0.4'; const VER_005 = '0.0.5'; - + const VER_006 = '0.0.6'; + protected $sei_versao; /** diff --git a/rn/PenAtualizarSeiRN.php b/rn/PenAtualizarSeiRN.php index 170addb..9fc1533 100644 --- a/rn/PenAtualizarSeiRN.php +++ b/rn/PenAtualizarSeiRN.php @@ -893,4 +893,11 @@ class PenAtualizarSeiRN extends PenAtualizadorRN { $fnAtualizar('PEN_PROCESSO_RECEBIDO', 'Processo recebido da unidade externa @ENTIDADE_ORIGEM@ - @ENTIDADE_ORIGEM_HIRARQUIA@ - @REPOSITORIO_ORIGEM@'); $fnAtualizar('PEN_OPERACAO_EXTERNA', 'Tramitação externa do processo @PROTOCOLO_FORMATADO@ concluída com sucesso. Recebido em @UNIDADE_DESTINO@ - @UNIDADE_DESTINO_HIRARQUIA@ - @REPOSITORIO_DESTINO@'); } + + protected function instalarV006R004S004WI001() { + $objInfraParametro = new InfraParametro($this->getObjInfraIBanco()); + $objInfraParametro->setValor('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO', 50); + + } + } \ No newline at end of file diff --git a/rn/ProcedimentoAndamentoRN.php b/rn/ProcedimentoAndamentoRN.php index b93955c..d40694b 100644 --- a/rn/ProcedimentoAndamentoRN.php +++ b/rn/ProcedimentoAndamentoRN.php @@ -75,36 +75,17 @@ class ProcedimentoAndamentoRN extends InfraRN { $hash = md5($this->dblIdProcedimento.$strMensagem); $objProcedimentoAndamentoDTO = new ProcedimentoAndamentoDTO(); + $objProcedimentoAndamentoDTO->setStrSituacao($strSituacao); + $objProcedimentoAndamentoDTO->setDthData(date('d/m/Y H:i:s')); + $objProcedimentoAndamentoDTO->setDblIdProcedimento($this->dblIdProcedimento); + $objProcedimentoAndamentoDTO->setDblIdTramite($this->dblIdTramit); + $objProcedimentoAndamentoDTO->setStrSituacao($strSituacao); + $objProcedimentoAndamentoDTO->setStrMensagem($strMensagem); $objProcedimentoAndamentoDTO->setStrHash($hash); - $objProcedimentoAndamentoDTO->retTodos(); - - $objProcedimentoAndamentoBD = new ProcedimentoAndamentoBD($objInfraIBanco); - $objProcedimentoAndamentoDTO = $objProcedimentoAndamentoBD->consultar($objProcedimentoAndamentoDTO); - + $objProcedimentoAndamentoDTO->setNumTarefa($this->numTarefa); - // achou um registro, então atualiza o log - /* if(!empty($objProcedimentoAndamentoDTO)) { - - $objProcedimentoAndamentoDTO->setStrSituacao($strSituacao); - $objProcedimentoAndamentoDTO->setDthData(date('d/m/Y H:i:s')); - - $objProcedimentoAndamentoBD->alterar($objProcedimentoAndamentoDTO); - } - // Senão cadastra um novo log - else { */ - - $objProcedimentoAndamentoDTO = new ProcedimentoAndamentoDTO(); - $objProcedimentoAndamentoDTO->setStrSituacao($strSituacao); - $objProcedimentoAndamentoDTO->setDthData(date('d/m/Y H:i:s')); - $objProcedimentoAndamentoDTO->setDblIdProcedimento($this->dblIdProcedimento); - $objProcedimentoAndamentoDTO->setDblIdTramite($this->dblIdTramit); - $objProcedimentoAndamentoDTO->setStrSituacao($strSituacao); - $objProcedimentoAndamentoDTO->setStrMensagem($strMensagem); - $objProcedimentoAndamentoDTO->setStrHash($hash); - $objProcedimentoAndamentoDTO->setNumTarefa($this->numTarefa); - - $objProcedimentoAndamentoBD->cadastrar($objProcedimentoAndamentoDTO); - // } + $objProcedimentoAndamentoBD = new ProcedimentoAndamentoBD($objInfraIBanco); + $objProcedimentoAndamentoBD->cadastrar($objProcedimentoAndamentoDTO); $objInfraIBanco->confirmarTransacao(); } -- libgit2 0.21.2