Commit 6a36ffe7b9aa51f99530e540cabf122fc13804eb

Authored by Josinaldo Júnior
1 parent c71465bc
Exists in feature-76

Implementação parcial do recebimento de mais de um componente digital

rn/ProcessoEletronicoRN.php
... ... @@ -782,72 +782,77 @@ class ProcessoEletronicoRN extends InfraRN {
782 782 return $strHashConteudo;
783 783 }
784 784  
785   - private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados)
786   - {
787   - //Monta dados dos componentes digitais
788   - $arrObjComponenteDigitalDTO = array();
789   - if(!is_array($parObjProcesso->documento)) {
790   - $parObjProcesso->documento = array($parObjProcesso->documento);
791   - }
792   -
793   - foreach ($parObjProcesso->documento as $objDocumento) {
794   - $objComponenteDigitalDTO = new ComponenteDigitalDTO();
795   - $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro);
796   - $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados
797   - $objComponenteDigitalDTO->setDblIdDocumento($objDocumento->idDocumentoSEI);
798   - $objComponenteDigitalDTO->setNumOrdem($objDocumento->ordem);
799   - $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite);
800   - $objComponenteDigitalDTO->setStrProtocolo($parObjProcesso->protocolo);
801   -
802   - //Por enquanto, considera que o documento possui apenas um componente digital
803   - if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) {
804   - throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital.");
805   - }
806   -
807   - $objComponenteDigital = $objDocumento->componenteDigital;
808   - $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome);
809   -
810   - $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash);
811   -
812   - $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo);
813   - $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO);
814   - $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo);
815   - $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType);
816   - $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo);
  785 + private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados)
  786 + {
  787 + //Monta dados dos componentes digitais
  788 + $arrObjComponenteDigitalDTO = array();
  789 + if(!is_array($parObjProcesso->documento)) {
  790 + $parObjProcesso->documento = array($parObjProcesso->documento);
  791 + }
817 792  
818   - //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui
819   - if(isset($parObjComponentesDigitaisSolicitados)){
820   - $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo);
  793 + foreach ($parObjProcesso->documento as $objDocumento)
  794 + {
  795 + $objComponenteDigitalDTO = new ComponenteDigitalDTO();
  796 + $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro);
  797 + $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados
  798 + $objComponenteDigitalDTO->setDblIdDocumento($objDocumento->idDocumentoSEI);
  799 + $objComponenteDigitalDTO->setNumOrdem($objDocumento->ordem);
  800 + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite);
  801 + $objComponenteDigitalDTO->setStrProtocolo($parObjProcesso->protocolo);
  802 +
  803 + //Por enquanto, considera que o documento possui apenas um componente digital
  804 + // if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) {
  805 + // throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital.");
  806 + // }
  807 +
  808 + $arrObjComponenteDigital = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital : array($objDocumento->componenteDigital);
  809 +
  810 + foreach ($arrObjComponenteDigital as $objComponenteDigital)
  811 + {
  812 + $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome);
  813 +
  814 + $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash);
  815 +
  816 + $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo);
  817 + $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO);
  818 + $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo);
  819 + $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType);
  820 + $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo);
  821 +
  822 + //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui
  823 + if (isset($parObjComponentesDigitaisSolicitados)) {
  824 + $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo);
  825 +
  826 + foreach ($arrObjItensSolicitados as $objItemSolicitado) {
  827 + if (!is_null($objItemSolicitado)) {
  828 + $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash);
  829 +
  830 + if ($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) {
  831 + $objComponenteDigitalDTO->setStrSinEnviar("S");
  832 + }
  833 + }
  834 + }
  835 + }
821 836  
822   - foreach ($arrObjItensSolicitados as $objItemSolicitado) {
823   - if(!is_null($objItemSolicitado)){
824   - $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash);
  837 + //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados
  838 + $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes);
