Commit 216d35ac09559c4315ffbbd3bd5ecc7318a3e704

Authored by Guilherme Andrade Del Cantoni
1 parent 8b36b7ea

[Fixed #43] Componente digital do documento XYZ não pode ser localizado

rn/ExpedirProcedimentoRN.php
... ... @@ -1108,6 +1108,7 @@ class ExpedirProcedimentoRN extends InfraRN {
1108 1108 //$this->atribuirAssinaturaEletronica($objDocumento->componenteDigital, $objDocumentoDTO);
1109 1109  
1110 1110 $objDocumento->componenteDigital->idAnexo = $arrInformacaoArquivo['ID_ANEXO'];
  1111 +
1111 1112 return $objDocumento;
1112 1113 }
1113 1114  
... ... @@ -1238,52 +1239,61 @@ class ExpedirProcedimentoRN extends InfraRN {
1238 1239  
1239 1240 $objAnexoDTO = $this->consultarAnexo($objDocumentoDTO->getDblIdDocumento());
1240 1241  
1241   - if(!isset($objAnexoDTO)){
1242   - throw new InfraException("Componente digital do documento {$strProtocoloDocumentoFormatado} não pode ser localizado.");
1243   - }
1244   -
1245   - //VALIDAO DE TAMANHO DE DOCUMENTOS EXTERNOS PARA A EXPEDIO
1246   - $objPenParametroRN = new PenParametroRN();
1247   - if($objAnexoDTO->getNumTamanho() > ($objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO') * 1024 * 1024) && $objDocumentoDTO->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){
1248   - $strTamanhoFormatado = round(($objAnexoDTO->getNumTamanho() / 1024) / 1024,2);
1249   - 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.");
1250   - }
  1242 + if(isset($objAnexoDTO)){
  1243 + //VALIDAO DE TAMANHO DE DOCUMENTOS EXTERNOS PARA A EXPEDIO
  1244 + $objPenParametroRN = new PenParametroRN();
  1245 + if($objAnexoDTO->getNumTamanho() > ($objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO') * 1024 * 1024) && $objDocumentoDTO->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){
  1246 + $strTamanhoFormatado = round(($objAnexoDTO->getNumTamanho() / 1024) / 1024,2);
  1247 + 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.");
  1248 + }
1251 1249  
1252   - //Obtenção do conteúdo do documento externo
1253   - //TODO: Particionar o documento em tamanho menor caso ultrapasse XX megabytes
1254   - $strCaminhoAnexo = $this->objAnexoRN->obterLocalizacao($objAnexoDTO);
1255   -
1256   - $fp = fopen($strCaminhoAnexo, "rb");
1257   - try {
1258   - $strConteudoAssinatura = fread($fp, filesize($strCaminhoAnexo));
1259   - fclose($fp);
1260   - } catch(Exception $e) {
1261   - fclose($fp);
1262   - throw new InfraException("Erro obtendo conteúdo do anexo do documento {$strProtocoloDocumentoFormatado}", $e);
1263   - }
  1250 + //Obtenção do conteúdo do documento externo
  1251 + $strCaminhoAnexo = $this->objAnexoRN->obterLocalizacao($objAnexoDTO);
1264 1252  
1265   - $finfo = finfo_open(FILEINFO_MIME_TYPE);
1266   - try {
1267   - $strMimeType = finfo_file($finfo, $strCaminhoAnexo);
1268   - $strDadosComplementaresDoTipoDeArquivo = "";
1269   - if(!array_search($strMimeType, $this->arrPenMimeTypes)){
1270   - $strDadosComplementaresDoTipoDeArquivo = $strMimeType;
1271   - $strMimeType = 'outro';
  1253 + $fp = fopen($strCaminhoAnexo, "rb");
  1254 + try {
  1255 + $strConteudoAssinatura = fread($fp, filesize($strCaminhoAnexo));
  1256 + fclose($fp);
  1257 + } catch(Exception $e) {
  1258 + fclose($fp);
  1259 + throw new InfraException("Erro obtendo conteúdo do anexo do documento {$strProtocoloDocumentoFormatado}", $e);
1272 1260 }
1273 1261  
1274   - finfo_close($finfo);
1275   - } catch(Exception $e) {
1276   - finfo_close($finfo);
1277   - throw new InfraException("Erro obtendo informações do anexo do documento {$strProtocoloDocumentoFormatado}", $e);
1278   - }
  1262 + $finfo = finfo_open(FILEINFO_MIME_TYPE);
  1263 + try {
  1264 + $strMimeType = finfo_file($finfo, $strCaminhoAnexo);
  1265 + $strDadosComplementaresDoTipoDeArquivo = "";
  1266 + if(!array_search($strMimeType, $this->arrPenMimeTypes)){
  1267 + $strDadosComplementaresDoTipoDeArquivo = $strMimeType;
  1268 + $strMimeType = 'outro';
  1269 + }
1279 1270  
1280   - $arrInformacaoArquivo['NOME'] = $objAnexoDTO->getStrNome();
1281   - $arrInformacaoArquivo['CONTEUDO'] = $strConteudoAssinatura;
1282   - $arrInformacaoArquivo['TAMANHO'] = $objAnexoDTO->getNumTamanho();
1283   - $arrInformacaoArquivo['MIME_TYPE'] = $strMimeType;
1284   - $arrInformacaoArquivo['ID_ANEXO'] = $objAnexoDTO->getNumIdAnexo();
1285   - $arrInformacaoArquivo['dadosComplementaresDoTipoDeArquivo'] = $strDadosComplementaresDoTipoDeArquivo;
1286 1271  
  1272 + finfo_close($finfo);
  1273 + } catch(Exception $e) {
  1274 + finfo_close($finfo);
  1275 + throw new InfraException("Erro obtendo informações do anexo do documento {$strProtocoloDocumentoFormatado}", $e);
  1276 + }
  1277 +
  1278 + $arrInformacaoArquivo['NOME'] = $objAnexoDTO->getStrNome();
  1279 + $arrInformacaoArquivo['CONTEUDO'] = $strConteudoAssinatura;
  1280 + $arrInformacaoArquivo['TAMANHO'] = $objAnexoDTO->getNumTamanho();
  1281 + $arrInformacaoArquivo['MIME_TYPE'] = $strMimeType;
  1282 + $arrInformacaoArquivo['ID_ANEXO'] = $objAnexoDTO->getNumIdAnexo();
  1283 + $arrInformacaoArquivo['dadosComplementaresDoTipoDeArquivo'] = $strDadosComplementaresDoTipoDeArquivo;
  1284 +
  1285 + } elseif ($objDocumentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_DOCUMENTO_CANCELADO) {
  1286 + //Quando não é localizado um Anexo para um documento cancelado, os dados de componente digital precisam ser enviados
  1287 + //pois o Barramento considera o componente digital do documento de forma obrigatória
  1288 + $arrInformacaoArquivo['NOME'] = 'cancelado.html';
  1289 + $arrInformacaoArquivo['CONTEUDO'] = "[documento cancelado]";
  1290 + $arrInformacaoArquivo['TAMANHO'] = 0;
  1291 + $arrInformacaoArquivo['ID_ANEXO'] = null;
  1292 + $arrInformacaoArquivo['MIME_TYPE'] = 'text/html';
  1293 + $arrInformacaoArquivo['dadosComplementaresDoTipoDeArquivo'] = 'outro';
  1294 + } else {
  1295 + throw new InfraException("Componente digital do documento {$strProtocoloDocumentoFormatado} não pode ser localizado.");
  1296 + }
1287 1297 }
1288 1298 else {
1289 1299 $objDocumentoDTO2 = new DocumentoDTO();
... ...
rn/ReceberProcedimentoRN.php
... ... @@ -1799,8 +1799,9 @@ class ReceberProcedimentoRN extends InfraRN
1799 1799 $arquivoExtensaoDTO->retStrExtensao();
1800 1800  
1801 1801 if($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0){
1802   - $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO);
1803   - throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. ");
  1802 + $strMensagem = "Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema.";
  1803 + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, $strMensagem, ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO);
  1804 + throw new InfraException($strMensagem);
1804 1805 }
1805 1806 }
1806 1807 }
... ...