From 216d35ac09559c4315ffbbd3bd5ecc7318a3e704 Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Del Cantoni Date: Thu, 9 May 2019 11:30:27 -0300 Subject: [PATCH] [Fixed #43] Componente digital do documento XYZ não pode ser localizado --- rn/ExpedirProcedimentoRN.php | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------- rn/ReceberProcedimentoRN.php | 5 +++-- 2 files changed, 53 insertions(+), 42 deletions(-) diff --git a/rn/ExpedirProcedimentoRN.php b/rn/ExpedirProcedimentoRN.php index 5d789b2..872612f 100644 --- a/rn/ExpedirProcedimentoRN.php +++ b/rn/ExpedirProcedimentoRN.php @@ -1108,6 +1108,7 @@ class ExpedirProcedimentoRN extends InfraRN { //$this->atribuirAssinaturaEletronica($objDocumento->componenteDigital, $objDocumentoDTO); $objDocumento->componenteDigital->idAnexo = $arrInformacaoArquivo['ID_ANEXO']; + return $objDocumento; } @@ -1238,52 +1239,61 @@ class ExpedirProcedimentoRN extends InfraRN { $objAnexoDTO = $this->consultarAnexo($objDocumentoDTO->getDblIdDocumento()); - if(!isset($objAnexoDTO)){ - throw new InfraException("Componente digital do documento {$strProtocoloDocumentoFormatado} não pode ser localizado."); - } - - //VALIDAO DE TAMANHO DE DOCUMENTOS EXTERNOS PARA A EXPEDIO - $objPenParametroRN = new PenParametroRN(); - if($objAnexoDTO->getNumTamanho() > ($objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO') * 1024 * 1024) && $objDocumentoDTO->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ - $strTamanhoFormatado = round(($objAnexoDTO->getNumTamanho() / 1024) / 1024,2); - throw new InfraException("O tamanho do documento {$strTamanhoFormatado} MB é maior que os {$objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO')} MB permitidos para trâmite externo de documentos."); - } + if(isset($objAnexoDTO)){ + //VALIDAO DE TAMANHO DE DOCUMENTOS EXTERNOS PARA A EXPEDIO + $objPenParametroRN = new PenParametroRN(); + if($objAnexoDTO->getNumTamanho() > ($objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO') * 1024 * 1024) && $objDocumentoDTO->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ + $strTamanhoFormatado = round(($objAnexoDTO->getNumTamanho() / 1024) / 1024,2); + throw new InfraException("O tamanho do documento {$strTamanhoFormatado} MB é maior que os {$objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO')} MB permitidos para trâmite externo de documentos."); + } - //Obtenção do conteúdo do documento externo - //TODO: Particionar o documento em tamanho menor caso ultrapasse XX megabytes - $strCaminhoAnexo = $this->objAnexoRN->obterLocalizacao($objAnexoDTO); - - $fp = fopen($strCaminhoAnexo, "rb"); - try { - $strConteudoAssinatura = fread($fp, filesize($strCaminhoAnexo)); - fclose($fp); - } catch(Exception $e) { - fclose($fp); - throw new InfraException("Erro obtendo conteúdo do anexo do documento {$strProtocoloDocumentoFormatado}", $e); - } + //Obtenção do conteúdo do documento externo + $strCaminhoAnexo = $this->objAnexoRN->obterLocalizacao($objAnexoDTO); - $finfo = finfo_open(FILEINFO_MIME_TYPE); - try { - $strMimeType = finfo_file($finfo, $strCaminhoAnexo); - $strDadosComplementaresDoTipoDeArquivo = ""; - if(!array_search($strMimeType, $this->arrPenMimeTypes)){ - $strDadosComplementaresDoTipoDeArquivo = $strMimeType; - $strMimeType = 'outro'; + $fp = fopen($strCaminhoAnexo, "rb"); + try { + $strConteudoAssinatura = fread($fp, filesize($strCaminhoAnexo)); + fclose($fp); + } catch(Exception $e) { + fclose($fp); + throw new InfraException("Erro obtendo conteúdo do anexo do documento {$strProtocoloDocumentoFormatado}", $e); } - finfo_close($finfo); - } catch(Exception $e) { - finfo_close($finfo); - throw new InfraException("Erro obtendo informações do anexo do documento {$strProtocoloDocumentoFormatado}", $e); - } + $finfo = finfo_open(FILEINFO_MIME_TYPE); + try { + $strMimeType = finfo_file($finfo, $strCaminhoAnexo); + $strDadosComplementaresDoTipoDeArquivo = ""; + if(!array_search($strMimeType, $this->arrPenMimeTypes)){ + $strDadosComplementaresDoTipoDeArquivo = $strMimeType; + $strMimeType = 'outro'; + } - $arrInformacaoArquivo['NOME'] = $objAnexoDTO->getStrNome(); - $arrInformacaoArquivo['CONTEUDO'] = $strConteudoAssinatura; - $arrInformacaoArquivo['TAMANHO'] = $objAnexoDTO->getNumTamanho(); - $arrInformacaoArquivo['MIME_TYPE'] = $strMimeType; - $arrInformacaoArquivo['ID_ANEXO'] = $objAnexoDTO->getNumIdAnexo(); - $arrInformacaoArquivo['dadosComplementaresDoTipoDeArquivo'] = $strDadosComplementaresDoTipoDeArquivo; + finfo_close($finfo); + } catch(Exception $e) { + finfo_close($finfo); + throw new InfraException("Erro obtendo informações do anexo do documento {$strProtocoloDocumentoFormatado}", $e); + } + + $arrInformacaoArquivo['NOME'] = $objAnexoDTO->getStrNome(); + $arrInformacaoArquivo['CONTEUDO'] = $strConteudoAssinatura; + $arrInformacaoArquivo['TAMANHO'] = $objAnexoDTO->getNumTamanho(); + $arrInformacaoArquivo['MIME_TYPE'] = $strMimeType; + $arrInformacaoArquivo['ID_ANEXO'] = $objAnexoDTO->getNumIdAnexo(); + $arrInformacaoArquivo['dadosComplementaresDoTipoDeArquivo'] = $strDadosComplementaresDoTipoDeArquivo; + + } elseif ($objDocumentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_DOCUMENTO_CANCELADO) { + //Quando não é localizado um Anexo para um documento cancelado, os dados de componente digital precisam ser enviados + //pois o Barramento considera o componente digital do documento de forma obrigatória + $arrInformacaoArquivo['NOME'] = 'cancelado.html'; + $arrInformacaoArquivo['CONTEUDO'] = "[documento cancelado]"; + $arrInformacaoArquivo['TAMANHO'] = 0; + $arrInformacaoArquivo['ID_ANEXO'] = null; + $arrInformacaoArquivo['MIME_TYPE'] = 'text/html'; + $arrInformacaoArquivo['dadosComplementaresDoTipoDeArquivo'] = 'outro'; + } else { + throw new InfraException("Componente digital do documento {$strProtocoloDocumentoFormatado} não pode ser localizado."); + } } else { $objDocumentoDTO2 = new DocumentoDTO(); diff --git a/rn/ReceberProcedimentoRN.php b/rn/ReceberProcedimentoRN.php index 85cacba..a8d04ce 100644 --- a/rn/ReceberProcedimentoRN.php +++ b/rn/ReceberProcedimentoRN.php @@ -1799,8 +1799,9 @@ class ReceberProcedimentoRN extends InfraRN $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. "); + $strMensagem = "Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema."; + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, $strMensagem, ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); + throw new InfraException($strMensagem); } } } -- libgit2 0.21.2