825 839  
826   - if($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) {
827   - $objComponenteDigitalDTO->setStrSinEnviar("S");
828   - }
  840 + $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo);
  841 + $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO;
829 842 }
830 843 }
831   - }
832   -
833   - //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados
834   - $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes);
835 844  
836   - $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo);
837   - $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO;
838   - }
  845 + //Chamada recursiva sobre os documentos dos processos apensados
  846 + if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) {
  847 + foreach ($parObjProcesso->processoApensado as $objProcessoApensado) {
  848 + $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados);
  849 + $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj);
  850 + }
  851 + }
839 852  
840   - //Chamada recursiva sobre os documentos dos processos apensados
841   - if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) {
842   - foreach ($parObjProcesso->processoApensado as $objProcessoApensado) {
843   - $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados);
844   - $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj);
845   - }
  853 + return $arrObjComponenteDigitalDTO;
846 854 }
847 855  
848   - return $arrObjComponenteDigitalDTO;
849   - }
850   -
851 856  
852 857 public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo)
853 858 {
... ...
rn/ReceberProcedimentoRN.php
... ... @@ -87,9 +87,11 @@ class ReceberProcedimentoRN extends InfraRN
87 87  
88 88 #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################
89 89  
90   - //Obtém lista de componentes digitais que precisam ser obtidos
  90 + //Realiza as validações nos componentes digitais dos documentos
91 91 $this->validarComponentesDigitais($objProtocolo, $parNumIdentificacaoTramite);
92 92 $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProtocolo);
  93 +
  94 + //Verifica a permissão de escrita nos diretórios de arquivos externos
93 95 $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite);
94 96  
95 97 $this->gravarLogDebug("Obtém lista de componentes digitais que precisam ser obtidos", 4);
... ... @@ -120,7 +122,9 @@ class ReceberProcedimentoRN extends InfraRN
120 122  
121 123 //Obter os dados do componente digital
122 124 $this->gravarLogDebug("Baixando componente digital $key", 6);
  125 +
123 126 $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo);
  127 +
124 128 $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);
125 129 $arrAnexosComponentes[$key]['recebido'] = false;
126 130  
... ... @@ -177,6 +181,7 @@ class ReceberProcedimentoRN extends InfraRN
177 181 }
178 182  
179 183 if(count($arrComponentesPendentesRecebimento) > 0){
  184 +
180 185 //Obter dados dos componetes digitais
181 186 $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4);
182 187 $objComponenteDigitalDTO = new ComponenteDigitalDTO();
... ... @@ -329,7 +334,7 @@ class ReceberProcedimentoRN extends InfraRN
329 334 }
330 335  
331 336 /**
332   - * Valida cada componente digital, se não algum não for aceito recusa o tramite
  337 + * Valida cada componente digital, se algum não for aceito recusa o tramite
333 338 * do procedimento para esta unidade
334 339 */
335 340 private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificacaoTramite)
... ... @@ -356,18 +361,24 @@ class ReceberProcedimentoRN extends InfraRN
356 361 $objPenParametroRN = new PenParametroRN();
357 362 $numTamDocExterno = $objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO');
358 363  
359   - foreach($arrObjDocumentos as $objDocument) {
360   -
361   - //Não valida informações do componente digital caso o documento esteja cancelado
362   - if(isset($objDocumento->retirado) && $objDocumento->retirado === true){
363   - if (is_null($objDocument->componenteDigital->tamanhoEmBytes) || $objDocument->componenteDigital->tamanhoEmBytes == 0){
364   - throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU);
365   - }
  364 + foreach($arrObjDocumentos as $objDocumento)
  365 + {
  366 + $arrObjComponenteDigital = $this->obterComponentesDigitaisDocumento($objDocumento);
  367 +
  368 + //Valida o tamnho dos compoenentes digitais
  369 + foreach ($arrObjComponenteDigital as $objComponenteDigital)
  370 + {
  371 + //Não valida informações do componente digital caso o documento esteja cancelado
  372 + if(isset($objDocumento->retirado) && $objDocumento->retirado === true){
  373 + if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){
  374 + throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU);
  375 + }
366 376  
367   - if($objDocument->componenteDigital->tamanhoEmBytes > ($numTamDocExterno * 1024 * 1024)){
368   - $numTamanhoMb = $objDocument->componenteDigital->tamanhoEmBytes / ( 1024 * 1024);
369   - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, 'Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb, 2).'MBs .', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU);
370   - throw new InfraException('Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb).'MBs');
  377 + if($objComponenteDigital->tamanhoEmBytes > ($numTamDocExterno * 1024 * 1024)){
  378 + $numTamanhoMb = $objComponenteDigital->tamanhoEmBytes / ( 1024 * 1024);
  379 + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, 'Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb, 2).'MBs .', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU);
  380 + throw new InfraException('Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb).'MBs');
  381 + }
371 382 }
372 383 }
373 384 }
... ... @@ -385,6 +396,11 @@ class ReceberProcedimentoRN extends InfraRN
385 396 return $arrObjDocumento;
386 397 }
387 398  
  399 + private function obterComponentesDigitaisDocumento($parObjDocumento)
  400 + {
  401 + return $arrObjComponenteDigital = is_array($parObjDocumento->componenteDigital) ? $parObjDocumento->componenteDigital : array($parObjDocumento->componenteDigital);
  402 + }
  403 +
388 404 private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjMetadadosProcedimento)
389 405 {
390 406 // Validação dos dados do processo recebido
... ... @@ -1790,25 +1806,31 @@ class ReceberProcedimentoRN extends InfraRN
1790 1806 //Instancia o bd do arquivoExtensão
1791 1807 $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco());
1792 1808  
1793   - //Percorre os documentos
1794   - foreach($arrDocumentos as $documento){
1795   -
1796   - //Busca o nome do documento
1797   - $nomeDocumento = $documento->componenteDigital->nome;
1798   -
1799   - //Busca pela extensão do documento
1800   - $arrNomeDocumento = explode('.', $nomeDocumento);
1801   - $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1];
1802   -
1803   - //Verifica se a extensão do arquivo está cadastrada e ativa
1804   - $arquivoExtensaoDTO = new ArquivoExtensaoDTO();
1805   - $arquivoExtensaoDTO->setStrSinAtivo('S');
1806   - $arquivoExtensaoDTO->setStrExtensao($extDocumento);
1807   - $arquivoExtensaoDTO->retStrExtensao();
1808   -
1809   - if($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0){
1810   - $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO);
1811   - throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. ");
  1809 + //Percorre os documentos para validar a extensão dos componentes digitais
  1810 + foreach($arrDocumentos as $documento)
  1811 + {
  1812 + $arrObjComponenteDigital = $this->obterComponentesDigitaisDocumento($documento);
  1813 +
  1814 + //Valida a extensão dos componentes digitais
  1815 + foreach ($arrObjComponenteDigital as $objComponenteDigital)
  1816 + {
  1817 + //Busca o nome do documento
  1818 + $nomeDocumento = $objComponenteDigital->nome;
  1819 +
  1820 + //Busca pela extensão do documento
  1821 + $arrNomeDocumento = explode('.', $nomeDocumento);
  1822 + $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1];
  1823 +
  1824 + //Verifica se a extensão do arquivo está cadastrada e ativa
  1825 + $arquivoExtensaoDTO = new ArquivoExtensaoDTO();
  1826 + $arquivoExtensaoDTO->setStrSinAtivo('S');
  1827 + $arquivoExtensaoDTO->setStrExtensao($extDocumento);
  1828 + $arquivoExtensaoDTO->retStrExtensao();
  1829 +
  1830 + if ($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0) {
  1831 + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO);
  1832 + throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. ");
  1833 + }
1812 1834 }
1813 1835 }
1814 1836 }
... ...